数据绑定文本大写

Data Binding Text Capitalization

我的 XML 文件如下所示:

<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
    <data>
        <variable
            name="name"
            type="com.example.android.model.Name"/>
    </data>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:orientation="vertical">

        <TextView
            android:id="@+id/text_name"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center"
            android:layout_gravity="center"
            android:hint="@string/app_name"
            android:padding="8dp"
            android:text="@{name.title + ' ' + name.first + ' ' + name.last}"
            android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>
    </LinearLayout>
</layout>

而 POJO class 是:

public class Name {

    @SerializedName("title")
    @Expose
    private String title;
    @SerializedName("first")
    @Expose
    private String first;
    @SerializedName("last")
    @Expose
    private String last;
}

回复全部为小写字母,即

title = mr
first = jon
last = skeet

我知道从 Java 文件中大写的多种方法和策略,但是有没有什么方法可以使用 [=21] 将每个单词 的 首字母大写=]数据绑定来自XML文件本身而不是将每个单词的第一个字母大写来自相应的Java文件?

TextView 将像:

<TextView
    android:id="@+id/text_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_gravity="center"
    android:hint="@string/app_name"
    android:padding="8dp"
    android:text="@{String.valueOf(name.title.charAt(0)).toUpperCase()
         + name.title.substring(1) + ' '
         + String.valueOf(name.first.charAt(0)).toUpperCase()
         + name.first.substring(1) + ' '
         + String.valueOf(name.last.charAt(0)).toUpperCase()
         + name.last.substring(1)}"
    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>

像这样设置 BindingAdapter reference:

@BindingAdapter({"name_text"})
public static void setName(TextView textView, Name name) {
    String string = String.valueOf((name.title).charAt(0)).toUpperCase() + name.title.substring(1)
            + " " + String.valueOf((name.first).charAt(0)).toUpperCase() + name.first.substring(1)
            + " " + String.valueOf((name.last).charAt(0)).toUpperCase() + name.last.substring(1);
    textView.setText(string);
}

并将您的 TextView 指定为:

<TextView
    android:id="@+id/text_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:gravity="center"
    android:layout_gravity="center"
    android:hint="@string/app_name"
    android:padding="8dp"
    app:name_text="@{name}"
    android:textAppearance="@style/Base.TextAppearance.AppCompat.Medium"/>