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

  

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

  

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

  

1.新一个SpannableString对象,传入需要显示在TextView上的内容,,

  

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

        公共空间setSpan(对象什么,int, int, int旗帜);   之前      

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

  

3. textview.settext (spannableString),由于spannableString实现了CharSequence进行,所以TextView可以直接集。

  

到这里TextView的指定内容就已经实现指定样式了,但是如果想要添加点击事件,还需要让TextView调用setMovementMethod (MovementMethod运动)来实现点击事件只

  

下面贴出我的演示,实现将TextView里的数字标注出来,点击数字将弹出烤面包将数字显示出来。

        私人空间init () {   tvMain.setMovementMethod (LinkMovementMethod.getInstance ());   SpannableString s=新SpannableString(内容);   filterNumber(年代);   tvMain.setText(年代);   }      私有静态最终字符串REG=癨 \ d +”;      公开课TextClickableSpan延伸ClickableSpan {   私人字符串文本;      公共TextClickableSpan(字符串文本){   这一点。文本=文本;   }      @Override   公共空间onClick(查看视图){   Toast.makeText (MyActivity.this、文本Toast.LENGTH_SHORT),告诉();   }   }   私人空间filterNumber (Spannable s) {   匹配器m=Pattern.compile (REG) .matcher (s.toString ());   而(m.find ()) {   字符串文字=m.group ();   TextClickableSpan跨度=new TextClickableSpan(文本);   s.setSpan(跨度m.start (), m.end (), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);   }   }      之前      

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

  

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

  

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

  

了。SPAN_INCLUSIVE_EXCLUSIVE是当前这个设置包括前面,不包括后面

  

了。SPAN_EXCLUSIVE_EXCLUSIVE当前设置前后不包括

  

了。SPAN_INCLUSIVE _INCLUSIVE当前设置包括前面,包括后面

  

了。SPAN_EXCLUSIVE_INCLUSIVE当前设置不包括前面,包括后面

  

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

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