TextView 借助Linkify,使用自定义模式设置链接
http://my.oschina.net/fengheju/blog/176105
TextView是android中的一个比较常用的控件,它有一个非常有趣的特性,可以通过android:autoLink设置某些模式,使得textView文本中匹配这个模式的文本段成为可点链接。android默认支持的模式有:web,email,phone,map以及它们的组合。
例如:
1
2
3
4
5
|
< TextView android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:autoLink = "web" android:text = "helle baidu:www.baidu.com jflsjf" /> |
由于设置了该TextView的autoLink属性为web,因此文本text中的www.baidu.com将会显示为可点击的链接。当用户点击了该连接,android会创建一个Intent(内容为一个Uri,http://www.baidu.com)并且将它传给startActivity方法,来启动能够处理http模式的activity。
除了使用默认的web等模式之外,我们还可以通过Linkify类的addLinks方法来添加自定义模式。
例如,我们可以自定义一个模式 mm://
TextView的xml定义如下:
1
2
3
4
5
6
|
< TextView android:id = "@+id/cus" android:layout_width = "wrap_content" android:layout_height = "wrap_content" android:text = "www.baidu.com abc def g mm://abcd gg" /> |
在Java代码中为其设置自定义模式:
1
2
3
4
5
6
7
8
9
10
11
12
|
private TextView customLinkify; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); customLinkify = (TextView) findViewById(R.id.cus); Pattern p = Pattern.compile( "mm://\\S*" ); Linkify.addLinks(customLinkify, p, "mm" ); } |
运行结果如下:
可以看到“mm://abcd”已经变为可点击状态,但是此时点击该链接时,会抛出异常,因为android并没有找到可以处理mm://模式的activity。可以添加一个简单的MmActivity来处理这种模式:
首先,在AndroidManifest文件中注册一下:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
< activity android:name = ".MmActivity" android:label = "@string/app_name" > < intent-filter > < action android:name = "android.intent.action.VIEW" /> <!--隐式调用时,必须声明DEFAULT种类,否则Android不会启动该Activity--> < category android:name = "android.intent.category.DEFAULT" /> <!--声明能够处理模式mm://--> < data android:scheme = "mm" /> </ intent-filter > </ activity > |
然后在MmActivity中就可以获取相应信息了
1
2
3
|
Intent i = getIntent(); Uri uri = i.getData(); System.out.println(uri); //结果为 mm://abcd |
其实在上面的图上可以看到,www.baidu.com并没有被识别为链接(因为我们没有设置web模式)。需要注意的是,当需要使自定义模式和内置模式web,phone等一起被识别时,一定要先声明内置模式,然后再声明自定义模式,而且不能在xml中通过autoLink属性声明,否则自定义模式不起作用。因为在设置内置模式时,会先删除已有模式。
将上面的Java代码改为:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
private TextView customLinkify; @Override protected void onCreate(Bundle savedInstanceState) { super .onCreate(savedInstanceState); setContentView(R.layout.activity_main); customLinkify = (TextView) findViewById(R.id.cus); Pattern p = Pattern.compile( "mm://\\S*" ); Linkify.addLinks(customLinkify, Linkify.WEB_URLS); Linkify.addLinks(customLinkify, p, "mm" ); //这一句一定要在后面 } |
现在就可以同时识别web以及自定义模式了。
TextView 借助Linkify,使用自定义模式设置链接的更多相关文章
- TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个
1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android ...
- STM32输入捕获模式设置并用DMA接收数据
参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...
- Linux下网卡混杂模式设置和取消
工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡 信息不一样,它显示的居然是混杂模式,而正常工作的是 running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...
- Android中TextView和EditView经常使用属性设置
Android开发中最经常使用的几乎相同就是TextView和EditView了,在使用它时.我们也会设置它的一些属性,为了让我们设计的更好看,设置的更合理.这里记下它的经常使用属性,方便后期查阅. ...
- IE 兼容模式 设置 Meta Compatible 和 Iframe 子页面的关系
背景 因为历史原因,之前很多的系统都会是 顶级页面+Iframe来加载子级页面的这种模式构件系统,而且系统都只能运行在IE6或者IE 高版本兼容模式下(IE 7模式). 随着现在的审美原来越高,脚本能 ...
- 详解Mac睡眠模式设置
详解Mac睡眠模式设置 原文链接:http://www.insanelymac.com/forum/index.php?showtopic=281945 需要说明的是,首先这篇文章是针对已经能够成功睡 ...
- 用c#开发微信(5)自定义菜单设置工具 (在线创建)
读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...
- asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序
早上服务器的系统突然出错了,悲剧~ ==============异常信息:============================== 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程 ...
- Android TextView背景颜色与背景图片设置
Android TextView 背景颜色与背景图片设置,android textview 控件,android textview 背景, android textview 图片,android te ...
随机推荐
- 【下一代核心技术DevOps】:(六)Rancher集中存储及相关应用
1. 前言 为什么要使用集中存储? 使用集中存储有个很大的优势是数据安全和统一管理,和集群完美配合. 产品集成存储经历过几个阶段: 1.单机本机存储. 系统使用本地硬盘存储 2.单网络集中存储. 局域 ...
- Munge服务部署和测试
1. 概述2. 下载3. 安装3.1 源码简要说明3.2 编译安装3.3 配置3.4 创建munge.key3.5 启动方式 1. 概述 munge是认证服务,用于生成和验证证书.应用于大规模的HPC ...
- Oracle_安装说明
1.先到Oracle官网上下载11g oracle Database 11g 第 2 版 (11.2.0.1.0) 标准版.标准版 1 以及企业版 适用于 Microsoft Windows (x64 ...
- 快速排序 O(nlogn)
#include<bits/stdc++.h> using namespace std; int a[200],n; void q_sort(int l,int r){ if(l>r ...
- Segment Occurrences(string find函数)
Description You are given two strings s and t, both consisting only of lowercase Latin letters.The s ...
- doc窗口 输入命令net start mysql 服务名无效
解决方案: 1.win+R键输入cmd敲回车进入dos界面: 2.输入cd d:/mysql-5.5.25/bin敲回车,发现没变化: 3.输入d:敲回车,定位到d:\mysql-5.5.25\bin ...
- 思甜雅---关于qq的NABCD的模型分析
个人连接:http://www.cnblogs.com/xiaoliulang/ 关于QQ的NABCD模型 N--Need 随着电脑的普及,人们在网络上进行交流的时间越来越多,由于现有的交流工具还不是 ...
- eclipse插件wordwrap
一行代码很长,浏览不方便,安装wordwrap可以自动折行. help->install new software-,在Workwith输入wordwrap - http://ahtik.com ...
- Red Hat 5.8 CentOS 6.5 共用 输入法
pick up from http://jingyan.baidu.com/article/20b68a885a3607796cec622c.html
- 面象对象设计原则之五:依赖倒置原则(The Dependency Inversion Principle,DIP)
如果说开闭原则是面向对象设计的目标的话,那么依赖倒转原则就是面向对象设计的主要实现机制之一,它是系统抽象化的具体实现.依赖倒转原则是Robert C. Martin在1996年为“C++Reporte ...