自定义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中的对应事件。

你可能感兴趣的:(Android学习)