Android开发实现TextView超链接5种方式源码实例
Android实现TextView超链接一共有五种方式:推荐第四种、第五种
1.直接在xml文件中配置autoLink属性(简单易用,效果单一)
autoLink属性一共有六个值,分别是none(正常),web(将文本识别为一个网址),phone(将文本识别为一个电话号码),mail(将文本识别为一个邮件地址),map(这个,呃,该怎么表述呢?会打开地图应用),all(根据文本自动识别)。一般情况下我们设置为all即可,我们看看,这个时候它就会自动将TextView中的电话号码、邮件地址、网页链接等识别出来,这中方式是最简单的一种。如:
2.使用HTML语言
我们知道TextView可以直接显示转换后的HTML,那么借助H5开发经验,我们知道网页中的超链接也可以在TextView中打开,如下:
只要我们写好协议,这个其实也很简单。
tv1.setText(Html.fromHtml("打电话, 发短信, 发邮件, Go百度")); tv1.setMovementMethod(LinkMovementMethod.getInstance());
3.在strings.xml中直接写HTML,然后在TextView的xml中直接引用即可(跟第二种方法差不多)
strings.xml中的定义如下:
打电话, 发短信, 发邮件, Go百度
TextView的XML定义如下:
然后只需要在Activity中设置该TextView为可点击状态即可:
tv4.setMovementMethod(LinkMovementMethod.getInstance());
4.使用SpannableString实现超链接(效果多样)
关于SpannableString的更多使用,参见另一篇:
SpannableStringss=newSpannableString("打电话,发短信,发邮件,Go百度"); ss.setSpan(newURLSpan("tel:18565554482"),0,3, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(newURLSpan("smsto:18565554482"),4,7, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(newURLSpan("mailto:584991843@qq.com"),8,11, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); ss.setSpan(newURLSpan("http://www.baidu.com"),12,16, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE); //SpannableString对象设置给TextView tv3.setText(ss); //设置TextView可点击 tv3.setMovementMethod(LinkMovementMethod.getInstance());
5.使用SpannableTextView实现(效果多样)
设置单一效果:
//Setupsinglespan SpannableTextViewtv1=(SpannableTextView)view.findViewById(R.id.tv1); Spanspan1= newSpan.Builder("ForegroundSpan,BackgroundSpan,andCustomTypefaceSpan") .foregroundColor(R.color.purple_500) .backgroundColor(R.color.green_500) .typeface(mItalicFont) .build(); tv1.setFormattedText(span1);
设置多重效果叠加:
//Setupmultiplespans
SpannableTextViewtv2=(SpannableTextView)view.findViewById(R.id.tv2);
Listspans1=newArrayList<>();
spans1.add(newSpan.Builder("ForegroundSpan")
.foregroundColor(R.color.red_500)
.build());
spans1.add(newSpan.Builder("BackgroundSpan")
.backgroundColor(R.color.yellow_500)
.build());
spans1.add(newSpan.Builder("ForegroundSpanandBackgroundSpan")
.foregroundColor(R.color.orange_500)
.backgroundColor(R.color.blue_500)
.build());
spans1.add(newSpan.Builder("ForegroundSpan,BackgroundSpan,andCustomTypefaceSpan")
.foregroundColor(R.color.green_500)
.backgroundColor(R.color.indigo_500)
.typeface(mRegularFont)
.build());
tv2.setFormattedText(spans1);
实现无下划线超链接:
自定义的urlspan继承URLSpan去掉下划线
//自定义urlspan去掉下划线 publicclassURLSpanNoUnderlineextendsURLSpan{ publicURLSpanNoUnderline(Stringurl){ super(url); } @Override publicvoidupdateDrawState(TextPaintds){ super.updateDrawState(ds); ds.setUnderlineText(false); ds.setColor(Color.BLACK); } }
本文主要为大家介绍了5种方式实现AndroidTextView超链接源码实例,更多关于Android实现TextView超链接的文章请查看下面的相关链接