android – 从spannable CharSequence中删除字符

我在String中输入以下数据:“Hello#this#is#sample#text.”

它为#字符之间的所有元素设置背景颜色.这是我到目前为止所得到的:

public static CharSequence colorBackground(CharSequence text) {

    Pattern pattern = Pattern.compile("#(.*?)#");

    Spannable spannable = new SpannableString( text );
    if( pattern != null )
    {
        Matcher matcher = pattern.matcher( text );
        while( matcher.find() )
        {
            int start = matcher.start();
            int end = matcher.end();
            CharacterStyle span = new BackgroundColorSpan(0xFF404040);
            spannable.setSpan( span,start,end,0 );
        }
    }
    return spannable;
}

设置背景颜色有效,但占位符字符#也有样式.如何在返回结果之前删除它们,因为CharSequence不存在方法ReplaceAll?

我使用此函数来设置ListView中的TextView行的样式.添加此样式功能后,在模拟器中感觉有点慢.也许我应该以其他方式接近它,例如使用自定义TextView和自定义绘图功能

解决方法

这听起来像是一件有趣的事情.

密钥是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一般没有多少经验,我不知道我删除“#”的方式是否是最好的方法,但它似乎有效.

相关文章

以下为个人理解,如错请评 CE: 凭据加密 (CE) 存储空间, 实际路径/data/user_ce/ DE: 设备加密 (DE) 存...
转载来源:https://blog.csdn.net/yfbdxz/article/details/114702144 用EventLog.writeEvent打的日志(或...
事件分发机制详解 一、基础知识介绍 1、经常用的事件有:MotionEvent.ACTION_DOWN,MotionEvent.ACTION...
又是好久没有写博客了,一直都比较忙,最近终于有时间沉淀和整理一下最近学到和解决的一些问题。 最近进...
Android性能优化——之控件的优化 前面讲了图像的优化,接下来分享一下控件的性能优化,这里主要是面向...
android的开源库是用来在android上显示gif图片的。我在网上查了一下,大家说这个框架写的不错,加载大的...