android的TextView的TextWatcher使用

本文详细介绍了TextWatcher在Android中的应用,包括beforeTextChanged、onTextChanged和afterTextChanged的调用流程,以及如何避免无限循环调用的问题。此外,还讨论了InputFilter的使用,特别是如何自定义过滤器以过滤文本内容。
摘要由CSDN通过智能技术生成
TextWatcher是一个文本变化监听接口,定义了三个接口,分别是beforeTextChanged,onTextChanged,afterTextCahnged.
TextWatcher通常与TextView结合使用,以便在文本变化的不同时机做响应的处理。TextWatcher中三个回调接口都是使用了InputFilter过滤器过滤之后的文字字符作为新的字符对象。
使用方法

mTextView.addTextChangedListener(new TextWatcher(){
@Override
        public void beforeTextChanged(CharSequence s, int start, int count, int after) {

        }

        @Override
        public void onTextChanged(CharSequence s, int start, int before, int count) {

        }

        @Override
        public void afterTextChanged(Editable s) { //屏蔽回车 中英文空格

        }
});

我们可以在beforeTextChanged,onTextChanged,afterTextChanged的回调方法中实现自己的业务逻辑,这三个参数代表了TextView文本发生变化的三个阶段。

beforeTextChanged(CharSequence s, int start, int count, int after)方法是TextView在文本改变之前调用,并且传入四个参数。
CharSequence s参数表示当前TextView内部的mText成员变量,实际上就是当前显示的文本;
int start参数表示需要改变的文字区域的起点,即选中的文本区域的起始点;
int count参数表示需要改变的文字的字符数目,即选中的文本区域的字符的数目;
int after参数表示替换的文字的字符数目。
特别的,当TextView删除文本的时候,after的值为0,此时TextView使用用空字符串代替需要改变的文字区域来达到删除文字的目的。
图1.1描述了beforeTextChanged的四个参数的含义。
图1.1 beforeTextChanged的四个参数实例


TextView的setText方法通过调用sendBeforeTextChanged方法通知所有注册的TextWatcher回调beforeTextChanged方法,此时传入的四个参数,s是当前的本地变量mText的值,如果该值为null,即之前没有给TextView设置过需要显示的文本,那么s的值为"";start的值为0;count的值为当前mText的长度;after的值为需要显示的新文本的长度。代码1.1是TextView中setText方法调用sendBeforeTextChanged的源码。
代码1.1 TextView中setText方法调用sendBeforeTextChanged的源码
if ( mText !=  null) {
    oldlen =  mText.length() ;
    sendBeforeTextChanged( mText 0 oldlen text.length()) ;
else {
    sendBeforeTextChanged( "" 0 0 text.length()) ;
}

onTextChanged(CharSequence s, int start, int before, int count)方法是TextView在文本改变的时候调用,此时mText成员变量已经被修改为新的文本,并且传入四个参数。
CharSequence s参数表示当前TextView内部的mText成员变量,此时的mText已经被修改过了,但此时mText所表示的文本还没有被显示到UI组件上;
int start参数表示改变的文字区域的起点;
int before参数表示改变的文字区域在改变前的旧的文本长度,即选中文字区域的文本长度;
int after参数表示改变的文字区域在修改后的新的文本长度。
特别的,当TextView添加文本的时候,before 的值为0,此时相当于TextView将空的字符区域用新的文本代替。

afterTextChanged(Editable s)方法是TextView在调用完所有已注册的TextWatcher的onTextChanged方法之后回调的。此时mText成员变量已经被修改为新的文本,并且传入s,该参数s实际上就是mText。通过该接口,咱们可以再次修改将要展示的文字。
图1.2描述了这三个方法在TextView文字变化时的调用流程。
图1.2  TextView文字变化时的调用流程


afterTextChanged的参数类型是Editable,这是一个可编辑的对象,该对像就Text
  • 10
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值