数据绑定和 ColorStateList 选择器
Databinding and ColorStateList Selector
我有一个回收器视图,我需要使用其中一种颜色选择器(取决于数据绑定中的值)来更改 TextView 颜色。
我有两个选择器:
color/selector_item_text.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_checked="true" />
<item android:color="@color/white" android:state_pressed="true" />
<item android:color="@color/white" android:state_activated="true" />
<item android:color="@color/black" />
</selector>
color/selector_item_textwithspecial.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/pink" android:state_checked="true" />
<item android:color="@color/pink" android:state_pressed="true" />
<item android:color="@color/pink" android:state_activated="true" />
<item android:color="@color/orange" />
</selector>
然后我将它绑定到我的 TextView,如下所示:
<TextView android:text="@{data.displayPrice}"
android:textColor="@{data.isSpecial ? @color/selector_item_textwithspecial : @color/selector_item_text}"
style="@style/ProductPrice"/>
问题是 TextView 颜色总是橙色(如果它有特殊颜色)或黑色。选择永远不会改变颜色。但是,如果我删除数据绑定,它会按预期工作。
例如下面会让TextView变成粉色(选中时)和橙色(未选中时)
<TextView android:text="@{data.displayPrice}"
android:textColor="@color/selector_item_textwithspecial"
style="@style/ProductPrice"/>
知道如何解决这个问题吗?
谢谢...
我认为您需要使用 ContextCompat 来获取颜色。
<TextView android:text="@{data.displayPrice}"
android:textColor="@{data.isSpecial ? @{ContextCompat.getColor(context, @color/selector_item_textwithspecial)} : ContextCompat.getColor(context, @color/selector_item_text)}"
style="@style/ProductPrice"/>
而您需要在 xml 文件的根元素中声明上下文
tools:context="...."//path to your activity
想通了,看
使用android:textColor="@{data.isSpecial ? @colorStateList/selector_item_textwithspecial : @colorStateList/selector_item_text}"
我有一个回收器视图,我需要使用其中一种颜色选择器(取决于数据绑定中的值)来更改 TextView 颜色。
我有两个选择器:
color/selector_item_text.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/white" android:state_checked="true" />
<item android:color="@color/white" android:state_pressed="true" />
<item android:color="@color/white" android:state_activated="true" />
<item android:color="@color/black" />
</selector>
color/selector_item_textwithspecial.xml
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:color="@color/pink" android:state_checked="true" />
<item android:color="@color/pink" android:state_pressed="true" />
<item android:color="@color/pink" android:state_activated="true" />
<item android:color="@color/orange" />
</selector>
然后我将它绑定到我的 TextView,如下所示:
<TextView android:text="@{data.displayPrice}"
android:textColor="@{data.isSpecial ? @color/selector_item_textwithspecial : @color/selector_item_text}"
style="@style/ProductPrice"/>
问题是 TextView 颜色总是橙色(如果它有特殊颜色)或黑色。选择永远不会改变颜色。但是,如果我删除数据绑定,它会按预期工作。
例如下面会让TextView变成粉色(选中时)和橙色(未选中时)
<TextView android:text="@{data.displayPrice}"
android:textColor="@color/selector_item_textwithspecial"
style="@style/ProductPrice"/>
知道如何解决这个问题吗?
谢谢...
我认为您需要使用 ContextCompat 来获取颜色。
<TextView android:text="@{data.displayPrice}"
android:textColor="@{data.isSpecial ? @{ContextCompat.getColor(context, @color/selector_item_textwithspecial)} : ContextCompat.getColor(context, @color/selector_item_text)}"
style="@style/ProductPrice"/>
而您需要在 xml 文件的根元素中声明上下文
tools:context="...."//path to your activity
想通了,看
使用android:textColor="@{data.isSpecial ? @colorStateList/selector_item_textwithspecial : @colorStateList/selector_item_text}"