結論來源是通過打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個方法的調用