数据绑定:将资源 ID 传递给自定义视图字符串属性?



我有一个自定义视图,其可样式属性定义为:

<declare-styleable name="CustomView">
<attr name="stringAttribute" format="string"/>
</declare-styleable>

我想在初始化时将字符串资源传递给此视图,以便我可以通过obtainStyledAttributes获取它并立即将其应用于视图。

但是,由于字符串资源是动态的,因此我似乎找不到在不使用绑定适配器的情况下将其传递给视图的方法。

是否可以在不依赖绑定适配器的情况下将字符串资源 ID 传递给自定义视图?

所需的解决方案如下所示(其中资源 ID 是动态的(:

app:stringAttribute="@{context.getString(R.string.value)}"

也许我没有正确理解您的问题,但是您可以使用绑定适配器配置绑定。例如,可以按如下方式设置字符串资源:

TestBindings.kt

@BindingAdapter("stringRes")
fun setStringRes(view: TextView, @StringRes resource: Int) {
view.text = view.context.getString(resource)
}

TestViewModel.kt

data class TestViewModel(@StringRes val text: Int)

测试.xml

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools">
<data>
<variable
name="viewModel"
type="... .TestViewModel" />
</data>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
stringRes="@{viewModel.text}"/>
</layout>

最新更新