全屏到任意寬高的Dialog的寫法

2021-08-10 17:37:17 字數 2797 閱讀 9171

本篇部落格主要是介紹如何實現全屏dialog,以及部分原理,具體細節可以參考對應dialog的原始碼實現。

此方法比較簡單的就可以實現全屏的dialog,我們看下如何實現呢。

首先需要在res/values/styles.xml內寫入如下**即可:

name="dialog_style_1">

--注意此處的屬性,設定此屬性後即可實現dilaog全屏-->

name="android

:windowfullscreen">true

item>

style>

是不是很簡單,如上方宣告好乙個style後,怎麼使用呢?

// 方式1,直接繼承dialog的時候傳入style即可

public

class

dialog1

extends

dialog

}//------------------

//方式2

dialog dialog=new dialog(context,r.style.dialog_style_1);

上面兩種實現的效果一致,是不是很簡單呢?

來個效果圖瞅瞅效果吧,效果圖如下:

總結:此類使用theme的方式去設定全屏,設定windowfullscreen屬性為true 即可

看到上面的標題,你是不是懷疑我寫錯了,並沒有,這個也是通過style實現的不過設定的屬性和上面的不同,達到的效果也不盡相同。

當然設定style的方式和上面一樣只需要換個屬性就好了,按照如下設定:

name="dialog_style_2">

--注意此處-->

name="android

:windowisfloating">false

item>

style>

當然使用方式也是一致的,按照如之前的使用方式,只需將r.style.dialog_style_1更改為r.style.dialog_style_2即可。

看下效果圖:

總結:此方法通過設定themewindowisfloating為false ,從而使得contentviewmatch_parentwindow起作用,從而達到全屏的效果,否則會設定window的寬高為wrap_content,無法全屏,當然你可以通過設定乙個空的style,也可達到相同效果(windowisfloating預設為false),但不可以不設定style,因為會有預設的style。

這個方法內就比較靈活了,你可以任意設定dilaog的寬高,不過**量也會變高,好吧,看下怎麼實現。

上**:

public

class

dialog3

extends

dialog

/*** 用於根據傳入的寬高的比例顯示window

*/private

void

initwidthandheightbypercent(float widthpercent, float heightpercent)

private

intgetstatusbarheight()

return statusbarheight1;

}}

不要被上面的**嚇壞了,其實內容也不多,我來講解下主要過程,首先需要注意的就是你設定window的寬高的**一定要在setcontentview之後,原因和方法2中提到的相關,其內部會將不設定android:windowisfloating屬性的window按照wrap_content來測量,所以,即使你設定match_parent也是無效的,而我們如果通過**手動修改寬高當然也就達到修改的目的,如果順序修改,就會導致setcontentview方法將其重置。

if (misfloating)
這個**就是在setcontentview內執行,很明顯,由於你沒設定style,系統將會使用預設的style從而導致misfloatingtrue,然後通過**再次修改window的寬高即可達到修改的結果。

從上面那個比較長的**我們也可以看出,dialog的寬高是可以自己設定的,所以通過此方法可以設定dialog的任意寬高。

效果同效果圖2,在此不重複截圖了。

總結: 使用**設定寬高

至此你已經掌握了三種設定dilaog全屏的方式和一種設定dilaog任意寬高的方式,也知道了他們每個的優缺點,我將**上傳至 -> csdn

任意修改的Dialog

實際開發過程中總是對彈窗樣式的要求總是比較高的,但是由於自帶的dialog總是預設載入一些屬性,所以導致顯示的效果和繪製的樣式不一致,所以需要對dialog設定一些屬性.1.在style.xml裡面新增該style my dialog parent android style theme.dialo...

全屏dialog的定義和寫法

本文 預設的dialog是不能全屏的。也就是怎麼設定dialog的layout都沒用的。面給出實現dialog實現全屏的兩種方式 1 實現。這中方法相對比較簡單 首先繼承dialig,然後再建構函式中新增 super context,android.r.style.theme setowneract...

四 View 的測量寬高和最終寬高的區別

這個問題可以具體為getmeasuredheight 和getheight 有什麼區別。view public final intgetheight 再看看 mbottom mtop 是怎麼來的 view protected boolean setframe int left,int top,int...