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

隐藏系统导航栏后BottomNavigationView底部多余空白如何移除?

底部导航栏多余空白修复方案

问题根因

你遇到的空白是Android系统自动适配导航栏窗口Insets产生的底部padding,隐藏系统导航栏后该适配逻辑没有自动关闭,导致多余空白预留。

修复方案

方案1:布局属性直接修改

给BottomNavigationView添加如下两个属性即可关闭系统默认的底部Insets适配:

android:fitsSystemWindows="false"
app:paddingBottomSystemWindowInsets="none"

修改后的完整布局代码如下:

<com.google.android.material.bottomnavigation.BottomNavigationView
    android:id="@+id/bottomNavigationView"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:fitsSystemWindows="false"
    app:paddingBottomSystemWindowInsets="none"
    app:menu="@menu/bottom_navigation"
    app:itemIconTint="@color/teal_200"
    app:itemTextColor="@color/teal_200"
    app:layout_constraintTop_toBottomOf="@+id/fragment_container"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />

方案2:代码动态移除padding

如果布局修改不生效,可以在Activity初始化BottomNavigationView后添加如下代码:

Kotlin版本

// 关闭窗口Insets适配
bottomNavigationView.setOnApplyWindowInsetsListener { _, insets -> insets }
// 手动重置底部padding为0
bottomNavigationView.setPadding(
    bottomNavigationView.paddingLeft,
    bottomNavigationView.paddingTop,
    bottomNavigationView.paddingRight,
    0
)

Java版本

// 关闭窗口Insets适配
bottomNavigationView.setOnApplyWindowInsetsListener((view, insets) -> insets);
// 手动重置底部padding为0
bottomNavigationView.setPadding(
    bottomNavigationView.getPaddingLeft(),
    bottomNavigationView.getPaddingTop(),
    bottomNavigationView.getPaddingRight(),
    0
);

方案3:根布局检查

如果上述方案都无效,检查Activity的根布局是否设置了android:fitsSystemWindows="true",可以将其改为false,或者给根布局也添加app:paddingBottomSystemWindowInsets="none"属性即可。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.26 06:36:05