我有一个来自text服务的文本块,根据我预定义的一些标记,我想在将文本设置为我的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行,所以我想知道是否有更优雅的解决方案。
发布于 2015-09-24 01:43:49
您可以使用诸如one on this SO question之类的自定义TagHandler来完成此操作
Spanned parsed = Html.fromHtml(PageText, null, new MyHtmlTagHandler());而TagHandler实现了以下方法:
public void handleTag(boolean opening, String tag, Editable output,
XMLReader xmlReader) {
if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {
processStrike(opening, output);
}
}
....https://stackoverflow.com/questions/4301453
复制相似问题