Android onKeyDown未捕获Dpad中心并输入按键

Android onKeyDown未捕获Dpad中心并输入按键,android,events,user-interface,handler,onkeydown,Android,Events,User Interface,Handler,Onkeydown,在我的基本活动onKeyDown中做一个简单的覆盖,我能够捕获除enter和dpad中心按钮(通过断点确定)之外的所有按键。我不知道为什么——有人能解释一下情况吗 编辑:快速更新-它会捕获Dpad中心并输入长按键,但仍然不是正常按下键。您阅读了吗 软件键盘上的按键通常不会触发此侦听器,尽管在某些情况下可能会选择这样做不要依靠此功能捕捉软件按键。 此外,您捕获密钥的方式非常模糊。您甚至没有通过以下方式检查发送给您的密钥码: @Override public boolean onKeyDown(in

在我的基本活动onKeyDown中做一个简单的覆盖,我能够捕获除enter和dpad中心按钮(通过断点确定)之外的所有按键。我不知道为什么——有人能解释一下情况吗

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

您阅读了吗

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

此外,您捕获密钥的方式非常模糊。您甚至没有通过以下方式检查发送给您的密钥码:

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

DPAD键似乎是针对此处所述的重点项目执行的:

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


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

我知道这个问题已经很老了,但万一某个绝望的程序员迷路了,我会发布我的答案

我的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;
}

在我的主要活动-“@Override public boolean onKeyDown(int-keyCode,KeyEvent-event事件){return false;}”中,当按下该键时,您是否没有执行任何其他操作?有什么东西表明你按下了它?我添加了Toast消息和断点以验证事件是否被捕获-除上述按键外,所有按键都被捕获。更新:我的同事也有同样的问题,这个建议对她有效。:)当列表视图处于焦点时,她能够从DPAD捕获关键代码。此外,在android 2.3上,您不需要这些,但在4.1上需要。我面临着无法从USB上捕捉输入键的问题,它总是“按下”聚焦按钮。只有调度才能解决它