Обновление: мне стало интересно об этом .Взгляните на исходный код android.view.View: http://grepcode.com/file/repository.grepcode.com/java/ext/com.google.android/android/2.1_r2/android/view/View.java
типичным примером будет обработка клавиши BACK для обновления пользовательского интерфейса приложения вместо того, чтобы IME мог его увидетьи закройте себя.
код:
/**
* Handle a key event before it is processed by any input method
* associated with the view hierarchy. This can be used to intercept
* key events in special situations before the IME consumes them; a
* typical example would be handling the BACK key to update the application's
* UI instead of allowing the IME to see it and close itself.
*
* @param keyCode The value in event.getKeyCode().
* @param event Description of the key event.
* @return If you handled the event, return true. If you want to allow the
* event to be handled by the next receiver, return false.
*/
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
return false;
}
Использование dispatchKeyEvent:
@Override
public boolean dispatchKeyEvent (KeyEvent event) {
Log.d("**dispatchKeyEvent**", Integer.toString(event.getAction()));
Log.d("**dispatchKeyEvent**", Integer.toString(event.getKeyCode()));
if (event.getAction()==KeyEvent.ACTION_DOWN && event.getKeyCode()==KeyEvent.KEYCODE_BACK) {
Toast.makeText(this, "Back button pressed", Toast.LENGTH_LONG).show();
return true;
}
return false;
}
Записываетдва события независимо даже для клавиши возврата.По какой-то причине единственным ключом, который не регистрировался, был KEYCODE_HOME
.Фактически, если вы удерживаете нажатой кнопку «Назад», вы увидите несколько ACTION_DOWN
(0) событий подряд (и гораздо больше, если вместо этого вы return false;
).Протестировано в эмуляторе Eclair и в Samsung Captivate (пользовательское Froyo ROM).