在 android 中使用 DayNight 主题的状态栏的颜色

Ser*_*o76 5 android android-dark-theme theme-daynight

我正在将主题 Theme.AppCompat.DayNight.NoActionBar 应用于我的应用程序。在浅色主题中,我希望状态栏为白色,而在深色主题中,我希望状态栏为黑色。

我不能让状态栏变成白色,字母变成黑色,反之亦然。

这是我的风格:

 <style name="AppTheme.Base" parent="Theme.AppCompat.DayNight.NoActionBar">
        <item name="colorPrimary">@color/primary</item>
        <item name="colorPrimaryDark">@color/primary_dark</item>
        <item name="android:windowDrawsSystemBarBackgrounds">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="windowActionBar">false</item>
        <item name="colorControlNormal">@color/primary_dark</item>
        <item name="colorControlHighlight">@color/primary_dark</item>
        <item name="android:textColorPrimary">@color/letter_medium_emphasis</item>
        <item name="android:textColorSecondary">@color/letter_high_emphasis</item>
    </style>
Run Code Online (Sandbox Code Playgroud)

这是我的颜色文件:

<resources>
    <color name="primary">#ffffff</color>
    <color name="primary_dark">#0336ff</color>
    <color name="letter_high_emphasis">#de000000</color>
    <color name="letter_medium_emphasis">#99000000</color>
    <color name="letter_medium_disabled">#61000000</color>
</resources>
Run Code Online (Sandbox Code Playgroud)

我尝试添加参数 @color/primary 但我仍然得到同样的结果,状态栏是白色的,同样来自状态栏的文本也是白色的。

在浅色主题中显示带有深色字母的白色状态栏以及在深色主题中反之的方式是什么?

提前致谢。

Cza*_*att 16

您可以使用isLightThemeattr:

https://developer.android.com/reference/android/R.attr#isLightTheme

像这样将它添加到你的 themes.xml 中:

<item name="android:windowLightStatusBar">?attr/isLightTheme</item>
Run Code Online (Sandbox Code Playgroud)

返回的值?attr/isLightTheme由系统处理。您还可以通过以下方式获取当前设置的值:

AppCompatDelegate.getDefaultNightMode();
Run Code Online (Sandbox Code Playgroud)

或者

Configuration config = getResources().getConfiguration();
int nightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;
Run Code Online (Sandbox Code Playgroud)

android:statusBarColor您一起可以自动控制浅色和深色主题的状态栏。

此外,parent="Theme.MaterialComponents.DayNight"当使用这个 attr 值时,我的基本主题的运气要好得多。