首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >在一段TextView文本上指定“删除线”

在一段TextView文本上指定“删除线”
EN

Stack Overflow用户
提问于 2010-11-29 14:45:45
回答 7查看 31.2K关注 0票数 31

我有一个来自text服务的文本块,根据我预定义的一些标记,我想在将文本设置为我的TextView之前设置文本的样式。对于粗体、斜体和下划线,我可以使用replaceAll命令轻松做到这一点:

代码语言:javascript
运行
复制
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行,所以我想知道是否有更优雅的解决方案。

EN

回答 7

Stack Overflow用户

发布于 2010-11-29 15:05:03

如果它只是TextView,你可以使用画图标志删除

代码语言:javascript
运行
复制
TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);
票数 93
EN

Stack Overflow用户

发布于 2014-09-25 19:21:28

@Suresh解决方案适用于如果你想删除整个TextView,但如果你只想删除文本的一部分,那么使用下面的代码。

代码语言:javascript
运行
复制
    tvMRP.setText(text, TextView.BufferType.SPANNABLE);
    Spannable spannable = (Spannable) tvMRP.getText();
    spannable.setSpan(new StrikethroughSpan(), 3, text.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);

这里text是我们想让TextView显示的文本,3是no。从删除线开始的字符数(从0开始)。

票数 36
EN

Stack Overflow用户

发布于 2013-05-17 04:22:46

这是一个使用必须传递给Html.fromHtml()的自定义TagHandler的解决方案。

Android: How to use the Html.TagHandler?

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/4301453

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档