滚动视图内的Android约束布局高度无效

Posted

技术标签:

【中文标题】滚动视图内的Android约束布局高度无效【英文标题】:Android Constraint Layout height inside scrollview have no effect 【发布时间】:2020-07-25 08:26:38 【问题描述】:

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

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

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

    <ScrollView
        android:layout_
        android:layout_ >

        <RelativeLayout
            android:layout_
            android:background="#FFC0CB"
            android:layout_ >

            <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_
                android:layout_
                android:layout_marginTop="301dp"
                android:text="long text" />
        </RelativeLayout>
    </ScrollView>

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

有人能解释一下为什么约束布局会给我这种奇怪的行为吗? 按照Differences between ConstraintLayout and RelativeLayout的说法,约束布局“兼具Relative Layout和Linear layout的双重力量”,应该可以做到relative layout所能做到的。

【问题讨论】:

你想达到什么目的? 我希望有人让约束布局的高度生效并解释为什么约束布局给我这种奇怪的行为。我展示的例子只是为了给你一个视觉效果。 【参考方案1】:

试试这个:

<ScrollView android:layout_
android:layout_>

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

    <TextView
        android:id="@+id/new_realm_message"
        android:layout_
        android:layout_
        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>

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

【讨论】:

是的问题解决了,应用最小高度使约束布局高度生效。谢谢 @BabyishTank 很高兴为您提供帮助。

以上是关于滚动视图内的Android约束布局高度无效的主要内容,如果未能解决你的问题,请参考以下文章

UIScrollView 不能使用自动布局和动态约束滚动

滚动视图不在自动布局 xcode 6.4 中滚动

滚动视图内的约束

滚动视图中的约束布局

使用约束布局或android中的任何其他方式进行垂直滚动的粘性视图

相对布局内的列表视图和滚动视图不覆盖屏幕