LotusLoveNature

日常工作,生活小记

浅谈key事件传递

都知道在开发过程touch事件传递是件很复杂的事,那么key事件呢,它相对来说简单一点。

今天在开发时有这样一个需求,就是在EditText中输入文字,然后监听回车键跳转。

那么我这个监听是写在哪里呢?

Activity?承载这个EditText的Viewgroup?还是写给EditText 这个View本身

另外是用dispatchkey?onkeydown?onkeyup?还是View本身的onKey?

进过尝试发现:在有Edittext的Viewgroup中,Edittext获得焦点时,key事件是这样分发的

1. 首先是数字或字符等普通字符,是直接给EditText处理的,是不对外的。但是删除,回车是对外的

2. 这两个特殊字符首先是先给View本身的onKey,如果不处理(返回false),才由EditText自己处理的

所以针对上面的需求,我们只需要对View本身监听onKeyListener,然后在里面监听回车键,处理事情,并且返回true即可。

扩展,,,,

如果没有EditText或者EditText没有获取焦点呢,事件是怎么传递的呢?

1. 如果是在Viewgroup中处理,首先是Viewgroup默认不处理onkeydown事件,我们如果需要来一个总体的事件分发,可以用dispatchKeyEvent,如果返回true,就不会传给child。否则可以传给child

2. 如果是在Activity中处理,我们可以写dispatchKeyEvent和onKeyDown,如果dispatchKeyEvent返回true,那么不会再给onKeyDown处理,否则还是会先dispatch处理,然后onkeydown处理


评论
©LotusLoveNature | Powered by LOFTER