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. app生成工具

    国内主流的在线APP生成工具 应用公园:http://www.apppark.cn/ 追信魔盒:http://app.zhui.cn/ 安米网:http://www.appbyme.com/ 简网AP ...

  2. [Eclipse插件] Eclipse中如何安装和使用GrepCode插件

    Java是开源的世界,如何快速的搜索到你需要的Java源码呢?2009年7月17日,GrepCode团队发布了一个有趣的 Java源码搜索引擎-GrepCode .与现有的各种搜索引擎相比,Java源 ...

  3. iOS:触摸事件和手势识别的介绍

    触摸事件和手势识别的介绍 1.iOS的输入事件  UIKit可识别三种类型的输入事件: 触摸事件 运动事件 远程控制事件 iOS中许多事件对象都是UIEvent类的实例,UIEvent记录了事件所产生 ...

  4. delphi 查看编译版本

    对照表: http://docwiki.embarcadero.com/RADStudio/Tokyo/en/Compiler_Versions procedure TForm1.Button1Cli ...

  5. UVa 615 - Is It A Tree?

    题目:给你一些有向边(端点,长度为1).推断给定的图是否是一棵树. 分析:图论.并查集.树是一个全部点都连接的有向无环图(不连接的是森林). 依照树的定义推断是否有环就可以,有环分成两种: 1.链状环 ...

  6. [TypeScript] Work with DOM Elements in TypeScript using Type Assertions

    The DOM can be a bit tricky when it comes to typing. You never really know exactly what you're going ...

  7. SOA服务总线设计

    背景 基于总线的设计,借鉴了计算机内部硬件组成的设计思想(通过总线传输数据).在分布式系统中,不同子系统之间需要实现相互通信和远程调用,比较直接的方式就是“点对点”的通信方式,但是这样会暴露出一些很明 ...

  8. postgresql 如何导入sql文件

    (1)不能使用pgadmin 执行Copy语句,目前客户端还不支持这种写法. (2)打开sql shell,执行如下操作 \i C:/Users/Peter_Youny/Desktop/ischool ...

  9. seo关键字优化

    SEO 第一: 标题关键字分析 分析和选择行业热门的关键字,并合理的应用于网站标题内及分布到各栏目页面和内页. 其实个人觉得标题.内容.以及与内容相关性链接必须要足.还有就是出现的层次感,例如: a) ...

  10. python中好用的pip

    1.windows/linux 下安装pip见上篇博客 http://www.cnblogs.com/Edwardzhao/p/5856924.html 2.好用的方法 pip install xxx ...