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

时间:2024-03-11 20:41:42

因为在上上篇博客中介绍了SpannableString的使用(SpannableString使用详解),由此想到给TextView添加超链接究竟有多少种方式?经过个人总结,现在一共发现四种,如果还有其他方式欢迎大家补充,下面我就介绍一下我总结出来的四种方式。

1.直接在xml文件中配置autoLink属性

autoLink属性一共有六个值,分别是none(正常),web(将文本识别为一个网址),phone(将文本识别为一个电话号码),mail(将文本识别为一个邮件地址),map(这个,呃,该怎么表述呢?会打开地图应用),all(根据文本自动识别)。一般情况下我们设置为all即可,我们看看,这个时候它就会自动将TextView中的电话号码、邮件地址、网页链接等识别出来,这中方式是最简单的一种。

2.使用HTML语言

我们知道TextView可以直接显示转换后的HTML,那么借助H5开发经验,我们知道网页中的超链接也可以在TextView中打开,如下:

tv1.setText(Html
				.fromHtml("<a href=\'tel:18565554482\'>打电话</a>,<a href=\'smsto:18565554482\'>发短信</a>,<a href=\'mailto:584991843@qq.com\'>发邮件</a>,<a href=\'http://www.baidu.com\'>Go百度</a>"));
		tv1.setMovementMethod(LinkMovementMethod.getInstance());

只要我们写好协议,这个其实也很简单。

3.在strings.xml中直接写HTML,然后在TextView的xml中直接引用即可

strings.xml中的定义如下:

<string name="tv4"><a href=\'tel:18565554482\'>打电话</a>,<a href=\'smsto:18565554482\'>发短信</a>,<a href=\'mailto:584991843@qq.com\'>发邮件</a>,<a href=\'http://www.baidu.com\'>Go百度</a></string>

TextView的XML定义如下:

    <TextView
        android:id="@+id/tv4"
        android:layout_width="match_parent"
        android:layout_height="48dp"
        android:gravity="center"
        android:text="@string/tv4"
        android:textSize="24sp" >
    </TextView>
然后只需要在Activity中设置该TextView为可点击状态即可:

tv4.setMovementMethod(LinkMovementMethod.getInstance());

4.使用SpannableString实现超链接

关于spannableString的详细使用参见SpannableString使用详解,我们这里就再次重复一下使用spannableString实现超链接功能:

		SpannableString ss = new SpannableString("打电话,发短信,发邮件,Go百度");
		ss.setSpan(new URLSpan("tel:18565554482"), 0, 3,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		ss.setSpan(new URLSpan("smsto:18565554482"), 4, 7,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		ss.setSpan(new URLSpan("mailto:584991843@qq.com"), 8, 11,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		ss.setSpan(new URLSpan("http://www.baidu.com"), 12, 16,
				Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
		tv3.setText(ss);
		tv3.setMovementMethod(LinkMovementMethod.getInstance());
四种方式,哈哈,都很简单吧。


Demo下载http://download.csdn.net/detail/u012702547/9284351

相关文章