关于表情栏/功能栏和键盘切换跳闪问题的一些思考

1、问题

最近公司需要独立开发一个IM聊天应用,UI全定制,接着就发生了键盘和表情栏切换时的一些不愉快。

表情栏和键盘出现的问题

从左往右看图,在键盘已弹出的情况下点击打开功能栏(左图),此时键盘应该是立刻被关闭而功能栏应该被打开,但是却同时出现了键盘和表情栏/功能栏,功能栏被顶起了(中图)。在功能栏出现大约0.1秒后键盘才收起,变成(右图)的样子。
注:我保证,在打开表情栏/功能栏的同时我已经调用了hideSoftKeyboard()来关闭键盘了。

2、初步分析

键盘的开关是异步的,给相关的事件添加延时开关可以解决这个问题。例如handler.postDelay()
然而,在不同的机型上结果不一样,且分有无开启系统动画的情况。所以这个方法不可靠

3、参考

我百度了下,又github、掘金了下,找到了几篇可行的文章和例子。首先感谢下下方链接作者的的例子
https://github.com/leavesC/Keyboard 。直接上源码


这个作者使用的是postDelay()。这个跟我的初步分析是符合的,键盘的开关是异步的且时间不确定的。

4、解决办法

既然写死postDelayed的延迟时间不可靠,那么,我们可以监听键盘打开/关闭以后再进行显示/隐藏表情栏或功能栏。

5、总结

推荐大家先运行下上方链接的源码理解后再进行修改,因为键盘和表情/功能栏切换还涉及到布局高度锁定的操作。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

友情链接更多精彩内容