Java 更改所有活动的背景色
我有一个“设置”活动,其中显示5种不同的颜色选项,可将应用程序的背景、文本或按钮颜色更改为 我现在只关注背景的变化。据我所知,我可以使用SharedReferences做类似的事情: 现在在我的设置类中,每个颜色选项都有以下代码:Java 更改所有活动的背景色,java,android,sharedpreferences,Java,Android,Sharedpreferences,我有一个“设置”活动,其中显示5种不同的颜色选项,可将应用程序的背景、文本或按钮颜色更改为 我现在只关注背景的变化。据我所知,我可以使用SharedReferences做类似的事情: 现在在我的设置类中,每个颜色选项都有以下代码: ImageButton changeBgRed = (ImageButton) findViewById(R.id.bgRed); changeBgRed.setOnClickListener(new View.OnClickListener() {
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();
}
});
让我困惑的是如何对我的其他类进行编码,以便它们从SharedReference中读取颜色并更改背景
对于我的主屏幕课程,我有以下代码/想法(我想大部分代码可以复制/粘贴到其他活动中):
我想其他颜色的我会有更多的箱子。但现在,这不起作用;当我运行应用程序时,主屏幕的背景开始变红
我不是很了解SharedReference是如何工作的吗?请为我指明正确的方向。如中所述,来自活动类的getPreferences()
方法:
检索一个SharedReferences对象,以访问以下首选项:
这项活动是私人的。这就是所谓的底层
通过传入此活动的
类名称作为首选项名称
因此,实际上您只是在为“设置”活动设置颜色,无法从其他活动访问此值
要解决此问题,可以在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
视图,它将使您的主屏幕背景变为红色。请记住卸载应用程序,并在需要返回默认状态(白色背景)时重新安装
颜色更改在活动恢复或重新启动后生效,您知道吗?是否最好有不同的预定义主题(设置后需要重新启动活动)?如果用户同时选择红色作为背景,红色作为文本,该怎么办?@Elltz我一打开应用程序,背景就已经是红色了,即使我没有向我的SharedReferences添加任何内容。如果(settings.getInt(“background”,Color.RED)=Color.RED)
就是因为这一行,那么这可能就是让我困惑的原因。。你看到第二个论点了吗?如果返回对象为空,则返回默认颜色。这种困惑现在消失了吗?@MarkKeen-Yup,会好得多。但用户希望完全定制。我的家庭课程会保持不变吗?默认情况下,我仍然得到一个红色背景。这可以将Home的背景更改为红色。有没有想过如何回到设置并选择不同的颜色?假设当前颜色为红色,我选择绿色或蓝色
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();
}
});
@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);