更改所有活动的背景颜色

时间:2016-07-29 00:33:21

标签: java android sharedpreferences

我有一个"设置"显示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的工作原理吗?请指导我正确的方向。

1 个答案:

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