实现透明状态栏的方法网上有很多,但是基本都是对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去实现