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

问题描述 投票:0回答:1

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

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

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

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

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

所需的解决方案将是这样(资源ID是动态的):

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

android android-databinding
1个回答
0
投票

也许我无法正确理解您的问题,但是您可以使用BindingAdapter配置绑定。例如,您可以如下设置字符串资源:

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)

test.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>
© www.soinside.com 2019 - 2024. All rights reserved.