ScrollView 中 ConstraintLayout 中 Barrier 的不良行为

Bad behaviour of Barrier in ConstraintLayout in ScrollView

我使用的是 ConstraintLayout 的最新版本 1.1.0-beta4,当 Barrier ConstraintLayoutScrollView 内时,我遇到了问题。这是布局:

<?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"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    >

    <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="wrap_content"
        tools:context="rs.agilesolutions.anothertesttodelete.MainActivity"
        >

        <Button
            android:id="@+id/button"
            android:layout_width="100dp"
            android:layout_height="100dp"
            android:layout_marginTop="8dp"
            android:text="Button"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="parent"/>

        <TextView
            android:id="@+id/txt1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_margin="8dp"
            android:text="Lorem"
            android:textSize="40sp"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintTop_toBottomOf="@id/button"
            />

        <TextView
            android:id="@+id/txt2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginTop="8dp"
            android:text="Ipsum"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/button"/>

        <android.support.constraint.Barrier
            android:id="@+id/barrier"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="bottom"
            app:constraint_referenced_ids="txt1,txt2"
            />

        <TextView
            android:id="@+id/txtResult"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="8dp"
            android:text="UNDER BARRIER"
            app:layout_constraintLeft_toLeftOf="parent"
            app:layout_constraintRight_toRightOf="parent"
            app:layout_constraintTop_toTopOf="@+id/barrier"/>

        <EditText
            android:id="@+id/editText"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="#00FF00"
            android:ems="10"
            android:hint="Name"
            android:inputType="textPersonName"
            android:text="Name"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/txtResult"
            />

        <EditText
            android:id="@+id/editText2"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="8dp"
            android:layout_marginStart="8dp"
            android:layout_marginTop="8dp"
            android:background="#FF0000"
            android:ems="10"
            android:hint="password"
            android:inputType="textPassword"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@+id/editText"
            />
    </android.support.constraint.ConstraintLayout>
</ScrollView>

屏障的方向设置为 bottom 两个视图(txt1txt2)。它应该是这样的:

,但它看起来像这样:

首先,在我的 real 应用程序中,我有很多视图,这就是需要 ScrollView 的原因。

其次,通过按下按钮,出于演示原因,我更改了 txt(带有 Lorem 文本的可见性),从而测试较低的视图是否行为正确。

第三,显然,因此,ConstraintLayout没有考虑到在那些引用了障碍的视图下,它可以传播到足以包含其他内容,而是只是填充已经为布局创建了 space,其余视图来自底部。

这是 ConstraintLayout 实现中的错误吗?

除了我在代码中针对这种情况更改约束并且不管视图的可见性如何,我是否有任何其他选择,我相应地设置剩余视图的位置?

这是版本 1.1.0-beta4 中的错误。我将版本降低到 beta3,一切正常。