选中时更改复选框文本颜色

时间:2014-12-30 23:02:00

标签: android android-checkbox

我想在选中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>

3 个答案:

答案 0 :(得分:14)

您也可以使用选择器,而不是/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)

修改

自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)以获取颜色状态列表。

答案 1 :(得分:4)

您可以通过编程方式执行此操作,回忆起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(...); }
        }
    });

答案 2 :(得分:1)

我不确定为什么没有提到通过xml设置文本颜色。 如果创建像@Eugen这样的text_my_checked.xml。 您可以像这样在xml中设置

<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:textColor="@drawable/text_my_checked"
    android:text="test/>