记一次dialog覆盖在状态栏和导航栏上方的解决方案:
private void setStatusBar(){
//按空白处不能取消
setCanceledOnTouchOutside(false);
Window window = getWindow();
window.setGravity(Gravity.CENTER);
//设置window背景,默认的背景会有Padding值,不能全屏。当然不一定要是透明,你可以设置其他背景,替换默认的背景即可。
window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));
View decorView = window.getDecorView();
//两个 flag 要结合使用,表示让应用的主体内容占用系统状态栏的空间
decorView.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);
//设置导航栏颜
window.setNavigationBarColor(Color.TRANSPARENT);
//内容扩展到导航栏
window.setType(2026);
}
@Override
public void show() {
super.show();
Window win = getWindow();
// 设置全屏,要设置在show的后面
WindowManager.LayoutParams layoutParams = win.getAttributes();
layoutParams.width = ViewGroup.LayoutParams.MATCH_PARENT;
layoutParams.height = ViewGroup.LayoutParams.MATCH_PARENT;
win.setAttributes(layoutParams);
}
style.xml中(代码中和xml中有的重复设置了,目前先这样写,后续调整):
<style name="FullscreenDialog" parent="android:style/Theme.Dialog">
<item name="android:windowFrame">@null</item>
<item name="android:windowNoTitle">true</item>
<item name="android:windowIsFloating">true</item>
<item name="android:windowContentOverlay">@null</item>
<item name="android:windowBackground">@android:color/transparent</item>
<item name="android:windowTranslucentStatus">true</item>
<item name="android:windowTranslucentNavigation">true</item>
<item name="android:statusBarColor">@android:color/transparent</item>
<item name="android:fitsSystemWindows">true</item>
</style>