相关文章推荐
大方的稀饭  ·  大野木菜菜夏_百度百科·  1 年前    · 
傻傻的帽子  ·  先进技术成果西部转化中心在蓉揭牌黄强张克俭施 ...·  1 年前    · 
玩足球的风衣  ·  硅藻泥有什么优缺点-百度经验·  1 年前    · 
奔跑的西瓜  ·  國立故宮博物院-呼畢勒罕-清代活佛文物大展- ...·  1 年前    · 
乖乖的小摩托  ·  photoshop实用技巧_ps形状改不了颜 ...·  2 年前    · 
小百科  ›  Android开发实现TextView超链接5种方式源码实例开发者社区
源码 android开发
知识渊博的哑铃
3 年前
作者头像
砸漏
0 篇文章

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

前往专栏
腾讯云
开发者社区
文档 意见反馈 控制台
首页
学习
活动
专区
工具
TVP
文章/答案/技术大牛
发布
首页
学习
活动
专区
工具
TVP
返回腾讯云官网
社区首页 > 专栏 > 恩蓝脚本 > Android开发实现TextView超链接5种方式源码实例

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

作者头像
砸漏
发布 于 2020-10-16 14:24:00
862 0
发布 于 2020-10-16 14:24:00
举报

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) {
 
推荐文章
大方的稀饭  ·  大野木菜菜夏_百度百科
1 年前
傻傻的帽子  ·  先进技术成果西部转化中心在蓉揭牌黄强张克俭施小琳出席- 四川省 ...
1 年前
玩足球的风衣  ·  硅藻泥有什么优缺点-百度经验
1 年前
奔跑的西瓜  ·  國立故宮博物院-呼畢勒罕-清代活佛文物大展-清代崛起的格魯派
1 年前
乖乖的小摩托  ·  photoshop实用技巧_ps形状改不了颜色-CSDN博客
2 年前
今天看啥   ·   Py中国   ·   codingpro   ·   小百科   ·   link之家   ·   卧龙AI搜索
删除内容请联系邮箱 2879853325@qq.com
小百科 - 百科知识指南
© 2024 ~ 沪ICP备11025650号