结论来源是通过打Log来总结的。比较浅的来解释
TextWatcher 类。
1 TextWatcher textWatcher = new TextWatcher() { 2 @Override 3 public void beforeTextChanged(CharSequence s, int start, int count, int after) { 4 //s--未改变之前的内容 5 //start--内容被改变的开始位置 6 //count--原始文字被删除的个数 7 //after--新添加的内容的个数 8 //---------start和count结合从s中获取被删除的内容------- 9 String deleText = s.toString().substring(start, start + count); 10 } 11 @Override 12 public void onTextChanged(CharSequence s, int start, int before, int count) { 13 //s--改变之后的新内容 14 //start--内容被改变的开始位置 15 //before--原始文字被删除的个数 16 //count--新添加的内容的个数 17 //---------start和count结合从s中获取新添加的内容------- 18 String addText = s.toString().substring(start, start + count); 19 } 20 @Override 21 public void afterTextChanged(Editable s) { 22 //s--最终内容 23 } 24 }; 25 edit_content.addTextChangedListener(textWatcher);
需注意:
参数 CharSequence s的类型是SpannableStringBuilder,不要发生类型转换异常这样的错误在SpannableStringBuilder类中, TextWatcher的3个方法是这样被回调(下图),其中s位置传入的内容是this(即SpannableStringBuilder类的当前实例)。说明:TextWatcher 的3个方法中s参数指向的是同一片内存区域SpannableStringBuilder部分源码如下:
在SpannableStringBuilder类中的replace()方法中有对以上3个方法的调用