Android入門教程 | EditText 使用者輸入

Android_anzi發表於2021-10-26

EditText 監聽回車

使用EditText時,有時候我們會需要監聽輸入的回車,以做出一些操作。 或者需要把回車變成“搜尋”,“傳送”或“完成”等等。

EditText 為我們提供了一個屬性 imeOptions 用來替換軟鍵盤中 enter 鍵的外觀,如actionGo 會使外觀變成“前往”。 需要同時設定  android:inputType="text"

<EditText
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:imeOptions="actionGo"
    android:inputType="text" />

常用的幾個屬性以及替換的文字外觀:

屬性 說明 對應靜態變數
actionUnspecified 未指定 EditorInfo.IME_ACTION_UNSPECIFIED
actionNone 動作 EditorInfo.IME_ACTION_NONE
actionGo 去往 EditorInfo.IME_ACTION_GO
actionSearch 搜尋 EditorInfo.IME_ACTION_SEARCH
actionSend 傳送 EditorInfo.IME_ACTION_SEND
actionNext 下一項 EditorInfo.IME_ACTION_NEXT
actionDone 完成 EditorInfo.IME_ACTION_DONE

設定的方法可以在佈局檔案中設定  android:imeOptions="actionNext" 或者在程式碼中  mUserEdit.setImeOptions(EditorInfo.IME_ACTION_NEXT);

接下來設定回車按鍵的監聽事件  setOnEditorActionListener

et1.setOnEditorActionListener(mOnEditorActionListener);    // ......
    private TextView.OnEditorActionListener mOnEditorActionListener = new TextView.OnEditorActionListener() {
        @Override
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {            Log.d(TAG, "actionId: " + actionId);            Log.d(TAG, "event:    " + event);
            return false;
        }
    };

如果 onEditorAction 返回 true,表示消費調這個事件。

上面的 actionId 對應的是  android.view.inputmethod.EditorInfo 中的常量。

public static final int IME_ACTION_UNSPECIFIED = 0x00000000;public static final int IME_ACTION_NONE = 0x00000001;public static final int IME_ACTION_GO = 0x00000002;public static final int IME_ACTION_SEARCH = 0x00000003;public static final int IME_ACTION_SEND = 0x00000004;public static final int IME_ACTION_NEXT = 0x00000005;public static final int IME_ACTION_DONE = 0x00000006;public static final int IME_ACTION_PREVIOUS = 0x00000007;

EditText 游標移動與選擇

主要介紹 setSelection 方法。

setSelection 有:

  • setSelection(int start, int stop) 選擇範圍
  • setSelection(int index) 把游標移動到指定位置

例:假設有EditText,變數名為mEt1

  • 把游標移動到最前

    mEt1.setSelection(0);
  • 把游標移動到最後

    mEt1.setSelection(mEt1.getText().length());
  • 游標右移一位

    mEt1.setSelection(mEt1.getSelectionEnd() + 1);
  • 游標左移一位

    mEt1.setSelection(mEt1.getSelectionEnd() - 1);

    要注意的是,如果傳入的index超出了text的範圍,會報  java.lang.IndexOutOfBoundsException
    因此在實際工程中,需要判斷傳入的位置是否在EditText已有內容的長度範圍內。

  • 全選當前輸入的text

    mEt1.setSelection(0, mEt1.getText().length());

監聽輸入內容

程式碼中動態限制輸入長度
使用TextWatcher

mQueryEt.addTextChangedListener(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中的資料不為空,且長度大於指定的最大長度
        if (!TextUtils.isEmpty(s) && s.length() > 15) {            // 刪除指定長度之後的資料
            s.delete(15, s.length() - 1);
        }
    }
});


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/70008155/viewspace-2839262/,如需轉載,請註明出處,否則將追究法律責任。

相關文章