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

  • 相关阅读:
    Android绘制文本对象FontMetrics介绍及繪製文本 (转)
    实机调试无法输出LogCat的解决办法
    android 获取 imei号码 和 获取手机型号和系统版本号(未验证)
    Android原理之动态墙纸 (转)
    wp7 中的des 加解密
    ViewPager多页面滑动切换以及动画效果 (转载)
    中央气象台的天气预报API 中国城市数据库
    SQLite日期类型
    JDK1.5及API完整中文版CHM下载地址
    myeclipse8.5注册码生成
  • 原文地址:https://www.cnblogs.com/Free-Thinker/p/10763468.html
Copyright © 2020-2023  润新知