ConstrainLayout:如何将View的顶部约束到最大高度视图的底部?

Jia*_*Liu 1 android android-layout android-constraintlayout

我目前正在尝试ConstraintLayout我们的项目.

我想要实现的布局可以简化如下:

布局顶部有两个视图(比如TopA和TopB),还有另一个视图(比如BottomC)位于它们下面.

TopB具有可变高度,在不同情况下,TopB的高度可能比TopA更大或更小.

我的问题是:如何将BottomC约束到具有较大高度的顶视图的底部,以便BottomC不会被具有较大高度的视图重叠.(下面的截图)

我可以通过将TopA和TopB添加到额外ViewGroup(LinearLayout例如)并将BottomC约束到底部来实现ViewGroup.但是有可能在不引入额外层的情况下实现这一目标ViewGroup吗?

在此输入图像描述 在此输入图像描述

Jia*_*Liu 6

发布问题3分钟后,我刚发现最近发布的1.1.x版本ConstrainLayout有一个新功能Barrier,并且ConstrainLayout已经更新了官方培训文档以介绍它.

这正是我所寻找的.希望这可以帮助像我这样的人.

实际的布局代码如下所示(注意android.support.constraint.Barrier节点):

<android.support.constraint.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <ImageView
        android:id="@+id/topA"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="16dp"
        android:layout_marginTop="16dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@mipmap/ic_launcher"/>

    <TextView
        android:id="@+id/topB"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="24dp"
        android:text="Text"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.75"
        app:layout_constraintStart_toEndOf="@+id/topA"
        app:layout_constraintTop_toTopOf="@+id/topA"
        />

    <android.support.constraint.Barrier
        android:id="@+id/barrier4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierDirection="bottom"
        app:constraint_referenced_ids="topA,topB"
        tools:layout_editor_absoluteY="16dp"/>

    <ProgressBar
        android:id="@+id/progressBar"
        style="?android:attr/progressBarStyle"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginEnd="8dp"
        android:layout_marginStart="8dp"
        android:layout_marginTop="8dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintHorizontal_bias="0.50"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="@+id/barrier4"/>

</android.support.constraint.ConstraintLayout>
Run Code Online (Sandbox Code Playgroud)