足够安全/ html-textview库HtmlTextView拦截父级单击事件

时间:2019-03-04 12:55:43

标签: android android-layout

使用this库显示html文本我偶然发现一个问题,即以HtmlTextView作为子元素的任何布局在HtmlTextView所占据的位置都变得不可点击。

问题:如何使HtmlTextView停止拦截点击事件?

1 个答案:

答案 0 :(得分:1)

事实证明,setHtml(..)方法在内部调用了setMovementMethod(LocalLinkMovementMethod.getInstance());。 它将所有HtmlTextViews转换为可点击的链接。这就是为什么单击HtmlTextView时未触发父级的OnClickListener的原因。

源代码:

  public void setHtml(@NonNull String html, @NonNull Html.ImageGetter imageGetter) {
    final HtmlTagHandler htmlTagHandler = new HtmlTagHandler(getPaint());
    htmlTagHandler.setClickableTableSpan(clickableTableSpan);
    htmlTagHandler.setDrawTableLinkSpan(drawTableLinkSpan);
    htmlTagHandler.setListIndentPx(indent);

    html = htmlTagHandler.overrideTags(html);

    if (removeTrailingWhiteSpace) {
        setText(removeHtmlBottomPadding(Html.fromHtml(html, imageGetter, htmlTagHandler)));
    } else {
        setText(Html.fromHtml(html, imageGetter, htmlTagHandler));
    }

    // make links work
    setMovementMethod(LocalLinkMovementMethod.getInstance());
}

解决方案:htmlTextView.setMovementMethod(null);之后的setHtml(..)

或使用方法制作Utils类:

 public static void setHtml(HtmlTextView htmlTextView, @Nullable String text) {
    htmlTextView.setHtml(text);
    htmlTextView.setMovementMethod(null);
}

Issue on GitHub