標籤:on() action_up class 重寫 接收 turn rate key pre
在activity中重寫了dispatchKeyEvent事件,不論最後返回TRUE還是FALSE都不會執行onKeyDown事件了嗎?
找到的一些資料卻不是這樣解釋的:
當鍵盤按下時
首先觸發dispatchKeyEvent
然後觸發onUserInteraction
再次onKeyDown
如果按下緊接著鬆開,則是倆步
緊跟著觸發dispatchKeyEvent
然後觸發onUserInteraction
再次onKeyUp
dispatchKeyEvent是做按鍵處理和分發的工作,如果你想要onKeyDown還可以接收到應該這樣實現
public boolean dispatchKeyEvent(KeyEvent event){
return super.dispatchKeyEvent(event);
}
代碼測試如下:
在dispatchKeyEvent(KeyEvent event)中按鍵的按下抬起都會進行操作,在處理完一個按鍵動作時無論return true 還是 false ,onKeyDown(int keyCode, KeyEvent event)和onKeyUp(int keyCode, KeyEvent event)都不會再進行按鍵處理:
第1種情況及log資訊:
public void DEBUG(String str) { Log.d(TAG, str); } @Override public boolean onKeyDown(int keyCode, KeyEvent event) { // TODO Auto-generated method stub DEBUG(" onKeyDown " + keyCode ); return super.onKeyDown(keyCode, event); } @Override public boolean onKeyLongPress(int keyCode, KeyEvent event) { // TODO Auto-generated method stub DEBUG(" onKeyLongPress " + keyCode ); return super.onKeyLongPress(keyCode, event); } @Override public boolean dispatchKeyEvent(KeyEvent event) { // TODO Auto-generated method stub DEBUG(" dispatchKeyEvent 1 key = " + event.getKeyCode() + " event = " + event.getAction()); if(event.getAction()==KeyEvent.ACTION_DOWN){ DEBUG(" dispatchKeyEvent 2 ACTION_DOWN" + event.getKeyCode() ); return super.dispatchKeyEvent(event); } if(event.getAction()==KeyEvent.ACTION_UP){ DEBUG(" dispatchKeyEvent 3 ACTION_UP" + event.getKeyCode() ); return super.dispatchKeyEvent(event); } return super.dispatchKeyEvent(event); } @Override public boolean onKeyUp(int keyCode, KeyEvent event) { // TODO Auto-generated method stub DEBUG(" onKeyUp " + keyCode); return super.onKeyUp(keyCode, event); } log資訊:
D/ testMainActivity ( 853): dispatchKeyEvent 1 key = 23 event = 0
D/ testMainActivity ( 853): dispatchKeyEvent 2 ACTION_DOWN23
D/ testMainActivity ( 853): onKeyDown 23
D/ testMainActivity ( 853): dispatchKeyEvent 1 key = 23 event = 1
D/ testMainActivity ( 853): dispatchKeyEvent 3 ACTION_UP23
D/ testMainActivity ( 853): onKeyUp 23
Android鍵盤事件