iT邦幫忙

2025 iThome 鐵人賽

DAY 18
0

Android 的 TextWatcher 介面可以用來即時監聽輸入框(EditText)文字內容的變化。常用於表單驗證、即時提示、格式化等功能。


1. 建立 TextWatcher 物件

方法 觸發時機 參數內容 常見用途
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 的內容,會重複觸發此監聽器
    }
};

2. 將 watcher 加到多個輸入框

只要把同一個 TextWatcher 加到多個 EditText,就能監聽多個輸入框的變化。

emailEditText.addTextChangedListener(watcher);
usernameEditText.addTextChangedListener(watcher);
passwordEditText.addTextChangedListener(watcher);

// 需要時移除監聽
emailEditText.removeTextChangedListener(watcher);

補充說明

  • 一般即時檢查(如表單驗證)多半寫在 onTextChanged()afterTextChanged()
  • 如果你需要修改輸入框內容(如自動補零、自動大寫),建議寫在 afterTextChanged(),但要注意避免無限遞迴觸發!
  • TextWatcher 也很適合用於「有變動就即時啟用/禁用按鈕」、「顯示提示文字」等 UI 互動設計。
  • 你也可以為不同 EditText 設定不同的 TextWatcher,根據需求分開處理。

常見使用情境

  • 限制輸入格式(如只能輸入數字)
  • 即時顯示字數、密碼強度
  • 自動補全(如輸入郵遞區號自動帶出地址)
  • 表單欄位不為空即啟用註冊按鈕

延伸閱讀


上一篇
Day 17.BMI
下一篇
Day 19.Dialog
系列文
Android 新手的 30 天進化論:從初學者到小專案開發者21
圖片
  熱門推薦
圖片
{{ item.channelVendor }} | {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言