无法正确获得 Spannable
Can't get Spannable quite right
我正在尝试 assemble 一段很长的文本(来自几个不同的数据)作为 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}
“{code 1 piece 1} |”为深灰色。其余为浅灰色。
根据我阅读过的关于这个主题的几个教程,我没有发现我的代码有任何问题,但我承认整个 "Spannable" 主题仍然让我有些困惑。我来自 iOS,Spannable
看起来很像 NSAttributedString
,但我好像漏掉了什么。
我们不能使用 Span
的同一个实例来标记文本的多个部分。每当通过传递 Span
实例调用 setSpan()
时,该实例标记的先前跨度将被清除。我想,知道这个事实就可以解决问题了。
我正在尝试 assemble 一段很长的文本(来自几个不同的数据)作为 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}
“{code 1 piece 1} |”为深灰色。其余为浅灰色。
根据我阅读过的关于这个主题的几个教程,我没有发现我的代码有任何问题,但我承认整个 "Spannable" 主题仍然让我有些困惑。我来自 iOS,Spannable
看起来很像 NSAttributedString
,但我好像漏掉了什么。
我们不能使用 Span
的同一个实例来标记文本的多个部分。每当通过传递 Span
实例调用 setSpan()
时,该实例标记的先前跨度将被清除。我想,知道这个事实就可以解决问题了。