【问题标题】:ConstraintLayout match parent height on larger screens but scroll on smaller [duplicate]ConstraintLayout 在较大的屏幕上匹配父级高度,但在较小的屏幕上滚动 [重复]
【发布时间】:2018-11-03 00:58:52
【问题描述】:

我已经创建了这样的布局

<?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 并将中间的高度设置为0dp 解决了空间问题,但带来了滚动问题 - 在小屏幕上,中间正在缩小,而不是滚动。

【问题讨论】:

    标签: android android-layout android-constraintlayout


    【解决方案1】:

    将中间TextView 的高度设置为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>
    

    【讨论】:

    • 我已经更新了帖子。简而言之 - 它确实解决了空间问题,但带来了滚动问题。
    • 更新了我的答案。将android:minHeight="300dp" 更改为app:layout_constraintHeight_min="300dp"
    【解决方案2】:

    解决办法是用app:layout_constraintHeight_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>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-08-09
      • 2023-03-12
      • 2022-08-19
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多