分享

【转】关于Android按键处理

 techres 2012-08-22

关于Android按键处理

分类: android学习 872人阅读 评论(0) 收藏 举报

在dispatchKeyEvent(KeyEvent event)中按键的按下抬起都会进行操作,在处理完一个按键操作时无论return true 还是 false ,onKeyDown(int keyCode, KeyEvent event)和onKeyUp(int keyCode, KeyEvent event)都不会再进行按键处理:

1、第一种情况及log信息:

  1. public void DEBUG(String str) {  
  2.         Log.d(TAG, str);  
  3.     }  
  4.       
  5.     @Override  
  6.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  7.         // TODO Auto-generated method stub  
  8.         DEBUG(" onKeyDown " + keyCode );  
  9.         return super.onKeyDown(keyCode, event);  
  10.     }  
  11.   
  12.     @Override  
  13.     public boolean onKeyLongPress(int keyCode, KeyEvent event) {  
  14.         // TODO Auto-generated method stub  
  15.         DEBUG("  onKeyLongPress " + keyCode );  
  16.         return super.onKeyLongPress(keyCode, event);  
  17.     }  
  18.     @Override  
  19.     public boolean dispatchKeyEvent(KeyEvent event) {  
  20.         // TODO Auto-generated method stub  
  21.         DEBUG("  dispatchKeyEvent 1 key = " + event.getKeyCode() + " event =  " + event.getAction());  
  22.         if(event.getAction()==KeyEvent.ACTION_DOWN){  
  23.             DEBUG("  dispatchKeyEvent 2 ACTION_DOWN" + event.getKeyCode() );  
  24.             return super.dispatchKeyEvent(event);  
  25.         }  
  26.         if(event.getAction()==KeyEvent.ACTION_UP){  
  27.             DEBUG("  dispatchKeyEvent 3 ACTION_UP" + event.getKeyCode() );  
  28.             return super.dispatchKeyEvent(event);  
  29.         }  
  30.         return super.dispatchKeyEvent(event);  
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean onKeyUp(int keyCode, KeyEvent event) {  
  35.         // TODO Auto-generated method stub  
  36.         DEBUG(" onKeyUp " +  keyCode);  
  37.         return super.onKeyUp(keyCode, event);  
  38.     }  

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

2、第二种情况及log信息:

  1. <pre name="code" class="java"><pre name="code" class="java"><pre name="code" class="java">public void DEBUG(String str) {  
  2.         Log.d(TAG, str);  
  3.     }  
  4.       
  5.     @Override  
  6.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  7.         // TODO Auto-generated method stub  
  8.         DEBUG(" onKeyDown " + keyCode );  
  9.         return super.onKeyDown(keyCode, event);  
  10.     }  
  11.   
  12.     @Override  
  13.     public boolean onKeyLongPress(int keyCode, KeyEvent event) {  
  14.         // TODO Auto-generated method stub  
  15.         DEBUG("  onKeyLongPress " + keyCode );  
  16.         return super.onKeyLongPress(keyCode, event);  
  17.     }  
  18.     @Override  
  19.     public boolean dispatchKeyEvent(KeyEvent event) {  
  20.         // TODO Auto-generated method stub  
  21.         DEBUG("  dispatchKeyEvent 1 key = " + event.getKeyCode() + " event =  " + event.getAction());  
  22.         if(event.getAction()==KeyEvent.ACTION_DOWN){  
  23.             DEBUG("  dispatchKeyEvent 2 ACTION_DOWN" + event.getKeyCode() );  
  24.             return true;  
  25.         }  
  26.         if(event.getAction()==KeyEvent.ACTION_UP){  
  27.             DEBUG("  dispatchKeyEvent 3 ACTION_UP" + event.getKeyCode() );  
  28.             return false;  
  29.         }  
  30.         return super.dispatchKeyEvent(event);  
  31.     }  
  32.   
  33.     @Override  
  34.     public boolean onKeyUp(int keyCode, KeyEvent event) {  
  35.         // TODO Auto-generated method stub  
  36.         DEBUG(" onKeyUp " +  keyCode);  
  37.         return super.onKeyUp(keyCode, event);  
  38.     }</pre><br>  
  39. <br>  
  40. <pre></pre>  
  41. <pre></pre>  
  42. <pre></pre>  
  43. <pre></pre>  
  44. <pre></pre>  
  45. <pre></pre>  
  46. <pre></pre>  
  47. <pre></pre>  
  48. <pre></pre>  
  49. </pre></pre>  


log信息:
D/ testMainActivity (  711):   dispatchKeyEvent 1 key = 23 event =  0
D/ testMainActivity (  711):   dispatchKeyEvent 2 ACTION_DOWN23
D/ testMainActivity (  711):   dispatchKeyEvent 1 key = 23 event =  1
D/ testMainActivity (  711):   dispatchKeyEvent 3 ACTION_UP23

综上所述:Android系统按键操作最先是在dispatchKeyEvent中进行处理的,然后才是onKeyDown(int keyCode, KeyEvent event)和onKeyUp(int keyCode, KeyEvent event)。

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章