在開發(fā)中,我們經(jīng)常會用到一些自定義布局的對話框纯命。每次自己寫的時候争涌,經(jīng)常會遇到一些細小的問題需要上網(wǎng)來解決,所以干脆把經(jīng)常遇到的幾個問題總結(jié)了一下音五,這樣就可以愉快自定義dialog了惫撰。本文主要總結(jié)的問題有:1.對話框的大小、位置 2.對話框的主題
自定義dialog的大小躺涝、位置
-
自定義對話框的大小
對話框的大小的設(shè)置有兩種方法:
1.通過WindowManager.LayoutParams來設(shè)置厨钻,具體請看如下的代碼:
` Dialog dialog=new Dialog(this,R.style.dialog);dialog.setContentView(R.layout.layout_dialog); //獲取到當前Activity的Window Window dialog_window = dialog.getWindow(); //獲取到LayoutParams WindowManager.LayoutParams dialog_window_attributes = dialog_window.getAttributes(); //設(shè)置寬度 dialog_window_attributes.width=400; //設(shè)置高度 dialog_window_attributes.height=400; dialog_window.setAttributes(dialog_window_attributes); dialog.show();
這種方式主要是通過在代碼中獲取當前window的LayoutParams,通過設(shè)置寬度、高度來改變Dialog的寬高的坚嗜。
2.通過自定義Dialog的布局來設(shè)置對話框的大小夯膀。在布局的時候,將整個layout的寬高設(shè)定為固定值苍蔬,這樣將layout設(shè)置到Dialog中時诱建,對話框的大小將按照布局的大小顯示。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="200dp"
android:layout_height="200dp"
android:orientation="vertical"
android:background="@android:color/darker_gray">
</LinearLayout>
-
自定義對話框的位置
對話框的位置設(shè)置也是通過Gravity和WindowManager.LayoutParams來設(shè)置的碟绑。代碼如下:
//獲取到當前Activity的Window Window dialog_window = dialog.getWindow(); //設(shè)置對話框的位置 dialog_window.setGravity(Gravity.TOP|Gravity.LEFT); //獲取到LayoutParams WindowManager.LayoutParams dialog_window_attributes = dialog_window.getAttributes(); //設(shè)置對話框位置的偏移量 dialog_window_attributes.x=50; dialog_window_attributes.y=50; dialog_window.setAttributes(dialog_window_attributes);
dialog主題的部分屬性的意義##
一俺猿、
//設(shè)置dialog頭部不顯示
<item name="android:windowNoTitle">true</item>
效果如下圖:
如果設(shè)置
<item name="android:windowNoTitle">false</item>
顯示效果為下圖:
二茎匠、
//設(shè)置對話框的背景顏色是
<item name="android:background">@android:color/black</item>
現(xiàn)在我們將background屬性設(shè)置為黑色,顯示效果如下:
可以看到對話框的文字部分的背景全部成了黑色辜荠,所以我們通常把這個屬性的設(shè)置為透明的(@android:color/transparent)汽抚。
三、
//設(shè)置點擊dialog以外的區(qū)域伯病,dialog是否消失
<item name="android:windowCloseOnTouchOutside">false</item>
四造烁、
//是否允許對話框的背景變暗
<item name="android:backgroundDimEnabled">false</item>
具體效果圖(上面的圖為backgroundDimEnabled值為false情況,下面的圖值為true,一般情況下我們都設(shè)置為true,也就是右圖的樣式):
五午笛、
//對話框的背景變暗的程度惭蟋,值越大,背景就越暗
<item name="android:backgroundDimAmount">0.3</item>
如圖(上面的圖backgroundDimAmount屬性的值為0.8药磺,下面的圖為0.3告组,可以明顯看出兩個對話框的背景灰度的差別)
六、
//dialog的動畫效果
<item name="android:windowAnimationStyle">@style/dialog_animation</item>
動畫效果分為:進入動畫和退出動畫
<style name="dialog_animation">
<item name="windowEnterAnimation">@anim/dialog_enter</item>
<item name="windowExitAnimation">@anim/dialog_exit</item>
</style>
七癌佩、windowBackground屬性木缝,設(shè)置這個屬性后,dialog周邊的一圈黑邊就可以消失了围辙,但是不過設(shè)置什么顏色我碟,周邊的黑邊都消失,并沒有顯示出其他顏色的輪廓姚建,很是奇怪矫俺。
//設(shè)置dialog的背景顏色
<item name="android:windowBackground">@android:color/holo_red_dark</item>
效果圖如下(上面的圖是設(shè)置了windowBackground的屬性值的,不管設(shè)置什么顏色的值掸冤,其效果都如下圖一樣厘托。下面的圖是沒有設(shè)置這個屬性值的,用的還是Theme.Dialog中的值稿湿,對話框周邊就會出現(xiàn)一道黑邊):
八铅匹、
//Dialog的windowFrame框
<item name="android:windowFrame">@android:color/holo_red_dark</item>
當設(shè)置屬性值為@null時,dialog顯示所有圖片中的樣子饺藤,當為這個屬性設(shè)置一個顏色時伊群,比如代碼中的深紅色,顯示效果如下:
九策精、
<!-- 是否懸浮在activity上 -->
<item name="android:windowIsFloating">true</item>
具體效果如圖(上面的圖為屬性值為false情況舰始,下面的圖為屬性值為true情況):