5

在我的 onKeyDown 基本活动中进行简单的覆盖,我能够捕获除 enter 和 dpad 中心按钮之外的所有按键(通过断点确定)。我不知道为什么 - 任何人都可以了解情况吗?

编辑:快速更新 - 它确实捕获 Dpad 中心并输入键长按,但仍然不是正常按下。

4

3 回答 3

12

我知道这个问题已经很老了,但是如果一些绝望的编码员迷路了,我会发布我的答案。

我的 USB 键盘也有类似的问题。当除 EditText 框之外的任何其他内容被聚焦时,onKeyUp 或 onKeyDown 永远不会捕获 ENTER 键。

如果您使用 dispatchKeyEvent() 您会在 KeyEvent 到达窗口之前获得它,在我的情况下,我肯定会获得 ENTER 键。但要小心,该事件被调用了两次,一次是按键按下,一次是按键按下。

这里有一个示例代码:

@Override
public boolean dispatchKeyEvent(KeyEvent event) {

    System.out.println(event.getAction() + " " + event.getKeyCode() + " - " + (char) event.getUnicodeChar());

    return true;
}
于 2015-07-26T08:27:07.897 回答
1

你读过文档吗?

软件键盘中的按键通常不会触发此侦听器,尽管在某些情况下可能会选择这样做。不要依赖它来捕捉软件按键。

此外,您捕获密钥的方式非常模糊。您甚至没有使用以下命令检查发送给您的 keyCode:

@Override public boolean onKeyDown(int keyCode, KeyEvent event) { return false; }

您可以从视图处理 onKey:

public boolean onKey(View v, int keyCode, KeyEvent event) {
    switch (keyCode) {
        case KeyEvent.KEYCODE_ENTER:
            /* This is a sample for handling the Enter button */
            return true;
    }
    return false;
}

记得实现 OnKeyListener 并设置你的监听器

viewname.setOnKeyListener(this);
于 2012-07-20T17:22:45.323 回答
-1

似乎 DPAD 键正在作用于此处已告知的重点项目:

https://groups.google.com/forum/#!topic/android-developers/HsILBlpsK7I

虽然我自己没有尝试过,但也许您可以将焦点设置到您的视图对象并在其上附加一个关键侦听器函数。

更新:我的同事也有同样的问题,这个建议对她有用。:) 当列表视图聚焦时,她能够从 DPAD 捕获关键代码。

于 2013-12-06T09:12:15.020 回答