因为是监控键盘状态的改变就不上效果图了
按照规矩先吧传送门搞好GitHub - GitHubToLiao/KeyboardListenerDemo
在我们平常开发过程中很多地方都需要监控键盘的变化以及获取键盘的高度,谷歌提供的API中并没有提供有关键盘状态变化以及获取键盘高度的相关监听,但是我们可以通过别的方式得到我们想要的东西,API是死的人是活的。
这里我就来说说我实现的思路
我们都知道在Android我们是可以拿到屏幕中可视高度的,如果我们拿到屏幕的高度然后减去可视区域的高度不就是键盘的高度了。 拿到键盘的高度,下来就是要监控什么时候键盘弹起来,什么时候关闭。这样我们就可一将获取键盘状态变化分解成下面三步了。
一、布局变化监听
OnGlobalLayoutListener 是ViewTreeObserver的内部类,当一个视图树的布局发生改变时,可以被ViewTreeObserver监听到,在视图树的全局事件改变时得到通知。ViewTreeObserver不能直接实例化,而是通过getViewTreeObserver()获得。
这里需要注意的是当我们不在使用监听的时候需要调用removeOnGlobalLayoutListener对监听进行移除,不然容易发生内存泄露
二、获取可视区域大小,两行代码没什么可说的
Rect rect = new Rect();
contentView.getWindowVisibleDisplayFrame(rect);//获取布局的可视区域
三、计算键盘高度
int keyboardHeight = contentView.getHeight() - (rect.bottom - rect.top);
解释下我们通过屏幕的高度减去可视区域的高度得到的就是键盘的高度,当得到的高度为0时代表键盘关闭,当高度大于0代表键盘打开
四、传送门