Ⅰ android 萬能Dialog框架
為什麼要封吵姿裝這個框架呢? 我們目前自定義Dialog的常見方式有:
為了能自定義各種dialog, 又能把節約時間, 所以就出了這個框架
結果如下圖:
②. dialog本身的屬性:
說明: 對於動畫屬性, setAnimationsStyle, 需要在res/values/styles.xml 設置, 動畫屬性參考: android動畫《一》補間租瞎動升型絕畫
gitee: https://gitee.com/luoyanyong/LDialog
鏈接: https://www.jianshu.com/p/8eea6af1dd2a
Ⅱ android中怎麼設置有圓角的dialog布局沒什麼有白色的背景
在style文件中自定義一個樣差銷乎式.
[java] view plain
<style name="Theme.HalfScreen" parent="android:style/斗凱Theme.Dialog">虛悉</style>
在Activity中引用:
[java] view plain
<activity
android:name=".MemberActivity"
Ⅲ android自定義對話框怎麼設置弧度
我想你想要實現圓角的對話框,可以參考如下:搏慎
package com.example.jjy.myapplication;
import android.app.Dialog;
import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
/**
* Created by jjy on 16-5-15.
*/
public class MyDialog extends Dialog{
private Button positiveButton, negativeButton;
private TextView contenttv;
public MyDialog(Context context) {
super(context,R.style.mydialog);
View view = LayoutInflater.from(getContext()).inflate(R.layout.mydialoglayout, null); //通過LayoutInflater獲取布局
contenttv = (TextView) view.findViewById(R.id.title);
positiveButton = (Button) view.findViewById(R.id.acceptbtn);
negativeButton = (Button) view.findViewById(R.id.refusebtn);
setContentView(view); //設置view
}
//設置內容
public void setContent(String content) {
contenttv.setText(content);
}
//確定按鈕監聽
public void setOnPositiveListener(View.OnClickListener listener){
positiveButton.setOnClickListener(listener);
}
//否定按鈕監聽
public void setOnNegativeListener(View.OnClickListener listener){
negativeButton.setOnClickListener(listener);
}
}
R.style.mydialog 對話框屬性在 values/styles.xml中設置:
[html] view plain
<resources>
<style name="mydialog" parent="android:style/Theme.Dialog">
<!-- 背景透運銀粗明 -->
<item name="android:windowBackground">@android:color/transparent</item>
<!-- 沒有標題 -->
<item name="android:windowNoTitle">true</item>
<!-- 背景模糊 -->
<item name="android:backgroundDimEnabled">true</item>
</style>
</resources>旁鎮
Ⅳ Android開發如何設置Dialog樣式
黑色的這個dialog是系統默認的樣式,白色的是android4.0以上自帶的一個樣式,需要在manifest的application中引用@android:style/Theme.Holo.Light這個樣式
Ⅳ Android中使用CardView實現圓角對話框
前言:隨著用戶體驗的不斷的加深,良好的UI視覺效果也必不可少,以前方方正正的對話框樣式在APP已不復存在,取而代之的是帶有圓角效果的Dialog,之前設置對畫框的圓角效果都是通過drawable/shape屬性來完成,隨著Google API的不斷更新,API 21(Android 5.0)添加了新的控制項CardView,這使得圓角的實現更襪沖加方便快捷。
效果圖:
導入乎襲CardView依賴(API 21新控制項)
1.cardCornerRadius屬性:設置圓角的弧度大小,這里設置的為10dp
2.CardView還有padding、cardUseCompatPadding(內邊距)、background等屬性
3.CardView繼承自FrameLayout,使用時可以重新嵌套布局
使用的是V7包的AlertDialog實現的,當然也可以使用Dialog實現。
總結:CardView實現對話框的圓角效果更加的方便,不用編寫shape屬性設置背景,當標題欄需要背景色時,也無需考慮設置標題欄的shape背景(不使用CardView時,如果不使用shape設置背景色,會導致左上和歲好兄右上不會變成圓角)。
Ⅵ 如何自定義Android Dialog的樣式
如何自定義Android Dialog的樣式? Android 中自定義Dialog的樣式,主要是通過自定義的xml,然後載入到dialog的背景中,如下步驟:
1、自定義Dialog
final Dialog dialog = new Dialog(this, R.style.Theme_dialog);
2、窗口布局
View contentView = LayoutInflater.from(this).inflate(R.layout.select_list_dialog,null);
3、把設定好的窗口布局放到dialog中
dialog.setContentView(contentView);
4、設定點選視窗空白處取消會話
dialog.setCanceledOnTouchOutside(true);
5、具體的操作
ListView msgView = (ListView)contentView.findViewById(R.id.listview_flow_list);
6、展示視窗
dialog.show();例:final Dialog dialog = new Dialog(this,R.style.Theme_dialog);View contentView =LayoutInflater.from(this).inflate(R.layout.select_list_dialog, null);dialog.setContentView(contentView);dialog.setCanceledOnTouchOutside(true);ListView msgView = (ListView)contentView.findViewById(R.id.listview_flow_list);TextView titleText = (TextView)contentView.findViewById(R.id.title);titleText.setText("請選擇銀行卡");SelectBankCardDialogAdapter adapter =new SelectBankCardDialogAdapter(this, mBankcardList);msgView.setAdapter(adapter);msgView.setOnItemClickListener(newOnItemClickListener() {@Overridepublic void onItemClick(AdapterViewparent, View view, int position, long id) {Toast.makeText(RechargeFlowToMobileActivity.this, position+"",0).show();mSelectCard =mBankcardList.get(position);String area = mSelectCard.getBank_card();mCardNumberText.setText(area);dialog.di *** iss();}});Button closeBtn = (Button)contentView.findViewById(R.id.close);closeBtn.setClickable(true);closeBtn.setOnClickListener(newView.OnClickListener() {@Overridepublic void onClick(View v) {dialog.di *** iss();}});dialog.show();
以上就是在Android開發自定義dialog樣式的方法和步驟,android很多的控制元件都提供了介面或者方法進行樣式的定義和修改。
如何自定義android Button樣式
返回部落格列表
轉 android自定義button樣式
sumpower
釋出時間: 2014/02/25 19:56
閱讀: 4162
收藏: 0
點贊: 0
評論: 0
摘要
android自定義button樣式
在Android開發應用中,預設的Button是由系統渲染和管理大小的。而我們看到的成功的移動應用,都是有著酷炫的外觀和使用體驗的。因此,我們在開發產品的時候,需要對預設按鈕進行美化。在本篇里,筆者結合在應用開發中的經驗,探討一下自定義背景的按鈕、自定義形狀按鈕的實現方法。
首先看實現效果截圖:
自定義背景的按鈕目前有2種方式實現,向量和點陣圖。
1. 向量圖形繪制的方式
向量圖形繪制的方式實現簡單,適合對於按鈕形狀和圖案要求不高的場合。步驟如下:
(a) 使用xml定義一個圓角矩形,外圍輪廓線實線、內填充漸變色,xml程式碼如下。
view plain
bg_alibuybutton_default.xml
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="地址">
<item>
<shape android:shape="rectangle">
<solid android:color="#FFEC7600" />
<corners
android:LeftRadius="5dip"
android:RightRadius="5dip"
android:bottomLeftRadius="5dip"
android:bottomRightRadius="5dip" />
</shape>
</item>
<item android:="1px" android:bottom="1px" android:left="1px" android:right="1px">
<shape>
<gradient
android:startColor="#FFEC7600" android:endColor="#FFFED69E"
android:type="linear" android:angle="90"
android:centerX="0.5" android:centerY="0.5" />
<corners
android:LeftRadius="5dip"
android:RightRadius="5dip"
android:bottomLeftRadius="5dip"
android:bottomRightRadius="5dip" />
</shape>
</item>
</layer-list>
同樣定義bg_alibuybutton_pressed.xml和bg_alibuybutton_selected.xml,內容相同,就是漸變顏色不同,用於按鈕按下後的背景變化效果。
(b) 定義按鈕按下後的效果變化描述檔案drawable/bg_alibuybutton.xml,程式碼如下。
view plain
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="地址">
<item android:state_pressed="true"
android:drawable="@drawable/bg_alibuybutton_pressed" />
<item android:state_focused="true"
android:drawable="@drawable/bg_alibuybutton_selected" />
<item android:drawable="@drawable/bg_alibuybutton_default" />
</selector>
(c) 在你需要的介面定義檔案中,如layout/main.xml中定義一個Button控制元件。
view plain
<Button
android:layout_width="120dip"
android:layout_height="40dip"
android:text="向量背景按鈕" android:background="@drawable/bg_alibuybutton" />
這樣,自定義背景的按鈕就可以使用了,在實現onClick方法後就可以響應操作。
android自帶的樣式比較難看,如何能夠自定義按鈕的樣式,使其顯示的跟美工設計的效果一樣,現與大家分享下
在layout中新增2個按鈕,從下圖中可以看出在按鈕中呼叫了style和android:background屬性,這兩個屬性一個是自定義樣式,一個是給按鈕新增背景圖片
展開res目錄,可以看到在values目錄下有styles.xml檔案,該檔案用於自定義樣式,雙擊開啟
標注的是我自定義的樣式,name為BtnStyle,當按鈕呼叫自定義樣式的時候訪問這個name
在button中呼叫自定義樣式的方法,比較簡單
如何往按鈕中新增自定義圖片,使按鈕看起來更漂亮些,因不同手機解析度不同,那必然牽扯到圖片的拉伸,在android系統下有個很好的技術「九宮格「,可以對圖片進行處理,只對區域性進行拉伸,給工具目錄儲存在android\sdk\tools\draw9patch.bat,經過該工具處理的圖片以.9.png結尾,放到drawable資料夾中
在Button中通過android:background屬性載入圖片的方法,至此我們自定義的按鈕樣式也就完成了,當然這只是個引子,在具體的專案工程中實現的效果要比這個demo復雜很多,有好的設計思路歡迎交流。
Ⅶ 安卓怎麼修改系統「DIALOG」風格
1、編寫一個文本樣式。
DIALOG的標題是一個textview,在sytles.xml中,添加如下代碼來設置你自己的文本樣式:
?
2、設置對弊虛話框的標題主題。
上面的標題文本並不能直接設置為對話框的標題樣式。 我們還需要編寫一個表示標題的主題的style,在這里指定標題的文本樣式。代碼如下:
?
3、設置對話框主題。
接下來,我們編寫我們的對話框主題,在這里指定標題的主題。由於一些屬性並不是public的,所以我們需要繼承自原來的某個style,代碼如下:
?
4、自定義App的主題。
接下來,我們需要在我們的App theme中指定我們的對話框使用這種主題,所以需要定義一個App theme。同樣由於App theme的許多屬性並不是public的(比如下面要提到的標題下面的那條藍線),所以我們要繼承自一個原生的style。這里我根據程序需要選擇了Theme.Holo.Light.NoActionBar,代碼如下:
?
5、指定App主題。
最後一步,我們需要在AndroidManifest.xml文件中,指定我們的app主題。這步很簡單,只需要在application標簽中指定android:theme的值即可,如下:
?
android:theme="@style/ParkingTheme"
不過這只是指定了Dialog的主題。如果是通過AlertDialog創建出來的對話框,主題還是原來的。所以我們還需要以下步驟。
7、編寫AlertDialog主題。
我們無法直接繼承系統主題里的AlertDialog的style。如把parent指定為Theme.DeviceDefault.Dialog.Alert,Theme.Holo.Dialog.Alert,Theme.DeviceDefault.Light.Dialog.Alert或Theme.Holo.Light.Dialog.Alert,都會導致編譯不過。所以我們需要繼承自Dialog的style。在這里我以Theme.Holo.Light.Dialog為例,代碼如下:
在這里我參考了原生的alertDialog的style,設定了窗口背景為透明,以及windowContentOverlay為null這兩個重要屬性,否則你會看到在AlertDialog下面還有一層對話框的背景,或者是對話框的背景遮住了所有內容這樣的問題存在。
8、指定AlertDialog的主題。
我們需要在第4步所說的自定義的AppTheme中,添加一行代碼來指定要使用的AlertDialog的style,代碼如下:
?
9、修改標題下面的藍色線。
如果你修改了對話框的主題顏色,那麼標題下面的藍色的線肯定會讓你很郁悶。如果對話框較少,你可以選擇隱藏標題,然後自定義一個包含了標題的View來設置為對話框的內容。但是如果你的對話框有許多種,判悔而且本來都是可以調用原來的API就來生成的話,要去定義這么多個帶標題的view,這樣做下來心裡肯定是很糾結的。
標題下面的藍色的線,並不是在Dialog或AlertDialog中設置或通過它們的style中定義的。它是定義在各種風格的dialog的layout當中,然後再在AppTheme裡面指掘卜正定dialog的對應屬性。遺憾的是,目前我看到這幾個相關屬性還不是public的,不能自己設置,所以只有通過Java代碼來實現了。
表示這條藍色的線的叫做titleDivider,我們可以通過getResources()的API來獲取它的IP,然後設置顏色。代碼如下:
?
public static final void dialogTitleLineColor(Dialog dialog, int color) {
Context context = dialog.getContext();
int divierId = context.getResources().getIdentifier("android:id/titleDivider", null, null);
View divider = dialog.findViewById(divierId);
divider.setBackgroundColor(color);
}這行代碼對於自定義的Dialog,可以在setContentView之後調用。但是對於AlertDialog,必須在show()方法被調用之後才可以去調用,否則會報錯。
Ⅷ 如何設置窗口圓角及邊框
在文章開頭依然先貼出核心代碼
[java] view plain
@Override
public void onAttachedToWindow() {
super.onAttachedToWindow();
DisplayMetrics dm = new DisplayMetrics();
getWindowManager().getDefaultDisplay().getMetrics(dm);
View view = getWindow().getDecorView();
WindowManager.LayoutParams lp = (WindowManager.LayoutParams)view.getLayoutParams();
lp.gravity = Gravity.CENTER;
lp.width = (dm.widthPixels * 4) / 5;
lp.height = (dm.widthPixels * 4) / 5;
getWindowManager().updateViewLayout(view,lp);
getWindow().setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
view.setBackgroundResource(R.drawable.dialog_activity_bg);
}
上兩篇博客說到了為什麼在onAttachedToWindow中修改窗口尺寸和Window與DecorView之間的關系,這篇博客梳理蘆蔽下圓角實現代碼邏輯。
整理思路為:
獲取屏幕尺寸,然後根據需求計算窗口Activity的尺寸。這里默認手機為豎屏,設置Activity的高和寬都為屏幕寬度的4/5。
獲取PhoneWindow的變數DecorView,然後修改DecorView的LayoutParams來實現修改窗口尺寸。
設置PhoneWindow的背景為透明。
設置DecorView的背景為帶邊框的圓角。
第一步通過經常使用的DisplayMetrics來獲取屏亂指幕高寬。
第二步通過getWindow().getDecorView()獲取窗體的DecorView,然後再獲取LayoutParams,不過DecorView的LayoutParams為WindowManager.LayoutParams。注意!根據上篇博客onAttachedToWindow()在整個Activity生命周期的位置及使用的分析,一定要再onAttachedToWindow中獲取WindowManager.LayoutParams,否則獲取的是空。
第三步直接調用PhoneWindow的setBackgroundDrawable介面設置成透明即可。
第四步為DecorView設置背景,下面貼出邊框圓角的xml
[html] view plain
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners
android:radius="10.0dip"/>
<solid
android:color="#e5e5e6"/>
<stroke
android:color="#464646"
android:width="2px"/>
</shape>
在測試過程中,我發現了一個很有意思的現象,如果先調用PhoneWindow的setBackground再調用DecorView的setBackground能正常顯示,效果如下圖
但若兩行代碼換換位置則顯示效果如下圖
好吧,要弄清楚這個問題依然是老辦法——看源碼。
查看PhoneWindow的陪陪州setBackgroundDrawable
[java] view plain
@Override
public final void setBackgroundDrawable(Drawable drawable) {
if (drawable != mBackgroundDrawable || mBackgroundResource != 0) {
mBackgroundResource = 0;
mBackgroundDrawable = drawable;
if (mDecor != null) {
mDecor.setWindowBackground(drawable);
}
}
}
原來調用PhoneWindow的setBackgroundDrawable方法會調用DecorView的setWindowBackground方法
[java] view plain
public void setWindowBackground(Drawable drawable) {
if (getBackground() != drawable) {
setBackgroundDrawable(drawable);
if (drawable != null) {
drawable.getPadding(mBackgroundPadding);
} else {
mBackgroundPadding.setEmpty();
}
drawableChanged();
}
}
在這里,DecorView會判斷如果新傳進來的Drawable和已經設置的Drawable不同則會替換背景為新的Drawable,所以如果先為DecorView設置帶邊框的圓角背景再給PhoneWindow設置透明背景,那麼DecorView也會被設置成透明背景,也就是我們上圖看到的效果。
Ⅸ [Android] 自定義 Dialog 布局設置固定寬高無效
Dialog 的自定義布局的根布局的寬度是寫固定的,顯示的時候寬度和高度不是對應的固定值。
根布局外面又添加了一層 FrameLayout,設置其寬高均為 wrap_content 來包裹以前的布局。
這個時候猜測是否因為添加自定義視圖的時候,布局參數被改寫了,然後開始查看源碼,最終發現確實是這樣的。
在下面的源碼分析中,最終發現也是用了 mWindow.setContentView(mAlertDialogLayout) 將 R.layout.alert_dialog.xml 的默認布局添加到 PhoneWindow, 和Activity一樣的。
關鍵的地方看一下 setupCustomContent() 這個方法,在添加自定義視圖的時候布局參數設置為 MATCH_PARENT 了,所以我們設置固定大小是沒有作用的,要套一層父布局解決這個問題。
Ⅹ android將activity設置成自定義的Dialog怎麼調整大小
在任何時候,除非一定需要,否則不要強指你的彈出框的寬度和高度。
你把你的彈框的寬度設成wrap型的,就可以根據它的子內容的寬度自動拉伸