kotlin 如何使用**style**属性从数据绑定中设置样式资源

bnlyeluc  于 2022-12-30  发布在  Kotlin
关注(0)|答案(1)|浏览(198)

在viewModel中,我有一个如下的函数:

fun getTextInputStyle(): Int {
val style = if (isTrue) {
    R.style.styleOne
} else {
    R.style.styleTwo
}
return style

}
在XML文件中,有一个textInputLayout调用ViewModel中的函数:

<com.google.android.material.textfield.TextInputLayout
android:id="@+id/til_first_name"
style="@{viewModel.getTextInputStyle}"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginStart="@dimen/_16sdp"
android:layout_marginTop="@dimen/_13sdp"
android:layout_marginEnd="@dimen/_16sdp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@+id/rg_title">

</com.google.android.material.textfield.TextInputLayout>

这里是控制台中记录的错误:

Cannot find a setter for 
        <com.google.android.material.textfield.TextInputLayout style> 
        that 
        accepts parameter type 'int'
   If a binding adapter provides the setter, check that the adapter is 
   annotated correctly and that the parameter type matches.
lxkprmvk

lxkprmvk1#

您可以使用绑定适配器像这样设置样式。

@BindingAdapter("bindTextViewStyle")
fun TextView.bindTextViewStyle(styleResourceId: Int) {
    this.style(styleResourceId)
}

和XML格式

<TextView
    app:bindTextViewStyle="@{viewModel.textStyle}"
    .../>

参考此链接:https://stackoverflow.com/a/64009888/20839582

相关问题