dialog的簡述

來來來,走過路過千萬不要錯過哈,今天小生要說的是dialog,dialog有什麼好說的,大家經常用的,很隨意就能拿來使用的,就算是自定義樣式也是很隨意的,可是你真的很隨意就能使用了麼?今天我要說的是靠谷歌,百度的日子已經不好過了,我們要知其然還要知其所以然,只有這樣才能快速的進步。

今天我要從兩個方面簡述dialog,第一:dialog的基本使用,以及使用過程中的注意點;第二:dialog和popwindow的區別。


dialog的使用:
dialog = new Dialog(context,R.style.dialog);
大家看到第二個參數是樣式,當然不傳也行,那就是默認的,默認的有多醜相信大家都見識過的。所以我們在這裏重新寫一個樣式,
<style name="dialog" parent="@android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item><!--邊框-->
        <item name="android:windowIsFloating">true</item><!--是否浮現在activity之上-->
        <item name="android:windowIsTranslucent">false</item><!--半透明-->
        <item name="android:windowNoTitle">true</item><!--無標題-->
        <item name="android:windowBackground">@color/none</item><!--背景透明-->
        <item name="android:backgroundDimEnabled">true</item><!--模糊-->
        <item name="android:windowFullscreen">true</item>
    </style>
    
這裏呢我都加上了註釋,可以根據自己的需求去設置不同的樣式。這些都很簡單。可是稍微複雜點的就是dialog的位置不好控制,說起位置大家都知道popwindow的位置是最好控制的,想放在哪裏都是很隨意的,就是dialog的默認的就是在位置最中間的。下面我就和大家說一下如何修改dialog的位置
我們以放在屏幕底部爲例子,來說一說如何改變dialog的位置:
Window window = dialog.getWindow();
window.setGravity(Gravity.BOTTOM);
獲得dialog的window對象,改變window的重力方向即可。或許你會有疑問爲什麼要這樣改變window呢,你可以看看dialog的show方法,看看show的是什麼。

我們找到了改變位置的方法了,可是dialog的左右總是有間距的,有時候我們需要橫向全屏,這時候你就是沒辦法改變,你就又想到了popwindow,popwindow就不會有這些煩人的問題。不要就這樣放了,dialog也能很好的實現。接下來就說說dialog改變window的寬高的方法:

方法一:
window.getDecorView().setPadding(0,0,0,0);//pading都設置爲0
        WindowManager.LayoutParams lp = window.getAttributes();//獲取window的lp
        lp.width = WindowManager.LayoutParams.MATCH_PARENT;//動態設置寬高
        lp.height = WindowManager.LayoutParams.WRAP_CONTENT;
        window.setAttributes(lp);//最後別忘了在把屬性設置上
        方法二:
        WindowManager windowManager = ((Activity)context).getWindowManager();
        Display display = windowManager.getDefaultDisplay();
        WindowManager.LayoutParams lp = window.getAttributes();
        lp.width = (int)(display.getWidth()); //設置寬度
        window.setAttributes(lp); 
兩種方式原理是一樣的,怎麼設置都行,親測有效果的。上邊只是給出了設置寬度,其實在這裏改變高度也是沒問題的,感興趣的話可以試試。(感覺說的都是廢話,看到這裏了肯定知道是都能改變的了)

來來來,再看看爲什麼dialog左右總是有邊距的,前邊在自定義style的時候細心的童鞋應該注意到了,<style name="dialog" parent="@android:style/Theme.Dialog">
看看他的parent,默認的是這個,點

進去看看唄,好多item,找我們需要的,左右間距肯定是有pading了,ctrl+f一下,
	<item name="listPreferredItemPaddingLeft">10dip</item>
        <item name="listPreferredItemPaddingRight">10dip</item>
        <item name="listPreferredItemPaddingStart">10dip</item>
        <item name="listPreferredItemPaddingEnd">10dip</item>
看吧,果真如此,不過沒關係,我們可以去改變。

看到這裏,我們一個完美的,橫向全屏位於屏幕底部的一個dialog就實現了,
雖然比popwindow繞了那麼一下下,但是也有比他完美的地方,
比如說我們的dialog是有半透明陰影效果的,自己就有的,前邊自定義style的時候寫過的。



再來看看dialog和popwindow的區別:
第一點:Dialog的位置不好控制,而PopupWindow的位置可以隨意控制,看看隨意到什麼地步
showAsDropDown(View anchor):相對某個控件的位置(正左下方),無偏移
showAsDropDown(View anchor, int xoff, int yoff):相對某個控件的位置,有偏移
showAtLocation(View parent, int gravity, int x, int y):相對於父控件的位置(例如正中央Gravity.CENTER,下方Gravity.BOTTOM等),可以設置偏移或無偏移
第二點:AlertDialog是非阻塞線程的,AlertDialog彈出的時候,後臺可是還可以做其他事情的哦。 而PopupWindow是阻塞線程的, 這就意味着在我們退出這個彈出框之前,程序會一直等待

好了,看了這麼多,dialog和popwinow都能隨意運用了,以後改怎麼選擇大家可以自己衡量了。
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章