1. 程式人生 > >Android EditText 監聽回車鍵

Android EditText 監聽回車鍵

在Android裡面可以通過setOnEditorActionListener監聽回車達到遮蔽回車按鍵的目的。它在API的TextView(EditText的父類),谷歌大意這樣描述它:它是一個特殊的監聽器,用於監聽一個Enter鍵,如果裝置具有物理鍵盤,點選Enter建不會插入回車符,不過按著alt鍵可以修復。
好吧,看來這個方法挺古老的,都考慮到物理按鍵了,不過通過測試如果裝置不具有物理鍵盤,這個方法還是可以遮蔽掉軟鍵盤的回車鍵的,如果裝置具有物理按鍵就無法遮蔽軟鍵盤的回車鍵了,哎,一直在找解決方案。
實現setOnEditorActionListener介面的onEditorAction ()這個方法有三個引數:

  1. TextView v 被監聽的物件。
  2. int actionId 動作識別符號,如果值等於EditorInfo.IME_NULL,則回車鍵被按下。
  3. KeyEvent event 如果由輸入鍵觸發,這是事件;否則,這是空的(比如非輸入鍵觸發是空的)。

看一下方法:

  // 監聽回車鍵
        mMuchLineEt.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            /**
             *
             * @param v 被監聽的物件
             * @param
actionId 動作識別符號,如果值等於EditorInfo.IME_NULL,則回車鍵被按下。 * @param event 如果由輸入鍵觸發,這是事件;否則,這是空的(比如非輸入鍵觸發是空的)。 * @return 返回你的動作 */
@Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { Log.e("多行監聽"
, actionId + "\t" + KeyEvent.KEYCODE_ENTER); return event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER); } });

可以看到我們對event 進行了非空判斷,如果不是用於按鍵觸發的回車,這個值是空的,比如在EditText的屬性里加上這句話 android:singleLine=”true”就為空,或者裝置帶有物料按鍵它也會報空的,然後通過event.getKeyCode() 獲取你按下的鍵碼,和KeyEvent.KEYCODE_ENTER對比可判斷你是否點選的回車鍵。從而達到遮蔽回車按鍵的目的,不過帶有物理鍵盤的裝置就得另說了。
當讓也可以這樣寫:
return actionId == EditorInfo.IME_NULL;
效果是一樣的。