我们知道安卓在有软键盘的时候点击返回键,如果用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);
}
}

本文详细介绍了在安卓应用中,当软键盘弹出时如何通过重写onKeyPreIme方法来首次拦截返回键,实现自定义逻辑处理。通过实例代码演示了如何创建自定义EditText类,利用onKeyPreIme方法实现这一功能。
451

被折叠的 条评论
为什么被折叠?



