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

不修改adjustResize时,阻止单个Fragment底部按钮随软键盘上移的方法

解决方案:在目标Fragment中动态修改窗口软输入模式

要实现仅在特定Fragment中阻止底部按钮随软键盘上移,同时保留Activity原有的adjustResize行为,你可以通过动态修改Activity的窗口软输入模式来实现,具体步骤如下:

1. 保存原有的软输入模式

在Fragment中先记录Activity初始的windowSoftInputMode值,后续用于恢复:

private int originalSoftInputMode;

@Override
public void onActivityCreated(@Nullable Bundle savedInstanceState) {
    super.onActivityCreated(savedInstanceState);
    if (getActivity() != null) {
        // 保存Activity原本的软输入模式
        originalSoftInputMode = getActivity().getWindow().getAttributes().softInputMode;
    }
}

2. 在Fragment活跃时切换为不调整布局的模式

当目标Fragment处于可见/活跃状态时,将窗口软输入模式改为adjustPan(兼容所有Android版本)或adjustNothing(API 30+):

@Override
public void onResume() {
    super.onResume();
    if (getActivity() != null) {
        // 使用SOFT_INPUT_ADJUST_PAN:软键盘弹出时平移布局,底部按钮不会被顶起
        getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        
        // 如果你的应用只兼容API 30及以上,也可以用SOFT_INPUT_ADJUST_NOTHING(完全不调整布局)
        // getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
    }
}

3. 在Fragment离开时恢复原模式

当Fragment不再活跃时,把窗口软输入模式恢复为Activity初始值,确保其他Fragment的正常行为:

@Override
public void onPause() {
    super.onPause();
    if (getActivity() != null) {
        getActivity().getWindow().setSoftInputMode(originalSoftInputMode);
    }
}

4. 处理Fragment隐藏/显示的场景(可选)

如果你是通过hide()/show()方法切换Fragment,还需要重写onHiddenChanged方法来同步模式切换:

@Override
public void onHiddenChanged(boolean hidden) {
    super.onHiddenChanged(hidden);
    if (getActivity() != null) {
        if (!hidden) {
            // Fragment显示时设置为adjustPan
            getActivity().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
        } else {
            // Fragment隐藏时恢复原模式
            getActivity().getWindow().setSoftInputMode(originalSoftInputMode);
        }
    }
}

原理说明

  • adjustResize:Activity会调整布局大小,让底部按钮随软键盘上移,这是你原本的全局设置。
  • adjustPan:软键盘弹出时,系统会将整个布局向上平移以保证输入框可见,但底部按钮会被软键盘遮挡,不会上移,正好满足你的需求。
  • 通过在Fragment生命周期中动态切换模式,既能实现特定Fragment的特殊需求,又不会影响其他Fragment的原有逻辑。

内容的提问来源于stack exchange,提问作者Evgeniy Rechkov

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 09:52:32