前言
安卓环境,输入法的软键盘弹出时默认会改变window大小,但是可以肯定,微信和QQ都不是采用这种策略,一个检测方法:点击微信输入框,然后点击+号按钮弹出抽屉菜单并隐藏软键盘,可以发现这个过程很流畅,就仿佛抽屉原本就在软键盘下方藏着一样,而此过程如果采用adjustResize策略会导致window大小变大,然后抽屉需要scroll出来,会出现一个闪烁。于是可以断定,我们的思路是采用adjustNothing策略——软键盘不改变window大小。
问题
我们需要保证输入框的底边刚好在软键盘上方,于是我们需要想办法获取软键盘实时高度,获得这个高度之后,我们就可以通过scroll父容器或者直接设置输入框的y坐标即可。
思路
软键盘高度没有直接监听办法,我们可以新建一个透明PopupWindow,PopupWindow的软键盘策略采用adjustResize,我们只需监听这个window的高度变化即可。
监听window的高度变化可以通过PopupWindow的contentView.viewTreeObserver.addOnGlobalLayoutListener
实现
Kotlin代码:
class SoftKeyboardHeightDetector(private val activity: Activity, callback: (height: Int) -> Unit<