我正在努力在我的应用程序中实现暗模式。现在我尝试使用PreferenceFragment
嵌套在AppCompatActivity
. 该应用程序的行为是这样的,从作为默认值的浅色主题开始:
- 如果我在 ListPreference 中选择“深色”,则首选项的摘要会更改,但 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;
}
});
到目前为止我尝试了什么:
- 声明
getActivity.recreate()
前调用return true;
- 在短暂
getActivity.recreate()
延迟后使用Handler
- 当布尔值为 true时调用父 Activity
this.recreate()
的方法onResume()
changedDesignSetting
我感谢进一步的帮助。