Android 约束布局高度在滚动视图内没有效果

Get*_*ood 5 xml android scrollview android-relativelayout android-constraintlayout

在Android中,我想实现屏幕上固定高度的滚动视图,并且里面的内容也有固定的高度。

滚动视图高度为300dp,直接子级(相对布局)为500dp,文本视图距顶部的距离为301dp。这意味着在我到达文本视图后,还有 200dp 的底部空间供我从相对布局高度滚动。

在此输入图像描述

我设法使用下面的 XML 创建所需的效果。

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="300dp" >

        <RelativeLayout
            android:layout_width="match_parent"
            android:background="#FFC0CB"
            android:layout_height="500dp" >

            <TextView
                app:layout_constraintTop_toTopOf="parent"
                app:layout_constraintLeft_toLeftOf="parent"
                app:layout_constraintRight_toRightOf="parent"
                app:layout_constraintBottom_toBottomOf="parent"
                android:id="@+id/new_realm_message"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="301dp"
                android:text="long text" />
        </RelativeLayout>
    </ScrollView>
Run Code Online (Sandbox Code Playgroud)

但问题是,如果我将相对布局更改为约束布局,现在滚动只会向上滚动到高度为 310dp 的文本视图,而不是显示底部 200dp 的空白空间。

ConstraintLayout 滚动

有人可以解释为什么约束布局给了我这种奇怪的行为吗?根据ConstraintLayout和RelativeLayout的区别,约束布局“兼具Relative布局和Linear布局的双重力量”,它应该能够实现相对布局能够实现的功能。

小智 6

尝试这个:

<ScrollView android:layout_width="match_parent"
android:layout_height="300dp">

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:background="#FFC0CB"
    android:minHeight="500dp"
    android:layout_height="500dp" >

    <TextView
        android:id="@+id/new_realm_message"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="301dp"
        android:text="long text"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent"
        app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>
Run Code Online (Sandbox Code Playgroud)

约束布局中似乎存在错误,或者布局高度无法应用于滚动视图中的约束布局,但您可以在约束布局中使用最小高度属性。