EditText笔记

简单记录一下EditText的addTextChangedListener的使用mEt.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 xtChanged(Editable s) {
     }  ;

    });
    其中 public void beforeTextChanged(CharSequence s, int start, int count, int after)的三个参数的意思如下 s为键盘输入前EditText里面的内容,比如EditText已经里有he这个了字符串了,那么s就是"he"了,start为输入的起始位置(跟传统的一样都是从0开始),因为已经有"he",所以start为2,count为取代原来多少个字符的意思,比如我们在"he"之后输入"l",那么count为0,因为"he"并没有被取代掉只是,after就是我们输入字符的个数,因为现在我们只输入了"l",所以after为1。

这里写图片描述
然后在public void onTextChanged(CharSequence s, int start, int before, int count),因为我们输入了”l”,所以s就是”hel”,而start跟beforeTextChanged里的意思是一样的,就是输入的位置,因为我们是从”he”后面输入的,start就是2, before里跟beforeTextChanged里的第二参数是一个意思 ,就是取代原来多少个字符,这里为0,count跟beforeTextChanged里的第三个”一个意思,我们只输入l”,所以count为1。                                                                                                 这里写图片描述                                      然后我们在没有选择”l”的时候又输入了”l”,这里reTextChanged又会被调用,这时我们看看截图                                                                                                           这里写图片描述                                       这时s就是为”hel”,因为我们之前输入了一个”l”了,start为2不变,这时count变成了1,也就是说我们将取代一个字符,那这个字符是什么呢,根据start和count计算也就是取代了”he”之后的”l”,用多少个字符取代呢,因为after为2,所以就是用两个字符取代。这两个字符即”ll”(因为我们没有确认输入而是连输)。     再接下来我们看看onTextChanged的截图                                                                                                        这里写图片描述                                      这里s变成了”hell”,也就是我们输入后EditText里面的内容了,也就是在2的下标处开始用两个字符取代之前一个字符,通过计算可以知道是用”ll”取代”l”,这跟我们实际的输入情况是一致的。                                                                                                            而当我们不是连输,是在第一个”l”输入后点击确认。那么将会有不同的结果 我们来看看beforeTextChanged的截图                                            这里写图片描述                                          确认输入一个”l”时会再次调用beforeTextChanged(这里说一下,我昨天用另外一个版本时在确认时并不会调用beforeTextChanged,也可能是我昨天弄错了),  然后是oneTxtChanged的截图图                                                                                                                         这里写图片描述                                             然后我们再输入一个”l”,看beforeTextChanged的截图                                                                                                        这里写图片描述                                                          注意,这里start变成了3,其他参数也变了,再看看onTextChanged的截图                                                                                                                     这里写图片描述                                                           这就是连输入”ll”和单输入两个”l”的不同。                                                                                                                             当我们删除的时候,就是beforeTextChanged里的after变成了0而已,也就是用0个去代替多少其他字符。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值