Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/firebase/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android 指明;删除线“;在文本视图文本的一部分上_Android_Textview - Fatal编程技术网

Android 指明;删除线“;在文本视图文本的一部分上

Android 指明;删除线“;在文本视图文本的一部分上,android,textview,Android,Textview,我有一个来自Web服务的文本块,根据我预定义的一些标记,我想在将文本设置为TextView之前设置文本样式。对于粗体、斜体和下划线,我可以使用replaceAll命令轻松完成这项工作: PageText = PageText.replaceAll("\\*([a-zA-Z0-9]+)\\*", "<b>$1</b>"); PageText = PageText.replaceAll("=([a-zA-Z0-9]+)=", "<i>$1</

我有一个来自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);
PageText=PageText.replaceAll(“\\*([a-zA-Z0-9]+)\\*”,“$1”);
PageText=PageText.replaceAll(“=([a-zA-Z0-9]+)=”,“$1”);
PageText=PageText.replaceAll(“zA-zA-Z0-9]+)zA,“$1”);
setText(Html.fromHtml(PageText),TextView.BufferType.Spanable);
所以,要加粗一个单词,用*括起来,斜体字用u括起来


但是,对于删除线,Html.fromHtml不支持“strike”标记,因此不能以相同的方式执行。我见过使用Spanable在一段文本上设置样式的示例,但它需要位置号。因此,我想我可以在文本中循环,搜索-(表示罢工的标记),然后搜索下一个,跨越中间的文本,并重复所有此类字符串。它最终将是10行循环代码,而其他代码则是1行,因此我想知道是否有更优雅的解决方案。

如果只是文本视图,则可以使用绘制标志来完成

TextView tv=(TextView) v.findViewById(android.R.id.text1);
tv.setPaintFlags(tv.getPaintFlags() | Paint.STRIKE_THRU_TEXT_FLAG);

您确定
Html.fromHtml
不支持
?它在

中列出,看起来它并没有得到真正的支持,至少它在Android 3.1上不起作用


@RMS2如果文本很小,您可以将其拆分为两个或三个单独的文本视图,并仅将该标志应用于您想要的文本,而不适合长文本;(

这里是一个使用自定义标记处理程序的解决方案,您必须将其传递到Html.fromHtml()


@Suresh解决方案适用于删除整个文本视图,但如果只删除部分文本,请使用下面的代码

    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
是删除线将从何处开始的字符数(从0开始)。

您可以使用自定义的
标记处理程序来执行此操作,例如:

TagHandler
实现了以下方法:

public void handleTag(boolean opening, String tag, Editable output,
        XMLReader xmlReader) {
    if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {
        processStrike(opening, output);
    }
}
....

谢谢,但这似乎适用于整个文本。我只需要删除文本的一部分-任何被连字符包围的单词,例如-这个-或-那个-。RMS2您有没有找到解决您的问题的方法?请发布它。@Sandiskp查看我的回答谢谢重播,但我收到的回复是这样的5000 10000 50%折扣计划使用Html.fr设置omhtml(字符串)如何处理请帮助我只有一个textview标签在android中不受支持,我已经检查到ICS 4.0.4或在Jelly bean中不受支持。我将实际价格、报价和折扣百分比作为一个字符串值,并且也有一个文本视图。根据您如何获得值,您可以拆分值,为不同的值应用单独的可设置条带,然后将其设置为文本。我个人没有这样做,但它应该会起作用。@RohanKandwal谢谢。我怎样才能通过线条颜色更改罢工?@Shayan_Aryan我不确定,你能试试这个吗。非常感谢。
public void handleTag(boolean opening, String tag, Editable output,
        XMLReader xmlReader) {
    if(tag.equalsIgnoreCase("strike") || tag.equals("s")) {
        processStrike(opening, output);
    }
}
....