无法让Spannable完全正确

时间:2015-04-21 17:17:51

标签: android textview spannablestring spannable

我试图将一小段文本(来自几个不同的数据)组合成TextView的内容。

我希望每一行都具有以下结构:

  

{piece 1} | {piece 2}

我喜欢每个" {piece 1} | "是浅灰色的。 我喜欢每个" {piece 2}"是一种深灰色。

我已定义了这两种颜色。

我希望整个标签都是我添加到我的应用中的自定义字体。

这是我到目前为止所尝试的内容:

// regularTf is a Typeface created from a font added to this app
mItemCodesLabel.setTypeface(regularTf);
SpannableStringBuilder builder  = new SpannableStringBuilder();
ForegroundColorSpan ltGraySpan  = new ForegroundColorSpan(R.color.light_gray);
ForegroundColorSpan dkGraySpan  = new ForegroundColorSpan(R.color.dark_gray);
int index                       = 0;
for (int i = 0; i < codes.size(); i = i + 1) {
    ParseObject code            = codes.get(i);
    String value                = code.getString("value") + " | ";
    if (i > 0) {
        builder.append("\n");
        index                   = index + 1;
    }
    builder.append(value);
    builder.setSpan(ltGraySpan, index, index + value.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    index                       = index + value.length();
    String loc                  = code.getString("location");
    builder.append(loc);
    builder.setSpan(dkGraySpan, index, index + loc.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
    index                       = index + loc.length();
}
mItemCodesLabel.setText(builder, TextView.BufferType.SPANNABLE);

此标签的文字颜色在我的布局文件中设置为R.color.dark_gray

我看到的结果有些令人困惑。我有一个项目的两个代码,TextView看起来像这样:

  

{code 1 piece 1} | {code 1 piece 2}   {code 2 piece 1} | {code 2 piece 2}

&#34; {code 1 piece 1} | &#34;是深灰色的。其余的是浅灰色。

基于我阅读过这个主题的几个教程,我没有看到我的代码有什么问题,但我承认整个&#34; Spannable&#34;话题仍然让我感到困惑。我来自iOS,Spannable似乎很像NSAttributedString,但似乎我错过了一些东西。

1 个答案:

答案 0 :(得分:3)

我们不能使用Span的相同实例来标记文本的几个部分。每当通过传递setSpan()实例调用Span时,将清除该实例标记的先前范围。我想,通过了解这一事实,你可以解决问题。