Android 5.0沉浸式狀態(tài)欄 使用心得

寫在前面

? 本文提供自己開發(fā)中的一些實(shí)現(xiàn)心得,希望對(duì)各位路過的基友有一定的啟發(fā)意義。

  1. 框架實(shí)現(xiàn)
    我推薦兩個(gè)實(shí)現(xiàn)工具:
    ? StatusBarUtil
    ? gyf-dev/ImmersionBar
    具體使用請(qǐng)參考具體文檔,這里不作詳細(xì)介紹。
  2. 自己動(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í)際情況解決問題。提出此方案在此,歡迎指正 !

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容