TextView中URL等指定特殊字符串与点击事件解析

TextView中URL等指定特殊字符串与点击事件解析,第1张

概述使用TextView时,有时可能需要给予TextView里的特定字符串,比如URL,数字特别的样式,必希望能够添加点击事件。比如发短信时,文字里的url就可以点击直接打开浏览器,数字可以点击拨打电话。

使用TextVIEw时,有时可能需要给予TextVIEw里的特定字符串,比如URL,数字特别的样式,必希望能够添加点击事件。比如发短信时,文字里的url就可以点击直接打开浏览器,数字可以点击拨打电话。

AndroID提供了SpannableString类来对TextVIEw的内容进行处理,具体步骤: 

1.new一个SpannableString对象,传入需要显示在TextVIEw上的内容; 

2.对内容进行处理(比如用正则表达式解析出URL或数字等等,并指定样式),这部分的核心就是调用SpannableString对象的setSpan()方法;

public voID setSpan(Object what,int start,int end,int flags);

可以看到有四个参数,start 和 end 是意味着你要改变的是该字符串下标start到end的部分,what可以传入对start到end的文本的处理方式或者样式,也可以传入你指定的东西来取代文本,比如图片。flags总共有四种,他意味着是否影响指定处前一个或后一个字符串 

3.TextVIEw.setText(spannableString),由于SpannableString实现了CharSequence,所以TextVIEw可以直接set。

注意:到这里TextVIEw的指定内容就已经实现指定样式了。,但是如果想要添加点击事件,还需要让TextVIEw调用setMovementMethod(MovementMethod movement)来实现点击事件。 

下面贴出我的Demo,实现将TextVIEw里的数字标注出来,点击数字将d出Toast将数字显示出来。

 private voID init() {  tvMain.setMovementMethod(linkMovementMethod.getInstance());  SpannableString s = new SpannableString(CONTENT);  filterNumber(s);  tvMain.setText(s); } private static final String REG = "\d+"; public class TextClickableSpan extends ClickableSpan {  private String text;  public TextClickableSpan(String text) {   this.text = text;  }  @OverrIDe  public voID onClick(VIEw vIEw) {   Toast.makeText(MyActivity.this,text,Toast.LENGTH_SHORT).show();  } }private voID filterNumber(Spannable s) {  Matcher m = Pattern.compile(REG).matcher(s.toString());  while (m.find()) {   String text = m.group();   TextClickableSpan span = new TextClickableSpan(text);   s.setSpan(span,m.start(),m.end(),Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);  } }

代码很简单,首先要说的是ClickableSpan,因为当你点击该特定字符串时,linkMovementMethod的ontouchEvent()方法,将会根据你点击的位置获得ClickableSpan对象,并执行该对象的onClick方法。而这个ClickableSpan需要在setSpan时传入(这个地方不仅可以传入ClickableSpan还有诸如ImageSpan等等,不过如果要可以点击的话,要传入ClickableSpan。其他的这里不一一赘述)。

然后我的filterNumber方法,就是利用正则表达式来过滤数字,并调用setSpan一一传入相应start和end。

最后,要说下setSpan的最后一个参数flags:

Spanned.SPAN_INCLUSIVE_EXCLUSIVE 是当前这个设置包括前面,不包括后面

Spanned.SPAN_EXCLUSIVE_EXCLUSIVE 当前设置前后不包括

Spanned.SPAN_INCLUSIVE _INCLUSIVE 当前设置包括前面,包括后面

Spanned.SPAN_EXCLUSIVE_INCLUSIVE 当前设置不包括前面,包括后面

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持编程小技巧。

总结

以上是内存溢出为你收集整理的TextView中URL等指定特殊字符串与点击事件解析全部内容,希望文章能够帮你解决TextView中URL等指定特殊字符串与点击事件解析所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1143617.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-31
下一篇 2022-05-31

发表评论

登录后才能评论

评论列表(0条)

保存