我想为字符串中的特定单词着色。 目前我正在使用它:
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
有什么好方法可以解决这个问题吗?
答案 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);
请注意!你必须做很多微调才能为你工作,但基本的代码就是处理字符串。