zoukankan      html  css  js  c++  java
  • Android 回退键监听

    回退键(back)监听:
    方法1:回调方法onBackPressed

      String LOG_TAG="TAG";
      @Override
        public void onBackPressed() {
            // super.onBackPressed();//注释掉这行,back键不退出activity

            Log.i(LOG_TAG, "onBackPressed");
        }

    这个方法可以阻止用户点击后退键来退出程序。
    一般的像升级程序或者重要数据传输页面都是要阻止用户轻易退出的。
    这个方法也是我们最简单、常用的一个方法。
    方法2:回调方法onKeyDown

      @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            Log.i(LOG_TAG, "onKeyDown: keyCode -- " + keyCode);

            switch (keyCode) {
                case KeyEvent.KEYCODE_BACK:
                    Log.i(LOG_TAG, "KeyEvent.KEYCODE_BACK");
    //                break;
                    return false;//拦截事件
                case KeyEvent.KEYCODE_MENU:
                    Log.i(LOG_TAG, "KeyEvent.KEYCODE_MENU");
                    break;
                case KeyEvent.KEYCODE_HOME:
                    Log.i(LOG_TAG, "KeyEvent.KEYCODE_HOME");
                    // 收不到
                    break;
                case KeyEvent.KEYCODE_APP_SWITCH:
                    Log.i(LOG_TAG, "KeyEvent.KEYCODE_APP_SWITCH");
                    // 收不到
                    break;
                default:
                    break;
            }

            return super.onKeyDown(keyCode, event);

        }


    这个方法是监听按键事件,但是阻止用户的行为,并且这种方法监听不到Home键的事件。
    方法3:回调方法dispatchKeyEvent

    这是个事件分发的方法,无论手指按下屏幕或滑动屏幕、离开屏幕都是会触发这个方法

        @Override
        public boolean dispatchKeyEvent(KeyEvent event) {
            Log.i(LOG_TAG, "dispatchKeyEvent: keyCode -- " + event.getKeyCode());
            if (event.getKeyCode()==4){//回退键的KeyCode是4.
                return false;//表示不分发
            }else{
                return super.dispatchKeyEvent(event);
            }

        }

    如果事件没有分发(返回false),onBackPressed方法和onKeyDown方法都是没有得到回调的
    总结

    正常情况肯定是用第一种方法咯。

    后面两种方法涉及到事件的分发。
    事件分发要彻底理解是一个相当麻烦的过程:包括事件分发、事件拦截、事件处理,并且手指按下、移动、松开都要分析三个事件情况。

    上面三个方法中,如果dispatchKeyEvent返回false,后面两个方法是无法得到回调的。
    如果onKeyDown返回false,onBackPressed方法是没有得到回调的。
    共勉:生活可能迫使你做很多事情,但是自己想做的事情还是要坚持去做。

  • 相关阅读:
    Node.js、vue.js的使用
    windows配置环境变量
    http常见状态码及其解析
    AWS使用教程
    免费服务器集锦 免费服务器大全 免费使用服务器
    免费服务器AWS免费使用一年详细教程
    PHP实现RSA2加密
    dcoker安装redis
    ES,kibana通过nginx添加访问权限
    docker快速安装kibana
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10763468.html
Copyright © 2011-2022 走看看