Andorid 项目中Dialog的便捷开发,全面的样式选择.
在最近寫(xiě)的項(xiàng)目中,Dialog 有各種各樣的顯示問(wèn)題, 無(wú)論是 用dialog ,還是 alertDialog , 都會(huì)有一系列的 黑邊, 黑底白字,全屏等 各種意外的結(jié)果,而且無(wú)論自己怎樣自定義樣式,都得不到很好的解決.經(jīng)過(guò)一段時(shí)間的研究,嘗試. 自己得出了自己的解決辦法. 供大家參考使用.
首先,來(lái)普及一下Dialog 的基礎(chǔ)知識(shí),Dialog 是一種基于容器的對(duì)話框
已知的直接子類
AppCompatDialog 基類AppCompat主題對(duì)話框。
CharacterPickerDialog 對(duì)話框選擇重音字符相關(guān)的基本性格。
MediaRouteChooserDialog 這個(gè)類實(shí)現(xiàn)MediaRouter的路線選擇器對(duì)話框。
已知的間接子類(支持包)
AlertDialog 一個(gè)子類可以顯示一個(gè)對(duì)話框,兩個(gè)或三個(gè)按鈕。
DatePickerDialog 一個(gè)簡(jiǎn)單的對(duì)話框包含一個(gè)DatePicker。
MediaRouteControllerDialog這個(gè)類實(shí)現(xiàn)了路由控制器MediaRouter對(duì)話框。
ProgressDialog一個(gè)對(duì)話框顯示一個(gè)進(jìn)度指示器和一個(gè)可選的文本消息或視圖。
TimePickerDialog一個(gè)對(duì)話框,提示用戶使用TimePicker每天的時(shí)間。
以上的dialog ,在項(xiàng)目應(yīng)用的過(guò)程中,會(huì)由于項(xiàng)目主題,或者尺寸等問(wèn)題,出現(xiàn)不良的用戶體驗(yàn), 下面 我們一起來(lái)看一下.
1. 選擇改變dialog主題樣式
Dialog baseDialog = new Dialog(context, R.style.default_dialog_style);然后在style.xml 中修改樣式即可,當(dāng)然樣式可選擇繼承 其他的dialog ,大家可以參考下,當(dāng)然還有字體的相關(guān)設(shè)定.
<style name="default_dialog_style"><item name="android:windowIsFloating">true</item><!--是否懸浮--> <item name="android:windowIsTranslucent">true</item><!--背景是否半透明--> <item name="android:windowFrame">@null</item><!--Dialog的windowFrame框?yàn)闊o(wú)--> <item name="android:windowNoTitle">true</item><!--Dialog無(wú)標(biāo)題--> <item name="android:windowBackground">@android:color/transparent</item> <!--背景為透明色--> <item name="android:windowContentOverlay">@null</item><!-- 設(shè)置窗體內(nèi)容背景--> <item name="android:radius">5dp</item><!--邊角弧度--> <item name="windowBackground"> 窗體的背景 </item><item name="windowFullscreen">false</item> 是否為全屏 <item name="windowOverscan">false</item> 是否要求窗體鋪滿整屏幕 <item name="windowShowWallpaper">false</item> 是否顯示壁紙 <item name="windowTitleStyle">@android :style/WindowTitle</item> 窗體的標(biāo)題欄Style<item name="windowTitleSize">25dip</item> 窗體文字大小 <item name="android:backgroundDimEnabled">false</item>: 背景是否模糊顯示 <!--操作類--> <item name="windowCloseOnTouchOutside">false</item><!--點(diǎn)擊窗體外,是否消失--> </style> ?
2.當(dāng)設(shè)定好主題后, 我們可以在 自己的dilaog 中 自定義View 來(lái)實(shí)現(xiàn)相關(guān)彈窗(這里的inflate 有三種寫(xiě)法,這里只寫(xiě)一種).
LayoutInflater inflater = LayoutInflater.from(context); View v = inflater.inflate(R.layout.dialog_base, null); baseDialog.setContentView(v);
要注意的是,在這里的view 中 ,在設(shè)置邊框的時(shí)候,可能有些邊框之類的,不會(huì)被顯示,那還是得在你的view 中添加好margin,才會(huì)顯示.
3.第三步,需要在代碼里來(lái)進(jìn)行相關(guān)設(shè)定(包括第二步的內(nèi)容), 在我們 寫(xiě)項(xiàng)目中 dialog 要在utils 類中新建一個(gè)專門(mén)的類方便進(jìn)行管理.我用類名DialogFactory, 在這里面寫(xiě)上方法
良好的封裝,能夠讓代碼得到重復(fù)利用~
public static Dialog createBaseCustomDialog(Context context, String title, String text,View.OnClickListener onClickListener) {Dialog baseDialog = new Dialog(context, R.style.default_dialog_style);LayoutInflater inflater = LayoutInflater.from(context);View v = inflater.inflate(R.layout.dialog_base, null);baseDialog.setContentView(v);TextView titleTv = (TextView) v.findViewById(R.id.dialog_base_title_tv);TextView textTv = (TextView) v.findViewById(R.id.dialog_base_text_tv);Button confirmBtn = (Button) v.findViewById(R.id.dialog_base_confirm_btn);titleTv.setText(title);textTv.setText(text);confirmBtn.setOnClickListener(onClickListener);//將監(jiān)聽(tīng)放在外面實(shí)現(xiàn)baseDialog.setCancelable(false);//是否刪除return baseDialog; }
ps :這里,dialog 的樣式,alertDialog 樣式都能修改.樣式的問(wèn)題,需要根據(jù)需求去改變,功能上的需求 基本上都能實(shí)現(xiàn). 自定義dialog,個(gè)人感覺(jué)沒(méi)有什么意義.
總結(jié)
以上是生活随笔為你收集整理的Andorid 项目中Dialog的便捷开发,全面的样式选择.的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: NGINX 安装、启停、平滑升级、配置文
- 下一篇: 【原版教材•中英对照】高分子化学—可作为