Android常用的物理按键及其触发事件

Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个事件,你必须扩展这个类并重写该方法,当一些物理按钮被按下时会调用onKeyDown()方法;

    常见的按键消息和触摸消息

[java] view plain copy
  1. package com.example.androideventdemo;  
  2.   
  3. import android.os.Bundle;  
  4. import android.view.KeyEvent;  
  5. import android.view.MotionEvent;  
  6. import android.view.View;  
  7. import android.view.View.OnClickListener;  
  8. import android.widget.Button;  
  9. import android.widget.Toast;  
  10. import android.app.Activity;  
  11.   
  12. /** 
  13.  * Android常用的物理按键及其触发事件  
  14.  * KEYCODE_POWER 电源键  
  15.  * KEYCODE_MENU 菜单键  
  16.  * KEYCODE_BACK 后退键 
  17.  * KEYCODE_HOME Home键  
  18.  * KEYCODE_CAMERA 相机键  
  19.  * KEYCODE_SEARCH 查找键  
  20.  * KEYCODE_VOLUME_UP 音量键+  
  21.  * KEYCODE_VOLUME_DOWN 音量键-  
  22.  * KEYCODE_VOLUME_MUTE 静音  
  23.  * 方向键  
  24.  * KEYCODE_DPAD_CENTER 
  25.  * KEYCODE_DPAD_UP  
  26.  * KEYCODE_DPAD_DOWN  
  27.  * KEYCODE_DPAD_LEFT  
  28.  * KEYCODE_DPAD_RIGHT  
  29.  * 键盘键 
  30.  * 数字0~9 字母A~Z  
  31.  * KEYCODE_0 ~ KEYCODE_9  
  32.  * KEYCODE_A ~ KEYCODE_Z  
  33.  * 提供的回调方法有 
  34.  * onKeyUp()、OnKeyDown()、onKeyLongPress() 
  35.  *  
  36.  * @author Administrator 
  37.  *  
  38.  */  
  39. public class MainActivity extends Activity {  
  40.   
  41.     private Button btnClose = null;  
  42.   
  43.     @Override  
  44.     protected void onCreate(Bundle savedInstanceState) {  
  45.         super.onCreate(savedInstanceState);  
  46.         setContentView(R.layout.main);  
  47.         btnClose = (Button) findViewById(R.id.btnClose);  
  48.         btnClose.setOnClickListener(new closelistener());  
  49.     }  
  50.   
  51.     class closelistener implements OnClickListener {  
  52.   
  53.         @Override  
  54.         public void onClick(View v) {  
  55.             // TODO Auto-generated method stub  
  56.             finish();  
  57.         }  
  58.   
  59.     }  
  60.   
  61.     /** 
  62.      * 重写onKeyDown方法可以拦截系统默认的处理 
  63.      */  
  64.     @Override  
  65.     public boolean onKeyDown(int keyCode, KeyEvent event) {  
  66.         // TODO Auto-generated method stub  
  67.         if (keyCode == KeyEvent.KEYCODE_BACK) {  
  68.             Toast.makeText(this"后退键", Toast.LENGTH_SHORT).show();  
  69.             return true;  
  70.         } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {  
  71.             Toast.makeText(this"声音+", Toast.LENGTH_SHORT).show();  
  72.             return false;  
  73.         } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {  
  74.             Toast.makeText(this"声音-", Toast.LENGTH_SHORT).show();  
  75.             return false;  
  76.         } else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {  
  77.             Toast.makeText(this"静音", Toast.LENGTH_SHORT).show();  
  78.             return false;  
  79.         } else if (keyCode == KeyEvent.KEYCODE_HOME) {  
  80.             Toast.makeText(this"Home", Toast.LENGTH_SHORT).show();  
  81.             return true;  
  82.         }  
  83.         return super.onKeyDown(keyCode, event);  
  84.     }  
  85.   
  86.     /** 
  87.      * 重写onTouchEvent方法可以处理Touch事件 
  88.      */  
  89.     @Override  
  90.     public boolean onTouchEvent(MotionEvent event) {  
  91.         // TODO Auto-generated method stub  
  92.         if (event.getAction() == MotionEvent.ACTION_MOVE) {  
  93.             Toast.makeText(this"ACTION_MOVE", Toast.LENGTH_SHORT).show();  
  94.         } else if (event.getAction() == MotionEvent.ACTION_UP) {  
  95.             Toast.makeText(this"ACTION_MOVE", Toast.LENGTH_SHORT).show();  
  96.         } else if (event.getAction() == MotionEvent.ACTION_DOWN) {  
  97.             Toast.makeText(this"ACTION_MOVE", Toast.LENGTH_SHORT).show();  
  98.         }  
  99.         return super.onTouchEvent(event);  
  100.     }  
  101.   
  102. }  


更多的事件可以参考SDK文档的MotionEvent、KeyEvent两个类,在KeyEvent中如果处理了KeyEvent.KEYCODE_BACK事件,那就不会执行默认的操作,比如收到KeyEvent.KEYCODE_BACK事件后默认是退出,如果直接return那就不会处理退出了。

如下图



阅读更多
个人分类: android驱动
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭