You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.19 15:23:12