对于遥控器、鼠标、手指或者其他按键事件来说是有按下down和放开up两种状态的,setOnKeyListener之所以执行两次就是因为down和up占用了,有个取巧的方法就是 KeyEvent.getAction() == KeyEvent.ACTION_DOWN或者KeyEvent.getAction()== KeyEvent.ACTION_UP的时候让他执行结束return true;而且其他的操作需要获取getKeyCode()事件,不是getAction()动作;对于遥控器、鼠标、手指或者其他按键事件来说是有按下down和放开up两种状态的,setOnKe