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