Android 攔截TextView中超鏈接的點擊事件
1.在xml中為TextView添加autoLink屬性
<TextView
...
android:autoLink = "web"
... />
2.
private void setLinkClickable(final SpannableStringBuilder clickableHtmlBuilder, final URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
ClickableSpan clickableSpan = new ClickableSpan() {
@Override
public void onClick(View widget) {
String originUrl = urlSpan.getURL();//獲取url地址
//do something
...
}
};
clickableHtmlBuilder.setSpan(clickableSpan, start, end, flags);
}
private CharSequence getClickableHtml(Spanned spannedHtml) {
SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
for (final URLSpan span : urls){
setLinkClickable(clickableHtmlBuilder, span);
}
return clickableHtmlBuilder;
}
3.
String urlText;
Spanned spanned = Html.fromHtml(urlText);
textView.setText(getClickableHtml(spanned));
textView.setMovementMethod(LinkMovementMethod.getInstance());