Android 的 TextWatcher
介面可以用來即時監聽輸入框(EditText)文字內容的變化。常用於表單驗證、即時提示、格式化等功能。
方法 | 觸發時機 | 參數內容 | 常見用途 |
---|---|---|---|
beforeTextChanged | 文字即將被改變前 | 改變前的內容 | 記錄舊值、準備動作 |
onTextChanged | 文字正在被改變時 | 目前內容 | 即時檢查、即時反應 |
afterTextChanged | 文字已經改變後 | 改變後的內容 | 自動格式化、進階處理 |
// 記得 import
import android.text.Editable;
import android.text.TextWatcher;
TextWatcher watcher = new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
// 內容還沒變更,可以記錄舊值
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
// 內容正在改變,可以即時檢查
}
@Override
public void afterTextChanged(Editable s) {
// 內容已經改變,可以自動格式化
// ⚠️ 若這裡直接改 EditText 的內容,會重複觸發此監聽器
}
};
只要把同一個 TextWatcher 加到多個 EditText,就能監聽多個輸入框的變化。
emailEditText.addTextChangedListener(watcher);
usernameEditText.addTextChangedListener(watcher);
passwordEditText.addTextChangedListener(watcher);
// 需要時移除監聽
emailEditText.removeTextChangedListener(watcher);
onTextChanged()
或 afterTextChanged()
。afterTextChanged()
,但要注意避免無限遞迴觸發!TextWatcher
也很適合用於「有變動就即時啟用/禁用按鈕」、「顯示提示文字」等 UI 互動設計。