【问题标题】:Data Binding Text Capitalization数据绑定文本大写
【发布时间】:2018-04-12 06:50:42
【问题描述】:

我的 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类是:

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 文件中大写的多种方式和策略,但是有没有办法使用 数据绑定每个单词的首字母 大写>XML 文件本身而不是将每个单词的首字母大写在相应的 Java 文件中

【问题讨论】:

  • 您应该改正您的数据。信不信由你,有些语言和名称不以大写字母开头。名称自动大写是错误的。

标签: java android data-binding android-databinding capitalization


【解决方案1】:

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"/>

【讨论】:

    【解决方案2】:

    像这样设置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"/>
    

    【讨论】:

      猜你喜欢
      • 2018-10-10
      • 2011-06-27
      • 2011-09-30
      • 2011-07-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多