这听起来像是一件有趣的事情.
密钥是SpannableStringBuilder.使用SpannableString,文本本身是不可变的,但是使用SpannableStringBuilder,文本和标记都可以更改.考虑到这一点,我修改了你的代码片段,做你想做的事情:
public static CharSequence colorBackground(CharSequence text) {
Pattern pattern = Pattern.compile("#(.*?)#");
SpannableStringBuilder ssb = new SpannableStringBuilder( text );
if( pattern != null )
{
Matcher matcher = pattern.matcher( text );
int matchesSoFar = 0;
while( matcher.find() )
{
int start = matcher.start() - (matchesSoFar * 2);
int end = matcher.end() - (matchesSoFar * 2);
CharacterStyle span = new BackgroundColorSpan(0xFF404040);
ssb.setSpan( span,start + 1,end - 1,0 );
ssb.delete(start,start + 1);
ssb.delete(end - 2,end -1);
matchesSoFar++;
}
}
return ssb;
}
我对Spannables一般没有多少经验,我不知道我删除“#”的方式是否是最好的方法,但它似乎有效.