在有些介面我們經常需要彈出全屏對話方塊,但是彈出的時候,因為對話方塊本身所帶的padding,導致彈出的時,周圍會有空隙。就算把空隙給補住,狀態列部分還是半透明黑色,如果自己的對話方塊是淺色風格的話,就會很不搭配。在前面的文章中實現了帶歷史記錄功能的和篩選條件的搜尋對話方塊,可以看到我的對話方塊就存在這個瑕疵,頂部是半透明的黑色,與我白色的介面風格很不搭配。今天在完善另乙個模組的過程中,發現了沉浸式對話方塊的的實現,分享與此。首先看效果圖:
修改前:
修改後:
明顯可以看出,修改後的對話方塊的效果要明顯好於修改前。下面我簡單說一下實現的流程,詳細的**請看我的專案:
唉,這其實是個老生常談的話題了,但是每次做有可能會遇到各種問題。我這裡的解決方法是,在dialogfragment對話方塊的onstart方法中,重新調整對話方塊的大小,**如下(如果是dialog,則不用調整,直接設定下面的style即可):
@override
public void onstart()
}
然後設定在style中增加乙個style,如下:
這裡的android:windowtranslucentstatus是設定沉浸式對話方塊的,等會再說,如果單純想要全屏對話方塊,不想沉浸式的話,可以不要這一句。
然後,針對dialog,在建構函式中,呼叫
super(context, r.style.materialsearch);
針對dialogfragment,在oncreate函式中,呼叫
setstyle(dialogfragment.style_normal,r.style.materialsearch);
即可,這樣對話方塊就能全屏了。我的dialog和dialogfragment都能適用。
所謂沉浸式對話方塊,我的理解,就是讓狀態列和介面能融合到一起。剛才在style中,說過要注意android:windowtranslucentstatus這個屬性。我們看看這個屬性是幹嘛的,我們在style中增加這一句,效果如下:
我們可以很明顯的看到,我們的對話方塊上移了,蓋住了狀態列。那既然有這個屬性,我們的沉浸式全屏對話方塊的實現就好辦了:我們可以在自己的布局中,加入乙個和狀態列一樣高,顏色和內容介面一致的view。那我在對話方塊的布局中,加入乙個id為status_bar_bg的view,背景和我的介面一致都是白色。
加入這個以後,我們需要動態控制它的高度,讓它和狀態列一樣高。
view statusbg=view.findviewbyid(r.id.status_bar_bg);
statusbg.setlayoutparams(new linearlayout.layoutparams(viewgroup.layoutparams.match_parent,uiutility.getstatusbarheight(getcontext())));
其中,uiutility.getstatusbarheight是獲取狀態列高度的函式,定義如下:
/**
* 獲取狀態列高度
* @param context
* @return
*/public static int getstatusbarheight(context context)
ok,現在應該可以了。看下效果:
現在沉浸是沉浸了,但是有乙個比較嚴重的問題就是狀態列上的文字是白色的,現在看不清楚了。那我們設定狀態列文字的顏色為黑色不就行了。在dialog的建構函式中,加入下面這一段**
if (build.version.sdk_int >= build.version_codes.lollipop)
對話方塊的實現
發現自己學過的東西要是不去複習的話,慢慢就忘了,還是記個部落格,做個記錄,便於以後複習。效果圖 實現 簡單對話方塊的實現 public void click1 view view 設定取消按鈕 builder.setnegativebutton 取消 new dialoginte ce.onclic...
安卓基礎回顧5 對話方塊的使用
alertdialog dialog new alertdialog.builder this seticon r.mipmap.ic launcher 設定標題的 settitle 我是對話方塊 設定對話方塊的標題 setmessage 我是對話方塊的內容 設定對話方塊的內容 設定對話方塊的按鈕 ...
瀏覽對話方塊的實現
方法1 使用xtreme toolkit介面庫中的cxtbrowsedialog 控制項 if updatedata true if dlg.domodal idok 方法2 不用xtreme toolkit介面庫 cstring str browseinfo bi char name max pa...