TextView 添加链接

原创 2015年11月18日 11:58:50

TextView 添加链接

有时我们需要在文字中添加链接供用户点击,如 email, phone, web, map 等。笔者此前的一个项目中就有此需求——当用户选择不同的提现方式时显示不同的提示文字,其中支付宝提现需要添加链接供用户点击查看,链接跳转至支付宝官方说明。这样做的好处是,说明来自官方,更加权威、可信、一致和简洁。下面介绍两种常用的给 TextView 添加链接的方法。

autoLink 属性可应用于 TextView 及其子类如 Button 等,但并非所有子类均有效,如 Button 中有效但在 EditText 中链接虽然变色却不可点击,其对应的 xml 属性和方法如下:

xml 属性 对应的方法
android:autoLink setAutoLinkMask()

Google 官方文档对其说明:

Controls whether links such as urls and email addresses are automatically found and converted to clickable links. The default value is “none”, disabling this feature.

控制是否将 urls, email 等地址自动转换为可点击的链接,默认属性为 “none” 以禁用这一特性。

autoLink 属性可接受的参数及说明如下:

常量 说明
none 0x00 默认值,不匹配任何地址。
web 0x01 匹配 URLs
email 0x02 匹配 email
phone 0x04 匹配电话号码
map 0x08 匹配地图地址
all 0x0f 匹配所有(相当于 web | email | phone | map)

举个例子,布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:autoLink="all"
        android:text="@string/my_info"/>
</LinearLayout>

其中 my_info 对应的 string 如下:

<string name="my_info">我的电话: 10000\n我的博客: http://blog.csdn.net/mrchx\n我的邮箱: 10000@qq.com</string>

运行后显示效果如下:

LinkScreen

以上在 xml 中设置 autoLink 属性,也可在代码中设定,如下:

TextView linkTV = (TextView) findViewById(R.id.tv_link);
linkTV.setAutoLinkMask(Linkify.ALL); // 要在 setText() 之前, 否则无效.
linkTV.setText(R.string.my_info);

在代码中设定时需要注意 setAutoLinkMask() 方法一定要在设置显示内容之前执行,否则无效。这也意味着,如果你仅在 xml 中设置要显示的内容,然后在代码中执行 setAutoLinkMask() 也是无效的。

2. setMovementMethod()

以上介绍的可满足大部分需求,但如果我们只想展示描述性的文字并不显式的显示地址,在点击描述性的文字时跳转,此时以上方法就不适用了。如本文开头提到的支付宝提现说明,直接展示链接地址不如展示描术性的文字友好,效果如下:

MrChx 的 CSDN 博客

这个链接并不显示地址而仅显示描述文字但仍可点击,这在网页中极其常见,TextView 中也可做到。再举个例子,布局文件如下:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/tv_link"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/my_info" />
</LinearLayout>

其中 my_info 对应的 string 如下:

<string name="my_info"><a href="http://blog.csdn.net/mrchx">MrChx 的 CSDN 博客</a></string>

主要代码如下:

TextView linkTV = (TextView) findViewById(R.id.tv_link);
linkTV.setMovementMethod(LinkMovementMethod.getInstance());

这样就可以做到只显示“MrChx 的 CSDN 博客”并可点击跳转的效果了,纯代码实现如下:

TextView linkTV = (TextView) findViewById(R.id.tv_link);
linkTV.setMovementMethod(LinkMovementMethod.getInstance());
String text = "<a href=\"http://blog.csdn.net/mrchx\">MrChx 的 CSDN 博客</a>";
linkTV.setText(Html.fromHtml(text));

总结

Html 还可定义更多属性以显示更多的文字效果,基本上可以满足各种需求。此外还可通过创建 SpanableString 字符串添加链接,本文不作过多介绍,有兴趣可自行搜索查看。

版权声明:本文为博主原创文章,未经博主允许不得转载。

iOS UITextView详解 陌生属性解释,添加展示超链接并交互

@property (nullable, readwrite, strong) UIView *inputView;//inputView就是显示键盘的view,重写这个view,就不会弹出键盘,而是...
  • HDFQQ188816190
  • HDFQQ188816190
  • 2017年06月06日 16:38
  • 690

给TextView添加超链接的四种方式

因为在上上篇博客中介绍了SpannableString的使用(SpannableString使用详解),由此想到给TextView添加超链接究竟有多少种方式?经过个人总结,现在一共发现四种,如果还有其...
  • u012702547
  • u012702547
  • 2015年11月19日 23:07
  • 10597

Android 中TextView 添加超链接

1、 使用android:autoLink="all" 只需在TextView中加入这个属性,而在TextView里面写的文字中包含网址、电话、email的会自动加入连接地址。  如:  an...
  • t12x3456
  • t12x3456
  • 2012年07月16日 22:17
  • 13769

给TextView中的部分文本添加链接的两种方式

方式一:在布局文件中给TextView制定autoLink属性,例如:
  • yinzhijiezhan
  • yinzhijiezhan
  • 2015年07月27日 16:02
  • 859

Android如何通过TextView实现超链接的跳转

前段时间在开发群里看到有人问android的TextView该如何自定义超链接的跳转,如:有字符串“使用该软件,即表示您同意该软件的使用条款和隐私政策”,现希望当点击“使用条款”或“隐私政策”时可以跳...
  • u010933680
  • u010933680
  • 2016年09月02日 20:26
  • 9350

TextView添加链接

TextView添加链接 本文主要介绍TextView添加链接的几种可行及不可行方式,并且分析为什么不可行。示例APK地址TrineaAndroidDemo.apk,效果图如下: ...
  • xiahao86
  • xiahao86
  • 2014年01月02日 15:21
  • 619

Android TextView 添加链接

使用autoLink,只要用这个属性,我们textview就可以添加链接了。 当我们在代码中写成android:autoLink="all"我们就可以在textview里面写的文字中包含网址、电话、...
  • mccxxiv
  • mccxxiv
  • 2012年10月17日 09:06
  • 185

为 TextView 的部分文字设置超链接样式并监听点击事件

TextView的部分文字设置超链接样式并监听点击事件 修改TextView中部分文字的颜色 flags对一段文字设置一些标识TextView的部分文字设置超链接样式并监听点击事件 package c...
  • lgy64422575
  • lgy64422575
  • 2015年12月30日 10:01
  • 898

TextView使部分文字具有超链接(或点击)功能

主要对TextView中的部分字符串进行处理,使之具有点击效果,而且可以对该部分字符串颜色大小进行设置等。...
  • liuweiweiwei
  • liuweiweiwei
  • 2017年03月15日 22:30
  • 1320

iOS UITextView增加链接 交互

//首先,创建一个NSAttributedString然后增加给它增加一个NSLinkAttributeName 属性,见以下: NSMutableAttributedString *attribut...
  • HDFQQ188816190
  • HDFQQ188816190
  • 2017年06月06日 16:25
  • 331
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:TextView 添加链接
举报原因:
原因补充:

(最多只允许输入30个字)