一、监听 返回键 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();
}