如何在 Android 中点击时设置 xml 的背景
How do I set the background of an xml on click in Android
这是我想要做的:我点击一个打开的按钮,activity 定期改变背景。
我的代码如下所示:
RelativeLayout relativeLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picscreen);
Thread background = new Thread(){
public void run(){
try {
sleep(2000);
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.img10);
setContentView(relativeLayout);
}catch (Exception e){
}
}
};
background.start();
}protected void onDestroy(){
super.onDestroy();
}
错误说相对布局不能应用于线程。我做错了什么?
The error says the relative Layout cannot ba applied to a thread
因为run
方法上下文用于创建RelativeLayout
布局对象和调用setContentView
您应该使用 YourActivityName.this
而不是 this
来调用 setContentView
方法并创建 RelativeLayout
布局对象。
建议:
当使用当前代码的应用程序 运行 时,应用程序将崩溃并显示以下消息:
Only the original thread that created a view hierarchy can touch its views.
所以在特定时间后使用runOnUiThread
或Handler(而不是线程)来完成一些任务
你可以使用
runOnUiThread(new Runnable(){
//your code
});
在你的 运行 方法中,在此之前你必须调用 looper.prepare() 我想,但我不知道为什么你每次都在 [=17= 中创建一个新的 RealtiveLayout ] 方法,它很蹩脚。您可以每次都使用相同的 RelativeLayout,然后您就不必调用方法 setContentView()。
我建议你好好看看 android 基础教程。
这是我想要做的:我点击一个打开的按钮,activity 定期改变背景。
我的代码如下所示:
RelativeLayout relativeLayout;
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.picscreen);
Thread background = new Thread(){
public void run(){
try {
sleep(2000);
relativeLayout = new RelativeLayout(this);
relativeLayout.setBackgroundResource(R.drawable.img10);
setContentView(relativeLayout);
}catch (Exception e){
}
}
};
background.start();
}protected void onDestroy(){
super.onDestroy();
}
错误说相对布局不能应用于线程。我做错了什么?
The error says the relative Layout cannot ba applied to a thread
因为run
方法上下文用于创建RelativeLayout
布局对象和调用setContentView
您应该使用 YourActivityName.this
而不是 this
来调用 setContentView
方法并创建 RelativeLayout
布局对象。
建议:
当使用当前代码的应用程序 运行 时,应用程序将崩溃并显示以下消息:
Only the original thread that created a view hierarchy can touch its views.
所以在特定时间后使用runOnUiThread
或Handler(而不是线程)来完成一些任务
你可以使用
runOnUiThread(new Runnable(){
//your code
});
在你的 运行 方法中,在此之前你必须调用 looper.prepare() 我想,但我不知道为什么你每次都在 [=17= 中创建一个新的 RealtiveLayout ] 方法,它很蹩脚。您可以每次都使用相同的 RelativeLayout,然后您就不必调用方法 setContentView()。 我建议你好好看看 android 基础教程。