android检测返回键onBackPressed和onKeyDown区别

2020-02-21 22:50:13

参考地址 Android实现监听返回键,主键(HOME),菜单键

onBackPressed()提供的功能有限,它这是在退出之前通知onBackPressed()方法,并不能改变用户原来的行为

利用onKeyDown方法,就可以实现

  1. 简介

  2. 监听 返回键

  3. 监听 主键(Home键)

  4. 监听 菜单键

一.简介

本篇文章介绍如何在Android中实现监听返回键,主键,菜单键。一般情况下,我们都可以在Android手机底部看到三个按钮,这三个按钮就分别是返回键,主键,菜单键。

接下来介绍监听这三个键的实现。

二.监听 返回键

第一种方法通过onBackPressed()方法来实现

复制代码

    /**  
     * 注意:  
     * super.onBackPressed()会自动调用finish()方法,关闭当前Activity.  
     */    
    @Override    
    public void onBackPressed() {    
        super.onBackPressed();    
        Toast.makeText(this, "按下了back键   onBackPressed()", Toast.LENGTH_SHORT).show();
    }

复制代码

onBackPressed()提供的功能有限,它这是在退出之前通知onBackPressed()方法,并不能改变用户原来的行为

利用onKeyDown方法,就可以实现

按 Ctrl+C 复制代码

按 Ctrl+C 复制代码

onKeyDown方法返回true表示退出,返回false便不退出。

还可以通过跳转来实现退出,

复制代码

   @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        if(keyCode == KeyEvent.KEYCODE_BACK && event.getAction() == KeyEvent.ACTION_DOWN){
               Intent intent = new Intent(Intent.ACTION_MAIN);  
               intent.addCategory(Intent.CATEGORY_HOME);  
               startActivity(intent);
        }        return super.onKeyDown(keyCode, event);
    }

复制代码

通过onKeyDown我们可以实现,实现“再按一次返回键退出程序”的功能

复制代码

private long exitTime = 0;

@Overridepublic 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);
}

复制代码

三.监听 主键(Home键)

监听Home键可以通过onUserLeaveHint()方法来实现,

    @Override 
    protected void onUserLeaveHint() { 
        super.onUserLeaveHint(); 
        Toast.makeText(this, "onUserLeaveHint", Toast.LENGTH_SHORT).show();
    }

在这个方法中,我们可以观察出,如果onUserLeaveHint方法是不能改变用户的行为的。

四.监听 菜单键

在手机下方的三个键中,最右边的键就是菜单键,通常是用方括号表示的。经过笔者的测试发现,如果轻点一下,那么会跳出菜单界面,如果长点的话,那么会退出程序。这个过程会自动调用onUserLeaveHint方法,也就是主键。

菜单的监听也可以通过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();
    }

复制代码

经过笔者的测试,发生这些方法在高版本中可能出现不兼容的情况,关于菜单可以查看 Android中Menu菜单


  • 2020-01-17 21:20:06

    Nuxt重要点介绍和记录

    nuxt.js简单的说是Vue.js的通用框架,最常用的就是用来作SSR(服务器端渲染).Vue.js是开发SPA(单页应用)的,Nuxt.js这个框架,用Vue开发多页应用,并在服务端完成渲染,可以直接用命令把我们制作的vue项目生成为静态html。

  • 2020-01-17 21:21:42

    nuxtjs打包优化

    然后你再使用 npm run build 打包的时候,会弹出一个界面 当然了,它第一次出来的时候我立马关了,这啥玩意???别着急你慢慢的品,慢慢的看。 原来 这是打包后的JS,面积的大小就是体积的大小。这样我们一目了然的看到了到底那里大了

  • 2020-01-17 23:21:54

    webpack打包优化之外部扩展externals的实际应用

    使用vue-cli创建项目,使用webpack打包。其中,有一个webpack优化webpack.optimize.CommonsChunkPlugin,它会将node_modules中的必需模块提取到vendor文件中,项目开发中,增加第三方模块,比如element-ui、vue-echarts等,vendor的包都会增大。这个时候,就需要考虑减轻vendor包的大小,增加构建速度。我们可以使用webpack的外部扩展(externals)功能。

  • 2020-01-18 01:26:59

    anyProxy使用注意事项

    anyproxy-ca 运行这个命令,如果是mac电脑他会提醒你去通过证书。

  • 2020-01-18 08:54:06

    利用localStorage来处理你的Javascript脚本错误

    localStorage作为HTML5中的新特性,它的出现可以说对于前端性能体验来讲可以获得相当大的改善。存储一些用户经常用到而又不是涉及隐私和安全的东西,的确是一个非常好的选择。下面分享一下用localStorage来处理客户端代码错误的例子来了解一下它的用途吧。