如何在不丢失样式和颜色的情况下替换android textview中的字符串

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

步骤1:我需要在Spanned obj中替换字符串

步骤2:我需要将Spanned obj设置为textview。但我不知道。

iCMS 回答:如何在不丢失样式和颜色的情况下替换android textview中的字符串

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

,

旧字符串为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);
本文链接:https://www.f2er.com/1918451.html

大家都在问