选择器不能在带有向量的Checkbox上工作

时间:2017-12-28 16:32:27

标签: android android-layout android-checkbox

所以,我过去做过选择器,我不知道为什么它这次没有工作。我有2个矢量drawables,计划是在点击它们之间切换。 我创建了以下选择器文件:

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

    <item android:drawable="@drawable/ic_vector_favorite"
          android:state_checked="true"
          android:state_selected="true"/>

    <item android:drawable="@drawable/ic_vector_favorite_border"
          android:state_checked="false"/>
</selector>

这是我的复选框:

<CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/ic_phone_margin"
            android:button="@drawable/ic_favorite_selector"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/iv_call"
            app:layout_constraintTop_toTopOf="parent"/>

但是,每当我点击它,没有任何改变。我已尝试使用android:checked="true",但它仍然是相同的。

2 个答案:

答案 0 :(得分:1)

您只需从选择器中删除android:state_selected="true"即可。它应该只是

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

    <item android:drawable="@drawable/ic_vector_favorite"
          android:state_checked="true"/>

    <item android:drawable="@drawable/ic_vector_favorite_border"
          android:state_checked="false"/>
</selector> 

答案 1 :(得分:0)

将此添加到您的模块级build.gradle

 vectorDrawables.useSupportLibrary = true

将此添加到“活动/片段”中

 static {
        AppCompatDelegate.setCompatVectorFromResourcesEnabled(true);
    }

从XML删除可绘制的矢量

<CheckBox
            android:id="@+id/checkBox"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="@dimen/ic_phone_margin"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toStartOf="@+id/iv_call"
            app:layout_constraintTop_toTopOf="parent"/>

像这样通过编程方式设置CheckBox自定义可绘制对象

CheckBox cb = findViewById(R.id.checkBox);

cb.setButtonDrawable(AppCompatResources.getDrawable(getContext(), R.drawable.ic_favorite_selector));