Android如何设置BottomSheetDialogFragment与系统导航栏颜色相同?

问题描述 投票:0回答:2

我试图使我的 BottomSheetDialogFragment 和底部导航颜色为相同的颜色。设置导航栏的颜色效果很好,因为我将其设置为白色,但按钮的颜色仍然是白色,如图所示。这就是我的风格:

<style name="AppBottomSheetDialogTheme" parent="Theme.Design.BottomSheetDialog">
        <item name="bottomSheetStyle">@style/AppModalStyle</item>
        <item name="android:windowIsFloating">false</item>
        <item name="android:windowTranslucentStatus">false</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:navigationBarColor">@color/white</item>

        <item name="android:windowLightStatusBar">true</item>
    </style>

    <style name="AppModalStyle" parent="Widget.Design.BottomSheet.Modal">
        <item name="android:background">@drawable/ic_dialog_background</item>
        <item name="behavior_peekHeight">300dp</item>
    </style>

theme.xml
    <style name="Theme.MyApp" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Primary brand color. -->
        <item name="colorPrimary">@color/purple_500</item>
        <item name="colorPrimaryVariant">@color/purple_700</item>
        <item name="android:colorPrimary">#ffffff</item>
        <item name="windowActionBar">false</item>
        <item name="windowNoTitle">true</item>
        <item name="android:actionBarSize">0dp</item>
        <item name="bottomSheetDialogTheme">@style/AppBottomSheetDialogTheme</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:navigationBarColor">@color/screen_background_color</item>
        <!-- Secondary brand color. -->
        <item name="colorSecondary">@color/teal_200</item>
        <item name="colorSecondaryVariant">@color/teal_700</item>
        <item name="colorOnSecondary">@color/black</item>
    </style>

活动主要:

        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {

            val nightModeFlags: Int = resources.configuration.uiMode and
                    Configuration.UI_MODE_NIGHT_MASK
            when (nightModeFlags) {
                Configuration.UI_MODE_NIGHT_YES -> {
                }
                Configuration.UI_MODE_NIGHT_NO -> {
                    val decorView = window.decorView
                    decorView.systemUiVisibility = FLAG_DRAWS_SYSTEM_BAR_BACKGROUNDS or
                            SYSTEM_UI_FLAG_LIGHT_NAVIGATION_BAR or View.SYSTEM_UI_FLAG_LIGHT_STATUS_BAR
                }
                Configuration.UI_MODE_NIGHT_UNDEFINED -> {
                }
            }
        }

        window?.navigationBarColor = resources.getColor(com.imediavan.common.R.color.screen_background_color)
        window?.statusBarColor = resources.getColor(com.imediavan.common.R.color.screen_background_color)

属性 android:windowLightStatusBar 在 Activity 上运行良好,但对于对话框则不然。

android
2个回答
0
投票

我认为你想构建带有圆角的底部工作表对话框,在显示底部工作表后,这个问题会像这样发生在你的底部工作表周围。

1 - 像这样在 theme.xml 中构建样式

<style name="CustomShapeAppearanceBottomSheetDialog" parent="">
        <item name="cornerFamily">rounded</item>
        <item name="cornerSizeTopRight">16dp</item>
        <item name="cornerSizeTopLeft">16dp</item>
        <item name="cornerSizeBottomRight">0dp</item>
        <item name="cornerSizeBottomLeft">0dp</item>
    </style>

2 - 在 theme.xml 中构建另一种样式,如下所示

<style name="CustomBottomSheet" parent="Widget.MaterialComponents.BottomSheet">
        <item name="shapeAppearanceOverlay">@style/CustomShapeAppearanceBottomSheetDialog</item>
    </style>

3 - 构建另一种风格,就像这个一样

  <style name="CustomBottomSheetDialog" parent="@style/ThemeOverlay.MaterialComponents.BottomSheetDialog">
        <item name="bottomSheetStyle">@style/CustomBottomSheet</item>
    </style>

4 - 作为最后一步,将此行添加到 theme.xml 中的基本应用程序主题中

 <item name="bottomSheetDialogTheme">@style/CustomBottomSheetDialog</item>

100%为我工作:))))))


0
投票

我也遇到同样的问题,请问你找到解决办法了吗?

© www.soinside.com 2019 - 2024. All rights reserved.