Android 尝试使用SharedReferences更改颜色,但这不是正确的方式
我试图从菜单中更改某些文本和Android 尝试使用SharedReferences更改颜色,但这不是正确的方式,android,sharedpreferences,Android,Sharedpreferences,我试图从菜单中更改某些文本和main活动的颜色。 我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色的颜色。当我点击黑色将返回背景灰色,按钮白色,文本,白色的颜色。 我试图用SharedReferences保存此文件,但它不总是起作用,它采用灰色。 如果我在没有SharedReferences的情况下执行此操作,并单击PopUpMenu它会更改颜色,但使用SharedReferences它不会起作用,因为我写的是假的 这是我在MainActivity.class中的代码
main活动的颜色。
我有两个菜单,白色和黑色,如果我点击白色将返回背景白色,按钮黑色,文本黑色的颜色。当我点击黑色将返回背景灰色,按钮白色,文本,白色的颜色。
我试图用SharedReferences
保存此文件,但它不总是起作用,它采用灰色。
如果我在没有SharedReferences
的情况下执行此操作,并单击PopUpMenu
它会更改颜色,但使用SharedReferences
它不会起作用,因为我写的是假的
这是我在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
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;
}
});
}
});
您需要更改以下内容:
if(id == R.id.menu_back_white) {
saveColor(false); //I changed true to false
} else if (id == R.id.menu_back_black) {
saveColor(true); //I changed false to true
}
因为当“getChangeColor()”为false时,您将其设置为白色:
switchOnOff = getChangeColor();
if (switchOnOff) {
setColorGreyImageButton();
} else {
setColorWhiteImageButton();
}
您需要更改以下内容:
if(id == R.id.menu_back_white) {
saveColor(false); //I changed true to false
} else if (id == R.id.menu_back_black) {
saveColor(true); //I changed false to true
}
因为当“getChangeColor()”为false时,您将其设置为白色:
switchOnOff = getChangeColor();
if (switchOnOff) {
setColorGreyImageButton();
} else {
setColorWhiteImageButton();
}
您是否已检查布尔值是否实际保存在共享首选项中?返回的值是多少?应用是异步的,因此如果您试图快速更改配色方案,可能没有足够的时间保存标志。不,我没有检查,因为我正在尝试登录,但无法为创建日志boolean@Spritzig-您创建了一个日志,将注销布尔值。当我退出应用程序并再次打开时,它正在保存更改,但当我单击时,它不会更改主题。您知道如何快速更新吗?@Spritzig您当然不想重新加载活动。事实上,我没有太多的经验与可抽,所以我不能帮助你与这一点。我找到了这些链接:和。也许这些可以帮助您。您是否检查过布尔值是否确实保存在共享首选项中?返回的值是多少?应用是异步的,因此如果您试图快速更改配色方案,可能没有足够的时间保存标志。不,我没有检查,因为我正在尝试登录,但无法为创建日志boolean@Spritzig-您创建了一个日志,将注销布尔值。当我退出应用程序并再次打开时,它正在保存更改,但当我单击时,它不会更改主题。您知道如何快速更新吗?@Spritzig您当然不想重新加载活动。事实上,我没有太多的经验与可抽,所以我不能帮助你与这一点。我找到了这些链接:和。也许这些可以帮助你。我已经更改了这个,但它不会自动更新视图。我需要退出应用程序,然后在打开时更改颜色,你知道如何快速更改视图吗?你在创建时调用它吗?在setContentView之前还是之后?在setContentView之后我更改了它,但它不会自动更新视图我需要退出应用程序,然后在打开时更改颜色,您知道如何快速更改视图吗?您是在OnCreate上调用它?在setContentView之前还是之后?在setContentView之后