【发布时间】:2018-12-27 10:29:32
【问题描述】:
我正在尝试从菜单中更改某些文本和MainActivity 的颜色。
我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色。当我单击黑色时,将返回背景灰色、按钮白色、文本、白色的颜色。
我正在尝试使用SharedPreferences 保存它,但它并不总是工作它采用灰色。
如果我在没有SharedPreferences 的情况下执行此操作并单击PopUpMenu 它会更改颜色,但使用SharedPreferences 它不起作用我写的是假的。
这是我在MainActivity.class 中的代码。
private boolean switchOnOff;
public static final String Change_Color = "Change_Color";
switchOnOff = getChangeColor();
if (switchOnOff) {
setColorGreyImageButton();
} else {
setColorWhiteImageButton();
}
public void setColorGreyImageButton() {
settings.setColorFilter(Color.parseColor("#757575"));
voiceSearch.setColorFilter(Color.parseColor("#757575"));
share.setColorFilter(Color.parseColor("#757575"));
search.setColorFilter(Color.parseColor("#757575"));
mainView.setBackgroundColor(Color.parseColor("#FFFFFF"));
}
public void setColorWhiteImageButton() {
settings.setColorFilter(Color.parseColor("#FFFFFF"));
voiceSearch.setColorFilter(Color.parseColor("#FFFFFF"));
share.setColorFilter(Color.parseColor("#FFFFFF"));
search.setColorFilter(Color.parseColor("#FFFFFF"));
mainView.setBackgroundColor(Color.parseColor("#ff212121"));
}
public void saveColor(boolean changeColor) {
SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPreferences.edit();
editor.putBoolean(getPackageName() + ".change_color", changeColor);
editor.apply();
}
private boolean getChangeColor() {
SharedPreferences sharedPreferences = getSharedPreferences("Color", MODE_PRIVATE);
return sharedPreferences.getBoolean(getPackageName() + ".change_color", false);
}
这是MainActivity.class中的PopUpMenu
mPopupMenu = new PopupMenu(this, settings);
MenuInflater menuInflater = mPopupMenu.getMenuInflater();
menuInflater.inflate(R.menu.main_settings, mPopupMenu.getMenu());
settings.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
mPopupMenu.show();
mPopupMenu.setOnMenuItemClickListener(new PopupMenu.OnMenuItemClickListener() {
@Override
public boolean onMenuItemClick(MenuItem item) {
int id = item.getItemId();
if(id == R.id.menu_back_white) {
saveColor(true);
} else if (id == R.id.menu_back_black) {
saveColor(false);
}
return false;
}
});
}
});
【问题讨论】:
-
您是否检查过布尔值是否实际保存在共享首选项中?以及返回什么值? Apply 是异步的,因此如果您想快速更改配色方案,可能没有足够的时间来保存标志。
-
不,我没有检查,因为我正在尝试记录但我无法为布尔值创建日志
-
@Spritzig- 你 can 创建一个日志,将注销布尔值。
-
当我退出应用程序并再次打开时它正在保存更改在那里但是当我点击时它不会改变主题你知道如何快速更新吗?
-
@Spritzig 当然你不想重新加载活动。事实是我对drawables没有太多经验,所以我无法帮助你。我找到了这些链接:stackoverflow.com/questions/44984488/… 和 stackoverflow.com/questions/18954042/setcolorfilter-not-working。也许这些可以帮助你。