我需要在TextView中更改每个元音字母的颜色。 例如,我有(" a"," e","我"," o"," u")我需要它们是这样的 -
GR<font color='green'>EE</font>N C<font color='green'>O</font>L<font color='green'>O</font>R
&#13;
我正在尝试这个:
if(text.contains("o")){
SpannableString spanText = new SpannableString(text);
// make "text" (characters pos-1 to pos) red
spanText.setSpan(new ForegroundColorSpan(Color.GREEN), text.indexOf("o") - 1, text.indexOf("o"), 0);
labelTextView.setText(spanText, TextView.BufferType.SPANNABLE);
}
但是我需要更难以改变SpannableString,但不知道如何。 有什么建议吗?
答案 0 :(得分:2)
您可以将各个颜色包装在html颜色标签中,并使用Html.fromHtml(String string);获取您的跨度。
如果你需要一个更难的字符串颜色连接,你可以定义一个方法来在你的html中包装字符串的各个部分并连接结果。
编辑:
我确信有一种更有效的方法可以做到这一点,但这很有效。如果要映射多种不同的颜色,则必须扩展逻辑。
public String wrapVowelsInColor(String input){
final List<String> VOWELS = new ArrayList<>(Arrays.asList(new String[] {"a", "A", "e", "E" ,"i", "I", "o", "O", "u", "U"}));
final char[] mChars = input.toCharArray();
final int count = mChars.length;
final StringBuilder builder = new StringBuilder(count);
for(int i = 0; i < count; i++){
String current = String.valueOf(mChars[i]);
if(VOWELS.contains(current)){
builder.append(wrapInColor("blue", current)));
} else {
builder.append(current);
}
}
return builder.toString();
}
public String wrapInColor(String color, String toWrap){
return String.format("<font color='%s'>%s</font>", color, toWrap);
}
输入:
String testString = "My test string for coloring vowels";
输出:
My t<font color='blue'>e</font>st str<font color='blue'>i</font>ng f<font color='blue'>o</font>r c<font color='blue'>o</font>l<font color='blue'>o</font>r<font color='blue'>i</font>ng v<font color='blue'>o</font>w<font color='blue'>e</font>ls
然后在Html.fromHtml(String string)
上设置范围之前,先在输出上运行TextView
。