数据绑定文本大写
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"/>
我的 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"/>