Материал Темная тема не применяется должным образом - PullRequest
0 голосов
/ 12 января 2020

У меня есть четыре темы в моем приложении, как показано ниже

  • Theme.AppName: тема, от которой унаследована каждая тема
  • Theme.AppTheme.Launcher: показывает экран средства запуска до создания действия , набор применяется в манифестах
  • Theme.AppName.Green
  • Theme.AppName.Dark

AndroidManifest.xml

<application
        ...
        android:theme="@style/Theme.AppName.Green"
        ...>
        <activity
            ...
            android:theme="@style/Theme.AppName.Launcher"
            ...
            >
            ...
        </activity>
        ...
</application>

values/themes.xml

<!-- Base theme -->
<style name="Theme.AppName" parent="Theme.MaterialComponents.DayNight.NoActionBar">
    <!-- System / Platform attributes -->
    <item name="android:windowBackground">?android:colorBackground</item>


    <item name="colorPrimaryDark">?colorPrimaryVariant</item>
    <item name="colorAccent">?colorSecondary</item>
</style>

<!-- Launcher theme -->
<style name="Theme.AppName.Launcher" parent="Theme.AppName">
    <item name="android:windowBackground">@drawable/splash_background</item>
    <item name="colorPrimaryDark">@color/app_green_500</item>
    <item name="windowActionBar">false</item>
    <item name="windowNoTitle">true</item>
    <item name="android:statusBarColor">@color/app_green_700</item>
</style>

<!-- Green theme. -->
<style name="Theme.AppName.Green" parent="Theme.MaterialComponents.DayNight.NoActionBar">

    <!-- Colors -->
    <item name="colorPrimary">@color/app_green_500</item>
    <item name="colorPrimaryVariant">@color/app_green_700</item>

    <item name="colorSecondary">@color/app_amber_500</item>
    <item name="colorSecondaryVariant">@color/app_amber_700</item>

    <item name="android:colorBackground">@color/app_white</item>
    <item name="colorSurface">@color/app_white</item>
    <item name="colorError">@color/app_error</item>

    <item name="colorOnPrimary">@color/app_white</item>
    <item name="colorOnSecondary">@color/app_white</item>
    <item name="colorOnBackground">@color/app_black</item>
    <item name="colorOnSurface">@color/app_black</item>
    <item name="colorOnError">@color/app_white</item>

    <item name="android:statusBarColor">@color/app_green_700</item>
    ...
</style>

values-night/themes.xml

<style name="Theme.AppName.Dark" parent="Theme.AppName">

    <!--  Colors -->
    <item name="colorPrimary">@color/app_green_200</item>
    <item name="colorPrimaryVariant">@color/app_green_700</item>
    <item name="colorSecondary">@color/app_amber_200</item>

    <item name="colorSurface">@color/app_black_grey</item>
    <item name="android:colorBackground">@color/app_black_grey</item>
    <item name="android:windowBackground">@color/app_black_grey</item>
 </style>

MainActivity.kt

override fun onCreate(savedInstanceState: Bundle?) {

    // reset to Green theme after using the Launcher theme
    setTheme(R.style.Theme_AppName_Green)
    ...
}

Проблемы, с которыми сталкиваются:

В Уровень API 23 при выполнении следующих

// in MainActivity onCreate 
// setTheme(R.style.Theme_AppName_Green)
setTheme(R.style.Theme_AppName_Dark)
  • тем Launcher фон окна отображается на заднем плане
  • Цвет FAB по умолчанию темный режим colorSecondary .
  • Нижняя навигация белая
  • Нижняя навигация Цвет выбранного элемента по умолчанию темный режим primaryColor .

Если я сделаю следующее вместо

// in MainActivity onCreate
// setTheme(R.style.Theme_AppName_Green)
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES)
  • Фон окна тем запуска все еще отображается
  • FAB цвет по умолчанию темный режим colorSecondary .
  • Нижняя навигация черная (окей)
  • Нижняя навигация: цвет выбранного элемента - темный режим по умолчанию primaryColor .

In API-уровень 29

Когда установлен системный темный режим

  • Все цвета выглядят так же, как зеленая тема, кроме текста белого цвета.

Если я заставлю использовать темную тему, как показано ниже

// in MainActivity onCreate
// setTheme(R.style.Theme_AppName_Green)
setTheme(R.style.Theme_AppName_Dark)

Темная тема появится, как и ожидалось.


Итак, чего я хочу добиться, это

  • Когда на уровне API ниже 29, я хочу разрешить пользователю изменять тему приложения на темную тему.
  • Когда на уровне API 29 я хочу, чтобы приложение использовало темную тему, когда установлена ​​темная тема на системном уровне.

Я пробовал разные вещи, но не могу заставить работать так, как я хочу, пожалуйста, помогите

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...