在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();
}

版权声明:本文为weixin_45265547原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。