Я применил темный режим, используя экран настроек следующим образом:
<ListPreference
app:defaultValue="default"
app:entries="@array/themes_labels"
app:entryValues="@array/themes_color"
app:key="theme"
app:title="@string/Theme"
app:useSimpleSummaryProvider="true"/>
</PreferenceCategory>
, а массивы определены как
<resources>
<array name="themes_labels">
<item>"Default"</item>
<item>"Light"</item>
<item>"Dark"</item>
</array>
<string-array name="themes_color">
<item>"Default"</item>
<item>"Light"</item>
<item>"Dark"</item>
</string-array>
</resources>
Теперь, в MainActivity
onCreate, я хочу измените тему на:
@Override
protected void onCreate(Bundle savedInstanceState) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
}
SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this);
// AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
String theme = sharedPref.getString("theme", "Default");
// Toast.makeText(this, theme, Toast.LENGTH_LONG).show();
if (theme.equals("Dark")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else if (theme.equals("Light")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
} else {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
} else {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_AUTO_BATTERY);
}
}
Теперь проблема в том, что при Light
или по умолчанию (даже если default
равно dark mode
, например, включено сохранение батареи), все в порядке. Но, если выбран тёмный режим, то я сталкиваюсь со многими проблемами, например, не применяется фрагмент или даже приводит к cra sh в некоторых случаях.
Я очень плохо знаком с android и не понимаю, почему это происходит. Пожалуйста, помогите.
Пытается решить эту проблему здесь