Android getLineStart()在TextView的计算中包含HTML标记

Android getLineStart()在TextView的计算中包含HTML标记,android,android-layout,textview,Android,Android Layout,Textview,我正在创建一个结构有点复杂的自定义文本视图。每个句子都需要自己的clickHandler,所以我将每个句子包装在ClickableSpan中。此外,文本中包含HTML,因此我还将每个句子包装为HTML.fromHTML()span。结果是这样的: //IN MY CUSTOM TEXTVIEW for (Text text : textList) { String words = text.getText(); //Text is my own custom cl

我正在创建一个结构有点复杂的自定义文本视图。每个句子都需要自己的clickHandler,所以我将每个句子包装在ClickableSpan中。此外,文本中包含HTML,因此我还将每个句子包装为HTML.fromHTML()span。结果是这样的:

    //IN MY CUSTOM TEXTVIEW
    for (Text text : textList) {
        String words = text.getText(); //Text is my own custom class
        SpannableString ss = new SpannableString(words);
        ss.setSpan(new ClickableSpan(words) ,0,ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        ss.setSpan(Html.fromHtml(words),0,ss.length(),Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
        ssb.append(ss);
    }
    setText(ssb, TextView.BufferType.SPANNABLE);
    setMovementMethod(LinkMovementMethod.getInstance());

但是,当我尝试使用
layout.getLineStart(I)
逐行访问文本视图中的文本时,我遇到了一个问题。它似乎在计算中包含了HTML标记,尽管从技术上讲它们不占用任何空间。如何明确地将这些标记排除在计算之外?

结果表明,我没有完全理解Html.fromHtml()返回的内容。它返回一个已跨越的
SpannableString.setSpan()
接受一个
对象
,因此传入
span
不会导致任何错误。然而,它并没有达到格式化Html的预期效果

相反,正确的方法是:

//IN MY CUSTOM TEXTVIEW
for (Text text : textList) {
    String words = text.getText(); //Text is my own custom class

    //note that SpannableString takes CharSequence as parameter
    SpannableString ss = new SpannableString(Html.fromHtml(words));
    ss.setSpan(new ClickableSpan(words) ,0,ss.length(), Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);
    ssb.append(ss);
}
setText(ssb, TextView.BufferType.SPANNABLE);
setMovementMethod(LinkMovementMethod.getInstance());
现在它按预期工作。注意:在理解所有相关类的继承结构时(非常混乱)