动态设置边距的ConstraintLayout障碍

时间:2019-01-30 02:08:48

标签: android android-layout android-constraintlayout

我正在构建一个购物应用程序,对于给定的产品(如果该产品可用),我只需要显示“添加到购物车”按钮,但是如果也可以将其添加到“收藏夹”中,则需要显示两个纽扣。但是,如果只有一个按钮,则需要在布局中居中。 (可以是任何按钮,“添加到购物车”或“收藏夹”)

我正在尝试使用ConstraintLayout的障碍“功能”来实现此目的。尽管它似乎不适用于我。

以下是我的主要视图XML。

<android.support.constraint.ConstraintLayout
    android:id="@+id/details_container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    app:layout_behavior="@string/appbar_scrolling_view_behavior">

<!--following views are set to "visible" when details are loaded from server-->
    <android.support.v7.widget.RecyclerView
        android:id="@+id/details_view"
        android:layout_width="0dp"
        android:layout_height="0dp"
        android:layout_marginBottom="13dp"
        android:visibility="gone"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent"/>

    <include
        android:id="@+id/shopping_options_container"
        android:visibility="gone"
        android:layout_width="0dp"
        android:layout_height="80dp"
        app:layout_constraintBottom_toBottomOf="parent"
        layout="@layout/shopping_options" />

</android.support.constraint.ConstraintLayout>

这是shopping_options.xml

<?xml version="1.0" encoding="utf-8"?>
<merge xmlns:android="http://schemas.android.com/apk/res/android"
   xmlns:app="http://schemas.android.com/apk/res-auto"
   xmlns:tools="http://schemas.android.com/tools"
   tools:parentTag="android.support.constraint.ConstraintLayout">


<View
    android:id="@+id/view_divider"
    android:layout_width="match_parent"
    android:layout_height="1dp"
    android:layout_marginBottom="66dp"
    android:background="#2f000000"
    android:visibility="visible"
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"/>

<android.support.constraint.Barrier
    android:id="@+id/barrier"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    app:barrierDirection="top"
    app:constraint_referenced_ids="view_divider"/>

<Button
    android:id="@+id/add_to_cart"
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginStart="40dp"
    android:layout_marginTop="10dp"
    android:layout_marginEnd="40dp"
    android:layout_marginBottom="5dp"
    android:background="@drawable/purple_button"
    android:drawablePadding="5dp"
    android:gravity="center"
    android:paddingStart="30dp"
    android:paddingEnd="30dp"
    android:textColor="@android:color/white"
    android:visibility="visible"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/view_divider"/>

<!--can be gone or visible-->
<Button
    android:id="@+id/shopping_options"
    style="?android:attr/borderlessButtonStyle"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_gravity="center"
    android:layout_marginStart="40dp"
    android:layout_marginTop="5dp"
    android:layout_marginEnd="40dp"
    android:layout_marginBottom="10dp"
    android:gravity="center"
    android:paddingStart="30dp"
    android:paddingEnd="30dp"
    android:visibility="gone" 
    app:layout_constraintBottom_toBottomOf="parent"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintTop_toBottomOf="@id/add_to_cart"
    />
</merge>

是否可以基于可见的按钮设置总高度,如果只有其中一个可见,则将其居中?感谢您的帮助。

0 个答案:

没有答案