Java 字符串中特定于颜色的文本

Java 字符串中特定于颜色的文本,java,android,Java,Android,我想给字符串中的特定单词上色。 目前我正在使用这个: SpannableString txt = new SpannableString(txt.toString()); Pattern color = Pattern.compile("My Text"); Matcher mat = color.matcher(txt); while(mat.find()) { txtt.setSpan(new ForegroundColorSpan(Color.

我想给字符串中的特定单词上色。 目前我正在使用这个:

   SpannableString txt = new SpannableString(txt.toString());
    Pattern color = Pattern.compile("My Text");
    Matcher mat = color.matcher(txt);
    while(mat.find()) {
        txtt.setSpan(new ForegroundColorSpan(Color.BLUE), mat.start(), mat.end(), 0);
    }
这是一个完美的文本。。但问题是,我想用不同的颜色给一段以上的文本上色。 我已经试过了:

    line = line.replace("My Text",
        "<font color='#0000ff'>" + "$0" + "</font>");
更新:

如果我像这样继续while循环

 SpannableString txtt = new SpannableString(txt.toString());
    Pattern color = Pattern.compile("first text");
    Matcher mat = color.matcher(txt);

    Pattern color2 = Pattern.compile("second text");
    Matcher mat2 = color2.matcher(txt);

    while(mat.find()) {
        txtt.setSpan(new ForegroundColorSpan(Color.BLUE), mat.start(), mat.end(), 0);
    } while(mat2.find()) {
        txtt.setSpan(new ForegroundColorSpan(Color.YELLOW), mat.start(), mat.end(), 0);
    }
    textViewTs.setText(txtt);
我得到一个读取java.lang.IllegalStateException的错误:到目前为止没有成功匹配


有什么好办法解决这个问题吗?

尝试使用SpannableStringBuilder中的替换方法,而不是使用setSpan。

我有一些非常适合你的东西!我写了一些代码并上传到我的网站上。您可以找到包含有关如何使用它以及要添加到src文件夹的代码的说明的页面

我为LibGDX做了这个,但应该是一样的。所有你需要做的就是改变代码来改变文本的颜色和代码来绘制文本!例如,如果您使用SurfaceView,则可以替换此选项:

if(character == 'r'){
    font.setColor(Color.RED);
}
为此:

if(character == 'r'){
    paint.setColor(Color.RED);
}
举个例子,我不认为你用的就是这个,对吧?只要改变它,无论你需要它

工作原理: 要更改颜色,只需向要绘制的字符串添加代码。例如,只要说你想画Hello World!红色的Hello和蓝色的World分别位于坐标50和40处,只需运行以下命令:

ColorText.draw("&rHello &bWorld!", 1, batch, 50, 40);

注意!您需要进行大量的微调才能使其适用于您,但基本代码用于处理字符串。

StringBuilder似乎无法工作?我不明白setSpan有什么问题?@pskink问题是,我不能用不同的颜色为多行文本着色,但StringBuilder似乎无法工作,这不是一个问题问题描述。我们需要知道到底是什么让你认为它不起作用,就像你期望的那样,你得到了什么。我怀疑问题可能是usage replace而不是replace所有这一个使用正则表达式可能是您的问题的原因,但我不确定这是否是您面临的唯一问题。但您使用的是一种颜色:color.BLUE,因此在每次while循环迭代时更改颜色
ColorText.draw("&rHello &bWorld!", 1, batch, 50, 40);