首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 更多程式語言 >> 程式設計綜合問答

Android 輸入框一鍵清空:QQ 風格用戶名/密碼雙框聯動實現

     編輯:程式設計綜合問答

需求

登錄頁包含用戶名、密碼兩個 EditText。用戶名框右側顯示刪除圖標(drawableEnd),點擊時同時清空兩框內容。

佈局關鍵點

<EditText
    android:id="@+id/et_username"
    android:drawableEnd="@drawable/ic_clear"
    android:drawablePadding="8dp"
    ... />

<EditText
    android:id="@+id/et_password"
    android:inputType="textPassword"
    ... />

實現邏輯

EditText etUsername = findViewById(R.id.et_username);
EditText etPassword = findViewById(R.id.et_password);

etUsername.setOnTouchListener((v, event) -> {
    if (event.getAction() == MotionEvent.ACTION_UP) {
        // 判斷點擊區域是否在 drawableEnd 範圍內
        int right = etUsername.getRight();
        int left = right - etUsername.getCompoundDrawables()[2].getBounds().width() - etUsername.getDrawablePadding();
        if (event.getRawX() >= left && event.getRawX() <= right) {
            etUsername.setText("");
            etPassword.setText("");  // 核心:同步清空密碼框
            return true; // 消費事件
        }
    }
    return false;
});

進階封裝:自定義 ClearableEditText

提取通用邏輯至自定義 View,暴露 OnClearListener 接口,實現「一處編寫、多處復用」:

public class ClearableEditText extends AppCompatEditText {
    public interface OnClearListener { void onClear(); }
    private OnClearListener listener;
    // ... 同樣的觸摸判斷邏輯,觸發 listener.onClear()
}

使用時:

etUsername.setOnClearListener(() -> etPassword.setText(""));

注意事項

  • 密碼框清空後光標自動跳回用戶名框(etUsername.requestFocus())體驗更佳。
  • 若使用 TextInputLayout,可直接調用 setEndIconMode(END_ICON_CLEAR_TEXT)(Material Components 1.2+),無需自寫觸摸邏輯。
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved