示例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);
}
可用于单个活动。如何使用单个按钮操作多个活动?
答案 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 ; ).