Цвета строки состояния с использованием темы DayNight в android - PullRequest
1 голос
/ 23 марта 2020

Я применяю тему 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>

Я попытался добавить параметр @ color / primary Но я все еще Получите то же самое, строка состояния белая, а текст, также из строки состояния, также белый.

Как отобразить белую строку состояния с темными буквами в Светлой теме и наоборот в темной теме?

Заранее спасибо.

1 Ответ

2 голосов
/ 03 апреля 2020

Вы можете использовать isLightTheme attr:

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

Добавить его в свои темы. xml примерно так:

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

Значение, возвращаемое ?attr/isLightTheme, обрабатывается системой. Вы также можете получить текущее установленное значение с помощью:

AppCompatDelegate.getDefaultNightMode();

// or

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

Вместе с android:statusBarColor вы можете автоматически контролировать свою строку состояния как в светлой, так и в темной тематике.

Кроме того, у меня было намного лучше удачи, используя parent="Theme.MaterialComponents.DayNight" для моей базовой темы при использовании этого значения attr.

...