android - 约束布局 : How to constrain a View's top to the bottom of the view of largest height?

标签 android android-layout android-constraintlayout

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

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

在布局的顶部有两个 View (比如 TopA 和 TopB),在它们下面有另一个 View (比如 BottomC)。

TopB 的高度是可变的,在不同的情况下,TopB 的高度可能比 TopA 的高或低。

我的问题是:如何将BottomC限制在高度较大的Top View 的底部,使BottomC不会与高度较大的 View 重叠。 (下面附上截图)

我可以通过将 TopA 和 TopB 添加到额外的 ViewGroup(例如 LinearLayout)并将 BottomC 限制在该 ViewGroup 的底部来实现>。但是是否可以在不引入额外的 ViewGroup 层的情况下实现这一目标?

enter image description here enter image description here

最佳答案

问题发布后3分钟,我才发现最近发布的1.1.x版本ConstrainLayout有一个名为 Barrier 的新功能,以及ConstrainLayout的官方培训文档已更新to introduce it .

这正是我要找的。希望这可以帮助像我这样的人。

实际布局代码如下所示(注意 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>

关于android - 约束布局 : How to constrain a View's top to the bottom of the view of largest height?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47120035/

相关文章:

android - 在 ListView 中获取位置

android - 如何制作弯曲的圆形 ScrollView

android - API 26 的文本颜色行为支持库?

Android Dialog Fragment RecyclerView 包装内容但基于约束的最大高度?

android - 根据 JSON 响应添加文本

java - W/OpenGLRenderer : Points are too far apart

android - ListView 和多点触控手势

java - 如何在android的 ListView 中返回点击的阀门?

android - TextView 使用 constraintLayout 离开屏幕

android - 约束布局布局崩溃 : All Children of constraint layout should have ids to use constraint set