我们知道安卓在有软键盘的时候点击返回键,如果用onkeydown去拦截,那么这次的返回键是被软键盘的隐藏拦截掉的。那么如果要在软键盘弹出的情况下第一次返回键就能被我们自己拦截该怎么做呢?
通过观看源码可知,view身上有个方法是dispatchKeyEventPreIme,这个方法是按键处理转发到view视图的分发方法,接着会调到onpreime, 这个方法是任何按键跟view关联的最先调用的方法。
所以只要重写控件的这两方法的其中一个拦截event写个回调就可以达到我们的目的。虽然重写其中一个都可做到,但是个人觉得还是重写onpreime比较好点,因为dispatchKeyEventPreIme毕竟还是event分发的方法,而onpreime才是真正处理event的方法。
附上自己代码:
<pre name="code" class="java"><pre name="code" class="java">public class IgnoreImeEdittext extends EditText {
private OnMyKeyPreIme onMyKeyPreIme;
public IgnoreImeEdittext(Context context) {
super(context);
}
public IgnoreImeEdittext(Context context, AttributeSet attrs) {
super(context, attrs);
}
public IgnoreImeEdittext(Context context, AttributeSet attrs, int defStyle) {
super(context, attrs, defStyle);
}
@Override
public boolean onKeyPreIme(int keyCode, KeyEvent event) {
if(onMyKeyPreIme!=null){
onMyKeyPreIme.disPatch(keyCode,event);
}
return super.onKeyPreIme(keyCode, event);
}
public void setOnMyKeyPreimeListener(OnMyKeyPreIme onMyKeyPreIme){
this.onMyKeyPreIme = onMyKeyPreIme;
}
public interface OnMyKeyPreIme{
public void disPatch(int keyCode, KeyEvent event);
}
}