天天看點

Android 透明(沉浸)狀态欄之Dialog和PopupWindow

實作透明狀态欄的方法網上有很多,但是基本都是對Activity的,沒有Dialog、DialogFragment和PopupWindow的,這樣就會出現一個對話框後,狀态欄變的不協調。

1.Dialog和DialogFragment在設定style的時候api19及以上使用windowTranslucentStatus=true,api21及以上的時候使用windowTranslucentNavigation=true, statusBarColor設定透明

2.PopupWindow需要調用setClippingEnabled(false)這個方法

我使用的透明狀态欄代碼

private void setTranslucentStatus() {
        if(Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {//5.0 全透明實作
            Window window = getWindow();
            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 {//4.4 全透明狀态欄
            getWindow().addFlags(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS);
        }
    }
           

Ps:

1.當透明狀态欄時,我是設定Toolbar的padding為狀态欄高度,這個方法有個缺陷是當标題欄是白色的時候,想把狀态欄背景那一塊設成其它底色就很不好弄了,不如在Toolbar上弄個View來的友善。

2.感覺DialogFragment坑有點多,感覺不如自己用Fragment去實作