Android ConstraintLayout在较大屏幕上匹配父级高度,但在较小屏幕上滚动

Android ConstraintLayout在较大屏幕上匹配父级高度,但在较小屏幕上滚动,android,android-layout,android-constraintlayout,Android,Android Layout,Android Constraintlayout,我已经创建了这样的布局 <?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_pa

我已经创建了这样的布局

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

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/top"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="top"
        android:textColor="@color/white"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/middle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/green"
        android:gravity="center"
        android:minHeight="300dp"
        android:padding="10dp"
        android:text="middle"
        android:textColor="@color/white"
        app:layout_constraintBottom_toTopOf="@id/bottom"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/top" />

    <TextView
        android:id="@+id/bottom"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="bottom"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent" />

</android.support.constraint.ConstraintLayout>
它确实像预期的那样在小屏幕上滚动。 但在更大的屏幕上,它在下方留下了空间

如何使布局与屏幕高度匹配,但在小屏幕上仍然可以滚动

尝试将“中间”高度设置为0dp,但这没有帮助

将android:fillViewport=true添加到ScrollView并将middle的高度设置为0dp可以解决空间问题,但也带来了滚动的问题——在小屏幕上,middle正在缩小,而不是滚动


将中间文本视图的高度设置为0dp以匹配约束以填充可用空间,并将android:fillViewport=true属性添加到ScrollView以拉伸其内容以填充视口

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/top"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/gray"
            android:gravity="center"
            android:padding="10dp"
            android:text="top"
            android:textColor="@color/white"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/middle"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@color/green"
            android:gravity="center"
            android:padding="10dp"
            android:text="middle"
            android:textColor="@color/white"
            app:layout_constraintHeight_min="300dp"
            app:layout_constraintBottom_toTopOf="@id/bottom"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/top" />

        <TextView
            android:id="@+id/bottom"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/gray"
            android:gravity="center"
            android:padding="10dp"
            android:text="bottom"
            android:textColor="@color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </android.support.constraint.ConstraintLayout>
</ScrollView>

将中间文本视图的高度设置为0dp以匹配约束以填充可用空间,并将android:fillViewport=true属性添加到ScrollView以拉伸其内容以填充视口

<?xml version="1.0" encoding="utf-8"?>
<ScrollView
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:fillViewport="true">

    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">

        <TextView
            android:id="@+id/top"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/gray"
            android:gravity="center"
            android:padding="10dp"
            android:text="top"
            android:textColor="@color/white"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toTopOf="parent" />

        <TextView
            android:id="@+id/middle"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:background="@color/green"
            android:gravity="center"
            android:padding="10dp"
            android:text="middle"
            android:textColor="@color/white"
            app:layout_constraintHeight_min="300dp"
            app:layout_constraintBottom_toTopOf="@id/bottom"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/top" />

        <TextView
            android:id="@+id/bottom"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:background="@color/gray"
            android:gravity="center"
            android:padding="10dp"
            android:text="bottom"
            android:textColor="@color/white"
            app:layout_constraintBottom_toBottomOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent" />

    </android.support.constraint.ConstraintLayout>
</ScrollView>
解决方案是使用app:layout\u constraintheighth\u min而不是android:minHeight

所以这个布局是正确的

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/top"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="top"
        android:textColor="@color/white"
        app:layout_constraintBottom_toTopOf="@id/middle"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="spread_inside" />

    <TextView
        android:id="@+id/middle"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/green"
        android:gravity="center"
        android:padding="10dp"
        android:text="middle"
        android:textColor="@color/white"
        app:layout_constraintBottom_toTopOf="@id/bottom"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_min="300dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/top" />

    <TextView
        android:id="@+id/bottom"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="bottom"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/middle" />

</android.support.constraint.ConstraintLayout>
解决方案是使用app:layout\u constraintheighth\u min而不是android:minHeight

所以这个布局是正确的

<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">

<android.support.constraint.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content">

    <TextView
        android:id="@+id/top"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="top"
        android:textColor="@color/white"
        app:layout_constraintBottom_toTopOf="@id/middle"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:layout_constraintVertical_chainStyle="spread_inside" />

    <TextView
        android:id="@+id/middle"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:background="@color/green"
        android:gravity="center"
        android:padding="10dp"
        android:text="middle"
        android:textColor="@color/white"
        app:layout_constraintBottom_toTopOf="@id/bottom"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHeight_min="300dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/top" />

    <TextView
        android:id="@+id/bottom"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:background="@color/gray"
        android:gravity="center"
        android:padding="10dp"
        android:text="bottom"
        android:textColor="@color/white"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/middle" />

</android.support.constraint.ConstraintLayout>

我已经更新了帖子。简而言之,它确实解决了空间问题,但也带来了滚动问题。更新了我的答案。将android:minHeight=300dp更改为app:layout\u constraintHeight\u min=300dp。我已经更新了帖子。简而言之,它确实解决了空间问题,但也带来了滚动问题。更新了我的答案。将android:minHeight=300dp更改为app:layout\u constraintHeight\u min=300dp。