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

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

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

    • 開啟google ,baidu模式!一堆的說改這改那的,實(shí)踐后,我內(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);
    這樣我們才能對(duì)狀態(tài)欄設(shè)置顏色
    最后把調(diào)用window.setStatusBarColor(Color.TRANSPARENT);設(shè)置透明即可

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

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

最后形成一個(gè)方法:

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)用

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

最后編輯于
?著作權(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)容