1

我有几个 ImageButtons,我试图强制其中一个像 CheckBox 一样。当用户按下按钮时,我想在“按下”(橙色,如您点击并按住时)和“正常”状态之间切换按钮的背景。如何做到这一点?下面的代码并没有真正做到这一点。

    public void btnErase_click(View v) {
        ImageButton btnErase = (ImageButton) findViewById(R.id.btnErase);
        if (pressed == true)
            btnErase.setBackgroundColor(Color.YELLOW);
        else        
            btnErase.setBackgroundColor(android.R.drawable.btn_default);
    }
4

4 回答 4

2

首先,提供选择器。将其保存为 drawable/button_bg.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >

    <item android:state_checked="true" android:drawable="@android:color/yellow" />
    <item drawable="@android:drawable/btn_default" />

</selector>

将其作为背景应用到您的按钮。在代码中

public void btnErase_click(View v) {
    ImageButton btnErase = (ImageButton) findViewById(R.id.btnErase);
    if (pressed) {
        btnErase.getBackground().setState(new int[]{android.R.attr.state_selected});
    } else {
        btnErase.getBackground().setState(new int[]{-android.R.attr.state_selected});
    }
}

但我不认为这是一个好主意。如果您的按钮有两种状态,最好使用ToggleButton

于 2013-02-06T18:50:38.643 回答
1

您应该使用setBackgroundResource而不是setBackgroundCOlorinelse子句。因为android.R.drawable.btn_defaul不是颜色,它是资源的 id。

于 2013-02-06T18:48:27.223 回答
1

您可以尝试这样做,通过xml设置不同的状态,将其保存在drawable中,然后将其设置为按钮的背景:

<item android:state_pressed="true"><shape>
        <solid android:color="#3c3c3c" />

        <stroke android:width="0.5dp" android:color="#3399cc" />

        <corners android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" android:topLeftRadius="4dp" android:topRightRadius="4dp" />

        <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
    </shape></item>
<item><shape>
        <gradient android:angle="270" android:endColor="#171717" android:startColor="#505050" />

        <stroke android:width="0.5dp" android:color="#3399cc" />

        <corners android:bottomLeftRadius="0dp" android:bottomRightRadius="0dp" android:topLeftRadius="4dp" android:topRightRadius="4dp" />

        <padding android:bottom="10dp" android:left="10dp" android:right="10dp" android:top="10dp" />
    </shape></item>

于 2013-02-06T18:50:15.947 回答
1

您应该使用View v传入的,无需再次找到ImageButton。

此外,如果您将按钮背景设置为图像,请使用setBackgroundResource而不是setBackgroundColor

public void btnErase_click(View v) {
        ImageButton btnErase = (ImageButton) v;
        if (pressed == true)
            btnErase.setBackgroundColor(Color.YELLOW);
        else        
            btnErase.setBackgroundResource(android.R.drawable.btn_default);
    }
于 2013-02-06T18:53:11.507 回答