Android 10系统onKeyUp和onKeyDown无法被监听的问题。

问题描述:继承了activity后实现onKeyUp和onKeyDown方法进行按键监听,点击“OK按键”后,onKeyUp和onKeyDown无任何回调,但是界面上有响应(如下图),一个图标被选中并执行了点击事件。

问题分析:此现象应该是“OK按键”的点击事件给系统优先消耗了。未查明原因(新开发板Android10出现的问题, 旧开发板Android7未出现这个问题)

参考原文:

1.https://blog.csdn.net/yxhuang2008/article/details/53822072

2.https://blog.csdn.net/sinat_31311947/article/details/53932310

解决方案:此图片使用的是ImageView。自定义一个类来继承ImageView,实现里面的onKeyPreIme方法并将其返回值返回false。然后实现里面的onKeyUp和onKeyDown方法即可。

注意:此时的onKeyUp和onKeyDown方法是ImageView中的方法。activity中的onKeyUp和onKeyDown方法依旧无法监听到。

源码:

@SuppressLint("AppCompatCustomView")
public class MyImageView extends ImageView {

    public MyImageView(Context context) {
        super(context);
    }

    public MyImageView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public MyImageView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
    }

    @Override
    public boolean onKeyPreIme(int keyCode, KeyEvent event) {
        QLog.e(String.format("图片触发按键: keyCode = %s,  event = %s", keyCode, toString(event)));
        return false;

    }

    @Override
    public boolean onKeyUp(int keyCode, KeyEvent event) {
        QLog.e(String.format("图片22触发按键: keyCode = %s,  event = %s", keyCode, toString(event)));
        return true;
    }

    @Override
    public boolean onKeyDown(int keyCode, KeyEvent event) {
        QLog.e(String.format("图片333触发按键: keyCode = %s,  event = %s", keyCode, toString(event)));
        return true;
    }

    private String toString(KeyEvent event) {
        return "action = " + event.getAction() +
                ", code = " + event.getKeyCode() +
                ",repeat = " + event.getRepeatCount();
    }
}

运行效果:

 

感谢!  有其他解决方案的大神们,麻烦发个链接,非常感谢!!!!!!!!!

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值