Android软键盘回车键对应KeyCode是多少?KEYCODE_ENTER仅适配实体键盘
问题原因
安卓的View.OnKeyListener设计上仅针对实体键盘的按键事件,绝大多数安卓软键盘的按键操作不会触发该回调,因此你无法通过该监听器捕获软键盘的回车键点击事件。你截图中的软键盘回车键默认也不会发送KeyEvent.KEYCODE_ENTER事件,这不是KeyCode取值的问题,而是回调方式不对。
正确实现方案
监听软键盘回车键的标准方案是使用TextView.OnEditorActionListener,该接口专门用于处理输入法的动作事件,同时也可以兼容实体键盘的回车键触发逻辑,参考代码如下:
// 导入必要的类 import android.widget.TextView; import android.view.inputmethod.EditorInfo; // 给输入框设置编辑器动作监听器 inputtedMachineKey.setOnEditorActionListener(new TextView.OnEditorActionListener() { @Override public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { // 同时覆盖三种常见触发场景: // 1. 软键盘默认完成动作 // 2. 软键盘无指定动作时的回车触发 // 3. 实体键盘的回车键按下事件 if (actionId == EditorInfo.IME_ACTION_DONE || actionId == EditorInfo.IME_NULL || (event != null && event.getAction() == KeyEvent.ACTION_DOWN && event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) { Toast.makeText(SelectMachineKeyActivity.this, "Enter Key Hit!", Toast.LENGTH_SHORT).show(); return true; } return false; } });
如果你的输入框在XML布局中指定了android:imeOptions属性,需要对应匹配actionId的取值:
- 若设置了
android:imeOptions="actionNext",则匹配EditorInfo.IME_ACTION_NEXT - 若设置了
android:imeOptions="actionSearch",则匹配EditorInfo.IME_ACTION_SEARCH - 其他动作值同理,按需判断即可
补充说明
如果你确实需要获取软键盘按键的KeyCode,可以在onKey回调中打印所有触发的KeyCode日志进行排查,但绝大多数常规输入法不会为软键盘按键发送KeyEvent回调,因此该方案兼容性极低,不推荐在生产环境使用。
内容的提问来源于stack exchange,提问作者Jason Chan
相关产品推荐
相关产品推荐

