Android:onKeyDown在鼠标单击后才会触发

Android:onKeyDown在鼠标单击后才会触发,android,onkeydown,Android,Onkeydown,我有一个onKeyDown事件,它应该在触发后显示一个图像,但我注意到,尽管按了几次相应的键,但直到我用鼠标单击画布上的任何位置,图像才出现。对实际问题以及如何进行有何建议?这是一个非常新的概念,所以不太确定可能缺少什么。 *编辑并粘贴类的全部内容。 谢谢 }可以猜测,关键事件没有传递给您设置关键侦听器的任何对象。如果中间有另一个视图,该视图是侦听器,并且停止了密钥事件的传播(即,从该方法返回true),则可能发生这种情况。默认情况下,有些视图会执行此操作(例如,大多数键的EditText)。如

我有一个onKeyDown事件,它应该在触发后显示一个图像,但我注意到,尽管按了几次相应的键,但直到我用鼠标单击画布上的任何位置,图像才出现。对实际问题以及如何进行有何建议?这是一个非常新的概念,所以不太确定可能缺少什么。 *编辑并粘贴类的全部内容。 谢谢


}

可以猜测,关键事件没有传递给您设置关键侦听器的任何对象。如果中间有另一个视图,该视图是侦听器,并且停止了密钥事件的传播(即,从该方法返回true),则可能发生这种情况。默认情况下,有些视图会执行此操作(例如,大多数键的EditText)。如果您可以编辑您的问题并包含更多代码,或者描述您的活动是如何设置的,这将非常有用


通过“单击画布”,您可能正在更改焦点,并使关键事件传递到不同的视图。这可以解释为什么单击后突然看到键侦听器工作。

您似乎将onKeyDown视为on方法之一

return super.onKeyDown(keyCode, msg);
这是一件不好的事情,就好像你调用了这个函数,想返回按下的键。将其更改为returnfalse,这意味着您正在处理他们正在做的事情

编辑

是否有任何理由使用onKeyDown而不是onKey?这里是我使用的一些额外代码,它使用一个布尔数组(pressedKeys,长度为128),您可以稍后使用它检查数组,查看是否按下了一个键

public boolean onKey(View v, int keyCode, KeyEvent event) 
{
     if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) 
     {
         if(keyCode > 0 && keyCode < 127)
             pressedKeys[keyCode] = true;
     }

    if (event.getAction() == android.view.KeyEvent.ACTION_UP) 
    {
        if(keyCode > 0 && keyCode < 127)
            pressedKeys[keyCode] = false;
    }

    keyEventsBuffer.add(keyEvent);
}
   return false;
}

请给我们看看你的onKeyDown监听器的代码。据我所知,你是在模拟器上测试的?对吗?@Override public boolean onKeyDown(int-keyCode,KeyEvent-msg){if(keyCode==KeyEvent.keyCode_-SPACE){setTile(GREEN_-STAR,1,0);mNextDirection=NORTH;}update();return super.onKeyDown(keyCode,msg);}是的,我目前正在模拟器上测试。在上面的代码中,直到我在单击鼠标的同时按下空格键几次,绿色的互动程序才会出现。你能编辑你的问题并发布更多的代码吗?似乎只是一个逻辑错误,其中返回了false,而不是建议的;直到我用鼠标点击画布,绿星才出现。我必须在某处放置onKeyListener吗?将onKeyDown更改为onKey,没有成功。是的,您的类必须实现onKeyListener
public boolean onKey(View v, int keyCode, KeyEvent event) 
{
     if (event.getAction() == android.view.KeyEvent.ACTION_DOWN) 
     {
         if(keyCode > 0 && keyCode < 127)
             pressedKeys[keyCode] = true;
     }

    if (event.getAction() == android.view.KeyEvent.ACTION_UP) 
    {
        if(keyCode > 0 && keyCode < 127)
            pressedKeys[keyCode] = false;
    }

    keyEventsBuffer.add(keyEvent);
}
   return false;
}
If(pressedKeys[KeyYouWantToCheck])
{
//Do some stuff if that key is down
}