BottomNavigationView横屏模式下重叠异常求助
方法1:添加底部内边距+强化约束
给Fragment容器添加BottomNavigationView标准高度的底部内边距,配合原有约束形成双重保障,避免切换时内容被遮挡:
<fragment android:id="@+id/nav_host_fragment_activity_main" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="0dp" android:paddingBottom="@dimen/design_bottom_navigation_height" <!-- 新增内边距 --> app:defaultNavHost="true" app:layout_constraintBottom_toTopOf="@id/nav_view" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:layout_constraintTop_toTopOf="parent" app:navGraph="@navigation/mobile_navigation" tools:ignore="FragmentTagUsage" />
@dimen/design_bottom_navigation_height是Material Design库内置的BottomNavigationView标准高度,无需自定义直接使用。
方法2:监听配置变化重置约束
若上述方法无效,可通过监听横竖屏切换事件手动重置布局约束:
- 在AndroidManifest.xml中给目标Activity添加配置监听:
<activity android:name=".MainActivity" android:configChanges="orientation|screenSize|smallestScreenSize"> <!-- 其他属性保留 --> </activity>
- 在Activity代码中重写配置变化方法:
@Override public void onConfigurationChanged(@NonNull Configuration newConfig) { super.onConfigurationChanged(newConfig); View fragmentContainer = findViewById(R.id.nav_host_fragment_activity_main); BottomNavigationView navView = findViewById(R.id.nav_view); ConstraintLayout.LayoutParams params = (ConstraintLayout.LayoutParams) fragmentContainer.getLayoutParams(); params.bottomToTop = navView.getId(); fragmentContainer.setLayoutParams(params); }
方法3:固定BottomNavigationView高度
将BottomNavigationView的高度设为标准固定值,避免横竖屏切换时高度波动导致约束失效:
<com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="@dimen/design_bottom_navigation_height" <!-- 替换wrap_content --> android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="@color/fillColorDark" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintEnd_toEndOf="parent" app:menu="@menu/bottom_nav_menu" app:itemIconTint="@color/bottom_navigation_color" app:itemTextColor="@color/bottom_navigation_color" app:labelVisibilityMode="labeled"/>
内容的提问来源于stack exchange,提问作者Marine Droit
相关产品推荐
相关产品推荐

