今天在做邮件登录的时候,遇到了输入框(Edittext)监听事件(TextWatcher),现在记录下。

首先看如下代码

eText.addTextChangedListener(new TextWatcher() {

            @Override
public void onTextChanged(CharSequence arg0, int arg1, int arg2,
int arg3) {
Log.e("123", "ontextchange----" + "|arg0===" + arg0 + "|arg1===" + arg1
+ "|arg2===" + arg2 + "|arg3===" + arg3);
} @Override
public void beforeTextChanged(CharSequence arg0, int arg1,
int arg2, int arg3) {
Log.e("123", "before----" + "|arg0===" + arg0 + "|arg1===" + arg1
+ "|arg2===" + arg2 + "|arg3===" + arg3);
} @Override
public void afterTextChanged(Editable arg0) {
// TODO Auto-generated method stub
Log.e("123", "afterchange----" + "|arg0===" + arg0);
}
});

然后我们看下输出的log

1.这个是连续输入时候的log

- ::56.692: E/(): before----|arg0===|arg1===|arg2===|arg3===
- ::56.693: E/(): ontextchange----|arg0===|arg1===|arg2===|arg3===
- ::56.695: E/(): afterchange----|arg0===
- ::04.962: E/(): before----|arg0===|arg1===|arg2===|arg3===
- ::04.963: E/(): ontextchange----|arg0===1理解|arg1===|arg2===|arg3===
- ::04.965: E/(): afterchange----|arg0===1理解
- ::09.192: E/(): before----|arg0===1理解|arg1===|arg2===|arg3===
- ::09.193: E/(): ontextchange----|arg0===1理解我|arg1===|arg2===|arg3===
- ::09.200: E/(): afterchange----|arg0===1理解我

2.这个是当我们删除一个字符的时候的输出结果

- ::26.863: E/(): before----|arg0===1理解我|arg1===|arg2===|arg3===
- ::26.863: E/(): ontextchange----|arg0===1理解|arg1===|arg2===|arg3===
- ::26.877: E/(): afterchange----|arg0===1理解

通过上面的结果我们总结下TextWatch的监听事件三个方法以及参数的意义

触发过程:
 
beforeTextChanged(CharSequence s,int start,int count,int after);
在EditText里的内容即将发生变化之前触发,它保留的其实是上次事件的结果

该方法反映的是,EditText在要发生变化之前,原来的内容字符串s有哪几个字符将要发生何种变化。
无论何种变化方式,都可以理解为:输入框的原内容字符串s,从索引位置start(索引从0开始)开始,
有count个字符即将被替换,替换这count个字符的新的字符个数为after
s 是变化之前的edittext内容
 
onTextChanged(CharSequence s,int start,int before,int count);

在EditText里的内容发生变化之时触发,

在变化时的新的字符串s里,从索引位置start开始,有count个字符,是替换了原来的before个字符的
注意:s是变化之后的输入框内容
这个方法的参数值,结果应该是跟before 方法参数一样的
 
afterTextChanged(Editable s)

text变化之后触发,s是最终新的输入框内容

如果我们希望监听edittext,然后通过它的内容变化最edittext进行操作。操作应该是在after方法中进行。而且,在监听事件中进行edittext值操作,一定要避免事件的死循环。因为每一次edittext变化,都是导致监听事件的执行。

 

TextWatcher-监听输入框内容变化的更多相关文章

  1. HTML5 oninput实时监听输入框值变化的完美方案

    在网页开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快 ...

  2. 【转载】实时监听输入框值变化的完美方案:oninput & onpropertychange

    oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有 ...

  3. js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange

    (1)     先说jquery, 使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码: $('#username').bin ...

  4. 实时监听输入框值变化:oninput & onpropertychange

    结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. oninput 是 HTML5 的标准事件,对于检测 textarea, i ...

  5. 实时监听输入框值变化的完美方案:oninput & onpropertychange

    实时监听输入框值变化的完美方案:oninput & onpropertychange: 网址:http://www.cnblogs.com/lhb25/archive/2012/11/30/o ...

  6. jquery实时监听输入框值变化

    在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条 ...

  7. html5 实时监听输入框值变化的完美方案:oninput & onpropertychange

    结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" ...

  8. js与jquery实时监听输入框值变化方法

    本文实例讲述了js与jquery实时监听输入框值的oninput与onpropertychange方法.分享给大家供大家参考.具体如下: 最近做过一个项目,需求是下拉框里自动匹配关键字,具体细节是实时 ...

  9. Js/jQuery实时监听输入框值变化

    前言 在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能 ...

  10. JQuery如何监听DIV内容变化

    这几天在做一个微博的接入,需要判断微博是否被关注,要检查微博标签的DIV是否有“已关注”的字符,但这个DIV的内容是微博JSSDK动态生 成.$("#id").html()是获取不 ...

随机推荐

  1. Kali linux 2016.2(Rolling)里Metasploit的口令猜测与嗅探

    不多说,直接上干货! 对于发现的系统与文件管理类网络服务,比如Telnet.SSH.FTP等,可以进行弱口令的猜测,以及对明文传输口令的嗅探,从而尝试获取直接通过这些服务进入目标网络的通道. 对于SS ...

  2. 插入记录INSERT(二十五)

    插入记录INSERT 我们先来看第一个操作:INSERT 实际上在mysql当中一共存在着3种不同的insert语句,我们先来看第一种.它的语法结构如下: 一.插入记录 INSERT [INTO] t ...

  3. 有关 IE11

    IE10/IE11 中 99% 的 CSS3 属性不需要写 -ms- 前缀: IE9/IE10/IE11 默认开启 GPU 加速,效果比同期 Chrome 版本(如 35)流畅: IE11 的字体渲染 ...

  4. 基于jquery 的find()函数和children()函数的区别

    element.find(selector)  返回匹配element集合中每个元素的后代,参数selector是必须的,可以通过选择器对元素进行过滤,筛选出符合条件的元素.如果想选中所有的后代元素, ...

  5. Pepper plugin implementation

    For Developers‎ > ‎Design Documents‎ > ‎ Pepper plugin implementation This document provides a ...

  6. Linux系统启动U盘制作工具

    1.UNetbootin UNetbootin 让你创建 Ubuntu 或者其他 Linux 发行版的可引导 Live U 盘,而无需烧录 CD. 你既能让 UNetbootin 为你下载众多开箱即用 ...

  7. PostgreSQL指定用户可访问的数据库pg_hba.conf

    进入指定目录: # cd /var/lib/pgsql/9.3/data/ 使用vi编辑pg_hba.conf文件 # vi pg_hba.conf 以上配置为所有IP及网关都允许访问,使用MD5认证 ...

  8. MySQL好弱智的一个错误

    在sql中执行select是可以查询 但是在linux命令行下执行就报错 ERROR 1059 (42000): Identifier name 'use db_goforit_stati;selec ...

  9. Symfony4中文文档: 安装和设置Symfony框架

    安装和设置Symfony框架 要创建新的Symfony应用程序, 首先确保使用的是PHP7.1 或更高版本并且已经安装Componser. 如果未安装, 请首先在系统上全局安装Componser. 如 ...

  10. vsCode 快捷键、插件

    插件 参考链接:https://blog.csdn.net/shunfa888/article/details/79606277 快捷键及常用插件:https://www.jianshu.com/p/ ...