在Android

时间:2016-09-14 13:21:07

标签: android keyboard chromebook

在准备我的适用于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的方法?

1 个答案:

答案 0 :(得分:1)

我有同样的问题,我通过检测" Shift"来修复它。向下和"转移" up事件,并定义一个存储状态的布尔值。 这是我的代码,希望能帮到你。

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;
        }
    });