Android实现TextView超链接一共有五种方式:推荐第四种、第五种
1. 直接在xml文件中配置autoLink属性(简单易用,效果单一)
autoLink属性一共有六个值,分别是none(正常),web(将文本识别为一个网址),phone(将文本识别为一个电话号码),mail(将文本识别为一个邮件地址),map(这个,呃,该怎么表述呢?会打开地图应用),all(根据文本自动识别)。一般情况下我们设置为all即可,我们看看,这个时候它就会自动将TextView中的电话号码、邮件地址、网页链接等识别出来,这中方式是最简单的一种。如:
1
2
3
4
5
6
|
< TextView android:layout_width = "fill_parent" android:layout_height = "wrap_content" android:autoLink = "all" android:text=" android:textSize = "16dp" /> |
2. 使用HTML语言
我们知道TextView可以直接显示转换后的HTML,那么借助H5开发经验,我们知道网页中的超链接也可以在TextView中打开,如下:
只要我们写好协议,这个其实也很简单。
1
2
|
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中的定义如下:
1
|
< 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定义如下:
1
2
3
4
5
6
7
8
|
< 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的更多使用,参见另一篇:
1
2
3
4
5
6
7
8
9
10
11
12
13
|
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); / / SpannableString对象设置给TextView tv3.setText(ss); / / 设置TextView可点击 tv3.setMovementMethod(LinkMovementMethod.getInstance()); |
5. 使用SpannableTextView实现(效果多样)
设置单一效果:
1
2
3
4
5
6
7
8
9
10
11
|
/ / Setup single span SpannableTextView tv1 = (SpannableTextView) view.findViewById(R. id .tv1); Span span1 = new Span.Builder( "ForegroundSpan, BackgroundSpan, and CustomTypefaceSpan" ) .foregroundColor(R.color.purple_500) .backgroundColor(R.color.green_500) .typeface(mItalicFont) .build(); tv1.setFormattedText(span1); |
设置多重效果叠加:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
|
/ / Setup multiple spans SpannableTextView tv2 = (SpannableTextView) view.findViewById(R. id .tv2); List <Span> spans1 = new ArrayList<>(); spans1.add(new Span.Builder( "ForegroundSpan" ) .foregroundColor(R.color.red_500) .build()); spans1.add(new Span.Builder( "BackgroundSpan" ) .backgroundColor(R.color.yellow_500) .build()); spans1.add(new Span.Builder( "ForegroundSpan and BackgroundSpan" ) .foregroundColor(R.color.orange_500) .backgroundColor(R.color.blue_500) .build()); spans1.add(new Span.Builder( "ForegroundSpan, BackgroundSpan, and CustomTypefaceSpan" ) .foregroundColor(R.color.green_500) .backgroundColor(R.color.indigo_500) .typeface(mRegularFont) .build()); tv2.setFormattedText(spans1); |
实现无下划线超链接:
自定义的urlspan 继承URLSpan 去掉下划线
1
2
3
4
5
6
7
8
9
10
11
12
13
14
|
/ / 自定义urlspan 去掉下划线 public class URLSpanNoUnderline extends URLSpan { public URLSpanNoUnderline(String url) { super (url); } @Override public void updateDrawState(TextPaint ds) { super .updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(Color.BLACK); } } |
本文主要为大家介绍了5种方式实现Android TextView超链接源码实例,更多关于Android实现TextView超链接的文章请查看下面的相关链接
原文链接:https://blog.csdn.net/lyankj/article/details/51882335