mAttachInfo.mTreeObserver.dispatchOnGlobalLayout();
}
当一个 Activity或者是Dialog 这样的 Window对添加的布局完成测量和布局后就会触发这个回调,从这里可以推断键盘弹出和收起的时候一定触发了 Activity 的重新布局
为什么键盘弹出会触发 Activity 的重新布局
Android提供了 windowSoftInputMode这个属性给开发者去配置键盘的状态以及界面该如何适配键盘
// 当前界面不做改变,键盘直接覆盖在界面上,不会重新布局所以不会触发 GlobalLayoutListener 回调
android:windowSoftInputMode=“adjustNothing”
// 改变当前布局的大小来适应键盘,会触发 GlobalLayoutListener 回调,这个配置就非常适合做微信这种 IM 聊天界面
android:windowSoftInputMode=“adjustResize”
// 直接把布局向上顶,会触发 GlobalLayoutListener 回调
android:windowSoftInputMode=“adjustPan”
// 默认值,界面可以滑动会设置成 adjustResize,反之 adjustPan
android:windowSoftInputMode=“adjustUnspecified”
键盘弹起会改变界面布局,所以可以通过上述方式去判断键盘是否弹起
如何判断键盘弹起
键盘弹起会改变当前 Window 的可见区域,那么如果当前可见高度小于原始的高度,我们就判断键盘弹起了
可以通过 View 中的方法获取该 Vi