android - 保存在首选项中选择的主题
问题描述
从设置菜单切换应用程序的主题不起作用。从“else”块开始一个主题
SharedPreferences 共享首选项;
final String CURRENT_THEME = "CURRENT_THEME";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
String theme = sharedPrefs.getString("CURRENT_THEME",null);
if(theme != null && theme.equals("light"))
{
setTheme(R.style.AppThemeLight);
}
else
{
setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.lightTheme:
SharedPreferences.Editor editor1 = sharedPrefs.edit();
editor1.putString(CURRENT_THEME, "light");
editor1.commit();
return true;
case R.id.darkTheme:
SharedPreferences.Editor editor2 = sharedPrefs.edit();
editor2.putString(CURRENT_THEME, "dark");
editor2.commit();
return true;}
解决方案
从选项菜单中选择主题后更改主题。
并使用editor.apply()
而不是editor.commit()
final String CURRENT_THEME = "CURRENT_THEME";
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
sharedPrefs = PreferenceManager.getDefaultSharedPreferences(this);
changeTheme();
}
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
case R.id.lightTheme:
SharedPreferences.Editor editor1 = sharedPrefs.edit();
editor1.putString(CURRENT_THEME, "light");
editor1.apply();
changeTheme();
return true;
case R.id.darkTheme:
SharedPreferences.Editor editor2 = sharedPrefs.edit();
editor2.putString(CURRENT_THEME, "dark");
editor2.apply();
changeTheme();
return true;}
private void changeTheme(){
String theme = sharedPrefs.getString(CURRENT_THEME,"light");
if(theme != null && theme.equals("light"))
{
setTheme(R.style.AppThemeLight);
}
else
{
setTheme(R.style.AppTheme);
}
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
推荐阅读
- azure - 关于自动化 Azure 安全中心自动预配的问题 - 扩展
- pine-script - PineScript 中 Thinkscript 的 GetValue()
- asp.net-core - 当一个控制器类不应该有 [ApiController] 属性?
- reactjs - 动态 React 组件渲染不会随着 map() 的每次新迭代而改变
- matplotlib - matplotlib 标签中的下标*不是斜体*?
- ruby - 安装 gem 后 VSCode 找不到 Ruby Gems - “运行 `gem install solargraph` 或更新您的 Gemfile。”
- html5-canvas - 如何将 p5.JS 画布创建代码转换为 HTML 画布
- django - 无法在视图中编辑 django 表单 empty_form 的字段
- qt - QT GUI 不会出现在 X11 转发上
- php - 在PHP和SQL中删除记录后删除记录输出else语句3次