android DialogFragment 底部弹出时虚拟导航栏变黑效果处理解决方案

2,992 阅读1分钟

1. styles文件中新增dialog

    <style name="NoWiredStrapInNavigationBar" parent="@style/Theme.AppCompat.Dialog">
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowFullscreen">true</item>
    </style>

说明:windowIsFloating必须配置为false。这样就能让底部导航变成正常的颜色

2. dialogFragment中使用新增style

    @Override
    public int getTheme() {
        return R.style.NoWiredStrapInNavigationBar;
    }

3. 其他样式处理

        getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);
        Window window = getDialog().getWindow();
        window.setGravity(setGravity());
        window.setLayout((int) getDialogWidth(), ViewGroup.LayoutParams.MATCH_PARENT);
        WindowManager.LayoutParams windowParams = window.getAttributes();
        windowParams.dimAmount = 0.6f;
        window.setAttributes(windowParams);

注意:其中第4句setLayout高度必须设置为ViewGroup.LayoutParams.MATCH_PARENT否则会造成底部弹出的dialog弹跳闪动一下再回到正确位置。

其他

  1. 如果有深色适配需要手动配置底部导航颜色 window.setNavigationBarColor(ContextCompat.getColor(getContext(),R.color.navigationBarColor));