数据绑定不读取字符串标签内的字体标签 Android
Font tag inside string tag is not read with Data Binding Android
字符串资源:
<string name="hint_dob_mandatory">Date of birth<font color='#FFFF0000'> *</font></string>
<!-- Already tried with '#FFFF0000', "#FFFF0000" -->
<string name="hint_dob">Date of birth</string>
下面这段代码工作正常:
android:hint="@string/hint_dob_mandatory"
下面是正确的实际输出:(正常使用字符串 res)
此处,数据绑定问题:
android:hint="@{ANY_TRUE_CONDITION ? @string/hint_dob_mandatory : @string/hint_dob}
下面是有问题的实际输出:(使用字符串 res 的数据绑定)
关键是看方法的签名。
如果你没有使用数据绑定,你实际上是在使用这个方法:
fun EditText.setHint(resourceId: Int)
当使用Databinding时,@string/hint_dob_mandatory
会自动解析为String,事实上,你正在使用这个方法:
fun EditText.setHint(hint: CharSequence)
第一个可以很好地处理字体标签,但第二个将忽略它。基本上,Databinding 试图变得聪明,但这样做使用了错误的方法。
现在,要解决这个问题,您有 2 个选择:
1) 为提示显式设置一个ResourceId
<data>
<variable
name="hintResource"
type="Integer" />
</data>
<EditText
android:hint="@{hintResource}" />
使用这种方法,您需要在绑定上设置 hintResource
binding.hintResource = R.string.hint
这有效地确保了正在使用 setHint(res: Int)
变体
2) 导入你的 R 文件
<data>
<import type="com.your.package.R" />
</data>
<EditText
app:resourceHint="@{ANY_TRUE_CONDITION ? R.string.hint_dob_mandatory : R.string.hint_dob}
导入R
文件,即可在dataBinding表达式中使用。使用 R.string.hint 表示您使用资源。而 @string/hint 实际上会将资源转换为字符串。
最后,两者的组合也是可能的,以及创建自定义 BindingAdapter。但最后都是一样的,只要你确保使用 @StringRes Int
而不是 String
字符串资源:
<string name="hint_dob_mandatory">Date of birth<font color='#FFFF0000'> *</font></string>
<!-- Already tried with '#FFFF0000', "#FFFF0000" -->
<string name="hint_dob">Date of birth</string>
下面这段代码工作正常:
android:hint="@string/hint_dob_mandatory"
下面是正确的实际输出:(正常使用字符串 res)
此处,数据绑定问题:
android:hint="@{ANY_TRUE_CONDITION ? @string/hint_dob_mandatory : @string/hint_dob}
下面是有问题的实际输出:(使用字符串 res 的数据绑定)
关键是看方法的签名。 如果你没有使用数据绑定,你实际上是在使用这个方法:
fun EditText.setHint(resourceId: Int)
当使用Databinding时,@string/hint_dob_mandatory
会自动解析为String,事实上,你正在使用这个方法:
fun EditText.setHint(hint: CharSequence)
第一个可以很好地处理字体标签,但第二个将忽略它。基本上,Databinding 试图变得聪明,但这样做使用了错误的方法。
现在,要解决这个问题,您有 2 个选择:
1) 为提示显式设置一个ResourceId
<data>
<variable
name="hintResource"
type="Integer" />
</data>
<EditText
android:hint="@{hintResource}" />
使用这种方法,您需要在绑定上设置 hintResource
binding.hintResource = R.string.hint
这有效地确保了正在使用 setHint(res: Int)
变体
2) 导入你的 R 文件
<data>
<import type="com.your.package.R" />
</data>
<EditText
app:resourceHint="@{ANY_TRUE_CONDITION ? R.string.hint_dob_mandatory : R.string.hint_dob}
导入R
文件,即可在dataBinding表达式中使用。使用 R.string.hint 表示您使用资源。而 @string/hint 实际上会将资源转换为字符串。
最后,两者的组合也是可能的,以及创建自定义 BindingAdapter。但最后都是一样的,只要你确保使用 @StringRes Int
而不是 String