Android自定義Dialog


在開發(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情況):


最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市咽袜,隨后出現(xiàn)的幾起案子丸卷,更是在濱河造成了極大的恐慌,老刑警劉巖询刹,帶你破解...
    沈念sama閱讀 217,509評論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件谜嫉,死亡現(xiàn)場離奇詭異萎坷,居然都是意外死亡,警方通過查閱死者的電腦和手機沐兰,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評論 3 394
  • 文/潘曉璐 我一進店門哆档,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人住闯,你說我怎么就攤上這事瓜浸。” “怎么了比原?”我有些...
    開封第一講書人閱讀 163,875評論 0 354
  • 文/不壞的土叔 我叫張陵插佛,是天一觀的道長。 經(jīng)常有香客問我量窘,道長雇寇,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 58,441評論 1 293
  • 正文 為了忘掉前任蚌铜,我火速辦了婚禮锨侯,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘冬殃。我一直安慰自己囚痴,他們只是感情好,可當我...
    茶點故事閱讀 67,488評論 6 392
  • 文/花漫 我一把揭開白布造壮。 她就那樣靜靜地躺著,像睡著了一般骂束。 火紅的嫁衣襯著肌膚如雪耳璧。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,365評論 1 302
  • 那天展箱,我揣著相機與錄音旨枯,去河邊找鬼。 笑死混驰,一個胖子當著我的面吹牛攀隔,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播栖榨,決...
    沈念sama閱讀 40,190評論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼昆汹,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了婴栽?” 一聲冷哼從身側(cè)響起满粗,我...
    開封第一講書人閱讀 39,062評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎愚争,沒想到半個月后映皆,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體挤聘,經(jīng)...
    沈念sama閱讀 45,500評論 1 314
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,706評論 3 335
  • 正文 我和宋清朗相戀三年捅彻,在試婚紗的時候發(fā)現(xiàn)自己被綠了组去。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 39,834評論 1 347
  • 序言:一個原本活蹦亂跳的男人離奇死亡步淹,死狀恐怖从隆,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情贤旷,我是刑警寧澤广料,帶...
    沈念sama閱讀 35,559評論 5 345
  • 正文 年R本政府宣布,位于F島的核電站幼驶,受9級特大地震影響艾杏,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜盅藻,卻給世界環(huán)境...
    茶點故事閱讀 41,167評論 3 328
  • 文/蒙蒙 一购桑、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧氏淑,春花似錦勃蜘、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,779評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至辉懒,卻和暖如春阳惹,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背眶俩。 一陣腳步聲響...
    開封第一講書人閱讀 32,912評論 1 269
  • 我被黑心中介騙來泰國打工莹汤, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人颠印。 一個月前我還...
    沈念sama閱讀 47,958評論 2 370
  • 正文 我出身青樓纲岭,卻偏偏與公主長得像,于是被迫代替她去往敵國和親线罕。 傳聞我的和親對象是個殘疾皇子止潮,可洞房花燭夜當晚...
    茶點故事閱讀 44,779評論 2 354

推薦閱讀更多精彩內(nèi)容