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;@Overrideprotected 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;@Overrideprotected 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 ...
随机推荐
- EXPERT FOR SQL SERVER诊断系列--索引
概述 索引设计是数据库设计中比较重要的一个环节,对数据库的性能起着至关重要的作用,但是索引的设计却又不是那么容易的事情,性能也不是那么轻易就获取到的,很多的技术人员因为不恰当的创建索引,最后使得其 ...
- echarts柱状图标签显示不完全的问题
echarts 柱状图当x轴标签数目超过一定数目时在小尺寸设备上第一个和最后一个标签不显示(不是重叠),axisLabel设置interval:0也不起作用; 解决办法: 这个问题存在于4.0版本以上 ...
- MRT与MRTS工具官宣退休,推荐使用HEG
今天错误的删除搞丢了之前下载的MRT与MRTS工具,浏览Modis官网下载时发现找不到了,后来在其官网上发现了这则通知,原来早已停止更新的MRT这次彻底退修了.通知原文如下~~~ The downlo ...
- 关于用tesseract和tesserocr识别图片的一个问题
对于像我这样初学python网络爬虫的freshman来说,软件的准备和环境的配置能让我们崩溃.其中用刚安装好的tesseract和tesserocr库测试识别验证码就是其中一例. 这里我要测试的验证 ...
- db2修改最大连接数
查看当前连接数,sample为数据库名db2 list applications for db sample db2 list applications for db sample show deta ...
- 对象&内置对象& 对象构造 &JSON&__proto__和prototype
原型是一个对象,其他对象可以通过它实现属性继承 原型链:每个对象都会在其内部初始化一个属性,就是__proto__,当我们访问一个对象的属性 时,如果这个对象内部不存在这个属性,那么他就会去__pro ...
- 2017-2018-2 1723《程序设计与数据结构》第八周作业 & 实验二 & 第一周结对编程 总结
作业地址 第八周作业:https://edu.cnblogs.com/campus/besti/CS-IMIS-1723/homework/1847 (作业界面已评分,可随时查看,如果对自己的评分有意 ...
- 剑指offer:字符串的排列
题目描述: 输入一个字符串,按字典序打印出该字符串中字符的所有排列.例如输入字符串abc,则打印出由字符a,b,c所能排列出来的所有字符串abc,acb,bac,bca,cab和cba. 输入描述: ...
- JavaScript的类、对象、原型、继承、引用
以CSS为例,有一种为所有class为"xxxx"的元素添加样式(外联样式),那么所有class为xxx的元素样式就会改变,在css中像下面这么写: <html> &l ...
- ejabberd在windows10下的配置文件ejabberd.yml存放路径
cd %USERPROFILE%\AppData\Roaming\ejabberd\conf C:\Users\Administrator\AppData\Roaming\ejabberd\conf