TextWatcher-监听输入框内容变化

今天在做邮件登录的时候,遇到了输入框(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

07-27 16:58:56.692: E/123(6298): before----|arg0===|arg1===0|arg2===0|arg3===1
07-27 16:58:56.693: E/123(6298): ontextchange----|arg0===1|arg1===0|arg2===0|arg3===1
07-27 16:58:56.695: E/123(6298): afterchange----|arg0===1
07-27 16:59:04.962: E/123(6298): before----|arg0===1|arg1===1|arg2===0|arg3===2
07-27 16:59:04.963: E/123(6298): ontextchange----|arg0===1理解|arg1===1|arg2===0|arg3===2
07-27 16:59:04.965: E/123(6298): afterchange----|arg0===1理解
07-27 16:59:09.192: E/123(6298): before----|arg0===1理解|arg1===3|arg2===0|arg3===1
07-27 16:59:09.193: E/123(6298): ontextchange----|arg0===1理解我|arg1===3|arg2===0|arg3===1
07-27 16:59:09.200: E/123(6298): afterchange----|arg0===1理解我

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

07-27 16:59:26.863: E/123(6298): before----|arg0===1理解我|arg1===3|arg2===1|arg3===0
07-27 16:59:26.863: E/123(6298): ontextchange----|arg0===1理解|arg1===3|arg2===1|arg3===0
07-27 16:59:26.877: E/123(6298): 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变化,都是导致监听事件的执行。

时间: 2024-11-12 12:52:29

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

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

oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发.oninput 事件在主流浏览器的兼容情况如下: 从上面表格可以看出,oninput 事件在 IE9 以下版本不支持,需要使用 IE 特有的 onpropertychange 事件替代,这个事件在用户界面改变或者使用脚本直接

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

在 Web 开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快捷键也很麻烦.因此这篇文章向大家介绍一种完美的解决方案:结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:pa

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

本文转载于 http://blog.163.com/lgh_2002/blog/static/44017526201341511112874/ Jquery绑定事件(bind和live的区别) js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange 2013-05-15 11:01:12|  分类: jquery/javascrip |

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

oninput 是 HTML5 的标准事件,对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户界面发生的内容变化非常有用,在内容修改后立即被触发,不像 onchange 事件需要失去焦点才触发.oninput 事件在主流浏览器的兼容情况如下: 从上面表格可以看出,oninput 事件在 IE9 以下版本不支持,需要使用 IE 特有的 onpropertychange 事件替代,这个事件在用户界面改变或者使用脚本直接

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

在网页开发中经常会碰到需要动态监听输入框值变化的情况,如果使用 onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快捷键也很麻烦.因此这篇文章向大家介绍一种完美的解决方案:结合html5标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化.,对于检测 textarea, input:text, input:password 和 input:search 这几个元素

oninput onpropertychange 监听输入框值变化

在 web开发中经常会碰到需要动态监听输入框值变化的情况,如果使用  onkeydown.onkeypress.onkeyup 这个几个键盘事件来监测的话,监听不了右键的复制.剪贴和粘贴这些操作,处理组合快捷键也很麻烦.因此今天这篇文章向大家介绍一种完美的解决方案:结合 oninput 和 onpropertychange 事件来监听输入框值变化. oninput 对于检测 textarea, input:text, input:password 和 input:search 这几个元素通过用户

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

结合 HTML5 标准事件 oninput 和 IE 专属事件 onpropertychange 事件来监听输入框值变化. H5手机端: <input type="text" placeholder="请输入金额" value="" oninput="only_number(this)"> //输入框,限金额 function only_number(obj) { //先把非数字的都替换掉,除了数字和. obj.v

js/jquery 实时监听输入框值变化的完美方案

js/jquery 实时监听输入框值变化的完美方案:oninput & onpropertychange 解释:先说jquery, 使用 jQuery 库的话,只需要同时绑定 oninput 和 onpropertychange 两个事件就可以了,示例代码:$('#username').bind('input propertychange', function() { $('#content').html($(this).val().length + ' characters');});

jquery实时监听输入框值变化

在做web开发时候很多时候都需要即时监听输入框值的变化,以便作出即时动作去引导浏览者增强网站的用户体验感.而采用onchange时间又往往是在输入框失去焦点(onblur)时候触发,有时候并不能满足条件. 首先看一下dom中元素事件: onpropertychange: IE下,当一个HTML元素的属性改变的时候,都能通过 onpropertychange来即时捕获.onchange在属性值改变时还必须使得当前元素失去焦点(onblur)才可以激活该事件. 在用js脚本改动该元素值时候亦能触发o

实时监听输入框值变化

判断ie678 //是否是IE678 isIE678: function () { return !+'\v1'; }, 监听输入框变化 if(util.isIE678()){ //ie678下的实时搜索 var enameSearch = document.getElementById("chooseUser"); var oRealSearch = enameSearch.getElementsByTagName("input")[1]; oRealSearch