實作透明狀态欄的方法網上有很多,但是基本都是對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去實作