繁体   English   中英

检测 Android 物理键盘上的 Shift + Enter

[英]Detect Shift + Enter on physical keyboard in Android

在为 Chromebook 准备我的 Android 应用程序并与物理键盘一起使用时,我想在 EditText 中区分从物理键盘接收“Enter”(keyEvent 66)和“Shift+Enter”(显然也是 keyEvent 66)。 我尝试了许多不同的解决方案,例如

  • 活动中的 dispatchKeyEvent(KeyEvent event)。 然而 event.getModifiers() 总是返回 0,event.getMetaState() 也是如此。 keyEvent.isShiftPressed() 总是返回 false。
  • 活动中的 onKeyDown(int keyCode, KeyEvent keyEvent) 具有相同的结果。 keyEvent.isShiftPressed() 也总是返回 false。

我还没有找到使用 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;
        }
    });

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM