在有软键盘的情况下返回键的处理

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


 
 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值