选择一个按钮时改变按钮的颜色; Android开发

时间:2014-04-03 15:22:35

标签: android xml button android-xml android-drawable

所以我正在制作一个带有3个按钮的应用程序。目前我有以下.xml文件,使它们具有圆角边缘并且是红色。现在我想制作它们,如果选择了一个,那么该按钮变为绿色而其他两个保持不变,或者变回红色。我怎么能这样做?我是否必须制作另一个.xml文件? 这是按钮的可绘制.xml文件:

<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
    android:shape="rectangle" android:padding="10dp">
    <!--red colour.-->
    <solid android:color="#FF0000"/> 
    <corners
         android:bottomRightRadius="10dp"
        android:bottomLeftRadius="10dp"
        android:topLeftRadius="10dp"
        android:topRightRadius="10dp"/>
    <stroke android:width="2px" android:color="#000000"/>
 </shape>

1 个答案:

答案 0 :(得分:2)

使用selector,如下所示:

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- green state -->
    <item 
        android:drawable="@drawable/button_selected" 
        android:state_selected="true"></item>
    <!-- green state -->
    <item 
        android:drawable="@drawable/button_pressed" 
        android:state_pressed="true"></item>
    <!-- red state -->
    <item 
        android:drawable="@drawable/button_disabled"></item>

</selector>  

然后,您应该将此选择器称为:

<Button
     ...
     android:background="@drawable/my_selector" />  

为每个州创建每个drawable.xml(作为红色按钮的示例): button_selected button_pressed button_disabled

您也可以使用onTouchListener来保持状态:

button.setOnTouchListener(new OnTouchListener() {
    @Override
    public boolean onTouch(View v, MotionEvent event) {
        switch (event.getAction()) {
            case MotionEvent.ACTION_DOWN:
                // change the color
                return true;
            case MotionEvent.ACTION_UP:
                // intitial color
                return true;
            default:
                return false;
        }
    }
});  

但是,最好使用Selectorbackground,这样可以减少资源占用。


更新:

您可以使用setBackgroundResource方法保留并更改点击按钮的背景状态,如下所示:

// 1st clicklistener method
button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setBackgroundResource(R.drawable.green_drawable);
        button2.setBackgroundResource(R.drawable.selector_drawable);
    }
}

// 2nd clicklistener method
button2.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        v.setBackgroundResource(R.drawable.green_drawable);
        button1.setBackgroundResource(R.drawable.selector_drawable);
    }
}  

未经测试但应该可以使用。