zoukankan      html  css  js  c++  java
  • 【Android】Android实现监听返回键,主键(HOME),菜单键

    目录结构:

    contents structure [+]

    一.简介

    本篇文章介绍如何在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方法,就可以实现

        @Override    
        public boolean onKeyDown(int keyCode, KeyEvent event) {    
            if ((keyCode == KeyEvent.KEYCODE_BACK)) {    
                Toast.makeText(this, "按下了back键   onKeyDown()", Toast.LENGTH_SHORT).show();
                 return false;    
            }else {    
                return super.onKeyDown(keyCode, event);    
            }    
        }  

    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;
    
    @Override
    public 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菜单

  • 相关阅读:
    java_db2错误码对应值
    oracle_用户与概要文件
    quartz配置时间
    bzoj2395: [Balkan 2011]Timeismoney
    bzoj2725: [Violet 6]故乡的梦
    bzoj4400: tjoi2012 桥
    双连通分量模板
    bzoj3047: Freda的传呼机 && 2125: 最短路
    bzoj3541: Spoj59 Bytelandian Information Agency
    bzoj1023: [SHOI2008]cactus仙人掌图
  • 原文地址:https://www.cnblogs.com/HDK2016/p/8695052.html
Copyright © 2011-2022 走看看