ConstraintLayout 没有填满整个屏幕

ConstraintLayout not filling whole screen

我在 NestedScrollView 里面有 ConstraintLayout。 如果我不使用 NestedScrollView 来包装 ConstraintLayout 那么 ConstraintLayout 会占据整个屏幕区域,但是一旦我用 NestedScrollView 包装它,ConstraintLayout包装其视图并仅采用包装的 space.

但是,我需要 ConstraintLayout 与其父 NestedScrollView 保持一致或至少屏幕高度。

对我来说,我在 ViewPager2 中有膨胀的片段。当 ConstraintLayout 包装其内容视图时,我无法在运行时看到 ViewPager2 中的片段。

如果我删除 NestedScrollView,一切正常,我能够正确地看到所有片段。

这是我的布局代码。

<?xml version="1.0" encoding="utf-8"?>
<androidx.core.widget.NestedScrollView 
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:app="http://schemas.android.com/apk/res-auto">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="16dp">
    
    <TextView
        android:id="@+id/textView"
        android:layout_width="0dp"
        android:text="Sample Text"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>
    
    <com.google.android.material.tabs.TabLayout
        android:id="@+id/tabLayout"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        app:tabGravity="fill"
        android:layout_marginTop="32dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/textView">
        
        <com.google.android.material.tabs.TabItem
            android:id="@+id/first"
            android:text="First"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <com.google.android.material.tabs.TabItem
            android:id="@+id/second"
            android:text="Second"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
        <com.google.android.material.tabs.TabItem
            android:id="@+id/third"
            android:text="Third"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"/>
    </com.google.android.material.tabs.TabLayout>
    
    <androidx.viewpager2.widget.ViewPager2
        android:layout_width="0dp"
        android:layout_height="0dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintTop_toBottomOf="@id/tabLayout"
        app:layout_constraintBottom_toBottomOf="parent"/>
    </androidx.constraintlayout.widget.ConstraintLayout>
</androidx.core.widget.NestedScrollView>

我有一些图片。

如有任何帮助,我们将不胜感激。 谢谢

android:fillViewport="true" 帮助使碎片膨胀,这意味着我能够在 运行 时看到碎片。但是,碎片有不同的高度。因此,另一个问题是 ViewPager 为所有片段分配了相同的高度。

最后,在每个片段的 onResume 方法上,我需要调用 requestLayout()。 解决了片段高度不同的问题。

override fun onResume() {
   super.onResume()
   binding.root.requestLayout()
}

Link 到答案:Answer