寫在前面
? 本文提供自己開發(fā)中的一些實(shí)現(xiàn)心得,希望對(duì)各位路過的基友有一定的啟發(fā)意義。
-
框架實(shí)現(xiàn)
我推薦兩個(gè)實(shí)現(xiàn)工具:
? StatusBarUtil
? gyf-dev/ImmersionBar
具體使用請(qǐng)參考具體文檔,這里不作詳細(xì)介紹。 -
自己動(dòng)手
? 在Android 5.0 后,對(duì)實(shí)現(xiàn)Android 沉浸式狀態(tài)欄越來越簡(jiǎn)單,官方提供了很多相關(guān)的api,具體文檔請(qǐng)移步Android 中國(guó)查看相關(guān) api。
Android 5.0以上在vaues-21下配置xml 達(dá)到沉浸式狀態(tài)欄效果:
<item name="android:windowTranslucentStatus">false</item>
<!--Android 5.x開始需要把顏色設(shè)置透明,否則導(dǎo)航欄會(huì)呈現(xiàn)系統(tǒng)默認(rèn)的淺灰色-->
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:fitsSystemWindows">true</item>
就這幾句代碼在Android 5.0 以上基本能滿足實(shí)現(xiàn)沉浸式狀態(tài)欄效果了。但是有種特殊情況:在fragment里頂部是圖片或純色和漸變色,頂部狀態(tài)欄不會(huì)全透明,這里就不上圖了。
?解決這種問題的思路:全屏 + 顯示狀態(tài)欄,為了普通界面能正常顯示在界面隱藏后記得清除flag。
//全屏/顯示狀態(tài)欄
protected void fullScreenOrShowStatusBar(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
Window window = getWindow();
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
window.addFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}
//清除
protected void clearfullScreenOrShowStatusBar(){
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){
Window window = getWindow();
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_IN_SCREEN);
window.clearFlags(WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS);
}
}
?至此,一個(gè)項(xiàng)目沉浸式狀態(tài)欄的適配基本能完美實(shí)現(xiàn)了,這里就不去討論那些走非主流的rom了,我的項(xiàng)目走主流就可以了。
總結(jié):
? 個(gè)人不喜項(xiàng)目里大大小小一堆框架,喜歡思考根據(jù)項(xiàng)目實(shí)際情況解決問題。提出此方案在此,歡迎指正 !