壮心未与年俱老,死去犹能作鬼雄。这篇文章主要讲述Android键盘事件相关的知识,希望能为你提供帮助。
在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键盘事件】
推荐阅读
- Android学习总结 ———— Handler 的使用
- Android测试(从零开始2——local单元测试)
- 安卓开源项目周报0315
- Android Activity 和 ViewGroup中事件触发和传递机制
- android shape.xml 属性详解
- C#方法代理/委托(delegate)用法介绍和示例
- C# GroupBox类用法示例介绍
- C# HashSet类介绍和用法示例
- C#如何将整个ArrayList复制到一维数组