我正在尝试使用SpannableString的setSpan()对输入字符串的每个字符进行替换着色,但不知何故输出的字符串没有正确着色。
//ColorLogic.java:
public SpannableString colorString(String myStr)
{
SpannableString spnStr=new SpannableString(myStr);
int strLen=myStr.length();
for(int i=0; i< strLen; i++)
{
if (i%2==0)
{
Log.v(DTAG, "vow"+myStr.charAt(i));
spnStr.setSpan(new ForegroundColorSpan(Color.RED), i, i, 0);
}
else
{
Log.v(DTAG, "cons"+myStr.charAt(i));
spnStr.setSpan(new ForegroundColorSpan(Color.BLUE), i, i, 0);
}
}
return spnStr;
}
//In my OnCreate of my activity class:
// Create the text view
TextView textView = new TextView(this);
textView.setTextSize(50);
//Call Color Logic to color each letter individually
ColorLogic myColorTxt=new ColorLogic();
SpannableString spnMsg=myColorTxt.colorString(message);
textView.setText(spnMsg, BufferType.SPANNABLE);
setContentView(textView);
}
output:
![2 letters][1]
[1]: http://i.stack.imgur.com/rA8TV.png
![3 letters][1]
[1]: http://i.stack.imgur.com/X039z.png
我注意到,如果我只是:
spnStr.setSpan(new ForegroundColorSpan(Color.RED), 0, 0, 0);
然后字符串的所有字符都显示为红色,即使我已指定start和stop为第1个字符。我尝试过不同的Spannable标志,例如:android.text.Spannable.SPAN_INCLUSIVE_INCLUSIVE
,但同样的问题仍然存在。
答案 0 :(得分:5)
您为i
和start
指定了end
- 这意味着您指定的长度为0,而不是长度为1的跨度。试试这个:
spnStr.setSpan(new ForegroundColorSpan(Color.RED), i, i + 1, 0);