zoukankan      html  css  js  c++  java
  • 返回键、菜单键、home键

    在Android系统中用来显示界面的组件(Component)为Activity,也就是说只有重写Activity的onKeyDown方法来监控/拦截/屏蔽系统的返回键(back)、菜单键(Menu)及Home键。

    1、拦截/屏蔽返回键、菜单键实现代码

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        if(keyCode == KeyEvent.KEYCODE_BACK) { //监控/拦截/屏蔽返回键
            processExit();
            return true;
        } else if(keyCode == KeyEvent.KEYCODE_MENU) {
            //监控/拦截菜单键
        } else if(keyCode == KeyEvent.KEYCODE_HOME) {
            //由于Home键为系统键,此处不能捕获,需要重写onAttachedToWindow()
        }
        return super.onKeyDown(keyCode, event);
    }

    2、拦截/屏蔽系统Home键

    public void onAttachedToWindow() {  
         this.getWindow().setType(WindowManager.LayoutParams.TYPE_KEYGUARD);     
         super.onAttachedToWindow();    
    }

    为什么必须重写onAttachedToWindow(),看看下面的代码就知道了

    /frameworks/policies/base/phone/com/android/internal/policy/impl/PhoneWindowManager.java 1000行附近
    if (code == KeyEvent.KEYCODE_HOME) {  
        // If a system window has focus, then it doesn't make sense  
        // right now to interact with applications.  
        WindowManager.LayoutParams attrs = win != null ? win.getAttrs() : null;  
        if (attrs != null) {  
            final int type = attrs.type;  
            if (type == WindowManager.LayoutParams.TYPE_KEYGUARD  
                    || type == WindowManager.LayoutParams.TYPE_KEYGUARD_DIALOG) {  
                    // the "app" is keyguard, so give it the key  
                    return false;  
            }  
            final int typeCount = WINDOW_TYPES_WHERE_HOME_DOESNT_WORK.length;  
            for (int i=0; i<typeCount; i++) {  
                if (type == WINDOW_TYPES_WHERE_HOME_DOESNT_WORK[i]) {  
                    // don't do anything, but also don't pass it to the app  
                    return true;  
                }  
            }  
        } 
    }
  • 相关阅读:
    重定向是否可以重定向到post接口
    ForkJoin(工作窃取)初步使用,计算偶数集合
    Dubbo服务的三种发布模式
    mysql开启慢查询日志
    Hashmap的结构,1.7和1.8有哪些区别
    idea回滚已经push的代码
    rabbitmq集群安装配置
    restful好处,表单提交put/delete
    BIO/NIO/AIO待完成
    判断一个对象是否可以被回收
  • 原文地址:https://www.cnblogs.com/ikaka/p/3613612.html
Copyright © 2011-2022 走看看