TextView中的超链接点击时,其实是通过Intent方式的,因此会调用Activity中的startActivity(Intent intent)方法,所以可在此方法中做些简单的拦截操作

例如拦截Intent.ACTION_VIEW操作

@Override
public void startActivity(Intent intent) { //此处拦截到url使用应用内部webview打开
if(TextUtils.equals(intent.getAction(), Intent.ACTION_VIEW)){
String dataString = intent.getDataString();
if (!TextUtils.isEmpty(dataString)) {
if (dataString.startsWith("mailto")) {
PackageManager pm = getPackageManager();
List<ResolveInfo> activities = pm.queryIntentActivities(intent, );
if (activities == null || activities.size() == ) {
CustomToast.makeText(mContext, R.string.no_mail_app, Toast.LENGTH_SHORT).show();
return;
}
}else if(dataString.startsWith("http")){
if(!(this instanceof WebViewActivity)){
intent = new Intent(this, WebViewActivity.class);
intent.putExtra(EMJsonKeys.URL, dataString);
}
}
}
} overridePendingTransition(R.anim.push_right_in, R.anim.push_left_out);
super.startActivity(intent);
}

另附上一个强大的TextView中超链接链接方法,此方法转自:http://my.oschina.net/sosofy/blog/57957?p=1

// 直接拷贝这些代码到你希望的位置,然后在TextView设置了文本之后调用就ok了
private void SetLinkClickIntercept(TextView tv) {
tv.setMovementMethod(LinkMovementMethod.getInstance());
CharSequence text = tv.getText();
if (text instanceof Spannable) {
int end = text.length();
Spannable sp = (Spannable) tv.getText();
URLSpan[] urls = sp.getSpans(, end, URLSpan.class);
if (urls.length == ) {
return;
} SpannableStringBuilder spannable = new SpannableStringBuilder(text);
// 只拦截 http:// URI
LinkedList<String> myurls = new LinkedList<String>();
for (URLSpan uri : urls) {
String uriString = uri.getURL();
if (uriString.indexOf("http://") == ) {
myurls.add(uriString);
}
}
//循环把链接发过去
for (URLSpan uri : urls) {
String uriString = uri.getURL();
if (uriString.indexOf("http://") == ) {
MyURLSpan myURLSpan = new MyURLSpan(uriString, myurls);
spannable.setSpan(myURLSpan, sp.getSpanStart(uri),
sp.getSpanEnd(uri), Spannable.SPAN_INCLUSIVE_EXCLUSIVE);
}
}
tv.setText(spannable);
}
} /**
* 处理TextView中的链接点击事件
* 链接的类型包括:url,号码,email,地图
* 这里只拦截url,即 http:// 开头的URI
*/
private class MyURLSpan extends ClickableSpan {
private String mUrl; // 当前点击的实际链接
private LinkedList<String> mUrls; // 根据需求,一个TextView中存在多个link的话,这个和我求有关,可已删除掉
// 无论点击哪个都必须知道该TextView中的所有link,因此添加改变量
MyURLSpan(String url, LinkedList<String> urls) {
mUrl = url;
mUrls = urls;
}
@Override
public void onClick(View widget) {
// 这里你可以做任何你想要的处理
// 比如在你自己的应用中用webview打开,而不是打开系统的浏览器
String info = new String();
if (mUrls.size() == ) {
// 只有一个url,根据策略弹出提示对话框
info = mUrls.get();
}
else {
// 多个url,弹出选择对话框,意思一下
info = mUrls.get() + "\n" + mUrls.get();
}
Toast.makeText(context, info, Toast.LENGTH_SHORT).show();
Uri uri = Uri.parse(mUrl);
Intent intent = new Intent(Intent.ACTION_VIEW, uri);
context.startActivity(intent);
}
}

TextView中超链接拦截的更多相关文章

  1. Android TextView中实现点击文本超链接(无下划线)的封装类

    android中有的时候须要在TextView上设置一些超链接,点击这些超链接时进行一些操作.比如新浪微博上的一些keyword,点击时会跳转到对应的页面. 怎样实现我们就直接看源代码吧. /** * ...

  2. Android 一个TextView中设置多种不同大小的字体,设置超链接

    以前项目中要是遇到这样的UI设计,都是傻不拉唧的分为三个TextView来实现,今天在微信中无意中看了一篇公众号文章,发现原来只要一个TextView就可以搞定啦,人生最悲哀的事情莫过于工作了这么久啦 ...

  3. TextView 中添加超链接

    在textView添加超链接,有两种方式,第一种通过HTML格式化你的网址,一种是设置autolink,让系统自动识别超链接,下面为大家介绍下这两种方法的实现   代码如下:    第一种    pu ...

  4. Android TextView中文字通过SpannableString来设置超链接、颜色、字体等属性

    在Android中,TextView是我们最常用的用来显示文本的控件. 一般情况下,TextView中的文本都是一个样式.那么如何对于TextView中各个部分的文本来设置字体,大小,颜色,样式,以及 ...

  5. android中用Spannable在TextView中设置超链接、颜色、字体

    昨晚研读 ApiDemo 源码至 com.example.android.apis.text.Link 类.首先,看一下其运行效果:  要给 TextView 加上效果,方式主要有几种: 第一种,自动 ...

  6. 给TextView添加超链接的四种方式

    因为在上上篇博客中介绍了SpannableString的使用(SpannableString使用详解),由此想到给TextView添加超链接究竟有多少种方式?经过个人总结,现在一共发现四种,如果还有其 ...

  7. Android开发:TextView添加超链接的简便方法

    TextView中加入超链接的方式很多,但下面的方式应该的最简便合理的 strings.xml中定义字串 <string name="blog"><a href= ...

  8. 在TextView中加入图片

    TextView是一个非常强大的控件,有时须要在一个控件中同一时候显示图片和文字,使用TextView非常easy实现. 方法一: 聊天软件比方QQ一般都会有发送表情的功能,使用SpannableSt ...

  9. jsp中超链接路径的写法

    主题 超链接不就是一个地址字符串吗?这能有什么花头? LZSB! 曾经我也是这么想的.... 最近对apache的学习让我对网页中超链接,CSS,js的路径的写法有了一些新的认识. 所以这篇文章主要分 ...

随机推荐

  1. 【mybatis】mybatis中放置IN查询拼接sql过长,IN查询进行分批次查询的处理

    需要使用的切割list集合的工具类,链接:https://www.cnblogs.com/sxdcgaq8080/p/9376947.html 处理逻辑,原本的一个LIst,进行切割,循环进行myba ...

  2. socket心跳包机制实践与理解

    实现Socket心跳包主要分为两大类,第一采用tcp自带的KeepAlive,第二是自定义心跳包,恰巧我在产品VICA中都使用过,下面就这两种心跳包机制谈谈个人的理解与感受. 首先第一种KeepAli ...

  3. 在Oracle中利用SQL_TRACE跟踪SQL的执行

    当你在执行一条SQL语句非常慢的时候,你是不是想问Oracle怎么执行这条语句的呢? Oracle提供的SQL_TRACE工具可以让你知道你执行的SQL究竟做了什么.执行的过程会被 输出到trace文 ...

  4. 统计中的f检验和t检验的区别

    参考:http://emuch.net/html/201102/2841741.html 首先是目的不同.F检验用于比较两种分析方法是否存在显著差异(单边检验)或者两种方法紧密度是否存在差异(双边检验 ...

  5. 事务内执行sql修复的简易模板

    -- ============================================= -- Script Template -- ============================= ...

  6. SQL Compare 10.4.8.87 Edition 数据库比较工具 完全破解+使用教程

    一.使用教程 SQL Compare是编程人员常用的比较两个数据库之间差异的工具.可以用来比较数据库里面的对象.比如存储过程,数据库中的数据,表的结构. 下面我就简单介绍一下如何使用 1.选择要比较的 ...

  7. Spring框架学习(4)spring整合hibernate

    内容源自:spring整合hibernate    spring整合注解形式的hibernate 这里和上一部分学习一样用了模板模式, 将hibernate开发流程封装在ORM层提供的模板类Hiber ...

  8. Win7如何关闭操作中心的图标

    运行gpedit.msc,打开组策略编辑器   双击"删除操作中心图标",将其启用即可(重启可见)  

  9. 小白系列-免费广告路由器web认证设置(2)

    要设置认证页面图片.须要到后台注冊一个帐号,绑定路由器. 路由器管理后台网址 http://115.29.12.130/router 第一步:自己主动获取一个路由器ID(上一篇文章中的路由器ID也要改 ...

  10. Wireshark Lua: 一个从RTP抓包里导出H.264 Payload,变成264裸码流文件(xxx.264)的Wireshark插件

    Wireshark Lua: 一个从RTP抓包里导出H.264 Payload,变成264裸码流文件(xxx.264)的Wireshark插件 在win7-64, wireshark Version ...