频道栏目
首页 > 程序开发 > 移动开发 > Android > 正文
Android常用之返回按键监听
2016-12-17 09:42:00         来源:李小明的博客  
收藏   我要投稿

在安卓开发中,我们经常要对按键进行监听,今天跟大家分享一下最常用的按下返回退出功能的实现.
如果没有对返回键设置监听,通常按下一次返回键就会退出程序或退出某个界面,这样是很不人性化的,我们可以有两种处理方式:

按下返回键时弹出一个对话框(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();
        }
    }

嗯,就这样,双击退出的功能也实现了,如果看不懂,建议大家自己写一遍就能明白逻辑了.

最后:我也是新手<( ̄3 ̄)> …不知道怎么表达更清楚,求大神轻轻的嘲讽,关爱菜鸟,人人有责!
还有,onKeyDown()的return一直没搞太懂,有没有大神能告知呢?

点击复制链接 与好友分享!回本站首页
上一篇:Android ANR分析
下一篇:Android 屏幕适配
相关文章
图文推荐
点击排行

关于我们 | 联系我们 | 广告服务 | 投资合作 | 版权申明 | 在线帮助 | 网站地图 | 作品发布 | Vip技术培训 | 举报中心

版权所有: 红黑联盟--致力于做实用的IT技术学习网站