做Android开发很多年了,写博客写的很少,主要是不知道写什么,也不知道大家爱看什么?在不知道大家的爱好之前,我就写一些项目里面比较常用的需求。如果大家在看的过程当中有任何不懂的可以提出来,我会一一的给大家回答,也希望广大网友们参与进来,我们一起在安卓的开发海洋里面行驶。
今天我要跟大家分享的是安卓开发当中怎么动态获取软键盘的高度、软键盘是否打开?以及关闭的监听,我相信这个问题在做安卓开发比较常见的一个需求了,比如聊天系统当用户需要跟另外一个用户沟通的时候,需要打开聊天窗口进行文字输入,如果默认什么都不做的时候,打开输入法的那一瞬间界面会闪烁,主要原因是因为软键盘弹出的高度跟当前聊天界面的高度不一致导致的闪烁。还有表情跟输入法之间来回切换的时候,都会引起高度不一致闪烁。如果我们知道软键盘什么时候打开?什么时候关闭,和软键盘的高度,我们就可以在软键盘打开的时候动态设置一下表情的高度跟输入法的高度一致就不会有闪烁问题了。
上面只是一个常见的需求,还有一些会根据软键盘的打开或则关闭来做一些隐藏或则显示布局的需求,这里就不一一列举了,接下来我就说说怎么获取高度、是否显示隐藏的方法。
第一个需要介绍的ViewTreeObserver.OnGlobalLayoutListener
ViewTreeObserver 是一个注册监听视图树的观察者(observer),会监听视图树发生全局变化时发出的通知。这个全局事件包括整个树的布局,从绘画过程开始,触摸模式的改变等等。
当前窗口布局发生改变的时候就会回调「onGlobalLayout」方法。软键盘打开或则关闭都会影响当前布局的高度,所以我们就监听当前窗口的布局发生改变来做高度判断,从而就知道了键盘的打开或则关闭的需求。
「getWindowVisibleDisplayFrame」方法介绍
该方法获取当前窗口布局整体可见显示大小,有了这个方法就能够知道控件的显示位置大小。
核心的代码就是这几句,直接上代码太乱,就上的图片了。接下来使用就很简单了,如下图:
这个需求基本就完事了,大家可一个测试一下,基本没有问题。
网友评论