android - 为 DialogFragment 上的导航栏设置颜色

标签 android android-styles android-dialogfragment android-night-mode

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

<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);
}

结果是白色的:
enter image description here

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

最佳答案

这对我有用:

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,
enter image description here

关于android - 为 DialogFragment 上的导航栏设置颜色,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/62012035/

相关文章:

android - windowSoftInputMode 在 Android M 中没有效果

java.lang.IllegalStateException : Could not execute method of the activity error after changing package name

android - ActivityTestRule.getActivity 在 Before 方法中返回 null

java - 如何运行patternview两次以使用线程更改密码?

android - 如何以编程方式获取 ?attr/value

android - 透明状态栏不适用于 windowTranslucentNavigation ="false"

android - 从 Android 中的 DatePickerFragment 获取日期对象

android - 升级到 Support Library v21 后,ActionBar aka Toolbar 为黑色

Android 支持警报对话框更改标题背景颜色?

java - 单击“确定”时 EditTexts 始终为空