使用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等指定特殊字符串与点击事件解析