我试图从我的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
提前致谢
答案 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)