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

 更新时间:2020年03月19日 16:48:47   作者:jkdev  
这篇文章主要介绍了Android开发实现TextView超链接5种方式源码实例,需要的朋友可以参考下

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: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 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 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);

设置多重效果叠加:

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

  //自定义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加密之全盘加密详解

    Android加密之全盘加密详解

    这篇文章主要介绍了Android加密之全盘加密详解,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-03-03
  • Android数据库greenDAO配置与使用介绍

    Android数据库greenDAO配置与使用介绍

    这篇文章主要介绍了Android集成GreenDao数据库,使用数据库存储时候,一般都会使用一些第三方ORM框架,比如GreenDao,本文分几步给大家介绍Android集成GreenDao数据库的方法,需要的朋友可以参考下
    2023-03-03
  • Android 应用中插入广告详解及简单实例

    Android 应用中插入广告详解及简单实例

    这篇文章主要介绍了Android 应用中插入广告详解及简单实例的相关资料,需要的朋友可以参考下
    2016-10-10
  • Android使用WebView播放flash的方法

    Android使用WebView播放flash的方法

    这篇文章主要介绍了Android使用WebView播放flash及判断是否安装flash插件的方法,以实例形式详细讲述了从布局、逻辑判断到功能最终实现播放Flash的方法,是Android程序设计中比较典型的应用,需要的朋友可以参考下
    2014-11-11
  • Android应用开发之代码混淆

    Android应用开发之代码混淆

    Android项目中的混淆很easy,之所以写这篇总结是由于近期发现公司的代码居然没有混淆,反编译后代码随手可得。很震惊。
    2014-07-07
  • Android自定义View的使用及其原理知识点总结

    Android自定义View的使用及其原理知识点总结

    在本篇文章里小编给大家整理的是关于Android自定义View的使用及其原理知识点总结内容,需要的朋友们可以学习下。
    2019-08-08
  • Android 无障碍服务 performAction 调用过程分析

    Android 无障碍服务 performAction 调用过程分析

    这篇文章主要介绍了Android 无障碍服务 performAction 调用过程分析,无障碍服务可以模拟一些用户操作,无障碍可以处理的对象,通过类 AccessibilityNodeInfo 表示,通过无障碍服务,可以通过它的performAction方法来触发一些action
    2022-06-06
  • Android onTouchEvent事件中onTouch方法返回值(介绍)

    Android onTouchEvent事件中onTouch方法返回值(介绍)

    下面小编就为大家带来一篇Android onTouchEvent事件中onTouch方法返回值(介绍)。小编觉得挺不错的,现在就分享给大家,也给大家做个参考。一起跟随小编过来看看吧
    2017-04-04
  • Android WebP 图片压缩与传输

    Android WebP 图片压缩与传输

    本文主要讲解Android WebP 图片压缩与传输,这里对WebP图片格式以及如何实现压缩和传输,做了详细讲解,有需要的小伙伴可以参考下
    2016-08-08
  • AndroidStudio不自动添加新创建的文件到VCS的解决办法

    AndroidStudio不自动添加新创建的文件到VCS的解决办法

    这篇文章主要介绍了AndroidStudio不自动添加新创建的文件到VCS的解决办法的相关资料,需要的朋友可以参考下
    2017-03-03

最新评论