TextView 中的链接点击后,会自动跳转到浏览器显示。如果需要自己拦截这个事件,可以通过下面的方法实现:
CharSequence charSequence = Html.fromHtml(text);/text是要显示的html文字
final SpannableStringBuilder builder = new SpannableStringBuilder(charSequence);///这个builder本身就实现了spannle
URLSpan[] urlSpans = builder.getSpans(0, charSequence.length(), URLSpan.class);
for(URLSpan span : urlSpans){
final int start = builder.getSpanStart(span);
final int end = builder.getSpanEnd(span);
int flag = builder.getSpanFlags(span);
final String link = span.getURL();
L.i("tostring:"+span.toString());
builder.setSpan(new ClickableSpan() {
@Override
public void onClick(View widget) {
//捕获<a>标签点击事件,及对应超链接link
L.i("link--title" + link+builder.subSequence(start,end));
//dosomething link 就是链接地址 ;builder.subSequence(start,end).toString());可以获得显示显示的文字
Intent intent = new Intent(CommQuesActivity.this,WebActivity.class);
intent.putExtra("url",link);
intent.putExtra("title",builder.subSequence(start,end).toString());
startActivity(intent);
}
@Override
public void updateDrawState(TextPaint ds) {
ds.setColor(ds.linkColor); //设置链接的文本颜色
ds.setUnderlineText(false); //去掉下划线
}
}, start, end, flag);
builder.removeSpan(span);
}
textView.setLinksClickable(true);
textView.setMovementMethod(LinkMovementMethod.getInstance());
textView.setText(builder);
SpannableStringBuilder implements CharSequence, GetChars, Spannable, Editable, Appendable, GraphicsOperations,所以最后直接将builder 显示到textview中即可。
思路就是将URLSpan 替换为自己实现的ClickableSpan,URLSpan本身就是 extends ClickableSpan。