У меня есть четыре темы в моем приложении, как показано ниже
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 я хочу, чтобы приложение использовало темную тему, когда установлена темная тема на системном уровне.
Я пробовал разные вещи, но не могу заставить работать так, как я хочу, пожалуйста, помогите