Android中捕获TTextView文本中的链接点击事件方法
android中的ttextview很强大,我们可以不仅可以设置纯文本为其内容,还可以设置包含网址和电子邮件地址的内容,并且使得这些点击可以点击。但是我们可以捕获并控制这些链接的点击事件么,当然是可以的。
本文将一个超级简单的例子介绍一下如何实现在android textview 捕获链接的点击事件。
关键实现
实现原理就是将所有的url设置成clickspan,然后在它的onclick事件中加入你想要的控制逻辑就可以了。
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() {
public void onclick(view view) {
//do something with url here.
}
};
clickablehtmlbuilder.setspan(clickablespan, start, end, flags);
}
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(final urlspan span : urls) {
setlinkclickable(clickablehtmlbuilder, span);
}
return clickablehtmlbuilder;
}
如何使用
textview mytextview = (textview)findviewbyid(r.id.mytextview);
string url = "this is a page with lots of urls. <a href=\"http://jb51.net\">jb51.net</> " +
"this left is a very good blog. there are so many great blogs there. you can find what" +
"you want in that blog."
+ "the next link is <a href=\"http://www.google.com.hk\">google hk</a>";
mytextview.settext(getclickablehtml(url));
实现自己的控制
我们需要在clickspan的onclick方法中加入自己的控制逻辑,比如我们使用傲游浏览器打开点击的链接。
public void onclick(view view) {
log.i(logtag, "onclick url=" + urlspan.geturl() );
intent intent = new intent(intent.action_view);
intent.setdata(uri.parse(urlspan.geturl()));
intent.setpackage("com.mx.browser");
startactivity(intent);
}
提醒
不要忘了设置textview的autolink属性。
<textview
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/hello_world"
android:id="@+id/mytextview"
android:autolink="web"
/>
上一篇: Android开源组件SlidingMenu侧滑菜单使用介绍
下一篇: 微距拍摄方法技巧整理