以编程方式更改ImageButton的背景

时间:2014-05-08 07:30:11

标签: android onclick onclicklistener android-imagebutton

我在Android应用中使用自定义操作栏,右侧有自定义ImageButton,并以编程方式添加了onClick行为(请参阅下面的代码段)。

按钮的XML来源

<ImageButton
        android:id="@+id/btn_refresh"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerVertical="true"
        android:layout_toLeftOf="@+id/btn_right_menu"
        android:background="@null"
        android:contentDescription="@string/image_description"
        android:onClick="refresh"
        android:padding="10dp"
        android:src="@drawable/button_refresh" />

OnClickListener来源

mRefreshButton = (ImageButton) findViewById(R.id.btn_refresh);
mRefreshButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
            doSomething();
    }
});

我想以编程方式更改ImageButton的背景颜色(无需使用其他图形),以便在用户点击按钮时背景会发生变化(点击背景后)应该恢复正常,即透明)。我该怎么做?

3 个答案:

答案 0 :(得分:1)

ImageButton使用选择器并从xml设置背景。

如果您想使用可绘图像:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
        <item android:state_pressed="true"
            android:drawable="@drawable/pressed_bg" /> <!-- pressed -->
        <item android:state_focused="true"
            android:drawable="@drawable/focused_bh" /> <!-- focused -->
        <item android:drawable="@drawable/default_bg" /> <!-- default -->
</selector>

如果您只想使用颜色:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">     
     <item android:state_selected="true" android:drawable="@android:color/white" />    
     <item android:state_pressed="true" android:drawable="@android:color/white" />
     <item android:drawable="@android:color/transparent" />
</selector>

答案 1 :(得分:0)

invalidate()方法将强制重绘任何视图:

尝试使用:

mRefreshButton = (ImageButton) findViewById(R.id.btn_refresh);
mRefreshButton.setOnClickListener(new View.OnClickListener() {

    @Override
    public void onClick(View v) {
           Drawable replacer = getResources().getDrawable(R.drawable.replacementGraphic);
    mRefreshButton .setBackgroundDrawable(replacer);
    mRefreshButton .invalidate();
    }
});

请参阅here以供参考。

答案 2 :(得分:0)

要更改颜色,您可以使用以下

Btn.setBackgroundColor(Color.BLUE);

重新设置透明

Btn.setBackgroundColor(Color.parseColor("#000000"));