【问题标题】:How to specify margins for Barrier in Constraintlayout如何在 Constraintlayout 中为 Barrier 指定边距
【发布时间】:2019-10-28 11:49:25
【问题描述】:

我不确定在 ConstraintLayout 中围绕 Barrier 指定边距的最佳方式。

我尝试将它们设置在屏障元素中,但这没有效果,我也找不到任何文档。

   <androidx.constraintlayout.widget.Barrier
            android:id="@+id/detail_barrier"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="top"
            android:layout_marginBottom="8dp"
            app:constraint_referenced_ids="detail_header_1,detail_header_2" />

【问题讨论】:

  • 添加元素对屏障的边距,将被屏障推动的元素
  • 谢谢@cutiko,我已经试过了,问题是我需要为所有元素添加边距,我想通过使用屏障来避免这种冗余
  • 这就是约束布局边距的工作原理,您不能将一个元素与其他元素推开,但是将约束设置为另一个元素的元素可以与该元素保持距离
  • @Displayname 如果您只需要Barrier 的边距以便为所有受约束的元素设置相同的边距,那么使用GuideLine 是否更有意义?这样你就可以设置app:layout_constraintGuide_endapp:layout_constraintGuide_start
  • @theThapa 我使用了屏障,因为它取决于特定的视图,而不仅仅是边缘的边缘,因为据我所知,指南不能依赖于特定的视图

标签: android android-constraintlayout


【解决方案1】:

使用 azEf 推荐的工作方式,但您需要 2 个视图而不是 1 个,并且障碍将在布局预览中查看。执行此操作的内置方法是 app:barrierMargin。示例:

    <ImageView
        android:id="@+id/icon"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:src="@drawable/ic_available"
        app:layout_constraintStart_toStartOf="@id/panelStart" />

    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/iconEnd"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierMargin="10dp"
        android:orientation="vertical"
        app:barrierDirection="end"
        app:constraint_referenced_ids="icon" />

    <TextView
        style="@style/title_text"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:maxLines="2"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="@id/iconEnd"
        tools:text="Title" />

【讨论】:

  • 没有 app:barrierMargin="" 这样的东西
  • 确实存在。它被声明为&lt;attr format="dimension" name="barrierMargin"/&gt;。可能是 ConstraintLayout 2.0 引入的,而你还在使用 1.x?
  • 这将为两边添加边距:顶部/底部或开始/结束
  • 效果很好!但是android:orientation="vertical" 是多余的
【解决方案2】:

您可以将Space 视图约束到屏障并在其上添加边距。

<androidx.constraintlayout.widget.Barrier
            android:id="@+id/detail_barrier"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            app:barrierDirection="top"
            app:constraint_referenced_ids="detail_header_1,detail_header_2" />

<Space
            android:id="@+id/detail_space"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginBottom="8dp"
            app:layout_constraintTop_toTopOf="@id/details_barrier" />

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-13
    • 2021-10-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-07-03
    • 2019-12-12
    • 1970-01-01
    相关资源
    最近更新 更多