从另一个活动更改活动的背景

时间:2014-12-07 01:50:21

标签: android

示例I有3个活动:activity1,activity2和activity3。 activity1包含一个按钮,可以在单击时更改activity2和activity3的背景。这可能吗?如果有,怎么样?我对使用该方法有一个想法:

//example for activity1

public void onClick(View v) {
View background = findViewById(R.id.activity1relativeLayout);
background.setBackgroundResource(R.drawable.customBackground);

}

可用于单个活动。如何使用单个按钮操作多个活动?

4 个答案:

答案 0 :(得分:1)

单击按钮时,可以在SharedPreferences中保存颜色。然后在换色活动的onStart中读取首选项并更改背景颜色。

<强> Button.onClick(...)

SharedPreferences sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
SharedPreferences.Editor editor = sharedPref.edit();
editor.putInt("background_resource", selected_background);
editor.apply();

<强> Activity.onStart(...)

SharedPreferences sharedPref = context.getSharedPreferences("my_prefs", Context.MODE_PRIVATE);
int bg = sharedPref.getInt("background_resource", android.R.color.white); // the second parameter will be fallback if the preference is not found
getWindow().setBackgroundDrawableResource(bg);

答案 1 :(得分:0)

创建一个静态变量来保存后台资源,并获取您的活动中引用的内容。您可以从其他活动更改该值,当您返回时,您将看到更新的资源。

希望这有帮助,如果您还需要代码逻辑,请告诉我。

答案 2 :(得分:0)

您可以让实际活动在实际启动时更改其背景。但是,您可以通过使用Intent使用户不可思议,特别是在启动活动时向Intent发送额外的包或数据。然后,根据在第一个活动中选择的选项,将一个不同的数据发送到新活动,然后从那里选择适当的背景。

以下是一些资源:http://developer.android.com/reference/android/content/Intent.html How do I get extra data from intent on Android?

答案 3 :(得分:0)

如果要在运行时更改活动A背景,或从活动活动2外部进行任何更改,请将broadCast从activity1发送到活动2,活动2中的BroadCastReceiver进行所需的更改。 - (这是在可见时改变背景的方式) 在你的情况下,使用SharedPreferences保存背景并在onResume()中读取SharedPreferences:

示例:(我将在此处编写代码而不进行测试,但您可以这样做)

public void onClick(View v) {
 // set background..
 SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE);
     SharedPreferences.Editor editor = bgshared.edit();
       editor.putString("BKGRND", "bg1").commit();
// OR     editor.putString("BKGRND", "bg2").commit();
// OR editor.putString("BKGRND", "bg3").commit();
 }

在onResume Do:

 SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE);
String Bgfromshared = bgshared.getString("BKGRND", "Error");
if(Bgfromshared.equals("bg1"))
   background.setBackgroundResource(R.drawable.customBackground1);
else if(Bgfromshared.equals("bg2"))
   background.setBackgroundResource(R.drawable.customBackground2);//other drawable
else if(Bgfromshared.equals("bg3"))
   background.setBackgroundResource(R.drawable.customBackground3);
else if(Bgfromshared.equals("Error")); //do no thing (put ; ).

更新:(如果您有多个活动,请为所有活动使用一个SharedPreferences)

// you are in activity1:
public void onClick(View v) {
 // set background..
 SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE);
     SharedPreferences.Editor editor = bgshared.edit();
       editor.putString("BKGRND_ACTIVITY1", "bg1").commit();
// OR     editor.putString("BKGRND_ACTIVITY1", "bg2").commit();
// OR editor.putString("BKGRND_ACTIVITY1", "bg3").commit();
 } 


// you are in activity2:
public void onClick(View v) {
 // set background..
 SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE);
     SharedPreferences.Editor editor = bgshared.edit();
       editor.putString("BKGRND_ACTIVITY2", "bg1").commit();
// OR     editor.putString("BKGRND_ACTIVITY2", "bg2").commit();
// OR editor.putString("BKGRND_ACTIVITY2", "bg3").commit();
 } 

在onResume Do:

     SharedPreferences bgshared= getSharedPreferences("background", MODE_PRIVATE);
// if you are in activity 1 :   
 String Bgfromshared = bgshared.getString("BKGRND_ACTIVITY1", "Error");
// if you are in activity 2 : 
String Bgfromshared = bgshared.getString("BKGRND_ACTIVITY2", "Error");
    if(Bgfromshared.equals("bg1"))
       background.setBackgroundResource(R.drawable.customBackground1);
    else if(Bgfromshared.equals("bg2"))
       background.setBackgroundResource(R.drawable.customBackground2);//other drawable
    else if(Bgfromshared.equals("bg3"))
       background.setBackgroundResource(R.drawable.customBackground3);
    else if(Bgfromshared.equals("Error")); //do no thing (put ; ).