Android EditText 監聽回車鍵
阿新 • • 發佈:2019-01-23
在Android裡面可以通過setOnEditorActionListener監聽回車達到遮蔽回車按鍵的目的。它在API的TextView(EditText的父類),谷歌大意這樣描述它:它是一個特殊的監聽器,用於監聽一個Enter鍵,如果裝置具有物理鍵盤,點選Enter建不會插入回車符,不過按著alt鍵可以修復。
好吧,看來這個方法挺古老的,都考慮到物理按鍵了,不過通過測試如果裝置不具有物理鍵盤,這個方法還是可以遮蔽掉軟鍵盤的回車鍵的,如果裝置具有物理按鍵就無法遮蔽軟鍵盤的回車鍵了,哎,一直在找解決方案。
實現setOnEditorActionListener介面的onEditorAction ()這個方法有三個引數:
- TextView v 被監聽的物件。
- int actionId 動作識別符號,如果值等於EditorInfo.IME_NULL,則回車鍵被按下。
- 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;
效果是一樣的。