EditText中beforeTextChanged,onTextChanged,afterTextChanged内部参数说明

来源:互联网 发布:龙之谷技能优化补丁 编辑:程序博客网 时间:2024/06/01 11:59

项目要实现密码输入,横线直接变为数字,然后点击软件盘的删除按钮数字还会变回横线,所以这里要用到几个方法的参数。

beforeTextChanged(CharSequence s, int start, int count, int after)
onTextChanged(CharSequence s, int start, int before, int count) 
afterTextChanged(Editable s)
这里我们输入 1234 四个数字测试 

理解的注意对比点在每一个字符位上,

只是帮助小白快读理解参数含义,大牛可以无视。

01-24 17:17:19.688 14412-14412/ D/xiaowu: beforeTextChanged   start=0     after=1     count=0     s=
01-24 17:17:19.690 14412-14412/ D/xiaowu: onTextChanged     start0     before=0     count=1     s=1
01-24 17:17:19.691 14412-14412/ D/xiaowu: afterTextChanged      s=1
01-24 17:17:20.228 14412-14412/ D/xiaowu: beforeTextChanged   start=1     after=1     count=0     s=1
01-24 17:17:20.230 14412-14412/ D/xiaowu: onTextChanged     start1     before=0     count=1     s=12
01-24 17:17:20.231 14412-14412/ D/xiaowu: afterTextChanged      s=12
01-24 17:17:20.710 14412-14412/ D/xiaowu: beforeTextChanged   start=2     after=1     count=0     s=12
01-24 17:17:20.712 14412-14412/ D/xiaowu: onTextChanged     start2     before=0     count=1     s=123
01-24 17:17:20.712 14412-14412/ D/xiaowu: afterTextChanged      s=123
01-24 17:17:21.322 14412-14412/ D/xiaowu: beforeTextChanged   start=3     after=1     count=0     s=123
01-24 17:17:21.324 14412-14412/ D/xiaowu: onTextChanged     start3     before=0     count=1     s=1234
01-24 17:17:21.325 14412-14412/ D/xiaowu: afterTextChanged      s=1234

这是从1开始输入到4的log打印,开始输入1的时候,log显示走的beforeTextChanged,解释:在变化之前,s=空,所以s输出空,从start=0的位置开始,将有长度为after=1的字符来替换原有文本,count=0,说明现在有count=0个字符被替换。 onTextChanged,解释:变化中,s=1,从位置start=0开始,before=0;意思就是被替换的字符长度为0,count=1;意思是讲要替换进来的文本长度为count=1。连起来说就是从start=0位置开始,有长度为count=1的字符把原本长度为before=0的字符替换掉。afterTextChanged解释;变化之后输出s=1.

然后输入2,log显示beforeTextChanged解释;变化之前,s=1,所以输出s=1,从start=0位置开始,有长度after=1的字符来替换原有文本,count=0,说明现在有0个字符被替换。onTextChanged解释;变化中s=12. 从位置start=1开始,before=0,意思就是被替换的字符长度为before=0,count=1;意思就是要替换进来的字符长度为count=1.连起来就是从位置start=1开始,字符长度为before=0的字符将要被长度为count=1的字符替换掉。以下以此类推。

下面是点击软键盘删除按钮的log打印

01-24 17:24:48.569 14412-14412/ D/xiaowu: beforeTextChanged   start=3     after=0     count=1     s=1234
01-24 17:24:48.570 14412-14412/ D/xiaowu: onTextChanged     start3     before=1     count=0     s=123
01-24 17:24:48.570 14412-14412/ D/xiaowu: afterTextChanged      s=123
01-24 17:24:49.767 14412-14412/ D/xiaowu: beforeTextChanged   start=2     after=0     count=1     s=123
01-24 17:24:49.769 14412-14412/ D/xiaowu: onTextChanged     start2     before=1     count=0     s=12
01-24 17:24:49.770 14412-14412/ D/xiaowu: afterTextChanged      s=12
01-24 17:24:50.633 14412-14412/ D/xiaowu: beforeTextChanged   start=1     after=0     count=1     s=12
01-24 17:24:50.634 14412-14412/ D/xiaowu: onTextChanged     start1     before=1     count=0     s=1
01-24 17:24:50.635 14412-14412/ D/xiaowu: afterTextChanged      s=1
01-24 17:24:51.344 14412-14412/ D/xiaowu: beforeTextChanged   start=0     after=0     count=1     s=1
01-24 17:24:51.346 14412-14412/ D/xiaowu: onTextChanged     start0     before=1     count=0     s=
01-24 17:24:51.348 14412-14412/ D/xiaowu: afterTextChanged      s=

这里也解释一遍。

现在输入的是1234,我们开始第一次点击删除按钮,第一次还是走beforeTextChanged解释;从位置start=3开始,after=0;意思就是将有长度为after=0的字符替换原有字符。count=1意思就是将有一个字符被替换掉。onTextChanged解释;输出s=123.从start=3位置开始,before=1;意思就是将要被替换的字符长度为1.count=0;意思就是要替换进来的字符长度为count=0;连起来就是  从start=3位置开始,原来长度为before=1的字符将要被长度为count=0的字符替换掉。


有空会把项目封好的密码输入拿进来。

0 0