2014-12-30 116 views
4

我想在选中CheckBox时更改文本的颜色。这是我现在所拥有的:选中时更改复选框的文本颜色

<CheckBox 
    android:id="@+id/checkbox" 
    android:layout_width="20dp" 
    android:layout_height="20dp" 
    android:background="@drawable/states" 
    android:gravity="center_horizontal|center_vertical" 
    android:button="@null" 
    android:text="test/> 

复选框背景通常会在选中复选框时更改。问题是文字。它总是一样的颜色。如何勾选复选框时更改文字颜色?

我这是怎么改变国复选框背景(我删除,因为简单的演员):

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

    <item android:state_checked="false"> 
     <layer-list > 
      <item> 
       <shape android:shape="oval"> 
       </shape> 
      </item> 
     </layer-list> 
    </item> 

    <item android:state_checked="true" > 
     <layer-list > 
      <item> 
       <shape android:shape="oval"> 
       </shape> 
      </item> 
     </layer-list > 
    </item> 
</selector> 

回答

10

您可以使用选择很好,但不是/res/drawable把它放在/res/color

/res/color/text_my_checked.xml

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:color="#ffcc00"/> <!-- checked --> 
    <item android:color="#ffffff"/> <!-- anything else --> 
</selector> 

你会通过调用getResources().getColorStateList(R.color.text_my_checked)得到这个颜色ColorStateList

编辑:

自从程序兼容性-V7 24.0.0我们可以在平台上颜色状态列表主题引用到API 9.本最初在API 23

<selector xmlns:android="http://schemas.android.com/apk/res/android"> 
    <item android:state_checked="true" android:color="?colorControlActivated"/> <!-- checked --> 
    <item android:state_checked="true" android:state_enabled="false" app:alpha="?android:disabledAlpha" android:color="?colorControlActivated"/> <!-- checked, disabled --> 
    <item android:color="?android:textColorPrimary"/> <!-- anything else --> 
</selector> 
介绍

致电AppCompatResources.getColorStateList(checkbox.getContext(), R.color.text_my_checked)获取颜色状态列表。

+0

你节省了我的一天 –

3

你可以做到这一点编程,回顾你的Checkbox并设置一个onCheckedChangeListener

CheckBox cb = (CheckBox) findViewById(R.id.checkbox); 
    cb.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
     @Override 
     public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
      if (isChecked) { buttonView.setTextColor(...) } 
      if (!isChecked) { buttonView.setTextColor(...); } 
     } 
    });