关闭

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

200人阅读 评论(0) 收藏 举报
分类:

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那就不会处理退出了。

如下图



0
0
查看评论
发表评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场

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

Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个...
  • tanghongchang123
  • tanghongchang123
  • 2016-11-02 10:00
  • 1963

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

Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个...
  • deng0zhaotai
  • deng0zhaotai
  • 2013-09-29 20:12
  • 4854

[Android] Android 物理键点击响应 Menu Home Back 键点击捕获

捕获安卓手机的物理按键(Menu Home Back)三个按键的点击动作
  • csdn_lexli
  • csdn_lexli
  • 2016-09-08 23:05
  • 3544

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

Activity和View都能接收触摸和按键,如果响应事件只需要在继承类里复写事件函数即可;当一个视图(如一个按钮)被触摸时,该对象上的 onTouchEvent() 方法会被调用。不过,为了侦听这个...
  • sky1203850702
  • sky1203850702
  • 2015-03-26 09:03
  • 560

android设置物理按键点击无效

  • 2014-12-17 16:40
  • 3.07MB
  • 下载

关于android6.0系统源码中出现DeskClock调用v7包中ActionBar其无法用物理按键控制其Tab上焦点的问题

不积跬步无以至千里,不积小流无以成江海!--共勉          其实,以前我对于ActionBar操作知道的寥寥无几,但是现在管理的模块时DeskClock,其中在版本升级由以前的android4...
  • WDYShowTime
  • WDYShowTime
  • 2016-08-25 16:53
  • 822

Android4.2.2自增物理按键(frameworks)

当我们修改了frameworks后可能出现: make: *** [out/target/common/obj/PACKAGING/checkapi-current-timestamp] 错误 38...
  • longtian635241
  • longtian635241
  • 2014-05-07 22:00
  • 1437

Android4.2.2自增物理按键

转载地址: http://www.2cto.com/kf/201405/298944.html 当我们修改了frameworks后可能出现: make: *** [out/targ...
  • idward307
  • idward307
  • 2016-02-29 16:14
  • 247

Android物理按键

Android物理按键及物理连接--自拍杆拍照
  • chendong_
  • chendong_
  • 2016-02-26 17:30
  • 1496

android 增加物理按键关闭wifi实例讲解

Android按键添加和处理的方案   版本号 说明 作者 日期  1.0  Android按键添加和处理的方案 Sky Wang  2013/06/1...
  • kevinx_xu
  • kevinx_xu
  • 2013-10-30 19:28
  • 3518
    个人资料
    • 访问:41888次
    • 积分:572
    • 等级:
    • 排名:千里之外
    • 原创:11篇
    • 转载:69篇
    • 译文:0篇
    • 评论:5条
    文章分类
    最新评论