view-activity跟控件在onkey事件上的传递关系

本文详细介绍了在Android中Activity和View如何监听键盘事件,包括按键按下、按键弹起的方法实现及传递流程。通过测试代码演示了在不同场景下焦点转移时的监听顺序和事件接收情况。

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相应的监听就不会接受到按键事件

转载于:https://www.cnblogs.com/zhangshuli-1989/p/zhangshuli_onkey_15915113.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值