我正在尝试使用新的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"/>
我在这里做错了什么想法?
答案 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
}