zoukankan      html  css  js  c++  java
  • view-activity跟控件在onkey事件上的传递关系

    android 中Activity跟View对于键盘的监听,主要有以下几个方法

    //按键按下
    public boolean onKeyDown(int keyCode, KeyEvent event)  {}
    //按键弹起
    public boolean onKeyUp(int keyCode, KeyEvent event) {}
    //常按
    public boolean onKeyLongPress(int keyCode, KeyEvent event) {}

    我们今天先看的就是按下、弹起两个事件,在activity跟view两者之间的传递关系。

    我们先看如下的测试代码

    首先是自定义view,重写了onkeyDown 跟onkeyUp两个方法

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
    
            boolean a = super.onKeyDown(keyCode, event);
            Log.e("123", "view_onkeydown|a===" + a);
            return a;
        }
    
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
    
            boolean a = super.onKeyUp(keyCode, event);
            Log.e("123", "view_onkeyup|a==" + a);
            return a;
        }

    接下来是在activity中重写了上面两个方法

    @Override
        public boolean onKeyDown(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            Log.e("123", "activity_onkeydown");
            return super.onKeyDown(keyCode, event);
        }
    
        @Override
        public boolean onKeyUp(int keyCode, KeyEvent event) {
            // TODO Auto-generated method stub
            Log.e("123", "activity_onkeyup");
            return super.onKeyUp(keyCode, event);
        }

    然后我们打下log

    1.当焦点不在自定义view上的时候

      1 00-01 08:59:54.755: E/123(9250): activity_onkeydown
      2 01-01 08:59:54.951: E/123(9250): activity_onkeyup
      3 01-01 08:59:55.757: E/123(9250): activity_onkeydown
      4 01-01 08:59:55.964: E/123(9250): activity_onkeyup

    2.当焦点在view上的时候

      1 01-01 09:01:14.914: E/123(9250): view_onkeydown|a===true
      2 01-01 09:01:15.043: E/123(9250): view_onkeyup|a==false
      3 01-01 09:01:15.044: E/123(9250): activity_onkeyup
      4 01-01 09:01:16.451: E/123(9250): view_onkeydown|a===true
      5 01-01 09:01:16.614: E/123(9250): view_onkeyup|a==false
      6 01-01 09:01:16.615: E/123(9250): activity_onkeyup

    总结:

    从上面的log结果,我们能得到以下两个知识点

    1.控件对键盘的监听,只有当控件获得焦点的时候,才能够起效果,activity对控件的监听是一直存在的

    2.如果控件获得了焦点,那么监听顺序是,先view,后activity

    3.如果view返回为ture,那么activity相应的监听就不会接受到按键事件

  • 相关阅读:
    PHP7 开启Zend Opcache
    swoole笔记之 主服务器swoole_websocket_server, 监听 tcp端口 ,任务投递, http请求
    Navicat 远程连接docker容器中的mysql 报错1251
    nginx配置后访问不了问题
    解决每次git pull需要输入用户名密码的问题
    论文阅记 EfficientDet: Scalable and Efficient Object Detection
    Tensorflow bug(一) ValueError The passed save_path is not a valid checkpoint
    论文阅记 MobileNetV3:Searching for MobileNetV3
    论文阅记 MnasNet: Platform-Aware Neural Architecture Search for Mobile
    论文阅记 MobileNetV2:Inverted Residuals and Linear Bottlenecks
  • 原文地址:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_onkey_15915113.html
Copyright © 2011-2022 走看看