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 ...
随机推荐
- SSL踩坑ERR_SSL_VERSION_OR_CIPHER_MISMATCH
最近公司项目开发了一个微信小程序,并且部署测试OK,由于微信小程序调用的后端接口必须是HTTPS,所以给接口安装了SSL,第一天测试都正常.第二天早上再使用时页面无响应. 抓包发现是后端接口抛出: n ...
- Kafka基础系列第1讲:Kafka的诞生背景及应用
Kafka 是由 LinkedIn 开发的一个分布式的消息系统,使用 Scala 编写,它以可水平扩展和高吞吐率而被广泛使用.目前越来越多的开源分布式处理系统如 Cloudera.Apache Sto ...
- c#基础系列2---深入理解 String
"大菜":源于自己刚踏入猿途混沌时起,自我感觉不是一般的菜,因而得名"大菜",于自身共勉. 扩展阅读:深入理解值类型和引用类型 基本概念 string(严格来说 ...
- Mongo 开发笔记
时间 程序的时间是本地时间 ,数据库中的时间是 ISO 标准时间 . ISO时间 + 8 小时 = 本地时间(北京时间 ) Java驱动会自动做转化. 语法 数组查询 数据查询使用 elemMatch ...
- Linux下的计算命令和求和、求平均值、求最值命令梳理
在Linux系统下,经常会有一些计算需求,那么下面就简单梳理下几个常用到的计算命令 (1)bc命令bc命令是一种支持任意精度的交互执行的计算器语言.bash内置了对整数四则运算的支持,但是并不支持浮点 ...
- cross-env简介
是什么 运行跨平台设置和使用环境变量的脚本 出现原因 当您使用NODE_ENV =production, 来设置环境变量时,大多数Windows命令提示将会阻塞(报错). (异常是Windows上的B ...
- dxteam团队项目终审报告
一. 团队成员的简介和个人博客地址 M1阶段 http://www.cnblogs.com/dxteam/p/3991514.html M2阶段 新成员 邓亚梅 http://www.cnblogs. ...
- VSCODE安装以及使用Python运行调试代码的简单记录
1. VScode安装 官网下载VSCODE https://code.visualstudio.com/ 下载呢windows的x64安装包,安装stable的版本 当前日期 2018.01.15 ...
- 日常工作--IIS修改增加最大数据库连接池
1. 在全局配置文件中的 GSPDbConfiguration 需要修改数据库连接池的连接上面都增加上节点: MaxPoolSize = "100" 效果 即可 因为产品增加了对O ...
- php函数值传值/地址以及引用的用法
博客摘自 奔跑的大白,网址: http://www.cnblogs.com/gauze/p/5568867.html 1.先来解释一下名词. 值传递(passl-by-value)过程中,被调函数的 ...