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

 更新时间:2017年11月22日 11:04:06   作者:丙丁  
这篇文章主要为大家详细介绍了TextView中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里的数字标注出来,点击数字将弹出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 当前设置不包括前面,包括后面

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

相关文章

  • Android中RecyclerView实现滑动删除与拖拽功能

    Android中RecyclerView实现滑动删除与拖拽功能

    这篇文章主要使用了RecyclerView的ItemTouchHelper类实现了Item的拖动和删除功能,ItemTouchHelper是v7包下的一个类,下面来看看详细的介绍吧,需要的朋友可以参考学习。
    2017-02-02
  • Android中EditText setText方法的踩坑实战

    Android中EditText setText方法的踩坑实战

    这篇文章主要给大家分享了一些关于Android中EditText setText方法的踩坑记录,文中通过示例代码介绍的非常详细,对各位Android开发者们具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2018-07-07
  • Android studio报: java.lang.ExceptionInInitializerError 错误

    Android studio报: java.lang.ExceptionInInitializerError 错误

    本篇文章主要介绍了Android studio报: java.lang.ExceptionInInitializerError错误的解决方法,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-03-03
  • Android仿微信二维码和条形码

    Android仿微信二维码和条形码

    这篇文章主要介绍了Android仿微信二维码生成以及条形码生成具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2016-06-06
  • Android实现缓存大图到SD卡

    Android实现缓存大图到SD卡

    这篇文章主要为大家详细介绍了Android实现缓存大图到SD卡,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-09-09
  • Android编程内存溢出与防范方法浅析

    Android编程内存溢出与防范方法浅析

    这篇文章主要介绍了Android编程内存溢出与防范方法,较为详细的分析了Android内存溢出的常见原因与相应的防范措施,具有一定参考借鉴价值,需要的朋友可以参考下
    2016-10-10
  • Android4.1中BinderService用法实例分析

    Android4.1中BinderService用法实例分析

    这篇文章主要介绍了Android4.1中BinderService用法,以实例形式分析了Android4.1新增BinderService类的功能、原理及使用技巧,具有一定参考借鉴价值
    2015-10-10
  • React-Native中使用验证码倒计时的按钮实例代码

    React-Native中使用验证码倒计时的按钮实例代码

    这篇文章主要介绍了React-Native中使用验证码倒计时的按钮实例代码,具有一定的参考价值,有兴趣的可以了解一下
    2017-04-04
  • 详解Android内存泄漏检测与MAT使用

    详解Android内存泄漏检测与MAT使用

    编写没有内存泄漏的程序,对提高程序稳定性,提高用户体验具有重要的意义。这篇文章主要介绍了详解Android内存泄漏检测与MAT使用,有兴趣的可以了解一下。
    2016-12-12
  • Android编程之SurfaceView学习示例详解

    Android编程之SurfaceView学习示例详解

    这篇文章主要介绍了Android编程之SurfaceView学习示例,结合实例分析了SurfaceView的功能、使用方法与注意事项,具有一定参考借鉴价值,需要的朋友可以参考下
    2015-10-10

最新评论