參考資料:
一. 沉浸式狀態(tài)欄發(fā)展簡(jiǎn)介
從Android4.4到現(xiàn)在俯邓,沉浸式的發(fā)展大概可以分為三個(gè)階段:
- Android4.4(API 19) - Android 5.0(API 21): 這個(gè)階段可以實(shí)現(xiàn)沉浸式,但是表現(xiàn)得不是很好。實(shí)現(xiàn)方式為: 通過FLAG_TRANSLUCENT_STATUS設(shè)置狀態(tài)欄為透明并且為全屏模式,然后通過添加一個(gè)與StatusBar 一樣大小的View,將View 的 background 設(shè)置為我們想要的顏色锌俱,從而來實(shí)現(xiàn)沉浸式。
- Android 5.0(API 21)以上版本: 在Android 5.0的時(shí)候,加入了一個(gè)重要的屬性和方法 android:statusBarColor (對(duì)應(yīng)方法為 setStatusBarColor)伴栓,通過這個(gè)方法我們就可以輕松實(shí)現(xiàn)沉浸式。也就是說,從Android5.0開始钳垮,系統(tǒng)才真正的支持沉浸式惑淳。
- Android 6.0(API 23)以上版本:其實(shí)Android6.0以上的實(shí)現(xiàn)方式和Android 5.0 +是一樣,為什么要將它歸為一個(gè)單獨(dú)重要的階段呢饺窿?是因?yàn)閺腁ndroid 6.0(API 23)開始歧焦,我們可以改狀態(tài)欄的繪制模式,可以顯示白色或淺黑色的內(nèi)容和圖標(biāo)肚医。
二. 具體方案(Android5.0及以上版本)
經(jīng)過調(diào)研總結(jié)绢馍,我選擇以這樣的方式來解決沉浸式狀態(tài)欄問題,只需兩步:
- 設(shè)置狀態(tài)欄透明肠套,將布局?jǐn)U展到狀態(tài)欄
- 為需要的布局設(shè)置合適的paddingTop舰涌,達(dá)到整體向下移的效果
這樣做有以下3點(diǎn)好處:
- 不用判斷系統(tǒng)版本,適配于5.0以上的所有機(jī)型你稚;
- 不用在xml或style中設(shè)置其它屬性瓷耙,全部采用代碼實(shí)現(xiàn),統(tǒng)一適配刁赖;
- 適合沉浸式頭部控件高度有變化的情景搁痛,可以不用在代碼中頻繁計(jì)算控件高度。
三. 典型情景適配方案
- 狀態(tài)欄顏色適配(TestActivity)
只需要通過setStatusBarColor(@ColorInt int color)方法設(shè)置狀態(tài)欄的顏色即可宇弛。
狀態(tài)欄顏色設(shè)置
- 頭部高度確定 (UnChangeActivity)
1)設(shè)置狀態(tài)欄透明鸡典,并將布局?jǐn)U展到狀態(tài)欄
2)給需要的布局整體添加paddingTop
考慮到后期頭部擴(kuò)展,建議采用第三種方案實(shí)現(xiàn)涯肩。
頭部高度確定
- 頭部高度不確定(MainActivity)
1)設(shè)置狀態(tài)欄透明轿钠,并將布局?jǐn)U展到狀態(tài)欄
2)推薦利用自定義的ToolBarHasPadding和LineLayoutHasPadding來實(shí)現(xiàn)布局的下移,背景圖片通過ImageView來顯示病苗,將ImageView的高度約束起來自適應(yīng)大小疗垛。
頭部高度不確定