如何从SpannableString中删除span样式

时间:2015-11-05 02:33:39

标签: android spannablestring

我试图从我的SpannableString中删除样式但遗憾的是无法正常工作,我的目的是在点击文本时删除样式。

SpannableString content = new SpannableString("Test Text");
content.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 0, content.length(), 0);
...

onClick动作:

  content.removeSpan(new StyleSpan(Typeface.BOLD_ITALIC)) // not working

提前致谢

2 个答案:

答案 0 :(得分:3)

两个styleSpan你新的不是同一个对象。您可以使用非匿名对象来指向它。像这样更改你的代码:

StyleSpan styleSpan = new StyleSpan(Typeface.BOLD_ITALIC); content.setSpan(styleSpan , 0, content.length(), 0);

onClick动作:

content.removeSpan(styleSpan);
textView.setText(content);// to redraw the TextView

答案 1 :(得分:0)

正如郑兴杰指出的,您可以使用 removeSpan() 删除特定的跨度,但您需要存储跨度对象。

然而,我遇到一个案例,我需要匿名删除一组相同样式的span,并保留其他样式,所以我通过对这种特定类型的span进行迭代来做到这一点:

就我而言,它是 BackgroundColorSpan,但我会像有人问的那样使用 StyleSpan

Java

SpannableString content = new SpannableString("Test Text");
content.setSpan(new StyleSpan(Typeface.BOLD_ITALIC), 0, content.length(), 0);
StyleSpan[] spans = content.getSpans(0, content.length(), StyleSpan.class);
for (StyleSpan styleSpan: spans) content.removeSpan(styleSpan);
textview.setText(content);

科特林

val content = SpannableString("Test Text")
content.setSpan(StyleSpan(Typeface.BOLD_ITALIC), 0, content.length, 0)
val spans = content.getSpans(0, content.length, StyleSpan::class.java)
for (styleSpan in spans) content.removeSpan(styleSpan)
textview.setText(content)