0

我正在尝试使用 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);

然后字符串的所有字符都涂成红色,即使我已将开始和停止指定为第一个字符。我尝试了不同的 Spannable 标志,例如: android.text.Spannable.SPAN_INCLUSIVE_INCLUSIVE ,但仍然出现同样的问题。

4

1 回答 1

5

i同时指定startend- 这意味着您指定了长度为 0 的跨度,而不是长度为 1 的跨度。试试这个:

spnStr.setSpan(new ForegroundColorSpan(Color.RED), i, i + 1, 0);
于 2013-12-11T21:53:17.493 回答