Android中是否可通过代码动态调整windowSoftInputMode解决输入框被键盘遮挡问题
Android软键盘遮挡页面解决方案

修复方案
- 修正
AndroidManifest.xml中windowSoftInputMode配置
优先使用adjustResize模式,配置示例如下:
adjustResize会让Activity根布局重新测量高度,为软键盘预留显示空间,避免内容被遮挡;不要单独使用adjustPan模式,该模式会直接平移整个页面,容易导致顶部标题栏被移出可视区域。<activity android:name=".YourTargetActivity" android:windowSoftInputMode="adjustResize|stateAlwaysHidden" /> - 修复沉浸式/透明状态栏场景下adjustResize失效问题
如果页面开启了沉浸式状态栏、透明导航栏效果,adjustResize默认会失效,需要给根布局添加如下属性:
如果你使用AndroidX库,还可以通过WindowInsetsCompat监听软键盘高度变化,动态给内容区域添加底部内边距,适配软键盘弹出高度:android:fitsSystemWindows="true"ViewCompat.setOnApplyWindowInsetsListener(rootView) { view, insets -> val keyboardHeight = insets.getInsets(WindowInsetsCompat.Type.ime()).bottom view.setPadding(0, 0, 0, keyboardHeight) insets } - 适配可滚动页面的输入框可见性
如果页面内容放在ScrollView或NestedScrollView中,可给输入框添加焦点监听,当输入框获取焦点时自动滚动到可视区域:editText.setOnFocusChangeListener { _, hasFocus -> if (hasFocus) { scrollView.smoothScrollTo(0, editText.bottom) } } - 处理底部固定布局挤占空间问题
如果页面底部有固定悬浮的导航栏、操作按钮布局,软键盘弹出时该布局会被顶到软键盘上方,挤占内容区域空间,可根据业务需求选择:- 将底部固定布局移入ScrollView内部,随页面内容滚动
- 监听软键盘弹出状态,软键盘弹出时隐藏底部布局,关闭后再恢复显示
内容的提问来源于stack exchange,提问作者Mahbubul Alam Shihab
相关产品推荐
相关产品推荐

