在安卓开发中,我们经常要对按键进行监听,今天跟大家分享一下最常用的按下返回退出功能的实现.
如果没有对返回键设置监听,通常按下一次返回键就会退出程序或退出某个界面,这样是很不人性化的,我们可以有两种处理方式:
- 按下返回键时弹出一个对话框(AlertDialog),再让用户选择是否退出
- 双击返回退出
下面分别介绍着两种实现方式
1. 按下返回键时弹出一个对话框(AlertDialog),再让用户选择是否退出
实现思路:
- 重写onKeyDown方法
- 在方法中,判断返回按键被按下的时候创建一个对话框并显示
- 给对话框的按钮设置点击监听
代码示例:
//重写onKeyDown方法,对按键(不一定是返回按键)监听
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {//当返回按键被按下
AlertDialog.Builder dialog = new AlertDialog.Builder(context);//新建一个对话框
dialog.setMessage("确定要退出测试吗?");//设置提示信息
//设置确定按钮并监听
dialog.setPositiveButton("确定", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
finish();//结束当前Activity
}
});
//设置取消按钮并监听
dialog.setNegativeButton("取消", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
//这里什么也不用做
}
});
dialog.show();//最后不要忘记把对话框显示出来
}
return false;
}
这样,就实现了点击返回按键时弹出对话框,并交由用户处理退出的功能
2.双击返回退出
实现思路:
- 重写onKeyDown方法
- 声明一个全局的布尔值isExit,默认为false
- 第一次点击返回按键时,弹出Toast提示,并调用exit()方法
- exit()方法中,判断isExit值,并执行相应逻辑(具体看代码吧,原谅我真不知道怎么描述了……)
代码示例:
//声明一个全局布尔值,默认为false
public boolean isExit = false;
//重写onKeyDown方法,
public boolean onKeyDown(int keyCode, KeyEvent event) {
if (keyCode == KeyEvent.KEYCODE_BACK) {//当返回按键被按下
//调用exit()方法
exit();
}
return false;
}
//被调用的exit()方法
private void exit() {
Timer timer;//声明一个定时器
if (!isexit) { //如果isExit为false,执行下面代码
isexit = true; //改变值为true
Toast.makeText(TestActivity.this, "再按一次退出测试", Toast.LENGTH_SHORT).show(); //弹出提示
timer = new Timer(); //得到定时器对象
//执行定时任务,两秒内如果没有再次按下,把isExit值恢复为false,再次按下返回键时依然会进入if这段代码
timer.schedule(new TimerTask() {
@Override
public void run() {
isexit = false;
}
}, 2000);
} else {//如果两秒内再次按下了返回键,这时isExit的值已经在第一次按下时赋值为true了,因此不会进入if后的代码,直接执行下面的代码
finish();
}
}
嗯,就这样,双击退出的功能也实现了,如果看不懂,建议大家自己写一遍就能明白逻辑了.