android 實現(xiàn)透明狀態(tài)欄最簡單方式

寫這個的來源:公司需要實現(xiàn)透明狀態(tài)欄,狀態(tài)欄顏色隨著頁面切換而改變,虛擬按鍵不變!
OK,拿到這個需求的時候,so easy !打開github!搜索statusbar,選了這3k的statusbar! 導(dǎo)入項目后,

  • 在4.4上跑起來完美實現(xiàn)了!
  • 再拿到6.0的機子上跑,什么鬼:虛擬按鍵怎么把底部按鈕給擋?。?br> 不能忍!?。?!
    解決方式 :
    • 按照作者readme 修改!還是不行!修改源碼,不行?。。牟灰?!

    • 開啟google ,baidu模式!一堆的說改這改那的,實踐后,我內(nèi)心是奔潰的!還是不行!
      最后在guolin大俠這里找到方法:

      if (hasFocus && Build.VERSION.SDK_INT >= 19) {
        View decorView = getWindow().getDecorView();
        decorView.setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_LAYOUT_STABLE
            | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN
            | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_FULLSCREEN
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);
       }
      

既然需求是只變狀態(tài)欄(以下方式api必須>=21)

  • 先清理掉:
    window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

  • 然后保留全屏的:
    window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);

  • 接著添加flag:
    window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
    這樣我們才能對狀態(tài)欄設(shè)置顏色
    最后把調(diào)用window.setStatusBarColor(Color.TRANSPARENT);設(shè)置透明即可

對于4.4 由于沒有window.setStatusBarColor(Color.TRANSPARENT);

所以只需要:window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);

最后形成一個方法:

public static void setTranslucentStatus(Activity activity){
    Window window = activity.getWindow();
    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
      window.clearFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        window.getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN | View.SYSTEM_UI_FLAG_LAYOUT_STABLE);
        window.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS);
        window.setStatusBarColor(Color.TRANSPARENT);
    }else if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.KITKAT){
        window.addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
    }
} 

然后在需要的activity或者baseActivity的

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Utils.setTranslucentStatus(this);
}

一定要在setContentView(R.layout.activity_main); 之前!調(diào)用

此方法,只對狀態(tài)欄進行全屏,透明化處理,并沒有涉及虛擬按鍵!有需要的朋友可以拿去!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

推薦閱讀更多精彩內(nèi)容