android - 使用数据绑定 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 试图变得聪明,但这样做使用了错误的方法。
现在,要解决它,您有两个选择:
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。但最后都是一样的,只要你确保使用 an@StringRes Int
而不是 aString
推荐阅读
- r - R:在 Flexdashboard 中通过 iframe 嵌入 PDF 文件会在新选项卡中打开 pdf 文件
- python - 使用 pytorch 的变量的目标是什么?
- c# - ASP.NET Core,处理预期异常
- java - 为什么我的音频播放会冻结 ActionListner?
- azure - Azure SDK for Go - 可以获取 KeyVault 但无法获取 KeyVault.Properties
- typescript - 如何在不知道键的情况下提取对象每个值的返回类型
- asp.net-core - 获取客户端机器名称和 ID - ASP.NET Core 3.1
- spring-boot - SpringBoot spring-boot-starter-web-services 和 spring-boot-starter-webflux 中断 DSL 路由
- windows - 如果未通过,Gnuplot如何将变量设置为标准输入
- c# - 如何在c#中制作一侧圆形按钮?