Android 5.0沉浸式狀態列 使用心得
寫在前面
本文提供自己開發中的一些實現心得,希望對各位路過的基友有一定的啟發意義。
-
框架實現
我推薦兩個實現工具:
ofollow,noindex">StatusBarUtil
gyf-dev / ImmersionBar
具體使用請參考具體文件,這裡不作詳細介紹。 -
自己動手
在Android 5.0 後,對實現Android 沉浸式狀態列越來越簡單,官方提供了很多相關的api,具體文件請移步Android 中國檢視相關 api。
Android 5.0以上在vaues-21下配置xml 達到沉浸式狀態列效果 :
<item name="android:windowTranslucentStatus">false</item> <!--Android 5.x開始需要把顏色設定透明,否則導航欄會呈現系統預設的淺灰色--> <item name="android:statusBarColor">@android:color/transparent</item> <item name="android:fitsSystemWindows">true</item>
就這幾句程式碼在Android 5.0 以上基本能滿足實現沉浸式狀態列效果了。但是有種特殊情況:在fragment裡頂部是圖片或純色和漸變色,頂部狀態列不會全透明,這裡就不上圖了。
解決這種問題的思路:全屏+ 顯示狀態列,為了普通介面能正常顯示在介面隱藏後記得清除flag。
//全屏/顯示狀態列 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); } }
至此,一個專案沉浸式狀態列的適配基本能完美實現了,這裡就不去討論那些走非主流的rom了,我的專案走主流就可以了。
總結:
個人不喜專案裡大大小小一堆框架,喜歡思考根據專案實際情況解決問題。提出此方案在此,歡迎指正 !