在ConstraintLayout中没有任何约束的情况下,边距无法正常工作

时间:2019-10-09 21:16:49

标签: android android-constraintlayout

我在ConstraintLayout中有一个ImageView,在下面的XML中其ID为“缩略图”。我希望它在其父对象的左上方对齐,并在其底部有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>

2 个答案:

答案 0 :(得分:1)

您可以在父ConstraintLayout上使用底部填充,而不是在ImageView上使用底部空白。这是我找到的最简单的解决方案。

在这些情况下,我还可以使用另一种解决方案。当我知道父约束布局会缩小时,我在子视图上手动设置约束底部和底部边距。

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

data <- c(62, 60, 63, 59, 63, 67, 71, 64, 65, 66, 68, 66, 71, 67, 68, 68, 56, 62, 60, 61, 63, 64, 63, 59) grp <- factor(rep(LETTERS[1:4], c(4,6,6,8))) de <- data.frame(group=grp, dt=data) de %>% group_by(group) %>% summarize(mean = mean(dt), sum = sum(dt))

答案 1 :(得分:0)

将ImageView限制在父级的底部和父级的顶部将使小部件自上而下居中,如果垂直偏差为0.5,则为默认值。如果将垂直偏差设置为0,则该窗口小部件将嵌套在ConstraintLayout的顶部,而不管其高度有多高,并且在布局折叠时将保持其底部边距。

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

app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0"