4

如何从res\values\strings.xmlxml 布局文件中获取格式化字符串?例如:有一个res\values\strings.xml这样的:

<resources>
    <string name="review_web_url"><a href="%1$s">Read online</a></string>
</resources>

和这样的 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="model" type="com.example.model.MyModel" />
    </data>

    <TextView android:text="@string/review_web_url"/>
</layout>

如何获取review_web_url使用值 @{model.anchorHtml} 传递/格式化的资源字符串?

有一种方法可以像我在 java 代码中那样获取这个格式化的字符串:

String anchorString = activity.getString(R.string.review_web_url, model.getAnchorHtml());

但从 xml 布局?

4

1 回答 1

6

您可以使用 BindingAdapter!

看看这个链接,它将向您介绍 BindingAdapters: https ://developer.android.com/reference/android/databinding/BindingAdapter.html

你将不得不做这样的事情:

@BindingAdapter(values={"textToFormat", "value"})
public static void setFormattedValue(TextView view, int textToFormat, String value) 
{
    view.setText(String.format(view.getContext().getResources().getString(textToFormat), value));
}

然后,在您的 xml 中,您可以执行以下操作:

<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="model" type="com.example.model.MyModel" />
    </data>

    <TextView 
        ...
        app:textToFormat="@string/review_web_url"
        app:value="@{model.anchorHtml}"/>
</layout>

BindingAdapter 将为您完成艰苦的工作!请注意,您需要将其设为静态和公开的,因此您可以将其放在 Utils 类中。

于 2018-03-01T15:36:46.037 回答