使用this库显示html文本我偶然发现一个问题,即以HtmlTextView作为子元素的任何布局在HtmlTextView所占据的位置都变得不可点击。
问题:如何使HtmlTextView停止拦截点击事件?
答案 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);
}