在 Android 中检测物理键盘上的 Shift + Enter
Detect Shift + Enter on physical keyboard in Android
在为 Chromebook 准备我的 Android 应用程序并使用物理键盘时,我想在 EditText 中区分接收 "Enter"(keyEvent 66)和 "Shift+Enter"(也是 keyEvent 66 显然)来自物理键盘。我尝试了多种不同的解决方案,例如
- dispatchKeyEvent(KeyEvent 事件)在 activity。然而,event.getModifiers() 总是 return 0,event.getMetaState() 也是如此。 keyEvent.isShiftPressed() 始终 return 为假。
- onKeyDown(int keyCode, KeyEvent keyEvent) 在 activity 中具有相同的结果。 keyEvent.isShiftPressed() 总是 return 也是错误的。
我还没有找到使用 onKeyUp()、onKeyPreIme()、editText.setOnKeyListener(...) 或 editText.addTextChangedListener(new TextWatcher() {...} ).我在获取 Enter 事件时没有遇到任何问题,但是 Shift+Enter 在我尝试过的所有方式中都与 Enter 事件没有区别。所以我的问题是:是否有任何其他 Android 开发人员找到了从物理键盘正确捕获 Shift+Enter 的方法?
我有同样的问题,我通过检测 "Shift" 向下和 "Shift" 向上事件修复了它,并定义了一个存储状态的布尔值。
这是我的代码,希望对你有帮助。
final boolean[] isPressed = {false};
inputEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
if (isPressed[0]) {
// Shift + Enter pressed
return false;
} else {
// Enter pressed
return true;
}
}
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
isPressed[0] = true;
return false;
}
if ((event.getAction() == KeyEvent.ACTION_UP) &&
(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
isPressed[0] = false;
return false;
}
return false;
}
});
在为 Chromebook 准备我的 Android 应用程序并使用物理键盘时,我想在 EditText 中区分接收 "Enter"(keyEvent 66)和 "Shift+Enter"(也是 keyEvent 66 显然)来自物理键盘。我尝试了多种不同的解决方案,例如
- dispatchKeyEvent(KeyEvent 事件)在 activity。然而,event.getModifiers() 总是 return 0,event.getMetaState() 也是如此。 keyEvent.isShiftPressed() 始终 return 为假。
- onKeyDown(int keyCode, KeyEvent keyEvent) 在 activity 中具有相同的结果。 keyEvent.isShiftPressed() 总是 return 也是错误的。
我还没有找到使用 onKeyUp()、onKeyPreIme()、editText.setOnKeyListener(...) 或 editText.addTextChangedListener(new TextWatcher() {...} ).我在获取 Enter 事件时没有遇到任何问题,但是 Shift+Enter 在我尝试过的所有方式中都与 Enter 事件没有区别。所以我的问题是:是否有任何其他 Android 开发人员找到了从物理键盘正确捕获 Shift+Enter 的方法?
我有同样的问题,我通过检测 "Shift" 向下和 "Shift" 向上事件修复了它,并定义了一个存储状态的布尔值。 这是我的代码,希望对你有帮助。
final boolean[] isPressed = {false};
inputEditText.setOnKeyListener(new View.OnKeyListener() {
public boolean onKey(View v, int keyCode, KeyEvent event) {
// If the event is a key-down event on the "enter" button
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_ENTER)) {
if (isPressed[0]) {
// Shift + Enter pressed
return false;
} else {
// Enter pressed
return true;
}
}
if ((event.getAction() == KeyEvent.ACTION_DOWN) &&
(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
isPressed[0] = true;
return false;
}
if ((event.getAction() == KeyEvent.ACTION_UP) &&
(keyCode == KeyEvent.KEYCODE_SHIFT_RIGHT)) {
isPressed[0] = false;
return false;
}
return false;
}
});