Android 更改活动时的setBackgroundResource
在我的一个活动中,我有一个Android 更改活动时的setBackgroundResource,android,android-layout,android-imagebutton,Android,Android Layout,Android Imagebutton,在我的一个活动中,我有一个ImageButton,单击它可以使用setBackgroundResource()更改背景资源。我在该活动中工作得很好,但当我离开该活动并返回到它时,按钮已更改回XML中设置的默认背景。是否有办法将后台资源永久设置为某个值,直到再次单击按钮 保存您在SharedReferences中用作背景的图像的URL/id,并确保每次创建活动时都对其进行设置。否则,下次创建活动时将使用XML文件中指定的背景。将用作背景的图像的URL/id保存在SharedReferences中,
ImageButton
,单击它可以使用setBackgroundResource()
更改背景资源。我在该活动中工作得很好,但当我离开该活动并返回到它时,按钮已更改回XML中设置的默认背景。是否有办法将后台资源永久设置为某个值,直到再次单击按钮 保存您在SharedReferences中用作背景的图像的URL/id,并确保每次创建活动时都对其进行设置。否则,下次创建活动时将使用XML文件中指定的背景。将用作背景的图像的URL/id保存在SharedReferences中,并确保每次创建活动时都进行设置。否则,下次创建活动时将使用XML文件中指定的背景。您应该覆盖活动onResume()
方法。
使您的活动或按钮保持状态(按下或未按下),在
onResume()
方法中,检查此状态并更改背景。您应该覆盖活动onResume()
方法。
使您的活动或按钮保持状态(按下或未按下),并在
onResume()
方法中检查此状态并更改背景。使用SharedReferences。更改背景时:
getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...
或
等等。这将把描述当前背景的字符串保存到SharedReferences
在onCreate方法中,您需要放置:
String back = getSharedPreferences("background", MODE_PRIVATE).getString("background");
这将使你的“背景”在后面。
现在,您可以选择背景:
getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...
注意:这将恢复当前选择的背景,即使应用程序已关闭。使用SharedReferences。
更改背景时:
getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...
或
等等。这将把描述当前背景的字符串保存到SharedReferences
在onCreate方法中,您需要放置:
String back = getSharedPreferences("background", MODE_PRIVATE).getString("background");
这将使你的“背景”在后面。
现在,您可以选择背景:
getSharedPreferences("background", MODE_PRIVATE).edit().putString("background","background_nr_1").commit();
if (back.equals("background_nr_1") { // set the Background associated with nr_1
else if (.... "nr_2") ...
注意:这将恢复当前选择的背景,即使应用程序已关闭。您需要将图像按钮上的值存储在静态变量或SharedReferences中 例如,声明一个变量
public static int bgresource;
现在点击img按钮
if(something) {
bgresource = R.drawable.img1
} else {
bgresource = R.drawable.img2
}
mylayout.setBackgroundResource(bgresource);
并在活动的onResume()中执行以下操作:
mylayout.setBackgroundResource(bgresource);
您需要将图像按钮上的值存储在静态变量或SharedReferences中 例如,声明一个变量
public static int bgresource;
现在点击img按钮
if(something) {
bgresource = R.drawable.img1
} else {
bgresource = R.drawable.img2
}
mylayout.setBackgroundResource(bgresource);
并在活动的onResume()中执行以下操作:
mylayout.setBackgroundResource(bgresource);
您可以使用以下技巧:
//outside the onCreate:
boolean resourceIsSet = false;
//inside the onCreate:
if(!resourceIsset) {
setBackgroundResource();
resourceIsset= true;
}
或者您可以使用其他建议的您可以使用以下技巧:
//outside the onCreate:
boolean resourceIsSet = false;
//inside the onCreate:
if(!resourceIsset) {
setBackgroundResource();
resourceIsset= true;
}
或者,当我输入layout.options.setBackgroundResource(bgresource)时,您可以使用其他建议的;在img按钮中,单击它会给我一个错误,上面写着“无法在原语类型int上调用setBackgroundResource(int)”。有解决方案吗?当我放入layout.options.setBackgroundResource(bgresource)时;在img按钮中,单击它会给我一个错误,上面写着“无法在原语类型int上调用setBackgroundResource(int)”。有什么解决方案吗?我从来没有在简历上做过。这是在onCreate下面吗?@Zach:是的,它在onCreate方法之后被调用。当您的活动暂停时(当另一个活动进入foerground,但未停止当前活动),返回时将不会调用onCreate,但会调用onResume。看看活动的API文档,其中描述了活动的生命周期(链接)。我从来没有在简历上写过。这是在onCreate下面吗?@Zach:是的,它在onCreate方法之后被调用。当您的活动暂停时(当另一个活动进入foerground,但未停止当前活动),返回时将不会调用onCreate,但会调用onResume。查看活动的API文档,其中描述了活动生命周期(链接)。