前言:
android上获取对软键盘的处理一直都是个头疼的问题,基本都是通过对view设置addOnGlobalLayoutListener来进行监听,但这个监听有很多问题,比如调用任意view的layout此函数就会进行回调,而且计算高度的时候经常会因为一些状态栏,导航栏的显示造成软键盘高度计算错误的问题。最终这个问题在android 11上得到了解决,可以通过调用setWindowInsetsAnimationCallback设置对系统UI的显示隐藏进行监听。
实现效果:
导入依赖:
由于setWindowInsetsAnimationCallback方法在android 11上才出现,对于低版本手机我们该如何处理,google对此进行了兼容,我们需要在项目中添加androidX core的最新版,就可以调用向下兼容的api
implementation "androidx.core:core:1.5.0-beta02"
创建callback:
首先我们创建类RootViewDeferringInsetsCallback继承自WindowInsetAnimationCompat.Callback同时实现OnAppWindowInsetsListener。
onApplyWindowInsets(此方法属于OnAppWindowInsetsListener)
在此方法中,我们获取到实时变化的windowIn