Android软键盘弹出时Fragment上移 如何固定Fragment不被顶起
问题原因
你使用的SOFT_INPUT_STATE_HIDDEN参数仅用于控制软键盘的初始显示状态,和软键盘弹出时的布局调整逻辑完全无关,所以不会生效。
解决方法
你需要将软输入调整模式改为SOFT_INPUT_ADJUST_NOTHING,该模式下系统不会调整Activity布局,软键盘会直接覆盖在现有页面上方。
方法1:在Fragment中动态设置(仅当前页面生效)
在onViewCreated方法中替换为以下代码:
// 如果需要同时保持初始状态软键盘隐藏,两个参数用|拼接即可 this@MainFragment.requireActivity().window.setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_STATE_HIDDEN or WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING )
如果该Fragment不是所属Activity的唯一页面,建议在onDestroyView中改回原有模式,避免影响其他页面:
override fun onDestroyView() { requireActivity().window.setSoftInputMode( // 替换为Activity原来的软输入模式,默认一般为SOFT_INPUT_ADJUST_RESIZE WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE ) super.onDestroyView() }
方法2:在Manifest中全局设置(整个Activity生效)
如果所属Activity的所有页面都需要这个逻辑,直接在AndroidManifest.xml对应的Activity节点添加属性即可:
<activity android:name=".你的Activity名称" android:windowSoftInputMode="adjustNothing|stateHidden" />
注意事项
检查Activity根布局是否设置了android:fitsSystemWindows="true",如果有该属性请改为false,否则仍可能出现布局上移的问题。
内容的提问来源于stack exchange,提问作者Tom Darious
相关产品推荐
相关产品推荐

