这个问题我在开发过程中反复遇到,网上找的资料多数是有两种解决方法
1.在AndroidManifest.xml里面配置adjustResize再配合页面监听软键盘的打开和收起,控制页面滑动来解决;我试了过后发现,这种方法虽然可以解决收起键盘后的空白,但是打开键盘时,软键盘上方会出现一片空白,遮住页面内容,效果不理想;
2.配置adjustPan,这种方法如果是在当前页面打开软键盘的情况跳转到新页面,再返回。这时之前软键盘的位置会呈现空白。也不理想
最后,我试了一个方法基本解决了留白的问题,以下是我的处理方式,希望对你有帮助:
在AndroidManifest.xml里面配置stateAlwaysVisible|adjustPan这两个参数,并且监听软键盘的收起,在收起的时候清除输入框的焦点。这样就可以在打开软键盘的情况避免页面跳转在再返回,导致页面留白。
<activity android:name=".activity.SendWriteActivity" android:windowSoftInputMode="stateAlwaysVisible|adjustPan" />
注意:要收起的时候清除输入框的焦点
// 获取根布局视图 val rootView = findViewById<View>(android.R.id.content) // 添加布局变化监听器 rootView.viewTreeObserver.addOnGlobalLayoutListener { // 获取可见区域的矩形 val r = Rect() rootView.getWindowVisibleDisplayFrame(r) // 获取屏幕高度 val screenHeight = rootView.rootView.height // 计算键盘高度 val keyboardHeight: Int = screenHeight - r.bottom // 判断键盘是否收起 if (keyboardHeight == 0) { // 键盘已收起 // 在此处执行相应的操作,清除焦点 mmp_right_tv.clearFocus() } else { // 键盘弹出中 // 在此处执行相应的操作 } }
另外:我的根部局是用了ScrollView。