【问题标题】:How to replace String of TextView without losing its style and color如何在不丢失样式和颜色的情况下替换 TextView 的字符串
【发布时间】:2020-07-17 07:50:02
【问题描述】:

我将 HTML 模式设置为我的 TextView,所以在我的文本中,一些字符串是蓝色或绿色的。现在我需要将“旧”替换为“新”而不丢失蓝色和绿色。如果使用textview.setText(textview.getText().toString().repaceAll("old", "new")),我们就失去了它的风格和色彩!事实上,我需要保留样式的代码。或者我需要在 Spanned 中替换 String 而不会丢失其样式和颜色。

  1. 我需要在 Spanned obj 中替换字符串
  2. 我需要将 Spanned obj 设置为我的 TextView。但我不知道有什么办法。

【问题讨论】:

  • 如果你 setText(Spanned obj) // 它仍然是 losign 样式和颜色吗?
  • @notTdar 不,第一:我需要在 Spanned obj 中替换字符串,所以第二:我需要将 Spanned obj 设置为我的 textview。但我不知道有什么办法。
  • 你能检查一下这个stackoverflow.com/questions/10828182/…吗?
  • 不,它对我不起作用@notTdar

标签: android textview spanned


【解决方案1】:

我能想到的唯一方法是使用SpannableStringBuilderSpannableCharSequencetextview.getText() 也返回 CharSequence。如果您避免 toString 转换,则样式不会丢失。 SpannableStringBuilder 还有一个replace 函数

【讨论】:

  • 我在您的指导下解决了我的问题,并编写了真正的代码。非常感谢。
【解决方案2】:

旧字符串为oldstr,新字符串为newstr

    Spanned spanned = textView.getText();
    
    CharSequence charSequence = spanned;
    SpannableStringBuilder stringBuilder = (SpannableStringBuilder) spanned;

    for (int i = 1; i < charSequence.length() - 6; i++) {
        if (charSequence.charAt(i) == 'o' &&
                charSequence.charAt(i+1) == 'l' &&
                charSequence.charAt(i+2) == 'd' &&
                charSequence.charAt(i+3) == 's' &&
                charSequence.charAt(i+4) == 't' &&
                charSequence.charAt(i+5) == 'r') {
            stringBuilder.replace(i-1, i+6, "newstr");
        }
    }

    spanned = stringBuilder;
    textView.setText(spanned);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-10-30
    • 2018-02-09
    • 2022-01-26
    • 2014-06-11
    相关资源
    最近更新 更多