如何为约束布局组提供垂直边距?

Posted

技术标签:

【中文标题】如何为约束布局组提供垂直边距?【英文标题】:How to give vertical margin to constraint layout group? 【发布时间】:2021-01-10 09:26:40 【问题描述】:

所以我有几个视图,我使用约束布局组对其进行分组。如果我使用线性/相对布局对其进行分组,我想为该组提供垂直边距。添加android:layout_marginVertical="100dp" 似乎不起作用。

【问题讨论】:

【参考方案1】:

群组不是这样工作的。看看 ConstraintLayout 的 Layer widget 从 2.0 版开始可用。你可以搜索Layer的使用教程。简而言之,Layer 将允许您对类似于 ViewGroup 的小部件进行分组,但会保持平面布局结构。如果图层包含的视图可以被限制到图层本身,则整个图层将接受一个上边距。

例如,采取如下布局:

蓝色是图层的背景。顶/底、右/左视图包含在图层内并被限制在图层内。 100dp 的上边距设置在 Layer 上。 “外部视图”是一个 TextView,它被限制在“右下”TextVIew,它包含在 Layer 中,这是不可能的如果 LayerViewGroup 替换,则完成。

视图可能仍包含在 Group 中以进行组操作。

这是此布局的 XML:

<androidx.constraintlayout.widget.ConstraintLayout 
    android:layout_
    android:layout_
    tools:context=".MainActivity">

    <androidx.constraintlayout.helper.widget.Layer
        android:id="@+id/layer"
        android:layout_
        android:layout_
        android:layout_marginStart="16dp"
        android:layout_marginTop="100dp"
        android:background="@android:color/holo_blue_light"
        app:constraint_referenced_ids="topLeft,topRight,bottomLeft,bottomRight"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/topLeft"
        android:layout_
        android:layout_
        android:padding="8dp"
        android:text="Top left"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintStart_toStartOf="@id/layer"
        app:layout_constraintTop_toTopOf="@id/layer" />

    <TextView
        android:id="@+id/topRight"
        android:layout_
        android:layout_
        android:padding="8dp"
        android:text="Top right"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintStart_toStartOf="@+id/bottomRight"
        app:layout_constraintTop_toTopOf="@id/layer" />

    <TextView
        android:id="@+id/bottomLeft"
        android:layout_
        android:layout_
        android:padding="8dp"
        android:text="Bottom left"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintStart_toStartOf="@id/layer"
        app:layout_constraintTop_toBottomOf="@+id/topLeft" />

    <TextView
        android:id="@+id/bottomRight"
        android:layout_
        android:layout_
        android:padding="8dp"
        android:text="Bottom right"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintStart_toEndOf="@+id/bottomLeft"
        app:layout_constraintTop_toBottomOf="@+id/topRight" />

    <TextView
        android:id="@+id/outsideView"
        android:layout_
        android:layout_
        android:layout_marginTop="16dp"
        android:text="Outside view"
        android:textAppearance="@style/TextAppearance.AppCompat.Display1"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/bottomRight" />

</androidx.constraintlayout.widget.ConstraintLayout>

【讨论】:

嗯好吧,我可以使用它。这对我来说似乎很好。谢谢你..【参考方案2】:

您尝试做的事情不正确。

ConstraintLayout Group 可用于“分组”不同视图或小部件的一些引用并设置它们的可见性(您可以设置组的可见性,所有视图都会得到它)。它不是一个像 LinearLayout 那样的财政组。

请看文档

https://developer.android.com/reference/androidx/constraintlayout/widget/Group

该类控制一组引用小部件的可见性。 该组的可见性将应用于引用的小部件。这是一种轻松隐藏/显示一组小部件的便捷方式,无需以编程方式维护该组。

对于您想要做的事情,您应该使用布局(LinearLayout、ConstraintLayout...)并将该视图分组到布局内,最后为该布局提供所需的边距。

【讨论】:

以上是关于如何为约束布局组提供垂直边距?的主要内容,如果未能解决你的问题,请参考以下文章

如何为运行时计算的变量高度设置布局约束?

如何在约束布局上实现重叠/负边距?

自动布局约束未按预期工作

使用堆栈视图和自动布局创建自定义 UITableViewCell

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

使用自动布局缩放垂直约束