Android 通过样式从应用程序设置更改对话框背景颜色

Android change Dialog background color from app settings via styles

我想更改我的 PreferenceActivity 的默认对话框背景颜色(在我们从设置列表中选择选项的位置打开的对话框)。现在 Dialog 的背景总是白色的,尽管我改变了我的风格。我正在尝试像在我的代码中那样解决这个问题,但它不起作用。这是我的浅色和深色风格。

styles.xml

<style name="Theme_ObjectMeasure_Light" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:textColor">#000000</item>
    <item name="android:textColorPrimary">#000000</item>
    <item name="android:textColorSecondary">@color/textColorSecondary</item>
    <item name="alertDialogTheme">@style/DialogThemeLight</item>
    <item name="dialogTheme">@style/DialogThemeLight</item>

    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:windowBackground">@color/bottom_nav_view_bg_night</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <item name="actionBarTheme">@style/Theme.MaterialComponents.DayNight</item>
    <item name="android:actionBarStyle">@style/ThemeActionBar</item>
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/ThemeActionBar</item>
    <item name="windowActionBarOverlay">true</item>
</style>

<style name="Theme_ObjectMeasure_Dark" parent="Theme.MaterialComponents.Light.NoActionBar">
    <item name="android:textColor">#ffffff</item>
    <item name="android:textColorPrimary">#ffffff</item>
    <item name="android:textColorSecondary">@color/textColorSecondary</item>
    <item name="alertDialogTheme">@style/DialogThemeDark</item>
    <item name="dialogTheme">@style/DialogThemeDark</item>

    <item name="android:windowAnimationStyle">@null</item>
    <item name="android:windowBackground">@color/bottom_nav_view_bg_night</item>
    <!-- Status bar color. -->
    <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
    <item name="actionBarTheme">@style/Theme.MaterialComponents.DayNight</item>
    <item name="android:actionBarStyle">@style/ThemeActionBar</item>
    <item name="android:windowActionBarOverlay">true</item>
    <!-- Support library compatibility -->
    <item name="actionBarStyle">@style/ThemeActionBar</item>
    <item name="windowActionBarOverlay">true</item>
</style>

<style name="DialogThemeLight" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@color/bg_light</item>
</style>

<style name="DialogThemeDark" parent="@android:style/Theme.Dialog">
    <item name="android:windowBackground">@color/bg_dark</item>
</style>

colors.xml

<resources>
    (...)
    <color name="bg_light">#E0E0E0</color>
    <color name="bg_dark">#424242</color>
</resources>

我读到在较新的设备上应该使用带有 android: 前缀的属性或使用 AppCompat 主题作为父主题以摆脱与此前缀的混淆。