android键盘表情流畅切换实现

android 键盘表情流畅切换

大家都用微信,在聊天页面,软键盘与表情栏,工具栏之间的切换非常流畅,没有引起输入bar的上下抖动,体验非常好。这里讲一讲它的实现原理。

将表情栏的高度设置为与软键盘一样。

这里略微绕一点,因为android没有提供API,但是方案早已泛滥,基本思路一致:
1. 在AndroidManifest.xml中设置Activity属性 adjustResize
2. 代码中,注册GlobalLayoutListener,获取软键盘高度,设置表情栏,输入栏高度。
这里就不提供代码了,一搜一堆。

页面顶层View高度设成具体值

仅仅将表情栏高度设置成与软件盘一样高时不够的,如在软键盘切换表情时就会出现输入条被高高顶起再落下的动画,体验很不好。如何做到像微信那样切换时输入条高度不变呢?
- 在软键盘没有弹出时,将顶层页面高度从match_parent设成具体值
- 当软键盘弹出时,将表情栏的parentView(高度与软键盘一样)设置为显示。

这样,软键盘弹出时,window的高度是减少了,减少了软键盘的高度。但是由于Activity中顶层View的高度是定值,所以页面高度不变。窗口大小小于View大小,只能显示View的上半部分。此时显示表情栏ParentView,将输入条顶起,高度刚刚好。表情,软键盘之间切换时,输入条的位置根本就没有变,所以体验非常好。

RootView高度变化问题

这个高度具体值并不是一定不变的,如部分手机底部的虚拟导航条可以显示,可以隐藏。
- 监听GlobalLayoutListener,当RootView高度变化时,重新设置顶层View高度。

参考

一牛人写的巨NICE的实例,没有会比它更好的了!快来STAR吧!
https://github.com/cpoopc/SmoothEmotionKeyBoard

你可能感兴趣的:(android)