Android应用程序通常要通过判断用户对于返回键的操作,一般是为了防止误触误操作而导致用户体验不佳。因此,需要在用户按下返回键的时候提示用户是否退出应用程序。常见的提示方法有两种,一种是通过Toast的方式弹出提示,一种是通过对话框Dialog的方式弹出提示。
一、Toast方式弹出提示
1、当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。在exit方法中,首先判断isExit的值,如果为false,则重置为true,同时弹出提示,并在2秒后发出一个消息,在Handler中将此值还原成false。如果在发送消息间隔的2秒内,再次点击BACK键,则再次执行exit方法,此时isExit的值已经为true,则会直接执行退出的方法。
public class MainActivity extends Activity{
//定义一个变量,来标识是否退出
private static boolean isExit=false;
Handler handler=new Handler(){
@Override
public void handleMessage(Message msg){
super.handleMessage(msg);
isExit=false;
}
};
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
exit();
return false;
}
return super.onKeyDown(keyCode,event);
}
private void exit(){
if(!isExit){
isExit=true;
Toast.makeText(getApplicationContext(),"再按一
退出程序",Toast.LENGTH_SHORT).show();
//利用handler延迟发送更改状态信息
handler.sendEmptyMessageDelayed(0,2000);
}
else{
finish();
System.exit(0);
}
}
2、当按下BACK键时,会被onKeyDown捕获,判断是BACK键,则执行exit方法。在exit方法中,通过记录按键时间计算时间差实现。
public class MainActivity extends Activity{
private long exitTime=0;
@Override
public boolean onKeyDown(int keyCode,KeyEvent event){
if(keyCode==KeyEvent.KEYCODE_BACK){
exit();
return false;
}
return super.onKeyDown(keyCode,event);
}
private void exit(){
if((System.currentTimeMills()-exitTime)>2000){
Toast.makeText(getApplicationContext(),
"再按一次退出程序",Toast.LENGTH_SHORT).show();
exitTime=System.currentTimeMills();
else{
finish();
System.exit(0);
}
}