我有一个"设置"显示5种不同颜色选项的活动,用于将应用的背景或文本或按钮颜色更改为。
我现在只关注背景变化。根据我的阅读,我可以使用SharedPreferences做这样的事情:
现在在我的Settings类中,每个颜色选项都有以下代码:
ImageButton changeBgRed = (ImageButton) findViewById(R.id.bgRed);
changeBgRed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
SharedPreferences prefs = getPreferences(MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("background", Color.RED);
editor.commit();
}
});
令我困惑的是如何对其他类进行编码,以便他们从SharedPreference中读取颜色并更改背景。
对于我的HomeScreen类,我有以下代码/想法(我想大部分代码都可以复制/粘贴到其他活动中):
@Override
protected void onResume(){
super.onResume();
background = (RelativeLayout) findViewById(R.id.rootLayout);
SharedPreferences settings = getSharedPreferences("Background", Context.MODE_PRIVATE);
if(settings.getInt("background", Color.RED) == Color.RED)
background.setBackgroundColor(Color.RED);
else
background.setBackgroundColor(Color.WHITE);
我想我会为其他颜色提供更多案例。但是现在,这不起作用;当我运行应用程序时,主屏幕的背景开始变红。
我不太了解SharedPreferences的工作原理吗?请指导我正确的方向。
答案 0 :(得分:2)
如Activity documentation中所述,来自getPreferences()
类的Activity
方法:
检索SharedPreferences对象以访问其中的首选项 私人参加此活动。这只是调用底层证券 通过传入此活动的getSharedPreferences(String,int)方法 类名作为首选项名称。
因此,您实际上只为“设置活动”设置颜色,并且您无法从另一个“活动”访问此值。
要解决此问题,您可以尝试使用Settings类中的以下代码:
ImageButton changeBgRed = (ImageButton) findViewById(R.id.bgRed);
changeBgRed.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view){
// Changed the line below to get the same preferences used in Home Screen
SharedPreferences prefs = getSharedPreferences("Background", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = prefs.edit();
editor.putInt("background", Color.RED);
editor.commit();
}
});
这将是您的主屏幕代码,考虑到您希望将白色背景作为默认设置,并通过单击“设置”屏幕上的changeBgRed
视图,它会将您的主屏幕背景变为红色。当您想要恢复到默认状态(白色背景)时,请记得卸载您的应用并再次安装
@Override
protected void onResume(){
super.onResume();
background = (RelativeLayout) findViewById(R.id.rootLayout);
SharedPreferences settings = getSharedPreferences("Background", Context.MODE_PRIVATE);
if(settings.getInt("background", Color.WHITE) == Color.RED)
background.setBackgroundColor(Color.RED);
else
background.setBackgroundColor(Color.WHITE);