9

我想在用户按下空格键时开始一个活动。我的代码未检测到何时单击空格键。

@Override
public boolean dispatchKeyEvent(KeyEvent e) {
    if (e.getKeyCode() == KeyEvent.KEYCODE_SPACE) {
        Toast.makeText(MainActivity.this, "YOU CLICKED SPACE KEY",
                Toast.LENGTH_LONG).show();
        return true;
    }
    Toast.makeText(MainActivity.this, "Didnt work", Toast.LENGTH_SHORT)
            .show();
    return super.dispatchKeyEvent(e);
};

}

4

4 回答 4

8

您可以将侦听器设置为View 具有当前焦点的 a,也可以dispatchKeyEvent在您的中使用Activity,如本答案所示。

两者都会起作用。


回答您的意见:如果您关注了我的链接,那么您Activity.dispatchKeyEvent(KeyEvent)现在可能已经实现了。:-)

该代码没有注册我按下的任何键,但是当我按下后退键时,它为我干杯“没有工作”

你碰巧在使用模拟器吗?我问这个是因为最新的 SDK 似乎在模拟器键盘上有一些问题。特殊键(DPAD、HOME、BACK 等)有效,但屏幕上的 QWERTY 键盘不记录任何按下。我笔记本电脑中的物理键盘也不会注册任何按键。

不要问我为什么。

我这么说是因为本周我在链接中发布了答案,而且效果很好。变化是我今天早上将 Android SDK 更新为 R20/JB,所以我想这可能是一个因素。

但是,它只能真实设备上运行。我刚刚将物理键盘连接到我的平板电脑(P7510 / Honeycomb 3.2),它可以很好地听空格键。

如果您仍然怀疑,这里有证据::-)

在此处输入图像描述

于 2012-07-01T04:50:46.377 回答
2
public abstract boolean onKey (View v, int keyCode, KeyEvent event)

此功能可用于检查按下了哪个键。

于 2012-08-05T11:01:18.707 回答
1

对于这种情况,我所做的是,我使用了覆盖函数'onKey'

@Override
public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event)
{
    if (keyCode == nNeededKeyCode)
    {
        //do something
    }
    return true;
}

ps 首先你需要使用'OnKeyListener()'来获取按键事件

于 2012-07-31T10:40:23.837 回答
1

很抱歉复制/粘贴答案,但这应该可以完成您的尝试。

这将在用户按下“空格键”然后放开空格键时发生。如果您不想等待他们放手,您可以删除我的布尔值,并在 onKeyDown 函数中执行您的代码。希望这可以帮助。

boolean spacePressed = false;
@Override
public boolean onKeyDown(View arg0, Editable arg1, int arg2, KeyEvent arg3) {
    // TODO Auto-generated method stub
       switch (keyCode) {
               case KeyEvent.KEYCODE_SPACE:
               {
                  spacePressed = true;
                  return true;
                }
               // other cases can go here
    }

    return true;
}// End of onKeyDown



@Override
public boolean onKeyUp(View arg0, Editable arg1, int arg2, KeyEvent arg3) {
   if (spacePressed){
       // start intent

       // make this false again, so other keys won't trigger it
       spacePressed = false;
   }

    return true;
}// End of onKeyUp
于 2012-08-02T12:51:28.473 回答