首页 > 解决方案 > 用没有 HTML 的 Spas 替换某些字符串

问题描述

我正在尝试用跨度替换某个字符串。

例如我有这个字符串:

String s = "redHello greenWorld";

我想将“红色”替换为:

modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

和“绿色”:

modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#00FF00")), start, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

所以我以这种方式创建 modifiedText :

Spannable modifiedText = new SpannableString(s);

如何用没有 HTML 的 Span 替换某个字符串?

标签: javaandroidandroid-spannable

解决方案


SpannableString不拆分(子字符串)给定的String. 它只是使用开始和结束索引更改给定范围的属性。如果要更改 a 的某些部分的颜色,String则不需要子字符串(或剪切)。只需对要更改的部分使用开始和结束索引,其余部分将保持不变(原始)。在您的情况下,根据您的问题,您想更改红色和绿色单词的颜色,因此只需使用 2setSpan种方法,这些单词的开始和结束索引为。

String s = "redHello greenWorld";
SpannableString modifiedText = new SpannableString(s);

//Change the color for 'red' word
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#FF0000")), 0, 3, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

//Change the color for 'green' word
modifiedText.setSpan(new ForegroundColorSpan(Color.parseColor("#00FF00")), 9, 14, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

即使它SpannableString仍然String如此,String如果你想将它设置Text为你的View. 例如,如果您想将其设置String为您的TextView使用setText()方法SpannableString

textView.setText(modifiedText);

推荐阅读