本篇部落格主要是介紹如何實現全屏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
即可。
看下效果圖:
總結:此方法通過設定theme
的windowisfloating
為false ,從而使得contentview
的match_parent
對window
起作用,從而達到全屏的效果,否則會設定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
從而導致misfloating
為true
,然後通過**再次修改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...