Android键盘事件_移动开发_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > 移动开发 > Android键盘事件

Android键盘事件

 2017/3/17 5:31:37  ganchuanpu  程序员俱乐部  我要评论(0)
  • 摘要:在activity中重写了dispatchKeyEvent事件,不论最后返回TRUE还是FALSE都不会执行onKeyDown事件了么?找到的一些资料却不是这样解释的:当键盘按下时首先触发dispatchKeyEvent然后触发onUserInteraction再次onKeyDown如果按下紧接着松开,则是俩步紧跟着触发dispatchKeyEvent然后触发onUserInteraction再次onKeyUpdispatchKeyEvent是做按键处理和分发的工作
  • 标签:事件 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信息:

class="brush:csharp;gutter:true;">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

 

  

发表评论
用户名: 匿名