一般来说,问题是这样的:
我也有Spannable所有经过Html格式化的文本:
private SpannableStringBuilder addClickablePart(String str) {
CharSequence sequence = Html.fromHtml(str);
SpannableStringBuilder ssb = new SpannableStringBuilder(sequence);
int idx1 = str.indexOf("[");
int idx2 = 0;
while (idx1 != -1) {
idx2 = str.indexOf("]", idx1) + 1;
String clickString = str.substring(idx1, idx2);
ssb.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
}
}, idx1, idx2, 0);
idx1 = str.indexOf("[", idx2);
}
return ssb;
}
结果,我从数据库中获取文本pageContentStr并将其设置为我的TextView
pageContent.setMovementMethod(LinkMovementMethod.getInstance());
pageContent.setText(addClickablePart(pageContentStr), TextView.BufferType.SPANNABLE);
根据处理算法,在整个文本中,方括号中的所有内容都变成了可点击的链接,并且一切正常,但是一旦我设置处理通过Html:
CharSequence sequence = Html.fromHtml(str);
然后链接移动并开始显示不正确:
它可以与什么连接?如果我删除处理,Html一切正常,链接仅从方括号[到方括号突出显示]。

问题是您正在从源字符串中找到标签索引。但是当通过该方法处理时,
Html.fromHtml()标签会从文本中删除 - 因此,所有剩余的字符都会“移动”。一般情况下,需要在处理后收到的文本中搜索标签: