我刚在drawable
文件夹下添加了一个新的res
文件夹。在drawable
文件夹中,我复制了ic_launcher.png
文件夹中的drawable-hdpi
文件。
当我按下按钮时,我想通过新的图像更改标准ImageButton
图像。我写了一些代码,但是当我启动应用程序时,它会崩溃。
Button imgButton;
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
findViewById(R.id.imgButton).setOnClickListener(imgButtonHandler);
}
View.OnClickListener imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
imgButton.setBackgroundResource(R.drawable.ic_launcher);
}
};
编辑:我改为此,这也行不通。
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgButton = (Button) findViewById(R.id.imgButton);
imgButton.setOnClickListener(imgButtonHandler);
}
View.OnClickListener imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
imgButton.setBackgroundResource(R.drawable.ic_launcher);
}
};
编辑2:这个工作。谢谢大家。
ImageButton button;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
button= (ImageButton)findViewById(R.id.imgButton);
button.setOnClickListener(imgButtonHandler);
}
View.OnClickListener imgButtonHandler = new View.OnClickListener() {
public void onClick(View v) {
button.setBackgroundResource(R.drawable.ic_launcher);
}
};
答案 0 :(得分:58)
这误导了我一点 - 它应该是setImageResource
而不是setBackgroundResource
:) !!
以下工作正常:
ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);
btn.setImageResource(R.drawable.actions_record);
在使用setBackgroundResource
实际图像按钮的图像时
在背景图像被更改时停留,这会导致看起来丑陋的imageButton对象
感谢。
答案 1 :(得分:11)
<ImageButton android:src="@drawable/image_btn_src" ... />
image_btn_src.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:state_pressed="true" android:drawable="@drawable/icon_pressed"/>
<item android:state_pressed="false" android:drawable="@drawable/icon_unpressed"/>
</selector>
答案 2 :(得分:7)
那是因为imgButton为null。 试试这个:
findViewById(R.id.imgButton).setBackgroundResource(R.drawable.ic_action_search);
或更容易阅读:
imgButton = (Button) findViewById(R.id.imgButton);
imgButton.setOnClickListener(imgButtonHandler);
然后在onClick:imgButton.setBackgroundResource(R.drawable.ic_action_search);
答案 3 :(得分:3)
您可以在XML文件中正确执行:
android:onClick="@drawable/ic_action_search"
答案 4 :(得分:1)
您已为imgButton
变量指定了按钮:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
imgButton = (Button) findViewById(R.id.imgButton);
imgButton.setOnClickListener(imgButtonHandler);
}
答案 5 :(得分:1)
要在单击ImageButton时在不同的图像之间切换,我使用了如下的布尔值:
ImageButton imageButton;
boolean buttonOn;
imageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (!buttonOn) {
buttonOn = true;
imageButton.setBackground(getResources().getDrawable(R.drawable.button_is_on));
} else {
buttonOn = false;
imageButton.setBackground(getResources().getDrawable(R.drawable.button_is_off));
}
}
});
答案 6 :(得分:0)
这很简单
public void onClick(View v) {
imgButton.setImageResource(R.drawable.ic_launcher);
}
使用设置的背景图片资源会更改按钮的背景