我定义我的按钮状态

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

    <item android:state_pressed="true" >
        <shape>
            <gradient
                android:endColor="@color/orange_light"
                android:startColor="@color/orange"
                android:angle="270" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:right="10dp" />
        </shape>
    </item>

    <item android:state_focused="true" >
        <shape>
            <gradient
                android:endColor="@color/orange_light"
                android:startColor="@color/orange"
                android:angle="270" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:right="10dp" />
        </shape>
    </item>

    <item>
        <shape>
            <gradient
                android:endColor="@color/grey_light"
                android:startColor="@color/grey"
                android:angle="270" />
            <corners
                android:radius="6dp" />
            <padding
                android:left="10dp"
                android:right="10dp" />
        </shape>
    </item>
</selector>


并将其设置为我按钮的背景。

当我按下它时,它可以正确更改颜色,但是我希望它在释放后保持“按下”颜色(以显示哪个按钮处于活动状态)。

我怎样才能做到这一点? requestFocus()不起作用...

谢谢

最佳答案

在setOnClickListener中,您可以实现一些逻辑。例如,按下一个按钮,它将获得一种颜色并保持该颜色,直到按下另一个按钮为止,并且当我按下的第二个按钮比第一个按钮的背景被按下时,它将重置为默认值。

您可以实现所需的内容,而只需添加一些逻辑即可。如果您希望按钮仅在处于按下状态时具有某种颜色,而不是覆盖触摸侦听器

你可以这样

addButtonLayout.setOnTouchListener(new OnTouchListener() {

    public boolean onTouch(View v, MotionEvent event) {
        if (event.getAction() == MotionEvent.ACTION_UP) {
        imageAddSign.setImageResource(R.drawable.a);
        }else{
        imageAddSign.setImageResource(R.drawable.b);
        }
        return false;
    }
});

10-07 19:04
查看更多