Java 更改所有活动的背景色

Java 更改所有活动的背景色,java,android,sharedpreferences,Java,Android,Sharedpreferences,我有一个“设置”活动,其中显示5种不同的颜色选项,可将应用程序的背景、文本或按钮颜色更改为 我现在只关注背景的变化。据我所知,我可以使用SharedReferences做类似的事情: 现在在我的设置类中,每个颜色选项都有以下代码: ImageButton changeBgRed = (ImageButton) findViewById(R.id.bgRed); changeBgRed.setOnClickListener(new View.OnClickListener() {

我有一个“设置”活动,其中显示5种不同的颜色选项,可将应用程序的背景、文本或按钮颜色更改为

我现在只关注背景的变化。据我所知,我可以使用SharedReferences做类似的事情:

现在在我的设置类中,每个颜色选项都有以下代码:

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);