如何使用颜色代替drawable来切换按钮选择器

时间:2012-12-20 13:43:39

标签: android xml android-layout selector togglebutton

<ToggleButton 
        android:id="@+id/toggle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:background="@drawable/check"   
        android:layout_margin="10dp"
        android:textOn=""
        android:textOff=""
        android:focusable="false"
        android:focusableInTouchMode="false"
        android:layout_centerVertical="true"/>

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <!-- When selected, use grey -->
    <item android:drawable="@drawable/selected_image"
          android:state_checked="true" />
    <!-- When not selected, use white-->
    <item android:drawable="@drawable/unselected_image"
        android:state_checked="false"/>

 </selector>

如何使用颜色而不是可绘制

我试过了:

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

    <item android:state_checked="true" android:color="@color/bg_blue"/>
    <item android:state_checked="false" android:color="@color/bg_light_grey"/>

</selector>

在颜色文件夹中定义了上面的选择器,名称为 bg_toggle.xml

android:background="@color/bg_toggle"

给出了例外:

android.view.InflateException:二进制XML文件行#50:错误膨胀类android.widget.ToggleButton

org.xmlpull.v1.XmlPullParserException:二进制XML文件行#4:标记需要一个'drawable'属性或定义drawable的子标记

谢谢

2 个答案:

答案 0 :(得分:5)

试试这个

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

    <item android:state_checked="true" android:drawable="@color/bg_blue"/>
    <item android:state_checked="false" android:drawable="@color/bg_light_grey"/>

 </selector>

修改

来自android Doc

  

注意:颜色资源也可以用作XML中的drawable。例如,在创建状态列表drawable时,您可以引用android:drawable属性的颜色资源(android:drawable =&#34; @ color / green&#34;)。

答案 1 :(得分:-2)

而不是尝试这样:

  ToggleButton btnToggle=(ToggleButton) findViewById(R.id.<Your ToggleButtonId>);
    btnToggle.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() {

        public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) {
            if(isChecked)
                buttonView.setBackgroundColor(Color.RED);
            else buttonView.setBackgroundColor(Color.GREEN);
        }
    });