简单定制Android控件(1) - 自识别url的TextView

本文介绍了如何在Android中自定义TextView,使其能识别并高亮显示非标准URL。通过正则表达式实现URL的匹配,并保留原有点击事件。详细讲述了正则匹配URL的过程以及在Java中使用正则的注意事项。
摘要由CSDN通过智能技术生成

国际惯例,先放github:

https://github.com/razerdp/HttpUrlTextView

或者apkbus:

http://www.apkbus.com/forum.php?mod=viewthread&tid=248196


需求:

1 - 能够识别出一大堆文字里面的url

2 - 能够识别出非http://|https://|ftp://等协议开头的非标准url

3 - 对于原来已经存在clickspan的文字不能去掉其点击事件

4 - url可点击


分析:

虽然android的textview自带了autoLink属性,但是用过的人都知道,两个链接之间的文字,或者有时候文字带着链接会导致整一个文字都变成可点击的链接,这对用户体验并不好。因此就有了这次的定制。

针对第一点,和第二点,其实两者都一样,要识别出一大堆东东里面的某个小东西,正则是我想到的比较好的解决方法,而且网络上有很多正则相关的,经受过考验的表达式(虽说有正则就必定有绕过。。。。)

针对第三点,我们可以通过span.getSpans来获取每个span然后手动拼接起来。

针对第四点,没啥好说的,直接用ClickableSpan解决


开工:

  • 一、

    能够识别出一大堆文字里面的url

    能够识别出非http://|https://|ftp://等协议开头的非标准url

  • 首先上网查查识别url的正则表达式,毕竟不制造重复的轮子是我们的宗旨←_←

  • 于是乎,咱们就得到了这一个:

  •  ((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}))(:[0-9]{1,4})*(/[a-zA-Z0-9\&%_\./-~-]*)?


  • 初看了一下,是不是有很明显的http等协议头,现在当作咱们不了解正则(事实上我还真不是非常了解),然后看了看,一大堆东西干毛啊!!!


  • 不过不看不行啊,,,,orz于是只能硬着头皮分析一下,正则的语法咱们就不说了,网上一大堆,看一下这个正则表达式,有木有发现有一个符号我们很熟悉?就是这个→“|”,写android,准确的说咱们写代码的时候应该经常用到“||”这个符号,代表或者的意思,这里也是,这个“|”符号就是意味着匹配“|”前的正则或者匹配“|”后的正则


  • 那也就是意味着,在http等协议头后面的,就是url,也就是aaa.bbb.ccc/ddd/eee/fff......,这也就符合了需求的第二点,于是咱们就改了一下这个表达式(其实就是ctrl +c/v 大法)

  • 就变成了这样:

  •   ((http|ftp|https)://)(([a-zA-Z0-9\._-]+\.[a-zA-Z]{2,6})|([0-9]{1,3}

  • 3
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值