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,使用自定义模式设置链接的更多相关文章

  1. TextView加边框,自定义,上下左右四条线 颜色,想用哪个用哪个

    1.这是一个自定义的TextView ,看吧,底下就是代码,应该都可以看懂,这里就不多说了 package com.example.admin.myutilsborder;import android ...

  2. STM32输入捕获模式设置并用DMA接收数据

    参考: STM32的PWM输入模式设置并用DMA接收数据 Input capture mode The input stage samples the corresponding TIx input ...

  3. Linux下网卡混杂模式设置和取消

    工作中发现一个网卡工作状态不对了,查看了一下,发现这个网卡和正常工作的网卡  信息不一样,它显示的居然是混杂模式,而正常工作的是  running 模式 ,所以来了解下混杂模式怎么取消... 下文来自 ...

  4. Android中TextView和EditView经常使用属性设置

    Android开发中最经常使用的几乎相同就是TextView和EditView了,在使用它时.我们也会设置它的一些属性,为了让我们设计的更好看,设置的更合理.这里记下它的经常使用属性,方便后期查阅. ...

  5. IE 兼容模式 设置 Meta Compatible 和 Iframe 子页面的关系

    背景 因为历史原因,之前很多的系统都会是 顶级页面+Iframe来加载子级页面的这种模式构件系统,而且系统都只能运行在IE6或者IE 高版本兼容模式下(IE 7模式). 随着现在的审美原来越高,脚本能 ...

  6. 详解Mac睡眠模式设置

    详解Mac睡眠模式设置 原文链接:http://www.insanelymac.com/forum/index.php?showtopic=281945 需要说明的是,首先这篇文章是针对已经能够成功睡 ...

  7. 用c#开发微信(5)自定义菜单设置工具 (在线创建)

    读目录 1 使用 2 原理 3. 错误 上次写了<用c#开发微信 (4) 基于Senparc.Weixin框架的接收事件推送处理 (源码下载)>,有园友问到如何创建菜单的问题,今天就介绍下 ...

  8. asp.net项目发布网上-当前自定义错误设置禁止远程查看应用程序

    早上服务器的系统突然出错了,悲剧~ ==============异常信息:============================== 服务器上出现应用程序错误.此应用程序的当前自定义错误设置禁止远程 ...

  9. Android TextView背景颜色与背景图片设置

    Android TextView 背景颜色与背景图片设置,android textview 控件,android textview 背景, android textview 图片,android te ...

随机推荐

  1. .NetCore实践篇:分布式监控Zipkin持久化之殇

    前言 本系列已写了四篇文章,读本篇之前,可以先读前面几篇. 思考大纲:.Net架构篇:思考如何设计一款实用的分布式监控系统? 实践篇一:.NetCore实践篇:分布式监控客户端ZipkinTracer ...

  2. Jmeter(三十五)_精确实现网页爬虫

    Jmeter实现了一个网站文章的爬虫,可以把所有文章分类保存到本地文件中,并以文章标题命名 它原理就是对网页提交一个请求,然后把返回的所有值提取出来,利用ForEach控制器去实现遍历.下面来介绍一下 ...

  3. GlusterFS分布式存储学习笔记

    分布式文件系统 分布式文件系统(Distributed File System)是指文件系统管理的物理存储资源并不直接与本地节点相连,而是分布于计算网络中的一个或者多个节点的计算机上.目前意义上的分布 ...

  4. 置换群 Burnside引理 Pólya定理(Polya)

    置换群 设\(N\)表示组合方案集合.如用两种颜色染四个格子,则\(N=\{\{0,0,0,0\},\{0,0,0,1\},\{0,0,1,0\},...,\{1,1,1,1\}\}\),\(|N|= ...

  5. bootstrap完善按钮组bug

    .btn.active { border: 1px solid #ff9400 !important; color: #ff9400 !important; } <div class=" ...

  6. 生产者消费者模式 php 【转】

    在工作中常常听到某某大牛之间的交谈会涉及到,xx消费者啊啥的,到底什么大牛之间讲的是什么? 这篇文章主要解决三个问题: 1.到底什么是生产者和消费者,以及它们之间的故事 2.它们之间靠什么交流 3.应 ...

  7. 【个人总结】软件工程M1/M2总结

    个人博客连接: http://www.cnblogs.com/lwq12061168/p/4094252.html http://www.cnblogs.com/lwq12061168/p/40284 ...

  8. 读后感for《一个程序员的生命周期》

    我是村里走出来的孩子,妈妈说我也许是家里唯一一个大学生了,家里从选专业开始也赋予我厚望.说实话,上大学是父母经济压力最大的时候.心疼,大概就是早上六七点起床,看到爸爸一夜没睡,带着倦容眼睛红红的还在工 ...

  9. format()函数用法

    基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数,位置可以不按顺序. 直接打印输出参数: 通过字典设置参数: 通过列表索引设置参数:

  10. shell脚本--逻辑判断与字符串比较

    涉及到比较和判断的时候,要注意 整数比较使用-lt,-gt,ge等比较运算符,详情参考:整数比较 文件测试使用 -d, -f, -x等运算发,详情参考:文件测试 逻辑判断使用    && ...