复数在xml中不起作用

时间:2018-07-17 23:20:53

标签: android android-databinding

我正在尝试在TextInputEditText的错误文本中加载复数形式:

<android.support.design.widget.TextInputEditText
    android:id="@+id/et_subject_name"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:inputType="textCapWords"
    android:lines="1"
    android:maxLines="1"
    android:singleLine="true"
    android:text="@{ model.name }"
    android:hint="@string/hint_name"
    app:validateRegex='@{"^*\\S{2}.*$"}'
    app:validateRegexMessage="@{@plurals/error_too_short(model.minNameLength)}"/>

但是在我的应用中,它显示了我的字符串,但带有%d而不是model.minNameLength值。 app:validateRegexData Binding Validator库定义的属性。
我的复数:

<plurals name="error_too_short">
    <item quantity="one" >Too short, enter at least %d visible character.</item>
    <item quantity="other" >Too short, enter at least %d visible characters.</item>
</plurals>

怎么了?还是用另一种方式在xml中显示复数?
附言如果重要的话,我会使用数据绑定引擎V2。

2 个答案:

答案 0 :(得分:1)

它应该像这样:

<plurals name="recent_messages">
    <item quantity="zero">No Recent Messages</item>
    <item quantity="one">1 Recent Message</item>
    <item quantity="other">%1$d Recent Messages</item>
</plurals>

mContext.getResources().getQuantityString(R.plurals.recent_messages, count, count);

答案 1 :(得分:1)

在官方Android docs中:

  

使用getQuantityString()方法时,如果您的字符串包含   带数字的字符串格式。例如,对于字符串   找到%d首歌曲,第一个count参数选择适当的复数字符串,然后   第二个count参数插入%d占位符。如果您的复数   字符串不包含字符串格式,您无需将第三个参数传递给getQuantityString

因此,如要model.minNameLength定义要选择的复数版本并将其值插入字符串,则应提供两次。因此,数据绑定表达式应改为:

app:validateRegexMessage="@{@plurals/error_too_short(model.minNameLength, model.minNameLength)}"