制約されているビューの可視性が失われると、marginTop
の下のxmlを使用しても無視されます。
これは、現時点で最新のレイアウトライブラリバージョンで発生しますcom.Android.support.constraint:constraint-layout:1.0.0-beta4
例:
tvMessage
とivCommentImage
はvisible
です-llLeftActions
とllRightActions
の16 dpの上部マージンは正常に機能しています。 ivCommentImage
がgone
の場合、マージンは無視されます。
<Android.support.v7.widget.CardView
Android:layout_width="match_parent"
Android:layout_height="wrap_content">
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="match_parent"
Android:paddingBottom="16dp">
<!-- some more views here -->
<TextView
Android:id="@+id/tvMessage"
style="@style/SocialFeed.Description"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginEnd="16dp"
Android:layout_marginLeft="16dp"
Android:layout_marginRight="16dp"
Android:layout_marginStart="16dp"
Android:layout_marginTop="16dp"
app:layout_constraintHorizontal_bias="0.0"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/ivProfile"
app:layout_goneMarginTop="0dp"
tools:text="@string/lorem_ipsum_140chars"/>
<Android.support.v7.widget.AppCompatImageView
Android:id="@+id/ivCommentImage"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="16dp"
Android:adjustViewBounds="true"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toBottomOf="@+id/tvMessage"
app:layout_goneMarginTop="0dp"
/>
<Android.support.constraint.Guideline
Android:id="@+id/gCenter"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.5"/>
<LinearLayout
Android:id="@+id/llLeftActions"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="16dp"
Android:gravity="center_vertical|left"
Android:orientation="horizontal"
app:layout_constraintLeft_toLeftOf="@+id/tvMessage"
app:layout_constraintRight_toLeftOf="@+id/gCenter"
app:layout_constraintTop_toBottomOf="@+id/ivCommentImage"
app:layout_goneMarginTop="0dp"
/>
<LinearLayout
Android:id="@+id/llRightActions"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginTop="16dp"
Android:gravity="center_vertical|right"
Android:orientation="horizontal"
app:layout_constraintLeft_toLeftOf="@+id/gCenter"
app:layout_constraintRight_toRightOf="@+id/tvMessage"
app:layout_constraintTop_toBottomOf="@+id/ivCommentImage"
app:layout_goneMarginTop="0dp"/>
</Android.support.constraint.ConstraintLayout>
</Android.support.v7.widget.CardView>
完全に意図したとおりに機能しています-layout_goneMarginTop="0dp"
オン @id/llLeftActions
および@id/llRightActions
...
つまり、ウィジェットが(@id/ivCommentImage
)はなくなったとマークされ、上部の接続に使用されるマージンは... 0dpであり、16dpのマージンではありません。それが、これらの属性の目的です。 :)
可視性の動作 および マージン属性がなくなった に関するドキュメントを確認してください
<TextView
Android:id="@+id/textView"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:text="Available chats"
tools:layout_editor_absoluteX="1dp"
tools:layout_editor_absoluteY="1dp" />
<ListView
Android:id="@+id/listChats"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
app:layout_constraintTop_toBottomOf="@+id/textView"/>
最後の行に注意してください。エッジの周りに制約を追加すると、制約が機能します。
Studioのデザインビューを使用して、オブジェクト間の制約をドラッグアンドドロップすることもできます。