实现目标:用TextView加载HTML代码 实现自定义点击URL事件
钱先生不哔哔 直接上代码
msg_context = (TextView) this.findViewById(R.id.msg_context);
msg_context.setText(getClickableHtml(response.getResponseObject().getData().getMsgContent()));
msg_context.setMovementMethod(LinkMovementMethod.getInstance()); //响应Span点击事件
private CharSequence getClickableHtml(String html) {
Spanned spannedHtml = Html.fromHtml(html);
SpannableStringBuilder clickableHtmlBuilder = new SpannableStringBuilder(spannedHtml);
URLSpan[] urls = clickableHtmlBuilder.getSpans(0, spannedHtml.length(), URLSpan.class);
for ( URLSpan span : urls) {
Log.e("WebView_SpanUrl",span.getURL());
setLinkClickable(clickableHtmlBuilder, span);
}
return clickableHtmlBuilder;
}
private void setLinkClickable( SpannableStringBuilder clickableHtmlBuilder, URLSpan urlSpan) {
int start = clickableHtmlBuilder.getSpanStart(urlSpan);
int end = clickableHtmlBuilder.getSpanEnd(urlSpan);
int flags = clickableHtmlBuilder.getSpanFlags(urlSpan);
String newUrl= urlSpan.getURL();
clickableHtmlBuilder.setSpan(new ClickableSpan() {// 可以实现各种效果(点击事件 颜色等)
public void onClick(View view) { //在这里添加点击事件
Log.e("WebView", "响应点击事件"+newUrl);
if ( newUrl.startsWith("tel:")) {
Intent intent = new Intent(Intent.ACTION_VIEW, Uri.parse(newUrl));
startActivity(intent);
} else if (newUrl.startsWith("http:") || newUrl.startsWith("https:")) {
Intent intent = new Intent(MessageDetailAty.this, WebViewAty.class);
if (newUrl.contains("skip_product.htm")) {
intent.putExtra("title", "产品详情");
} else {
intent.putExtra("title", getResources().getString(R.string.app_name));
}
intent.putExtra("url", newUrl);
startActivity(intent);
}
}
}, start, end, flags);
Log.e("WebView", "点击的url:" + newUrl+"=="+start+"=="+end);
}