onKeyDown не всегда вызывается в Android-приложении
Я создал простую игру для android, основанную на образце Lunar Lander, и у меня возникли проблемы с обработкой ключевых событий. Когда начинается действие, вызываются только клавиши onKeyDown или onKeyUp-это клавиши dpad up/down/left/right. Ни клавиши menu, back или dpad_center не запускают методы onKey. Однако, как только я нажал одну из кнопок dpad up/down/left/right, нажатие клавиш menu, back или dpad_center запускает эти методы. Я не получаю никаких ошибок или каких-либо указание на то, что происходит не так.
возможно, что фокус установлен неправильно-действие запускается с кнопки на экране, поэтому оно может быть в режиме сенсорного экрана. Если это так, разве прикосновение к кнопке "Назад" не должно привести меня в правильный режим фокусировки, чтобы я мог поймать событие?
Я использую эмулятор из SDK-1.5r3. Я еще не смог попробовать это на реальном телефоне. Вот мой onKeyDown.
public boolean onKeyDown(int keyCode, KeyEvent msg)
{
Log.d(TAG, "onKeyDown: " + keyCode);
return super.onKeyDown(keyCode, msg);
}
спасибо
Matt
2 ответов
это onKeyDown в представлении или в деятельности?
Если setContentView называется передачей в представлении, и это представление имеет setFocusable(true) вызывается на нем, все ключевые события будут обходить действие и идти прямо в представление.
с другой стороны, если ваш onKeyDown находится в представлении, и вы не вызвали setContentView в Activity и setFocusable(true) в представлении, тогда ваша активность получит ключевые события, а не представление.
искать тех конкретные звонки, но я думаю, что вы правы в том, что это проблема фокуса.
Activity OnKeyDown/onKeyUp методы не всегда вызываются. В отличие от них dispatchKeyEvent на деятельность увольняли всегда. Перемещать клавиша вниз/клавиша вверх логики здесь. Хорошо работать.
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
if (event.getAction() == KeyEvent.ACTION_DOWN) {
// keydown logic
return true;
}
return false;
}