第一步: 給Dialog設(shè)置一個風(fēng)格主題: 無邊框全透明背景
創(chuàng)新互聯(lián)公司是一家集網(wǎng)站建設(shè),伽師企業(yè)網(wǎng)站建設(shè),伽師品牌網(wǎng)站建設(shè),網(wǎng)站定制,伽師網(wǎng)站建設(shè)報價,網(wǎng)絡(luò)營銷,網(wǎng)絡(luò)優(yōu)化,伽師網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強企業(yè)競爭力。可充分滿足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時我們時刻保持專業(yè)、時尚、前沿,時刻以成就客戶成長自我,堅持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實用型網(wǎng)站。
在res-valus-styles.xml 下新建一個styles
style name="dialog" parent="android:style/Theme.Dialog"
? ? ? ? !--背景顏色及和透明程度--
? ? ? ? item name="android:windowBackground"@android:color/transparent/item
? ? ? ? !--是否去除標(biāo)題 --
? ? ? ? item name="android:windowNoTitle"true/item
? ? ? ? !--是否去除邊框--
? ? ? ? item name="android:windowFrame"@null/item
? ? ? ? !--是否浮現(xiàn)在activity之上? --
? ? ? ? item name="android:windowIsFloating"false/item
? ? ? ? !--背景是否模糊--
? ? ? ? item name="android:backgroundDimEnabled"false/item
? ? /style
第二步:新建自定義view 類 繼承Dialog,在構(gòu)造方法中引用剛才寫好的styles(粗體部分)
public class MyDialog extends Dialog {
?public LoginRestltDialog(@NonNull Context context) {
? ? ? ? ? ? ?//引用樣式
? ? ? ? ? ? ? ?super(context, R.style.dialog );
? ? ? ? ? ?}
?@Override
? protected void onCreate(Bundle savedInstanceState) {
? ? ? ? ? ?super.onCreate(savedInstanceState);
? ? ? ? ? ?//引入布局
? ? ? ? ? ? setContentView(R.layout.dialog);
}
//定義其他需要的方法
}
第三步:創(chuàng)建布局
?xml version="1.0" encoding="utf-8"?
RelativeLayout xmlns:android=""
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#11ffffff"
LinearLayout
? ? android:layout_width="260dp"
? ? android:layout_height="wrap_content"
? ? android:layout_centerInParent="true"
? ? android:background="@drawable/dialog_share"
? ? android:orientation="vertical"
? ? TextView
? ? ? ? android:id="@+id/title"
? ? ? ? android:layout_width="wrap_content"
? ? ? ? android:layout_height="wrap_content"
? ? ? ? android:layout_gravity="center"
? ? ? ? android:layout_margin="15dp"
? ? ? ? android:gravity="center"
? ? ? ? android:text="消息提示"
? ? ? ? android:textColor="#38ADFF"
? ? ? ? android:textSize="16sp" /
? ? TextView
? ? ? ? android:id="@+id/message"
? ? ? ? android:layout_width="wrap_content"
? ? ? ? android:layout_height="wrap_content"
? ? ? ? android:layout_marginLeft="20dp"
? ? ? ? android:layout_marginRight="20dp"
? ? ? ? android:text="提示消息" /
? ? View
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="1px"
? ? ? ? android:layout_marginTop="15dp"
? ? ? ? android:background="#E4E4E4" /
? ? LinearLayout
? ? ? ? android:layout_width="match_parent"
? ? ? ? android:layout_height="40dp"
? ? ? ? android:orientation="horizontal"
? ? ? ? Button
? ? ? ? ? ? android:id="@+id/no"
? ? ? ? ? ? android:layout_width="0dp"
? ? ? ? ? ? android:layout_height="match_parent"
? ? ? ? ? ? android:layout_marginLeft="10dp"
? ? ? ? ? ? android:layout_weight="1"
? ? ? ? ? ? android:background="@null"
? ? ? ? ? ? android:gravity="center"
? ? ? ? ? ? android:singleLine="true"
? ? ? ? ? ? android:text="No"
? ? ? ? ? ? android:textColor="#7D7D7D"
? ? ? ? ? ? android:textSize="16sp" /
? ? ? ? View
? ? ? ? ? ? android:layout_width="1px"
? ? ? ? ? ? android:layout_height="match_parent"
? ? ? ? ? ? android:background="#E4E4E4" /
? ? ? ? Button
? ? ? ? ? ? android:id="@+id/yes"
? ? ? ? ? ? android:layout_width="0dp"
? ? ? ? ? ? android:layout_height="match_parent"
? ? ? ? ? ? android:layout_marginRight="10dp"
? ? ? ? ? ? android:layout_weight="1"
? ? ? ? ? ? android:background="@null"
? ? ? ? ? ? android:gravity="center"
? ? ? ? ? ? android:singleLine="true"
? ? ? ? ? ? android:text="Yes"
? ? ? ? ? ? android:textColor="#38ADFF"
? ? ? ? ? ? android:textSize="16sp" /
? ? /LinearLayout
/LinearLayout
/RelativeLayout
第四步:定義dialog的背景框
?xml version="1.0" encoding="utf-8"?
shape xmlns:android=""?
solid android:color="#ffffff" /?
stroke?
? ? android:width="0.8dp"?
? ? android:color="#ffffff" /?
!-- 圓角 --?
corners android:radius="8dp" /?
/shape
最后在需要的地方調(diào)用即可
Dialog 的自定義布局的根布局的寬度是寫固定的,顯示的時候?qū)挾群透叨炔皇菍?yīng)的固定值。
根布局外面又添加了一層 FrameLayout,設(shè)置其寬高均為 wrap_content 來包裹以前的布局。
這個時候猜測是否因為添加自定義視圖的時候,布局參數(shù)被改寫了,然后開始查看源碼,最終發(fā)現(xiàn)確實是這樣的。
在下面的源碼分析中,最終發(fā)現(xiàn)也是用了 mWindow.setContentView(mAlertDialogLayout) 將 R.layout.alert_dialog.xml 的默認(rèn)布局添加到 PhoneWindow, 和Activity一樣的。
關(guān)鍵的地方看一下 setupCustomContent() 這個方法,在添加自定義視圖的時候布局參數(shù)設(shè)置為 MATCH_PARENT 了,所以我們設(shè)置固定大小是沒有作用的,要套一層父布局解決這個問題。
一、在themes.xml中添加自定義dialog的樣式
二、創(chuàng)建dialog基類
三、創(chuàng)建自定義dialog的布局
四、創(chuàng)建自定義dialog
五、在activity中使用自定義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、把設(shè)定好的窗口布局放到dialog中
dialog.setContentView(contentView);
4、設(shè)定點擊窗口空白處取消會話
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()?{
@Override
public?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.dismiss();
}
});
Button?closeBtn?=?(Button)contentView.findViewById(R.id.close);
closeBtn.setClickable(true);
closeBtn.setOnClickListener(newView.OnClickListener()?{
@Override
public?void?onClick(View?v)?{
dialog.dismiss();
}
});
dialog.show();
以上就是在Android開發(fā)自定義dialog樣式的方法和步驟,android很多的控件都提供了接口或者方法進(jìn)行樣式的定義和修改。