1

我在一个 Android 应用程序中使用自定义操作栏,它ImageButton在右侧有 custom ,它们的 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编程方式更改我的背景颜色(无需使用其他图形),以便用户单击按钮时背景会发生变化(单击后背景应该恢复正常,即透明)。我怎么做?

4

3 回答 3

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>
于 2014-05-08T07:32:30.727 回答
1

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

请参阅此处以供参考。

于 2014-05-08T07:35:35.423 回答
0

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

Btn.setBackgroundColor(Color.BLUE);

设置回透明

Btn.setBackgroundColor(Color.parseColor("#000000"));
于 2014-05-08T07:35:49.603 回答