Android 输入法没有传递键盘DELETE事件

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Android 输入法没有传递键盘DELETE事件相关的知识,希望对你有一定的参考价值。

参考技术A 为了引出下面遇到的问题,提一下密码框删除的思路
删除细节:已输入密码删除移动焦点 ,和无输入内容时移动焦点
密码删除思路:拦截 DELETE 事件,清除输入框并取消焦点,让前一个输入框获取焦点。

测试妹子在使用华为P10 测试到这里的时候,发现删除键没用,她以为手机坏了。因为其他手机包括华为P9都可以响应删除并前移焦点。

开发手机我用的搜狗键盘没有问题,我切换回原生键盘再测发现——我勒个皮皮虾,毛反应都没有。测试妹子发现不是手机坏的,一个眼神光波差点把我炸到五米外。

这种奇葩坑必须深度挖一挖,不然还会被他的同类绊倒
设备:华为 ALT-TL00 5.0.1
因为这里是纯数字密码,设置属性 inputType 值为 numberPassword 。
测试日志发现,发现 ACTION_DOWN 、 ACTION_DOWN 、 DELETE 都没有获取到。
为了去除意外,我又测试了不设置 inputType ,果不其然全GG。

此时我真的感觉到了蛋疼 FUCK! 这是个锤子手机,心里默默吐槽了开发这个键盘的程序员兄弟。

翻了一下老司机的博客,和国外论坛。发现还有非常普遍的bug
在输入框,没有内容时不会传递 DELETE 相关事件

而我测试发现,这个华为手机上。无论输入框有无内容都没有传递出 DELETE 事件。

1.自定义开发一个键盘,这样就不用再测试其他机型或者其他厂牌的输入法。统一解决了这个问题。简单暴力,还可以附加密码输入安全策略。
但是项目已经快到尾声了,全局需要替换密码键盘。还要跟在国外的开发小伙伴沟通。
站在这两点上,项目经理否定了。让我先针对性的解决一下。
于是就有了下面的解决办法。

2.着手 EditText 对键盘事件的关联使用,覆盖事件监听接口为我们自定义的,只传递需要的 ACTION_DOWN 和 DELETE 事件。
这里我就不贴源码分析了,因为用到的方法只有两个,接口名字也是一读就懂。有兴趣的小伙伴可以去翻阅源码。

参考博客: android 获取软键盘的删除delete事件

以上是关于Android 输入法没有传递键盘DELETE事件的主要内容,如果未能解决你的问题,请参考以下文章

Android——软键盘操作+fragment之间传递参数

Android View 事件分发机制

如何从 Javascript 在 Safari 中发送键盘事件(例如 Backspace、Delete)

生成按键事件/输入

Android:软键盘不消耗输入事件/触摸

android怎么实现后台对按键事件的监控