点击密钥时启动活动

时间:2012-07-01 04:41:51

标签: android keylistener

我想在用户按空格键时启动活动。我的代码没有检测到单击空格键的时间。

@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 个答案:

答案 0 :(得分:8)

您可以将侦听器设置为当前焦点的View ,或者在dispatchKeyEvent中使用Activity,见in this answer

两者都有效。


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

  

代码没有注册任何键我按,但当我按后退键   它为我祝酒“没有工作”

您是否正在使用模拟器?我问这是因为最新的SDK似乎在模拟器键盘上存在一些问题。特殊键(DPAD,HOME,BACK等)可以工作,但屏幕上的QWERTY键盘不会记录任何按键。我的笔记本电脑中的物理键盘也不会注册任何印刷机。

不要问我为什么。

我说这是因为本周我在链接中发布了答案,并且工作正常。更改是我今天早上将Android SDK更新为R20 / JB,所以我想这可能是一个因素。

但是,它 真正的设备 正常工作。我刚刚将一个物理键盘连接到我的平板电脑(P7510 / Honeycomb 3.2),它可以很好地收听空间印刷机。

如果你还在怀疑,这里有证据: - )

enter image description here

答案 1 :(得分:2)

public abstract boolean onKey (View v, int keyCode, KeyEvent event)

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

答案 2 :(得分:1)

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

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

P.S。首先,您需要使用'OnKeyListener()'来获取按键事件

答案 3 :(得分: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