在DialogFragment上设置导航栏颜色

4
我使用黑色导航栏的夜间主题,样式设置为应用程序主题参数。
<item name="android:navigationBarColor">@color/color_navbar</item>
<item name="android:windowLightNavigationBar" tools:targetApi="o_mr1">false</item>

enter image description here

但是当我显示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上进行了测试。
那么如何自定义对话框片段上的导航栏颜色呢?或者更好的方法是,当对话框片段显示时不改变导航栏颜色,并使用从显示此对话框的活动中获取的颜色。

2个回答

8
这对我有效:
window?.addFlags(WindowManager.LayoutParams.FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS)
window?.navigationBarColor = ContextCompat.getColor(activity, R.color.navigation_bar_color)

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

enter image description here


真的是一个很难的问题,但是答案很好,需要更多的练习:/ 谢谢伙计 - Mohammad Elsayed
我尝试了这个,它确实将导航栏从白色变为灰色,但我想将其设置为紫色...所以我不知道灰色从哪里来。 - ProjectDelta

2
我找到了解决方案。只需将对话框高度从match_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);
        }
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接