【问题标题】:How to remove span style from SpannableString如何从 SpannableString 中删除跨度样式
【发布时间】:2016-02-05 18:20:32
【问题描述】:

我试图从SpannableString 中删除样式,但不幸的是没有用,我的目标是在单击文本时删除样式。

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

点击操作:

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

【问题讨论】:

    标签: android spannablestring


    【解决方案1】:

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

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

    点击操作:

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

    【讨论】:

      【解决方案2】:

      正如郑兴杰指出的,您可以使用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)
      

      【讨论】:

        猜你喜欢
        • 2016-05-12
        • 1970-01-01
        • 2022-01-03
        • 1970-01-01
        • 2017-09-02
        • 2010-10-22
        • 2021-08-19
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多