我有一个应用程序,用户可以从
我知道每次选择主题时都可以调用
在我的PreferenceActivity的onCreate()方法中调用了setTheme()方法。
PreferenceActivity
中选择几种不同的颜色主题,从而改变整个应用程序的主题/颜色。但是在PreferenceActivity
中选择的更改不会立即应用。只有当用户重新进入PreferenceActivity
时才应用更改。我知道每次选择主题时都可以调用
recreate()
,但我想知道是否存在一种更好的解决方案,而不必重新创建整个活动。
以下是当前工作方式的视频:https://www.youtube.com/watch?v=oU8xIUi_48A
这是我在PreferenceActivity中设置首选项列表中选定值的位置:
@Override
public void onCreate(Bundle savedInstanceState) {
setTheme();
themecolorList.setOnPreferenceChangeListener(new Preference.OnPreferenceChangeListener() {
@Override
public boolean onPreferenceChange(Preference preference, Object newValue) {
switch (themecolorList.getValue()) {
case "grey":
themecolorList.getEditor().putString("grey", "green").apply();
break;
case "green":
themecolorList.getEditor().putString("green", "green").apply();
setTheme(R.style.AppTheme_default);
break;
case "blue":
themecolorList.getEditor().putString("blue", "green").apply();
break;
case "yellow":
themecolorList.getEditor().putString("yellow", "green").apply();
break;
case "red":
themecolorList.getEditor().putString("red", "green").apply();
break;
case "pink":
themecolorList.getEditor().putString("pink", "green").apply();
break;
default:
themecolorList.getEditor().putString("green", "green").apply();
break;
}
recreate();
return true;
}
});
}
在我的PreferenceActivity的onCreate()方法中调用了setTheme()方法。
private void setTheme() {
SharedPreferences sharedPreferences = PreferenceManager.getDefaultSharedPreferences(this);
switch (sharedPreferences.getString("THEME_KEY", "green")) {
case "grey":
setTheme(R.style.AppTheme_Grey);
break;
case "green":
setTheme(R.style.AppTheme_default);
break;
case "blue":
setTheme(R.style.AppTheme_Blue);
break;
case "yellow":
setTheme(R.style.AppTheme_Yellow);
break;
case "red":
setTheme(R.style.AppTheme_Red);
break;
case "pink":
setTheme(R.style.AppTheme_Pink);
break;
default:
getApplication().setTheme(R.style.AppTheme_default);
setTheme(R.style.AppTheme_default);
break;
}
}