2014-12-30 120 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(...); } 
     } 
    });