簡體   English   中英

如何在約束布局中設置(以編程方式)Gone Margin?

[英]How to set (programatically) Gone Margin in Constraint Layout?

有一個用例,其中4視圖垂直連接(從上到下分別命名為“A”、“B”、“C”、“D”)。

            <include
                android:id="@+id/A"
                layout="@layout/search_layout"
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                android:layout_margin="@dimen/dimen_16dp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/tv_title" />

            <androidx.recyclerview.widget.RecyclerView
                android:id="@+id/B"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_marginHorizontal="12dp"
                android:layout_marginTop="12dp"
                android:nestedScrollingEnabled="false"
                android:visibility="gone"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/A"
                tools:itemCount="3"
                tools:listitem="@layout/item_layout"
                tools:visibility="visible" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/C"
                android:layout_width="@dimen/dimen_0dp"
                android:layout_height="wrap_content"
                android:layout_marginHorizontal="@dimen/dimen_16dp"
                android:layout_marginTop="12dp"
                android:drawableStart="@drawable/ic"
                android:drawablePadding="@dimen/dimen_6dp"
                android:fontFamily="@string/font_family_roboto_regular"
                android:text="@string/pb_tag_error_note"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/B"
                tools:visibility="visible" />

            <androidx.appcompat.widget.AppCompatTextView
                android:id="@+id/D"
                android:layout_width="@dimen/dimen_0dp"
                android:layout_height="wrap_content"
                android:layout_marginTop="@dimen/dimen_16dp"
                android:background="#11101010"
                android:fontFamily="@string/font_family_roboto_medium"
                android:paddingHorizontal="@dimen/dimen_16dp"
                android:paddingVertical="6dp"
                android:text="@string/text"
                android:textColor="@color/black"
                android:textSize="14sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@id/C"
                app:layout_goneMarginTop="@dimen/dimen_12dp"
                tools:visibility="visible" />

當 C 不可見時,gone margin 設置為12dp ,導致“B”的高度為16dp12dp + 4dp RV 項目邊距)。 但是當“B”和“C”都消失時,“A”和“D”之間的差距需要是24dp

我現在使用的方法是以編程方式將 D 附加到 A 的底部並將邊距設置為 24dp。 當 B 和 C 都消失時,有沒有辦法可以將 D 的頂部邊緣設置為 24dp?

您可以按如下方式使用Space小部件:

  • 將空間小部件放置到布局中,該布局受限於父級開始和“A”的底部。 小部件的高度將為12dp 將此小部件space命名為。
  • 創建一個Barrier小部件,其方向為bottom ,引用的 id 為space,C
  • 將“D”的頂部約束到障礙物。

您可能需要進行一些其他調整。

這個想法是Space小部件將在“A”下方保留12dp的空間,但不添加任何可見的空間。 "D" 將隨着小部件以12dp的邊距消失而上浮,直到它到達Space為止。 那時它將有12dp的上邊距加上Space ( 12dp ) 的高度,即24dp

這是一個示例布局:

<androidx.constraintlayout.widget.ConstraintLayout
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_margin="16dp">

    <TextView
        android:id="@+id/A"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="@android:color/holo_blue_light"
        android:gravity="center_horizontal"
        android:text="A"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <Space
        android:id="@+id/space"
        android:layout_width="wrap_content"
        android:layout_height="12dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/A" />

    <TextView
        android:id="@+id/B"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:background="@android:color/holo_blue_light"
        android:gravity="center_horizontal"
        android:text="B"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/A" />

    <TextView
        android:id="@+id/C"
        android:layout_width="@dimen/dimen_0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:background="@android:color/holo_blue_light"
        android:gravity="center_horizontal"
        android:text="C"
        android:visibility="gone"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/B"
        app:layout_goneMarginTop="12dp" />

    <androidx.constraintlayout.widget.Barrier
        android:id="@+id/barrier"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:barrierAllowsGoneWidgets="true"
        app:barrierDirection="bottom"
        app:constraint_referenced_ids="space,C" />

    <TextView
        android:id="@+id/D"
        android:layout_width="@dimen/dimen_0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="12dp"
        android:background="@android:color/holo_blue_light"
        android:gravity="center_horizontal"
        android:text="D"
        android:textColor="@color/black"
        android:textSize="14sp"
        android:visibility="visible"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@id/barrier" />
</androidx.constraintlayout.widget.ConstraintLayout>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM