Android---onKeyDown事件

来源:互联网 发布:国企数据分析师待遇 编辑:程序博客网 时间:2024/06/06 13:04
 @Override    public boolean onKeyDown(int keyCode, KeyEvent event) {        // keyCode 事件码        Log.e(tag,"onKeyDown: " + keyCode);        if(keyCode == KeyEvent.KEYCODE_MENU){            if(AnimationUtils.runningAnimationCount > 0){                // 当前有动画正在执行, 取消当前事件                return true;            }            // 如果按下的是菜单按钮            if(isLevel1Display){                long delay = 0;                // 隐藏三级菜单                if(isLevel3Display){                    AnimationUtils.rotateOutAnim(rl_level3, 0);                    isLevel3Display = false;                    delay += 200;                }                // 隐藏二级菜单                if(isLevel2Display){                    AnimationUtils.rotateOutAnim(rl_level2, delay);                    isLevel2Display = false;                    delay += 200;                }                // 隐藏一级菜单                AnimationUtils.rotateOutAnim(rl_level1, delay);            }else {                // 顺次转进来                AnimationUtils.rotateInAnim(rl_level1, 0);                AnimationUtils.rotateInAnim(rl_level2, 200);                AnimationUtils.rotateInAnim(rl_level3, 400);                isLevel3Display = true;                isLevel2Display = true;            }            isLevel1Display = !isLevel1Display;            return true;// 消费了当前事件        }        return super.onKeyDown(keyCode, event);    }


1)onKeyDown方法,该方法是接口KeyEvent.Callback中的抽象方法,所有的View全部实现了该接口并重写了该方法,该方法用来捕捉手机键盘被按下的事件
2)参数keyCode,该参数指的是被按下的键的键盘码手机键盘中每个按钮都会有其对应的键盘码,在应用程序都是通过键盘码才知道用户按下的是哪个键
3)当用户按下按键时,系统会自动将事件封装成KeyEvent对象供应用程序使用。 按键事件KeyEvent   按键事件有多种常量类型,比如 KEYCODE_BACK 
4)返回值,该方法的返回值为一个boolean类型的变量,当返回true时,表示已经完整地处理了这个事件,并不希望其他的回调方法再次进行处理,而当返回false时,表示并没有完全处理完该事件,更希望其他回调方法继续对其进行处理,例如Activity中的回调方法。


在监听物理键时,可以用onKeyDown方法,Activity已经自己有KeyEvent.Callback这个接口了,因为项目有使用Fragment,Fragment没有这个接口,事实上,即使你自己implements了KeyEvent.Callback,它自己也不会调用(暂时不知道为什么)。但是FragmentActivity是有这个接口的,所以我们只要在Activity中实现相关逻辑即可。

如果你需要在特定的Fragment监听的话可以结合使用FragmentManager.getBackStackEntryCount()。

0 0
原创粉丝点击