解决Android自定义键盘与系统键盘交替出现会出现弹跳闪烁问题

在Android应用的某个界面上,配置出现使用自定义键盘,系统键盘的相邻的两个独立的输入框,当用户在两个输入框之间来回切换的时候,会出现弹跳闪烁问题。

这个问题发生的原因是,系统键盘的关闭是异步的,我们需要等待系统键盘关闭后再显示我们的键盘,否则会出现系统键盘关闭的过程中,我们自定义键盘同时出现,出现两者叠加的瞬间状态。

解决方法参考下面的代码:

注意,在继承实现自定义的密码键盘弹窗的时候,可以参考Android源代码中的PopWindow的处理逻辑。如果是使用WindowManager.addView 的方式添加到窗口,那么在关闭View的时候需要使用 WindowManager.removeViewImmediate来移除,否则一样会出现与输入法弹窗冲突。 代码同样参考PopWindow。

另外,如果自定义输入法的View增加了 FLAG_NOT_TOUCH_MODAL 属性,那么会导致事件穿透到输入法窗口下面的Window,如果点击区域恰好有个 EditText,则可能诱发系统输入法的弹出。如果自定义键盘通过监听 ACTION_OUTSIDE来关闭窗口,那么会出现系统键盘先弹出,输入法的View再关闭的奇怪流程。因此这种情况下,我们需要参考PopWindow来监听ACTION_DOWN事件。

如下图:

监测系统键盘是否已经关闭,参考代码如下:

上面的代码依赖

参考链接


发布者

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注