我从一个 Web 服务获取了一段文本,根据我预定义的一些标签,我想在将其设置到我的 TextView 之前对其进行样式设置。对于加粗、斜体和下划线,我可以很容易地使用 replaceAll 命令实现:
PageText = PageText.replaceAll("\\*([a-zA-Z0-9]+)\\*", "<b>$1</b>");
PageText = PageText.replaceAll("=([a-zA-Z0-9]+)=", "<i>$1</i>");
PageText = PageText.replaceAll("_([a-zA-Z0-9]+)_", "<u>$1</u>");
txtPage.setText(Html.fromHtml(PageText), TextView.BufferType.SPANNABLE);
想要加粗一个单词,将其用 * 包裹起来;想要斜体,将其用 _ 包裹起来。
然而,Html.fromHtml不支持 "strike" 标签,所以无法使用相同的方法来完成删除线。我看到有人用 Spannable 来设置文本的样式,但它需要位置数字。因此,我可以循环遍历文本,搜索 -(表示删除线的标签),然后搜索下一个标签,跨越之间的文本,并重复所有这样的字符串。这最终会成为 10 行循环代码,而其他方法只需要 1 行,因此我想知道是否存在更优雅的解决方案。