我想在用户按空格键时启动活动。我的代码没有检测到单击空格键的时间。
@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);
};
}
答案 0 :(得分:8)
您可以将侦听器设置为当前焦点的View
,或者在dispatchKeyEvent
中使用Activity
,见in this answer。
两者都有效。
回答您的意见:如果您已关注我的链接,那么您现在可能已经实施了Activity.dispatchKeyEvent(KeyEvent)
。 : - )
代码没有注册任何键我按,但当我按后退键 它为我祝酒“没有工作”
您是否正在使用模拟器?我问这是因为最新的SDK似乎在模拟器键盘上存在一些问题。特殊键(DPAD,HOME,BACK等)可以工作,但屏幕上的QWERTY键盘不会记录任何按键。我的笔记本电脑中的物理键盘也不会注册任何印刷机。
不要问我为什么。
我说这是因为本周我在链接中发布了答案,并且工作正常。更改是我今天早上将Android SDK更新为R20 / JB,所以我想这可能是一个因素。
但是,它 真正的设备 正常工作。我刚刚将一个物理键盘连接到我的平板电脑(P7510 / Honeycomb 3.2),它可以很好地收听空间印刷机。
如果你还在怀疑,这里有证据: - )
答案 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