监听EditText变化---TextWatcher 类用法详解

时间:2023-03-09 17:44:00
监听EditText变化---TextWatcher 类用法详解

http://www.cnblogs.com/yjing0508/p/5316985.html

TextWatcher textWatcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
//s--未改变之前的内容
//start--内容被改变的开始位置
//count--原始文字被删除的个数
//after--新添加的内容的个数
//---------start和count结合从s中获取被删除的内容-------
String deleText = s.toString().substring(start, start + count);
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
//s--改变之后的新内容
//start--内容被改变的开始位置
//before--原始文字被删除的个数
//count--新添加的内容的个数
//---------start和count结合从s中获取新添加的内容-------
String addText = s.toString().substring(start, start + count);
}
@Override
public void afterTextChanged(Editable s) {
//s--最终内容
}
};
edit_content.addTextChangedListener(textWatcher);

参数CharSequence s的类型是SpannableStringBuilder,不要发生类型转换异常这样的错误
在SpannableStringBuilder类中,TextWatcher的3个方法是这样被回调(下图),其中
s位置传入的内容是this(即SpannableStringBuilder类的当前实例)。
说明:TextWatcher 的3个方法中s参数指向的是同一片内存区域

SpannableStringBuilder部分源码如下:

监听EditText变化---TextWatcher 类用法详解
在SpannableStringBuilder类中的replace()方法中有对以上3个方法的调用