通过连续按两次back键,弹出Toast提示再按一次退出功能。关键代码如下:
第一种方式:
/**
* 连续按两次返回键就退出
*/
private int keyBackClickCount = 0;
@Override
protected void onResume() {
super.onResume();
keyBackClickCount = 0;
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
switch (keyBackClickCount++) {
case 0:
Toast.makeText(this,
getResources().getString(R.string.press_again_exit),
Toast.LENGTH_SHORT).show();
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
keyBackClickCount = 0;
}
}, 3000);
break;
case 1:
mFrameTv.setVisibility(View.VISIBLE);
mImgTv.setVisibility(View.VISIBLE);
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.tv_off);
anim.setAnimationListener(new tvOffAnimListener());
mImgTv.startAnimation(anim);
break;
default:
break;
}
<span style="color:#ff0000;"> return true;</span>
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
if (sm.isMenuShowing()) {
toggle();
} else {
showMenu();
}
}
return super.onKeyDown(keyCode, event);
}
第二种方式:
/**
* 连续按两次返回键就退出
*/
private boolean isWaitingExit = false;
@Override
public boolean onKeyDown(int keyCode, KeyEvent event) {
// TODO Auto-generated method stub
if (keyCode == KeyEvent.KEYCODE_BACK) {
if (isWaitingExit) {
isWaitingExit = false;
mFrameTv.setVisibility(0);
mImgTv.setVisibility(0);
Animation anim = AnimationUtils.loadAnimation(
MainActivity.this, R.anim.tv_off);
anim.setAnimationListener(new tvOffAnimListener());
mImgTv.startAnimation(anim);
} else {
Toast.makeText(this,
getResources().getString(R.string.press_again_exit),
Toast.LENGTH_SHORT).show();
isWaitingExit = true;
Timer timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
isWaitingExit = false;
}
}, 3000);
return true;
}
return true;
} else if (keyCode == KeyEvent.KEYCODE_MENU) {
if (sm.isMenuShowing()) {
toggle();
} else {
showMenu();
}
}
return super.onKeyDown(keyCode, event);
}