您的位置:首页技术文章
文章详情页

Android开发实现TextView超链接5种方式源码实例

【字号: 日期:2022-09-26 09:37:06浏览:35作者:猪猪

Android实现TextView超链接一共有五种方式:推荐第四种、第五种

1. 直接在xml文件中配置autoLink属性(简单易用,效果单一)

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

<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中打开,如下:

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

 

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: 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 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实现(效果多样)

设置单一效果:

// Setup single spanSpannableTextView 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);

设置多重效果叠加:

// Setup multiple spansSpannableTextView 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 去掉下划线

//自定义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超链接的文章请查看下面的相关链接

标签: Android
相关文章: