我有一个来自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行,所以我想知道是否有更优雅的解决方案 .
6 回答
如果它只是TextView,您可以使用绘制标记进行打击
@Suresh解决方案如果你想要删除整个TextView,但是如果你想仅删除文本的某些部分,那么使用下面的代码 .
这里
text
是我们想要显示TextView的文本,3
是否 . 从删除线开始的字符(从0开始) .这是一个使用自定义TagHandler的解决方案,您必须传递给Html.fromHtml() .
Android: How to use the Html.TagHandler?
您可以使用自定义
TagHandler
来执行此操作,例如on this SO question:并且
TagHandler
实现了方法:你确定
Html.fromHtml
不支持<strike>
吗?它列于this Commonsware blog post它看起来并不真正支持,至少它在Android 3.1上不起作用 .
@ RMS2如果文本很小,你可以把它分成两个或三个单独的文本视图,只将标记应用到你想要的那个,不适合长文本;(