从xml布局获取格式化的资源字符串

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了从xml布局获取格式化的资源字符串相关的知识,希望对你有一定的参考价值。

如何在xml布局文件中从resvaluesstrings.xml获取格式化字符串?例如:像这样有一个resvaluesstrings.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>

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

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

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

但是从xml布局?

答案

你可以使用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类中。

以上是关于从xml布局获取格式化的资源字符串的主要内容,如果未能解决你的问题,请参考以下文章

从服务器加载 XML 布局 (android)

如何从 Android Studio 中片段的 XML 布局导航到相应的 java 类?

在使用ViewPager时尝试从其父活动修改片段时出现空指针异常

如何从应用程序的(布局)XML 变量中获取清单版本号?

如何从应用程序的(布局)XML 变量中获取清单版本号?

从 XML 声明片段获取 XML 编码:部分内容解析不支持 XmlDeclaration