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
我在 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