4

我有带有黑色导航栏的夜间主题,样式为 App Theme 参数

<item name="android:navigationBarColor">@color/color_navbar</item>
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>

在此处输入图像描述

但是当我显示 DialogFragment 时,导航栏颜色变为白色。它在晚上严重打击眼睛。
我尝试设置 dialogfragment 样式,但对我没有帮助:

public void onCreate(Bundle savedInstanceState) {
    setStyle(DialogFragment.STYLE_NO_TITLE, R.style.Theme_AppCompat_DayNight_Dialog);
    super.onCreate(savedInstanceState);
}

结果是白色的:
在此处输入图像描述

我的基本应用程序样式是Theme.MaterialComponents.DayNight.NoActionBar
我在 android Q 上测试它。
那么在对话框片段上自定义导航栏颜色的方法是什么?或者,如果有办法在显示对话框片段时不更改导航栏颜色并使用显示此对话框的活动的颜色,则更好。

4

2 回答 2

1

我找到了解决方案。只需将对话框高度从 math_parent 替换为 wrap_content,android 就会自动在 dialogfragment 中使用导航栏的应用配色方案。

@Override
public void onStart() {
        super.onStart();
        if (getDialog() != null) {
            int width = ViewGroup.LayoutParams.MATCH_PARENT;
            int height = ViewGroup.LayoutParams.WRAP_CONTENT;//previously I used MATCH_PARENT here 
            getDialog().getWindow().setLayout(width, height);
            getDialog().setOnKeyListener(onKeyListener);
        }
}
于 2020-06-09T15:39:17.373 回答
1

这对我有用:

window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window?.navigationBarColor = ContextCompat.getColor(activity, R.color.navigation_bar_color)

在设置 navigationBarColor 之前,您需要添加标志。FLAG_DRAW_SYSTEM_BAR_BACKGROUNDS,

在此处输入图像描述

于 2021-03-01T07:39:04.743 回答