android - 无法完全正确地获得 Spanable

标签 android textview spannablestring spannable

我正在尝试将一长段文本(来自多个不同的数据 fragment )组装为 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}

“{代码1件1}|”为深灰色。其余部分为浅灰色。

根据我读过的有关该主题的几个教程,我没有发现我的代码有任何问题,但我承认整个“Spannable”主题仍然让我感到困惑。我来自 iOS,Spannable 看起来很像 NSAttributedString,但似乎我错过了一些东西。

最佳答案

我们不能使用同一个 Span 实例来标记文本的多个部分。每当通过传递 Span 实例来调用 setSpan() 时,该实例标记的前一个范围都会被清除。我认为,通过了解这个事实,您就可以解决问题。

关于android - 无法完全正确地获得 Spanable,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29778982/

相关文章:

android - TextView 中动态文本颜色更改的最有效方法

Android Studio 快速文档窗口大小

android - ListView 布局背景颜色在滚动时闪烁在图像加载时消失?

android - 如何避免android中相对布局中的重叠 View ?

java - 如何使用 OnClickListener 检查当前选择了哪个 TextView(三个)

java - 如何使用项目符号显示为输出?

android - 在 ActionBarDrawerToggle 中使用 syncState()

Android 显示星期几

java - 从函数 Android 更新 Textview

android - "ul"、 "li"的 Android N 中未调用 Html 标记处理程序