Конфликт темы приложения и темного режима на телефоне
Возникла проблема с темами в приложении. Если быть точнее, когда я запускаю свое приложение на устройстве (Xiaomi), приложение удачно работает и приложение оформлено правильно, в соответствии с темой и цветами, которые я задал. Но стоит мне на устройстве выбрать режим: "Темный режим" или ("Режим заката" на других устройствах), как все цвета приложения неестественно искажаются. Какие-то объекты затемняются, как например (Actionbar, Основное Activity). Некоторые наоборот светлеют: текст ListView, Окно WebView. Я к сожалению не могу найти, как исправить эту проблему. Можно ли как-то например отдельно прописать тему для таких режимов? Заранее благодарен за любую помощь!
P.S: AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); почему-то не работает в связке с Theme.MaterialComponents.DayNight.
themes:
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Slovar" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
<item name="colorOnPrimary">@color/navigationBarColor</item>
<item name="colorSecondary">@color/colorAccent</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
</style>
<style name="Theme.Slovar.NoActionBar">
<item name="windowActionBar">false</item>
<item name="windowNoTitle">true</item>
</style>
<style name="Theme.Slovar.AppBarOverlay" parent="ThemeOverlay.AppCompat.Dark.ActionBar" />
<style name="Theme.Slovar.PopupOverlay" parent="ThemeOverlay.AppCompat.Light" />
themes (night):
<resources xmlns:tools="http://schemas.android.com/tools">
<style name="Theme.Slovar" parent="Theme.MaterialComponents.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryVariant">@color/colorPrimaryDark</item>
<item name="colorOnPrimary">@color/navigationBarColor</item>
<item name="colorSecondary">@color/colorAccent</item>
<item name="colorSecondaryVariant">@color/teal_700</item>
<item name="colorOnSecondary">@color/black</item>
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item>
</style>
</resources>
colors:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="colorPrimary">#ECC34B</color>
<color name="colorPrimaryDark">#E1AA04</color>
<color name="textColorPrimary">#FFFFFF</color>
<color name="windowBackground">#FFFFFF</color>
<color name="navigationBarColor">#000000</color>
<color name="colorAccent">#B16F0C</color>
<color name="black">#FF000000</color>
<color name="white">#FFFFFFFF</color>
</resources>
Manifest:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.slovar">
<uses-permission android:name="android.permission.INTERNET" />
<application
android:allowBackup="true"
android:icon="@drawable/icon"
android:label="@string/app_name"
android:supportsRtl="true"
android:windowSoftInputMode="stateHidden">
<activity
android:name="@string/1_name"
android:theme="@style/Theme.Slovar" />
<activity
android:name="@string/2_name" //WebView
android:theme="@style/Theme.Slovar" />
<activity
android:name="@string/3_name"
android:theme="@style/Theme.Slovar"
android:label="@string/app_name" />
<activity
android:name="@string/5_name"
android:theme="@style/Theme.Slovar"/>
<activity
android:name=".MainActivity" //Скрытая активность от пользователей. Здесь отдельная тема.
android:theme="@style/Theme.AppCompat.Translucent">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Ответы (1 шт):
Подытожив все комментарии, составлю ответ и мое решение. Могу сказать, что строка AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); у меня работала по причине как раз отсутствия <item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> в моей теме.
- Для начала надо перевести тему приложения на DayNight. Например, как у меня:
<style name="Theme.Slovar" parent="Theme.MaterialComponents.DayNight.DarkActionBar"> - Далее надо прописать в файле themes.xml для своей темы:
<item name="android:statusBarColor" tools:targetApi="l">?attr/colorPrimaryVariant</item> - И заключительным шагом будет являться добавление в свою активность, которая оформлена нашей темой, этой строки:
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);, которая принудительно включит светлый режим.
Проблема решилась этими 3-мя шагами. Благодарю всех за вашу помощь!