2014-12-30 2 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/> 

Флажок галочки обычно изменяется, когда флажок установлен. Проблема заключается в тексте. Это всегда один цвет. Как изменить цвет текста при установке флажка?

Это, как я изменять состояния для CheckBox фона (я удалил статистов из-за простоты):

<?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> 

Вы бы получить этот цвет как ColorStateList по телефону getResources().getColorStateList(R.color.text_my_checked).

EDIT:

С тех пор как AppCompat-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(...); } 
     } 
    });