自定义View监听onKeyDown事件,View捕获焦点

     最近在开始学习自定义的View, 想在自定义的View中监听onKeyDown事件,处理一些逻辑。发现基类View中有该函数,于是重写它。

然后在MainActivity中调用setContentView。

       View contentView = new CustomView(this);
       setContentView(contentView);
CustomView继承View重写onKeyDown函数,结果发现它的onKeyDown函数没有执行。。

    在网上找了点资料:原来是焦点的问题。我们的程序运行时默认的焦点是在Activity上,而View没有获得焦点,所以它的onKeyDown函数监听不到。

既然是这样,那应该让View获取到焦点就可以了监听了。

   修改为

        View contentView = new CustomView(this);
        contentView.setFocusable(true);
        contentView.setFocusableInTouchMode(true);
        setContentView(contentView);
或者在CustomView的构造函数中加上设置焦点的两句也可以让View获取到焦点。


setFocusable(true): 设置View能够获取到焦点。

setFocusableInTouchMode():设置是否有焦点来响应点触的资格


测试过程中发现会先执行View的onKeyDown事件,然后再执行Activity的,所以我们可以在View中的onKeyDown中返回false,来屏蔽掉Activiy中的对应事件。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值