隐藏系统导航栏后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
相关产品推荐
相关产品推荐

