Android ScrollView内部的ConstraintLayout无法保留约束

Android ScrollView内部的ConstraintLayout无法保留约束,android,android-constraintlayout,Android,Android Constraintlayout,伙计们,我需要使我的ConstraintLayout可以滚动,所以我将它放在ScrollView中,如下所示: <?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" android:layout_

伙计们,我需要使我的
ConstraintLayout
可以滚动,所以我将它放在
ScrollView
中,如下所示:

<?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"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:fillViewport="true"
    android:overScrollMode="never">
    <android.support.constraint.ConstraintLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <ImageView
            android:id="@+id/img"
            android:layout_margin="64dp"
            android:layout_width="0dp"
            android:layout_height="0dp"
            android:scaleType="fitXY"
            app:srcCompat="@drawable/avd"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="parent"
            app:layout_constraintBottom_toTopOf="@id/btn"
            app:layout_constraintDimensionRatio="1:1"
            app:layout_constraintHeight_min="64dp"
            app:layout_constraintHeight_max="256dp"/>
        <Button
            android:id="@+id/btn"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="button"
            app:layout_constraintTop_toBottomOf="@id/img"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintBottom_toBottomOf="parent"/>
    </android.support.constraint.ConstraintLayout>
</ScrollView>

但问题是,我喜欢在所有约束都达到其最小大小时滚动布局(意味着所有控件都已达到其指定的边距,布局不能再变小)。但是当
ScrollView
需要显示滚动时,它为
ConstraintLayout
的高度指定了一个非常大的尺寸,所以我的布局可以扩展到最大可能的尺寸。如果你在纵向和横向中尝试这种布局,你会注意到它是如何变化的


我想知道是否有任何方法可以在所有约束都达到其最小大小时开始滚动。你知道我该怎么做吗?

就我看到的你的样品而言,这可能是个问题。在纵向模式下,一切正常-无需滚动。在横向视图中,图像放大到需要滚动布局的程度。这是因为图像的宽度是
0dp
,并且限制在父图像的开始/结束处。比例为1:1,因此高度扩展到足以将其他项目推离屏幕,因此需要滚动。如果将图像的最大宽度限制为较小的值,则滚动的必要性会降低。@Cheticamp我自己也注意到了这一点,但我认为当图像大小为64dp时出现横向滚动更符合逻辑。为什么图像应该升级到最大256dp?若将“最大高度约束”(max height constraint)设置为例如96dp,您将注意到差异。您将看到,整个布局约束迫使图像大小变小,并且不会出现滚动条。但在我们需要显示滚动条的情况下,似乎没有应用高度限制,
ConstraitLayout
采用最大可能的高度。虽然它可以再次将图像缩小到64dp,并且不再需要滚动。不确定您到底想做什么。尝试在图像视图上设置
app:layout\u constraintDimensionRatio=“W,1:1”
以根据宽度进行约束,这样高度就不会膨胀。@Cheticamp哦,谢谢!所以我的问题是
W
character.:)非常感谢。你知道为什么我用的是1:1的尺寸,而不是比特定的尺寸小吗?因为如果我删除minHeight约束并使用
1:1
Image变得更小…@Cheticamp,我只想在我的
ConstraintLayout
无法获得更小的高度时看到滚动条。这可能是我看到的示例的问题。在纵向模式下,一切正常-无需滚动。在横向视图中,图像放大到需要滚动布局的程度。这是因为图像的宽度是
0dp
,并且限制在父图像的开始/结束处。比例为1:1,因此高度扩展到足以将其他项目推离屏幕,因此需要滚动。如果将图像的最大宽度限制为较小的值,则滚动的必要性会降低。@Cheticamp我自己也注意到了这一点,但我认为当图像大小为64dp时出现横向滚动更符合逻辑。为什么图像应该升级到最大256dp?若将“最大高度约束”(max height constraint)设置为例如96dp,您将注意到差异。您将看到,整个布局约束迫使图像大小变小,并且不会出现滚动条。但在我们需要显示滚动条的情况下,似乎没有应用高度限制,
ConstraitLayout
采用最大可能的高度。虽然它可以再次将图像缩小到64dp,并且不再需要滚动。不确定您到底想做什么。尝试在图像视图上设置
app:layout\u constraintDimensionRatio=“W,1:1”
以根据宽度进行约束,这样高度就不会膨胀。@Cheticamp哦,谢谢!所以我的问题是
W
character.:)非常感谢。你知道为什么我用的是1:1的尺寸,而不是比特定的尺寸小吗?因为如果我删除minHeight约束并使用
1:1
图像通常会变小…@Cheticamp,我只想在我的
ConstraintLayout
无法获得更小的高度时看到滚动条。