Android开发中Fragment为何无法延伸至全屏,被底部导航栏遮挡?
修复方案
问题由两处配置错误导致,调整如下即可解决:
- 删除根ConstraintLayout的
android:paddingTop="?attr/actionBarSize"属性:该属性给整个父布局添加了顶部内边距,会强制所有子布局下移一个ActionBar高度,导致Fragment无法延伸到屏幕顶部。 - 将
NavHostFragment的android:layout_height属性从match_parent改为0dp:ConstraintLayout中,子View如果同时设置了上下双向约束,必须使用0dp(对应match_constraint)才能让约束生效,否则布局会忽略底部约束直接填满父布局,导致底部被导航栏遮挡。
修改后的完整XML代码如下:
<?xml version="1.0" encoding="utf-8"?> <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/container" android:layout_width="match_parent" android:layout_height="match_parent"> <com.google.android.material.bottomnavigation.BottomNavigationView android:id="@+id/nav_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_marginStart="0dp" android:layout_marginEnd="0dp" android:background="?android:attr/windowBackground" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintLeft_toLeftOf="parent" app:layout_constraintRight_toRightOf="parent" app:menu="@menu/bottom_nav_menu" /> <fragment android:id="@+id/nav_host_fragment_activity_main" android:name="androidx.navigation.fragment.NavHostFragment" android:layout_width="match_parent" android:layout_height="0dp" 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" /> </androidx.constraintlayout.widget.ConstraintLayout>
内容的提问来源于stack exchange,提问作者ChocolateChapta
相关产品推荐
相关产品推荐

