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

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

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值