keyListener 无法识别输入
keyListener does not recognise input
我在 editText 上有一个 KeyListener,如下所示:
tip = (EditText) findViewById(R.id.tip);
tip.setOnKeyListener(new EditText.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("debug123", "onKeyListener. event.getKeyCode(): " + event.getKeyCode());
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
checkInput();
return true;
}
return false;
}
});
但是没有识别出软键盘笔画。?
只有当我用后退按钮(硬件按钮)离开 Activity 时,监听器才能识别该动作。
但是从我读到的所有内容来看,如果我想在 EditText 中使用用户输入,这就是方法。
setOnKeyListener
Register a callback to be invoked when a hardware key is pressed in
this view. Key presses in software input methods will generally not
trigger the methods of this listener.
setOnEditorActionListener
Set a special listener to be called when an action is performed on the
text view. This will be called when the enter key is pressed, or when
an action supplied to the IME is selected by the user.
要使用 setOnEditorActionListener
解决您的问题,请检查以下内容:
- 将
imeOptions
和 inputType
添加到您的 EditText
<EditText
android:id="@+id/tip"
android:imeOptions="actionDone"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
- 然后将
setOnEditorActionListener
添加到EditText
tip.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ( (actionId == EditorInfo.IME_ACTION_DONE) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) ) {
checkInput();
return true;
} else {
return false;
}
}
});
这里,
actionId == EditorInfo.IME_ACTION_DONE
处理来自软键盘 (IME) 的操作
event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN
处理硬件键盘的输入键
我在 editText 上有一个 KeyListener,如下所示:
tip = (EditText) findViewById(R.id.tip);
tip.setOnKeyListener(new EditText.OnKeyListener(){
public boolean onKey(View v, int keyCode, KeyEvent event) {
Log.i("debug123", "onKeyListener. event.getKeyCode(): " + event.getKeyCode());
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) {
checkInput();
return true;
}
return false;
}
});
但是没有识别出软键盘笔画。? 只有当我用后退按钮(硬件按钮)离开 Activity 时,监听器才能识别该动作。 但是从我读到的所有内容来看,如果我想在 EditText 中使用用户输入,这就是方法。
setOnKeyListener
Register a callback to be invoked when a hardware key is pressed in this view. Key presses in software input methods will generally not trigger the methods of this listener.
setOnEditorActionListener
Set a special listener to be called when an action is performed on the text view. This will be called when the enter key is pressed, or when an action supplied to the IME is selected by the user.
要使用 setOnEditorActionListener
解决您的问题,请检查以下内容:
- 将
imeOptions
和inputType
添加到您的EditText
<EditText
android:id="@+id/tip"
android:imeOptions="actionDone"
android:inputType="text"
android:layout_width="match_parent"
android:layout_height="wrap_content"/>
- 然后将
setOnEditorActionListener
添加到EditText
tip.setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
if ( (actionId == EditorInfo.IME_ACTION_DONE) || (event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN) ) {
checkInput();
return true;
} else {
return false;
}
}
});
这里,
actionId == EditorInfo.IME_ACTION_DONE
处理来自软键盘 (IME) 的操作event.getKeyCode() == KeyEvent.KEYCODE_ENTER && event.getAction() == KeyEvent.ACTION_DOWN
处理硬件键盘的输入键