在Android中实现监听 返回键,主键,菜单键

一、监听 返回键 onKeyDown方法和onBackPressed方法
onKeyDown: 是当某个按键被按下是触发。所以也有人在点击返回键的时候去执行该方法来做判断。(该方法只是android 1.0~ android 2.1)代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event)  {
    if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { //按下的如果是BACK,同时没有重复
       Toast.makeText(this,"返回键Back键测试",Toast.LENGTH_SHORT).show();
        return true;
    }
 
    return super.onKeyDown(keyCode, event);
}



onBackPressed: 在android 2.0开始多出了关于返回键的单独的事件方法,可以在该方法里面执行当点击返回键的时候做什么…所以,后期都是用这个方法比较多,代码如下:

@Override
public void onBackPressed() {
    // 这里处理逻辑代码,大家注意:该方法仅适用于2.0或更新版的sdk
    return;
}



如果要考虑版本兼容的话,代码可这么写:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    // 是否触发按键为back键
    if (keyCode == KeyEvent.KEYCODE_BACK) {
        onBackPressed();
        return true;
    } else {// 如果不是back键正常响应
        return super.onKeyDown(keyCode, event);
    }
}



点击两次返回键退出,防止误操作

//重写onKeyDown()方法,继承自退出的方法

private long exitTime = 0;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
        if((System.currentTimeMillis()-exitTime) > 2000){
            Toast.makeText(getApplicationContext(), "再按一次退出程序", Toast.LENGTH_SHORT).show();
            exitTime = System.currentTimeMillis();
        } else {
            finish();
            System.exit(0);
        }
    return true;
    }
    return super.onKeyDown(keyCode, event);
}

//重写onBackPressed()方法
//退出时间
privatelongcurrentBackPressedTime= 0;
//退出间隔
privatestaticfinalintBACK_PRESSED_INTERVAL= 2000;
//重写onBackPressed()方法,继承自退出的方法
@Override
public void onBackPressed() {
    //判断时间间隔
    if(System.currentTimeMillis()-currentBackPressedTime>BACK_PRESSED_INTERVAL) {
        currentBackPressedTime= System.currentTimeMillis();
        Toast.makeText(this,"再按一次返回键退出程序", Toast.LENGTH_SHORT).show();
    }else{
        //退出
        finish();
    }
}



二、监听 主键(Home键)
监听Home键可以通过onUserLeaveHint()方法来实现,代码如下:

@Override
protected void onUserLeaveHint() {
    super.onUserLeaveHint();
    Toast.makeText(this, "onUserLeaveHint", Toast.LENGTH_SHORT).show();
}



三、监听 菜单键
菜单的监听也可以通过onKeyDown()方法来实现,代码如下:

@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
    if (keyCode == KeyEvent.KEYCODE_MENU) {
        Toast.makeText(this, "onkeyDown clicked", Toast.LENGTH_SHORT).show();
        super.openOptionsMenu(); // 调用这个,就可以弹出菜单
    }
    return true; // 最后,一定要做完以后返回 true,或者在弹出菜单后返回true,其他键返回super,让其他键默认
}



onOptionsMenuClosed()方法也可以实现,代码如下:

@Override
public void onOptionsMenuClosed(Menu menu) {
    super.onOptionsMenuClosed(menu);
    Toast.makeText(this, "onOptionsMenuClosed clicked", Toast.LENGTH_SHORT).show();
}


 

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值