【发布时间】:2019-08-23 13:01:42
【问题描述】:
我正在努力在我的应用中实现暗模式。现在我尝试使用嵌套在AppCompatActivity 中的PreferenceFragment 在明暗之间切换 UI 模式。应用程序的行为是这样的,从作为默认值的浅色主题开始:
- 如果我在 ListPreference 中选择“dark”,则 偏好会发生变化,但 UI 在此活动和所有其他活动中保持轻松。
- 如果我再次选择“深色”,活动将切换到深色主题,以及后台堆栈中的其他活动。
- 当我想切换回浅色主题时,反过来也会发生同样的事情。
所以基本上一切正常,但您必须在 ListPreference 中选择所需的值两次。 ListPreference 的代码:
final Preference listPreferenceDesign = findPreference(PREF_DESIGN);
listPreferenceDesign.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object o) {
if (((ListPreference) preference).getValue().equals("light")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO);
} else if (((ListPreference) preference).getValue().equals("dark")) {
AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES);
}
return true;
}
});
到目前为止我尝试了什么:
- 在
return true;声明之前调用getActivity.recreate() - 在短暂延迟后使用
Handler致电getActivity.recreate() - 当布尔值
changedDesignSetting为真时,在父 Activity 的onResume()方法中调用this.recreate()
感谢您的进一步帮助。
【问题讨论】:
标签: android preferencefragment android-night-mode android-dark-theme