android 如何在约束布局中指定障碍物的边距

mnemlml8  于 2023-02-02  发布在  Android
关注(0)|答案(4)|浏览(183)

我不确定在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" />
34gzjxbg

34gzjxbg1#

使用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" />
jm81lzqq

jm81lzqq2#

可以将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" />
b0zn9rqh

b0zn9rqh3#

这可能会晚一些,但对于任何将来会遇到同样问题的人来说,你可以简单地给予你的间隔符一个高度或宽度,而不是wrap_content,这就解决了marginTop或marginBottom,marginStart或marginEnd的问题。

<ImageView
            android:id="@+id/btn_more"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginEnd="@dimen/_8sdp"
            android:background="@drawable/ripple"
            android:clickable="true"
            android:contentDescription="@string/image_content"
            android:focusable="true"
            android:src="@drawable/ic_baseline_more_vert_24"
            android:textAllCaps="false"
            android:textColor="@color/colorAccent"
            app:layout_constraintBottom_toBottomOf="@id/tv_header"
            app:layout_constraintEnd_toEndOf="parent"
            app:layout_constraintTop_toTopOf="@+id/tv_header" />

        <Space
            android:id="@+id/spacer"
            android:layout_width="match_parent"
            android:layout_height="@dimen/_8sdp"
            app:layout_constraintTop_toBottomOf="@id/btn_more"/>

        <View
            android:id="@+id/v_menu"
            android:layout_width="0dp"
            android:layout_height="100dp"
            android:layout_marginStart="@dimen/_8sdp"
            app:layout_constraintEnd_toStartOf="@+id/v_menu2"
            app:layout_constraintHorizontal_weight="1"
            app:layout_constraintStart_toStartOf="parent"
            app:layout_constraintTop_toBottomOf="@id/spacer" />
lndjwyie

lndjwyie4#

我们也可以使用一个视图约束,将Barrier的宽度或高度设置为0dp,这样它就不会像Bar一样出现在UI中,而是帮助为其他视图提供约束。

相关问题