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方法是没有得到回调的。
    共勉:生活可能迫使你做很多事情,但是自己想做的事情还是要坚持去做。

  • 相关阅读:
    Java-----Excel转HTML
    UI_拖动View
    查找——图文翔解Treap(树堆)
    android 三级菜单 BaseExpandableListAdapter
    New Relic——手机应用app开发达人的福利立即就到啦!
    安卓 下载多线程带进度条
    大数据
    Android学习路线(六)为Android应用加入ActionBar
    JavaScript日期对象使用总结
    经典二叉树
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10763468.html
Copyright © 2011-2022 走看看