Dialog默认无法全屏的原因

2020-11-20  本文已影响0人  醉流光

参考链接:https://blog.csdn.net/sydMobile/article/details/83588708?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-1.control

记一次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>

上一篇下一篇

猜你喜欢

热点阅读