以编程方式设置按钮状态

时间:2011-09-29 15:41:57

标签: android button

我用

定义按钮的状态
<?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()不起作用......

由于

2 个答案:

答案 0 :(得分:2)

在你的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;
    }
});

答案 1 :(得分:0)

我认为,你需要的是一个复选框,而不是一个按钮。如果您需要更多功能,请尝试在那里设置背景或将其子类化。