Android软键盘与back事件

今天同事在项目中遇到一个问题,按back键隐藏软键盘时,输入框还有焦点(按照需求,软键盘隐藏的同时,输入框要失去焦点)。


同事跟我说的时候,他在Activity的onKeyDown方法里面做处理,说是这个时候该方法不会触发。


依据Android事件分发的原理,软键盘显示的时候,back事件会直接被软键盘消化掉,所以这个时候onKeyDown不会触发。


我的第一反应是,重写Activity的dispatchKeyEvent方法,在这里拦截back事件。但是现实是残酷的,软键盘显示的时候,这个方法也不会被触发;另一方面,软键盘隐藏的时候,按back键,这个方法能被触发。从两种现象上看,貌似在接收back事件上,软键盘并不排在activity后面。关于这一点还有待求证。


网上google了一把,发现好多文章都提到根据view size的改变来相应键盘的隐藏。也就是键盘显示时,自动跳转view的size;然后键盘隐藏的时候,恢复view的size。理论上,这个方法是可以的,但这么做总感觉有点不甘心。


经过一番折腾,在View类中找到了救命稻草。


Android软键盘与back事件_第1张图片


重写了输入框的dispatchKeyEventPreIme方法,问题搞定!!!

你可能感兴趣的:(Android)