獲取TextView中的url並設置點擊事件

调用安卓默认的浏览器方法:

Intent intent = new Intent(Intent.ACTION_VIEW);

System.out.println("跳转到百度");
intent.setData(Uri.parse("http://www.baidu.com"));
// intent.setPackage("com.mx.browser");     intent.setPackage("com.uc.browser");   添加这一句是为了调用手机中的其他浏览器,前提是手机中安装了这些浏览器如遨游,uc等)

startActivity(intent);
如果获取textview中的url并设置点击事件,则按如下步骤:

1,textview的xml中添加    : android:autoLink="web" //或者all,根据需要

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() {
    public void onClick(View view) {      //在这里添加点击事件
//Do something with URL here.
Log.i("LOG", "onClick url=" + urlSpan.getURL() );
Intent intent = new Intent(Intent.ACTION_VIEW);
System.out.println("点击的url:"+urlSpan.getURL());
intent.setData(Uri.parse(urlSpan.getURL()));       //使用默认浏览器打开url
// intent.setData(Uri.parse("www.baidu.com"));
// intent.setPackage("com.mx.browser");
startActivity(intent);
}
};
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;

4,最后,使用方法:

TextView tv = (TextView) findViewById(R.id.tv);
String url = "<a href=\"http://www.baidu.com\">www.baidu.com</a>"
+ "The Next Link is <a href=\"http://www.hao123.com\">hao123</a>";
tv.setText(getClickableHtml(url));
tv.setMovementMethod(LinkMovementMethod.getInstance());

总结:以上方法是从网上摘抄,但都少了 :tv.setMovementMethod(LinkMovementMethod.getInstance());

从而导致不能触发点击事件。点击  new ClickableSpan() 可以看到,只有实现LinkMovementMethod方法才能触发点击事件。

更多相关文章
一周排行
  • 禅道PMS(zentaoPMS)是一个优秀的国产开源项目管理软件.官方提供了lamp一键安装包,但是我们常常已经有了lnmp环境,那么需要直接从源码包安装zentaopms. 最近幫朋友安装zentaopms,安装了 ...
  • CentOS上 Mono 3.2.8運行ASP.NET MVC4經驗
    周一到周三,折腾了两天半的时间,经历几次周折,在小蝶惊鸿的鼎力幫助下,终于在Mono 3.
  • 我们都知道Java是面向对象语言,起先的Java并不能进行服务器web开发,只能进行简单的applet网页开发,后来Java进行了拓展,这就出了 后来的javaservlet,毫无疑问javaservlet已经是一门
  • 近期客户公司打算给一台老服务器安装CentOS,计划是安装CentOS6,因为客户的服务器(HP G350)是个老款的服务器,不支持64bit,是于是从网上下载了CentOS-6.0-i386-bin-DVD.iso
  • linux命令mkfs.ext3可以把硬盘格式化成ext3文件系统 要使用一块新的硬盘,我们必须将它格式化建立合适的文件系统(linux:ext2,ext3等,windows:ntsf,fat32),并挂载到相应的目
  • 1)基础验证: 1 /** 2 * 从服务器取图片 3 * 4 * @param url 5 * @return 6 */ 7 public void getHttpBitmap(final String url)
  • 全称 wc是一个用于统计的工具,全拼为:Word Count(单词统计) 实例: 1. 统计行数 $wc –l file 2. 统计单词数 $wc –w file 3. 统计字符数 $wc –c file 4. 统计
  • 1.我们知道,如果是POST请求,我们需要调用request.setCharacterEncoding("utf-8") 方法来设计编码. 1 public void doGet(HttpServ ...
  • 轉 What is Ec/Io (and Eb/No)?
    PS:http://www.telecomhall.com/what-is-ecio-an ...
  • 链接: http://acm.zju.edu.cn/onlinejudge/showProblem.do?problemCode=3870 http://acm.hust.edu.cn/vjudge/contest/