36

我刚刚在文件drawable夹下添加了一个新文件res夹。在文件夹中,我从文件夹drawable中复制了文件。当我按下按钮时,我想通过新图像更改标准图像。我写了一些代码,但是当我启动应用程序时,它崩溃了。ic_launcher.pngdrawable-hdpiImageButton

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);

    }
};
4

7 回答 7

67

这误导了我一点 - 它应该setImageResource代替setBackgroundResource:) !!

以下工作正常:

ImageButton btn = (ImageButton)findViewById(R.id.imageButton1);       
 btn.setImageResource(R.drawable.actions_record);

而当使用setBackgroundResource实际的 imagebutton 的图像时,背景图像会保持不变,这会导致一个难看的 imageButton 对象

谢谢。

于 2014-01-08T21:36:38.953 回答
15
<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>
于 2015-05-27T06:41:53.083 回答
10

那是因为 imgButton 为空。试试这个:

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);

于 2012-09-03T14:12:33.687 回答
3

您可以在您的 XML 文件中执行此操作:

android:onClick="@drawable/ic_action_search"
于 2012-09-03T14:27:03.977 回答
2

您对imgButton变量有 assing 按钮:

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    imgButton = (Button) findViewById(R.id.imgButton);
    imgButton.setOnClickListener(imgButtonHandler);
}
于 2012-09-03T14:14:52.187 回答
2

要在单击 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));
         }
     }
});
于 2020-04-24T16:32:49.590 回答
1

这很简单

public void onClick(View v) {

        imgButton.setImageResource(R.drawable.ic_launcher);

    }

使用设置背景图片资源将改变按钮的背景

于 2020-10-22T09:23:29.683 回答