我的 strings.xml
里面有一些固定的字符串,比如:
<resources>
<string name="somestring">
<B>Title</B><BR/>
Content
</string>
</resources>
在我的布局中,我有一个 TextView
我想用 html 格式的字符串填充它。
<TextView android:id="@+id/formattedtext"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/htmlstring"/>
如果我这样做, formattedtext
somestring
内容,去掉任何 html 标签,因此未格式化。
我知道可以通过编程方式设置格式化文本
.setText(Html.fromHtml(somestring));
因为我在我的程序的其他部分使用它,它按预期工作。
要调用此函数,我需要一个 Activity
,但目前我的布局只是一个简单的或多或少的纯 XML 静态视图,我宁愿保持这种状态,以免产生开销创建一个 Activity
只是为了设置一些文本。
我是否忽略了一些明显的东西?难道根本不可能吗?欢迎任何帮助或解决方法!
编辑:刚刚尝试了一些东西,似乎 xml 中的 HTML 格式有一些限制:
标签必须小写
这里 提到的一些标签不起作用,例如
<br/>
(可以使用\n
代替)
原文由 slup 发布,翻译遵循 CC BY-SA 4.0 许可协议
以防万一有人发现这个,有一个更好的替代方案没有记录(我在搜索了几个小时后绊倒了它,最后在 Android SDK 本身的错误列表中找到了它)。您可以在 strings.xml 中包含原始 HTML,只要您将其包装在
边缘案例:
'
and"
can be represented as\'
and\"
, or'
and"
。<
and>
always need to be escaped as<
and>
if you literally want them to render as ‘<’ and ‘> ’ 在文中。&qqq;
renders as&qqq;
, but<1
renders as<1
.例子:
然后,在您的代码中:
恕我直言,这比使用它好几个数量级:-)
2021 年 8 月更新: 我原来的答案使用的是 Html.fromHtml(String),它在 API 24 中已被弃用。建议使用 fromHtml(String,int) 形式替代它。
FROM_HTML_MODE_LEGACY 可能会起作用…但是其他标志之一可能是您想要执行的操作的更好选择。
最后一点,如果您更喜欢使用 Markdown 语法而不是 HTML 呈现适合在 TextView 中使用的 Android 跨区文本,现在有多个第三方库可以使它变得简单,包括 https://noties.io/Markwon 。