【问题标题】:Detect Shift + Enter on physical keyboard in Android在Android的物理键盘上检测Shift + Enter
【发布时间】:2017-01-22 07:52:27
【问题描述】:

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

  • dispatchKeyEvent(KeyEvent 事件) 在活动中。然而 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 Dev 找到一种方法来正确地从物理键盘捕获 Shift+Enter?

【问题讨论】:

    标签: android keyboard chromebook


    【解决方案1】:

    我遇到了同样的问题,我通过检测“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;
            }
        });
    

    【讨论】:

    • 感谢您的回答,这个解决方案似乎是唯一真正的可能性,我还没有找到更好的方法:/
    猜你喜欢
    • 2021-06-08
    • 2010-11-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-18
    • 2018-07-21
    • 2016-08-09
    • 1970-01-01
    相关资源
    最近更新 更多