【问题标题】:Set color for Navigation Bar on DialogFragment为 DialogFragment 上的导航栏设置颜色
【发布时间】:2020-09-12 15:49:46
【问题描述】:

我有带有黑色导航栏的夜间主题,在 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 上测试它。
那么在对话框片段上自定义导航栏颜色的方法是什么?或者,如果有办法在显示对话框片段时不更改导航栏颜色并使用显示此对话框的活动的颜色,则更好。

【问题讨论】:

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


    【解决方案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);
            }
    }
    

    【讨论】:

      【解决方案2】:

      这对我有用:

      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,

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2018-10-25
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多