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);
}
}

最新文章

  1. Python下载网页的几种方法
  2. JS学习笔记8之 BOM-浏览器对象模型
  3. 北大poj- 1045
  4. Java 代码性能优化总结
  5. Server.UrlEncode与Server.UrlDecode(url传递中文的解决方案)
  6. Css Study - 纵向Menu - By html and Css
  7. Protractor
  8. Matlab实现线性回归和逻辑回归: Linear Regression &amp; Logistic Regression
  9. 【英语】Bingo口语笔记(69) - 脏话的表达
  10. 继承关系在内存和DB中的映射
  11. Supervised Learning-Regression
  12. c++ 读取并解析excel文件方法
  13. iframe的操作
  14. Zigzag Iterator 解答
  15. (原+转)pycharm中传入命令行参数
  16. 解决“无法连接到Python代码运行助手。请检查本机的设置”问题
  17. Java线程同步之一--AQS
  18. golang http server分析(一)
  19. poptest老李谈Socket
  20. java 之 建造者模式(大话设计模式)

热门文章

  1. 【shiro】使用shiro,点击页面请求总是302状态码
  2. Unity-EasyTouch插件之ReservedArea的运用(主要是避免JoyStick与Touch的矛盾)
  3. SQL注入深入剖析
  4. python微信公众号开发学习记录
  5. http://blog.csdn.net/a9529lty/article/details/6454145
  6. Spark Streaming数据清理内幕彻底解密
  7. java线程总结(2/5)
  8. C中strstr的实现方法
  9. MySQL的GRANT命令(创建用户)
  10. Opengl ES 1.x NDK实例开发之六:纹理贴图