Android 物理按键复习

物理按键

一、 检测物理按键的方法:不用注册监听器,直接在活动页面检测物理按键即可,即重写Activity的onKeyDown方法。

 public boolean onKeyDown(int keyCode, KeyEvent event) {
        desc = String.format("%s物理按键的编码是%d", desc, keyCode);
        if (keyCode == KeyEvent.KEYCODE_BACK) {
            desc = String.format("%s, 按键为返回键", desc);
            // 延迟3秒后启动页面关闭任务
            new Handler().postDelayed(mFinish, 3000);
        } else if (keyCode == KeyEvent.KEYCODE_MENU) {
            desc = String.format("%s, 按键为菜单键", desc);
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
            desc = String.format("%s, 按键为加大音量键", desc);
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
            desc = String.format("%s, 按键为减小音量键", desc);
        }
        desc = desc + "\n";
        tv_result.setText(desc);
        // 返回true表示不再响应系统动作,返回false表示继续响应系统动作
        return true;
    }

onKeyDown方法只可检测4个物理按键事件,即菜单键、返回键、加大音量键和减小音量键,而主页键和任务键则就需要通过广播接收器来监测。
二、onKeyDown与onKey的区别
在使用onKeyDown方法之后,可以发现onKeyDown与onKey的不同之处:

  1. onKeyDown只能在Activity代码中使用,而onKey只要有可注册的控件就能使用。
  2. onKeyDown只能检测物理按键,无法检测输入法按键(如回车键、删除键等),而onKey可同时检测两类按键。
  3. onKeyDown不区分按下与松开两个动作,而onKey区分这两个动作。

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

  • KEYCODE_POWER 电源键
  • KEYCODE_MENU 菜单键
  • KEYCODE_BACK 后退键
  • KEYCODE_HOME Home键
  • KEYCODE_CAMERA 相机键
  • KEYCODE_SEARCH 查找键
  • KEYCODE_VOLUME_UP 音量键+
  • KEYCODE_VOLUME_DOWN 音量键-
  • KEYCODE_VOLUME_MUTE 静音

提供的回调方法有 :onKeyUp()、OnKeyDown()、onKeyLongPress()

 /** 
     * 重写onKeyDown方法可以拦截系统默认的处理 
     */  
    @Override  
    public boolean onKeyDown(int keyCode, KeyEvent event) {  
        // TODO Auto-generated method stub  
        if (keyCode == KeyEvent.KEYCODE_BACK) {  
            Toast.makeText(this, "后退键", Toast.LENGTH_SHORT).show();  
            return true;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {  
            Toast.makeText(this, "声音+", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {  
            Toast.makeText(this, "声音-", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_VOLUME_MUTE) {  
            Toast.makeText(this, "静音", Toast.LENGTH_SHORT).show();  
            return false;  
        } else if (keyCode == KeyEvent.KEYCODE_HOME) {  
            Toast.makeText(this, "Home", Toast.LENGTH_SHORT).show();  
            return true;  
        }  
        return super.onKeyDown(keyCode, event);  
    }  
  
    /** 
     * 重写onTouchEvent方法可以处理Touch事件 
     */  
    @Override  
    public boolean onTouchEvent(MotionEvent event) {  
        // TODO Auto-generated method stub  
        if (event.getAction() == MotionEvent.ACTION_MOVE) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        } else if (event.getAction() == MotionEvent.ACTION_UP) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        } else if (event.getAction() == MotionEvent.ACTION_DOWN) {  
            Toast.makeText(this, "ACTION_MOVE", Toast.LENGTH_SHORT).show();  
        }  
        return super.onTouchEvent(event);  
    }  
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值