tom*_*ozb 18 android android-databinding
我正在尝试TextView使用数据绑定库设置文本颜色
android:textColor="@{holder.getTitleColor(context, item)}"
Run Code Online (Sandbox Code Playgroud)
Holder类中的方法定义如下
public int getTitleColor(Context context, Item item) {
...
}
Run Code Online (Sandbox Code Playgroud)
无论我返回颜色int(@ColorInt)还是颜色资源(@ColorRes),它都会将文本绘制为纯白色.我究竟做错了什么?
Mar*_*ann 37
我似乎int提供的内容被解释为十六进制颜色,即使这个setter应该期望资源ID看起来很直观.
使用Context为每个可绑定视图生成的引用,并使用它将资源ID转换为您指向的颜色,如DataBinding Dev Guide中所述:
根据需要,生成一个名为context的特殊变量,用于绑定表达式.上下文的值是来自根View的getContext()的Context.
用它来设置这样的颜色:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.text}"
android:textColor="@{context.getColor(data.colorRes)}"
/>
Run Code Online (Sandbox Code Playgroud)
除了@Mardann 的解决方案之外,这里还有一个更新的解决方案,它也适用于使用 ContextCompat.getColor() 低于 23 的 API:
<layout>
<data>
<import type="androidx.core.content.ContextCompat" />
<variable
name="data"
type="com.example.myapp.MyDataObject" />
</data>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{data.text}"
android:textColor="@{ContextCompat.getColor(context, data.colorRes)}"/>
</layout>
Run Code Online (Sandbox Code Playgroud)
就我而言,颜色值采用字符串格式(例如“#000000”)
1.字符串 TxtColor = "#000000"
2.导入“android.graphics.Color”
<layout>
<data>
<import type="android.graphics.Color"/>
<variable name="txtColor" type="String"/>
</data>
.... other views
</layout>
Run Code Online (Sandbox Code Playgroud)
3.设置为 Desired View -- 在我的例子中是 TextView
........ other views
<android.support.v7.widget.AppCompatTextView
android:id="@+id/tvTitle"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:textcolor= "@{Color.parseColor(txtColor)}" //when we import android.graphics.Color we can access it's all methods present
tools:text="Test"/>
...... other views
Run Code Online (Sandbox Code Playgroud)
4.从 Activity/Adapter 绑定——在我的例子中是 Adapter
inner class ViewHolder(private val binding: BindingClass) :
RecyclerView.ViewHolder(binding.root) {
fun setData(data: DataClass, TxtColor : String?) {
binding.txtColor= TxtColor
binding.executePendingBindings()
}
}
Run Code Online (Sandbox Code Playgroud)
使用创建方法 BindingAdapter
@BindingAdapter({"bind:color"})
public static void setFont(TextView textView, Item item) {
textView.setTextColor(<set color of your choice>);
}
Run Code Online (Sandbox Code Playgroud)
并从xml调用它
app:color="@{item}"
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
16390 次 |
| 最近记录: |