字符串中的颜色特定文本

时间:2014-08-13 19:28:13

标签: 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.BLUE), mat.start(), mat.end(), 0);
    }

这对于一个文本来说是完美的..但问题是我想要的颜色多于不同颜色的文本。 我已经尝试过了:

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

但StringBuilder似乎无法使用此

textViewTs.setText(Html.fromHtml(line));

更新

如果我尝试像这样继续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: No successful match so far

有什么好方法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

尝试使用SpannableStringBuilder(http://developer.android.com/reference/android/text/SpannableStringBuilder.html)中的replace()方法,而不是使用setSpan()。

答案 1 :(得分:0)

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

我为LibGDX做了这个,但它应该是一样的。您需要做的就是更改代码以更改文本的颜色和用于绘制文本的代码!例如,如果您使用SurfaceView,则可以替换它:

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

用这个:

if(character == 'r'){
    paint.setColor(Color.RED);
}

只是一个例子,我不认为这是你用的,对吗?只要你需要它就改变它。

工作原理: 要更改颜色,只需将代码添加到要绘制的字符串即可。例如,只是说你想画“Hello World!”红色的“Hello”和坐标50,40处的蓝色“World”只需运行:

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

请注意!你必须做很多微调才能为你工作,但基本的代码就是处理字符串。