7

我正在将主题 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>

这是我的颜色文件:

<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>

我已经尝试添加参数 <item name="android:statusBarColor">@color/primary</item>
但我仍然得到相同的东西,状态栏是白色的,状态栏文本也是白色的。

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

4

1 回答 1

23

您可以使用isLightThemeattr:

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

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

<item name="android:windowLightStatusBar">?attr/isLightTheme</item>

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

AppCompatDelegate.getDefaultNightMode();

或者

Configuration config = getResources().getConfiguration();
int nightMode = configuration.uiMode & Configuration.UI_MODE_NIGHT_MASK;

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

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

于 2020-04-03T17:52:44.033 回答