android:windowSoftInputMode="adjustResize"在ConstraintLayout中失效求助
解决软键盘遮挡底部EditText的问题
问题根源
你启用了EdgeToEdge.enable(this),该API会修改窗口的系统栏适配逻辑,导致adjustResize的窗口调整行为失效——EdgeToEdge会让布局延伸到系统栏下方,默认的Insets处理仅考虑系统栏,未响应软键盘的IME Insets,使得布局无法感知键盘弹出后的可用空间变化。
解决方案
修改WindowInsets的处理逻辑,让布局同时响应系统栏和软键盘的Insets,确保底部输入栏在键盘弹出时自动上移:
1. 调整MainActivity中的Insets监听代码
替换原ViewCompat.setOnApplyWindowInsetsListener代码块为:
ViewCompat.setOnApplyWindowInsetsListener(findViewById(R.id.main), (v, insets) -> { Insets systemBars = insets.getInsets(WindowInsetsCompat.Type.systemBars()); Insets imeInsets = insets.getInsets(WindowInsetsCompat.Type.ime()); // 同时考虑系统栏和软键盘的底部偏移,取最大值保证输入栏不被遮挡 v.setPadding( systemBars.left, systemBars.top, systemBars.right, Math.max(systemBars.bottom, imeInsets.bottom) ); // 标记Insets已处理,避免重复计算 return insets.consume(WindowInsetsCompat.Type.systemBars() | WindowInsetsCompat.Type.ime()); });
2. 保留Manifest中的配置
确保AndroidManifest.xml的activity标签仍保留以下配置:
android:windowSoftInputMode="adjustResize"
额外说明
- 无需将整个ConstraintLayout包裹进ScrollView,你的原有布局结构(ScrollView仅包裹输出区域,输入栏固定底部)是合理的,只需修复Insets处理即可。
- 如果仍有问题,检查主题
Theme.MyApp是否包含android:windowFullscreen=true或其他会干扰窗口大小调整的属性,这类属性会导致adjustResize失效。
内容的提问来源于stack exchange,提问作者RFSDev
相关产品推荐
相关产品推荐

