CheckBox上的API21 setButtonTintList

时间:2015-01-20 14:04:12

标签: android android-5.0-lollipop android-checkbox

我正在尝试使用新的Android Lollipop API setButtonTintList()以编程方式将颜色应用于android CheckBox es。

我在ColorStateList中设置了以下基本checkbox_color.xml

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:state_checked="true"
          android:color="@color/red" />

    <item android:state_checked="false"
          android:color="@color/green" />

</selector>

在我的应用中的特定Button点击中,我通过以下方式将包含CheckBox的新布局扩展到我的主要布局(mLayoutTotalItemRow)中:

View itemRow = getActivity().getLayoutInflater().inflate(R.layout.row_add_purchase, mLayoutTotalItemRow, false);

通货膨胀之后,我想将checkbox_color.xml应用到新的CheckBox通道(我想在代码而不是xml中执行此操作的原因是我想根据某些变量设置不同的颜色):

mCheckBoxEnabled.setButtonTintList(mContext.getResources().getColorStateList(R.color.checkbox_color));

现在发生了一件奇怪的事情,当CheckBox首次创建时,它是红色的(因此state_checked="true"。一旦我取消选中它,它就是绿色(state_chacked="false")。但是当我现在再次检查它时,它会变为勾选但它会保持绿色!因此,内部视图状态不会改变为&#34;已检查&#34;。

我的复选框xml:

   <CheckBox
    android:id="@+id/cb_item_enabled"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:layout_marginStart="@dimen/key_line_1_minus_checkbox_margin"
    android:layout_marginEnd="@dimen/key_line_2_minus_key_line_1_minus_checkbox"
    android:layout_gravity="center_vertical"
    android:checked="true"/>

我在这里做错了什么想法?

2 个答案:

答案 0 :(得分:6)

我已经向Android项目报告了该错误。 Issue 157166
修复下一个版本5.1

  

这已在5.1中修复,但尚未完全发布。

     

状态:FutureRelease

编辑10.03.2015

  

发布于5.1。

答案 1 :(得分:0)

科特琳:

val iconsColorStates = ColorStateList(arrayOf(intArrayOf(-android.R.attr.state_selected),
                intArrayOf(android.R.attr.state_selected)),
                intArrayOf(color, color))

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP) {
    buttonTintList = iconsColorStates
} else {
    (this as TintableCompoundButton).supportButtonTintList = iconsColorStates
}