【发布时间】:2018-08-13 12:18:08
【问题描述】:
我想将我的文本的某些部分设置为粗体,其值是使用 DataBinding 和 ViewModel 设置的。
例如
如果您被选中,您将为您的配对支付 160 美元。
我正在使用字符串资源
<string name="product_price">If you are selected, you will have to pay $%d for your pair.</string>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginEnd="@dimen/spacing_xlarge"
android:layout_marginStart="@dimen/spacing_xlarge"
android:layout_marginBottom="@dimen/spacing_small"
android:text="@{@string/product_price(productPrice)}"
android:textColor="@color/button_tertiary"
android:visibility="@{productPrice > 0}"
style="@style/Body.Small"
/>
目前通过设置binding.setProductPrice(Object.getPrice())使用带绑定的ViewModel传递产品价格
我知道以下解决方案:但想尝试使用 DataBinding
- 使用 Html 文本 - 但不想在代码中使用它。
- 在水平样式中使用不同的 TextView。将该产品价格的样式设置为粗体。 - 非常糟糕的做法
- 使用 SpannableString - 但不想在代码中使用它。
但上述所有解决方案都是解决方法。
问题::
Want to try DataBinding feature which can be used to style certain part of string. Just like SpannableString
Manipulate String in the Layout file using DataBinding
【问题讨论】:
-
@pskink :我不想将完整的 SpannableString 或 String 传递给 TextView。这个想法是将文本样式应用于文本的某些部分。虽然感谢您的建议。
-
@pskink :是的,这是最后一个选项(传递 SpannableString/SpannableStringBuilder)。但是我们不能使用 DataBinding 应用样式吗?
-
@pskink :使用 DataBinding 返回
SpannableStringBuilder或SpannableString。但这对 String 的操作是在 java/kotlin 的代码中。我想使用 DataBinding 在布局文件中操作String。 -
为什么不只是将
<b>标签添加到字符串资源:<string name="product_price">If you are selected, you will have to pay <b>$%d</b> for your pair.</string>?这不适用于任意更改(例如,前景色),但对于粗体字应该没问题。 “我想使用 DataBinding 在布局文件中操作字符串。” -- 这不太实用,因为您没有完整的多语句编程语言。 一些内容必须在 Java/Kotlin 中,至少在BindingAdapter或其他帮助代码级别。 -
@CommonsWare :尝试将 标记添加到字符串资源:
<string name="product_price">If you are selected, you will have to pay <b>$%d</b> for your pair.</string>。但是文本仍然是未格式化的。尝试使用If you are selected, you will have to pay <![CDATA[<b>$%d</b>]]> for your pair。它仍然显示相同的结果,未格式化的纯文本。
标签: android android-databinding android-mvvm