当前位置: 代码迷 >> 综合 >> 电视按键事件的处理(3)
  详细解决方案

电视按键事件的处理(3)

热度:47   发布时间:2024-01-31 17:10:58.0

上一个章节主要看的是View层对KeyEvent事件传递的影响,本章主要研究ViewGroup层对KeyEvent事件传递的影响

    public boolean dispatchKeyEvent(KeyEvent event) {switch (event.getAction()){case KeyEvent.ACTION_DOWN:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"dispatchKeyEvent_ACTION_DOWN");return true;case KeyEvent.ACTION_UP:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"dispatchKeyEvent_ACTION_UP");break;}return super.dispatchKeyEvent(event);}

执行的结果

com.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_DOWNcom.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: onKeyUp_ACTION_UP
com.example.keytest I/wangjiasheng_MainActivity: onKeyUp_ACTION_UP

通过上一章的和这次执行的结果可以确定dispatchKeyEvent返回值为true的时候这个事件就会被丢弃,onKeyDown和onKeyUp都不会被执行,事件既不会向下传递,也不会向上传递。

再看看返回值为false的情况

    public boolean dispatchKeyEvent(KeyEvent event) {switch (event.getAction()){case KeyEvent.ACTION_DOWN:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"dispatchKeyEvent_ACTION_DOWN");return false;case KeyEvent.ACTION_UP:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"dispatchKeyEvent_ACTION_UP");break;}return super.dispatchKeyEvent(event);}

执行结果

com.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_MainActivity: onKeyDown_ACTION_DOWNcom.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: onKeyUp_ACTION_UP
com.example.keytest I/wangjiasheng_MainActivity: onKeyUp_ACTION_UP

通过上一章的和这次执行的结果可以确定dispatchKeyEvent返回值为false的时候这个事件就会消耗,不会执行当前View的onKeyDown事件,事件不会向下传递了,但是会执行上一级的onKeyDown

再看看onKeyDown的返回值

  @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (event.getAction()){case KeyEvent.ACTION_DOWN:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"onKeyDown_ACTION_DOWN");return true;case KeyEvent.ACTION_UP:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"onKeyDown_ACTION_UP");break;}return super.onKeyDown(keyCode, event);}

执行结果

com.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_MyView: onKeyDown_ACTION_DOWN
com.example.keytest I/wangjiasheng_MainActivity: onKeyDown_ACTION_DOWNcom.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: onKeyUp_ACTION_UP
com.example.keytest I/wangjiasheng_MainActivity: onKeyUp_ACTION_UP

可以看出ViewGroup的onKeyDown返回值为true对事件的传递没有影响

    @Overridepublic boolean onKeyDown(int keyCode, KeyEvent event) {switch (event.getAction()){case KeyEvent.ACTION_DOWN:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"onKeyDown_ACTION_DOWN");return false;case KeyEvent.ACTION_UP:Log.i("wangjiasheng_"+this.getClass().getSimpleName(),"onKeyDown_ACTION_UP");break;}return super.onKeyDown(keyCode, event);}

执行结果

com.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_DOWN
com.example.keytest I/wangjiasheng_MyView: onKeyDown_ACTION_DOWN
com.example.keytest I/wangjiasheng_MainActivity: onKeyDown_ACTION_DOWNcom.example.keytest I/wangjiasheng_MainActivity: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_ViewGroup1: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: dispatchKeyEvent_ACTION_UP
com.example.keytest I/wangjiasheng_MyView: onKeyUp_ACTION_UP
com.example.keytest I/wangjiasheng_MainActivity: onKeyUp_ACTION_UP

可以看出ViewGroup的onKeyDown返回值为false对事件的传递没有影响

因此可以总结出安卓ViewGroup的OnKeyDown对事件的传递没有影响

  相关解决方案