Android 保证金不';t在ConstraintLayout中,在没有任何约束的一侧工作

Android 保证金不';t在ConstraintLayout中,在没有任何约束的一侧工作,android,android-constraintlayout,Android,Android Constraintlayout,我在ConstraintLayout中有一个ImageView,其id在下面的XML中是“缩略图”。我想它是对齐左上角的家长和有一个8dp的边缘在底部。但是,不应用底部边距,因为该侧没有约束。我不会将它的底部连接到它的父对象,因为它会居中,这是我不想要的 有什么办法解决这个问题吗?是否希望在提供底部约束时将其与顶部对齐 <androidx.constraintlayout.widget.ConstraintLayout android:layout_width="match_par

我在ConstraintLayout中有一个ImageView,其id在下面的XML中是“缩略图”。我想它是对齐左上角的家长和有一个8dp的边缘在底部。但是,不应用底部边距,因为该侧没有约束。我不会将它的底部连接到它的父对象,因为它会居中,这是我不想要的

有什么办法解决这个问题吗?是否希望在提供底部约束时将其与顶部对齐

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:clickable="true"
    android:focusable="true">

    <androidx.appcompat.widget.AppCompatImageView
        android:id="@+id/thumbnail"
        android:layout_width="56dp"
        android:layout_height="56dp"
        android:layout_marginTop="8dp"
        android:layout_marginBottom="8dp"
        android:scaleType="centerCrop"
        app:layout_constraintDimensionRatio="1:1"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"
        app:srcCompat="@drawable/bg_track_artwork" />

    <TextView
        android:id="@+id/title"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/margin"
        android:text="Title"
        android:textColor="#040404"
        android:textSize="15sp"
        android:textStyle="bold"
        android:typeface="sans"
        app:firstBaselineToTopHeight="32dp"
        app:layout_constraintBottom_toTopOf="@+id/subtitle"
        app:layout_constraintEnd_toStartOf="@+id/itemMenu"
        app:layout_constraintStart_toEndOf="@+id/thumbnail"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/subtitle"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="Subtitle"
        android:textSize="10sp"
        app:firstBaselineToTopHeight="20dp"
        app:layout_constraintEnd_toEndOf="@+id/title"
        app:layout_constraintStart_toStartOf="@+id/title"
        app:layout_constraintTop_toBottomOf="@+id/title" />

    <LinearLayout
        android:id="@+id/itemMenu"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="@dimen/quarter_margin"
        android:orientation="horizontal"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toEndOf="@+id/title"
        app:layout_constraintTop_toTopOf="parent">

        <androidx.appcompat.widget.AppCompatImageView
            android:id="@+id/overflowIcon"
            android:layout_width="@dimen/icon_width"
            android:layout_height="@dimen/icon_height"
            android:padding="@dimen/icon_padding"
            app:srcCompat="@drawable/ic_more"
            app:tint="@color/icon_gray_light" />

    </LinearLayout>

</androidx.constraintlayout.widget.ConstraintLayout>

您可以在父ConstraintLayout上使用底部填充,而不是在ImageView上使用底部边距。这是我找到的最简单的解决办法

在这些情况下,我还有一个解决方案。当我知道父约束布局将收缩时,我在子视图上手动设置约束底部和底部边距

可以通过执行以下操作以编程方式添加新约束

val constraintSet=constraintSet()
constraintSet.clone(constraintLayout)
constraintSet.connect(R.id.缩略图、constraintSet.BOTTOM、constraintSet.PARENT_id、constraintSet.BOTTOM、8)

constraintSet.applyTo(constraintLayout)

您可以在父constraintLayout上使用底部填充,而不是在ImageView上使用底部边距。这是我找到的最简单的解决办法

在这些情况下,我还有一个解决方案。当我知道父约束布局将收缩时,我在子视图上手动设置约束底部和底部边距

可以通过执行以下操作以编程方式添加新约束

val constraintSet=constraintSet()
constraintSet.clone(constraintLayout)
constraintSet.connect(R.id.缩略图、constraintSet.BOTTOM、constraintSet.PARENT_id、constraintSet.BOTTOM、8)

constraintSet.applyTo(constraintLayout)

如果垂直偏差为0.5(默认值),则将ImageView约束到父视图的底部以及父视图的顶部将使小部件从上到下居中。如果垂直偏移设置为0,则小部件将紧靠ConstraintLayout的顶部,而不管它有多高,并且在布局折叠时将保持其底部边距

将以下内容添加到用于缩略图的XML中:


如果垂直偏差为默认值0.5,则将ImageView约束到父对象的底部以及父对象的顶部将使小部件从上到下居中。如果垂直偏移设置为0,则小部件将紧靠ConstraintLayout的顶部,而不管它有多高,并且在布局折叠时将保持其底部边距

将以下内容添加到用于缩略图的XML中:


实际上,我现在就是这么做的,但我想知道是否有办法不修改父视图。我更新了我的回复。如果您需要我如何以编程方式添加约束的更多详细信息,请询问。请共享。如果我为“缩略图”的底部定义了一个约束,并且如果标题和副标题是多行,则父级的高度大于“缩略图”,并且“缩略图”垂直居中。嗯,这有点棘手,因为如果要手动设置约束,你必须知道什么时候你的标题和副标题是多行的。实际上我现在就是这么做的,但我想知道是否有办法不修改父视图。我更新了我的回复。如果您需要我如何以编程方式添加约束的更多详细信息,请询问。请共享。如果我为“缩略图”的底部定义了一个约束,并且标题和副标题是多行的,那么父级的高度大于“缩略图”,并且“缩略图”垂直居中。嗯,这有点棘手,因为如果你想手动设置约束,你必须知道标题和副标题何时是多行的。
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0"