关于OnKeyDown的记录

Android手机通常情况下 都需要用到物理返回键,今天我在项目里写个一个OnKeyDown的事件  我去 居然没反应 后来仔细研究了下发现我的写法是

public boolean onKeyDown(int keyCode, KeyEvent event) {

         if(keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0){
                System.out.println("返回键执行了!!!");
         }
         return true;

}

看到没 我的返回是return true; 后来我把 return true 改为了 return false; 就OK了

好,说下原理,返回true是表示该次事件已经处理完毕,如果false表示事件没有处理 一般是递交给super 方法处理。这时候系统就根据back原来的功能  退出程序,在做闪屏的时候 会用到这个更改返回值.

后来 又遇到了一个问题 就是App的页面中 按下手机侧面的音量加减键导致了页面重新加载了,这个时候需要做的就是拦截OnKeyDown  因为在按下音量键时 出发了OnKeyDown事件 如果你在OnKeyDown里面做了页面返回的操作 则每次按下音量键的时候 就会触发 导致页面关闭。正确的解决方案是 在onKeydown中对keyCode 进行判断:

public boolean onKeyDown(int keyCode, KeyEvent event) {
  
    if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN || keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
        return false;
    }
    return false;

}

这样就避免了 按键的冲突啦!! 哒哒

你可能感兴趣的:(android开发)