Я пытаюсь создать темную тему для своего приложения. Пока все хорошо, но когда я закрываю приложение, оно не запоминает установленную темную тему.
Я меняю темную тему следующим образом:
public static void setDarkMode(Object value, SharedPreferences preferences) {
SharedPreferences.Editor editor = preferences.edit();
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
if (value.equals("on")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
editor.putString("dark_theme", (String) value);
editor.apply();
} else if (value.equals("off")) {
Log.i(TAG, "off");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
editor.putString("dark_theme", (String) value);
editor.apply();
} else if (value.equals("follow_system")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
editor.putString("dark_theme", (String) value);
editor.apply();
} else {
Log.e(TAG, "Dark Mode Preferences android Q+ did not give the right value");
}
} else {
if ((boolean) value) {
Log.i(TAG, "Set night mode on");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
editor.putBoolean("dark_theme", (boolean) value);
editor.apply();
} else {
Log.i(TAG, "set night mode off");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
editor.putBoolean("dark_theme", (boolean) value);
editor.apply();
}
}
}
И в MainActivity я пытаюсь установить режим, вызывая метод setDayNightMode()
, но он всегда устанавливает MODE_NIGHT_FOLLOW_SYSTEM
.
private void setDayNightMode() {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
Log.i(TAG, "Build version >= Q");
String setting = settings.getString("dark_theme", "follow_system");
if (setting.equals(getResources().getString(R.string.on))) {
Log.i(TAG, "night mode on");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else if (setting.equals(getResources().getString(R.string.off))) {
Log.i(TAG, "Night mode off");
AppCompatDelegate.setDefaultNightMode((AppCompatDelegate.MODE_NIGHT_NO));
} else if (setting.equals(getResources().getString(R.string.follow_sys))) {
Log.i(TAG, "Night mode follow system");
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM);
}
} else {
Boolean setting = settings.getBoolean("dark_theme", false);
if(setting) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
} else if (!setting) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
}
}
}
Кажется, что SharedPreferences settings
, который определяется как this.getSharedPreferences(getResources().getString(R.string.dark_theme_preference_key), MODE_PRIVATE)
, всегда вернуть значение follow_system
. Вы знаете, как запомнить темный режим в приложении?