【发布时间】:2015-08-03 01:55:32
【问题描述】:
使用 Android 的新 data binding library,我是否可以仅通过 XML 为 TextView 使用 HTML 格式,还是必须以编程方式使用 Html.fromHtml?
【问题讨论】:
标签: android data-binding
使用 Android 的新 data binding library,我是否可以仅通过 XML 为 TextView 使用 HTML 格式,还是必须以编程方式使用 Html.fromHtml?
【问题讨论】:
标签: android data-binding
你必须先导入 Html 然后调用 fromHtml 方法:
<data>
<import type="android.text.Html"/>
</data>
…
<TextView
android:text="@{Html.fromHtml(@string/my_html)}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
【讨论】:
如果你想使用带有html标签的字符串并将其与字符串参数结合起来,可以这样完成:
在布局中:
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@{activity.formattedString}" />
在您的活动中(例如):
public CharSequence getFormattedString() {
if(selectedItem == null) return null;
String str = String.format(Html.toHtml(SpannedString.valueOf(this.getResources().getText(R.string.your_tagged_string))), parameter);
return Html.fromHtml(str);
}
【讨论】:
不应在视图中进行转换。视图模型用于在原始模型和视图之间进行转换操作。
所以我宁愿那样做:
<data>
<variable
name="viewModel"
type="yourpackage.YourViewModel"/>
</data>
…
<TextView
android:text="@{viewModel.htmlText}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
在您的视图模型中:
private Model model; // your model
public Spanned getHtmlText(){
return Html.fromHtml(model.htmlText);
}
【讨论】:
我有一个更优雅、更高效和可重复使用的答案here 涵盖了这个特定场景
【讨论】: