L'utilisation du xml en dessous de marginTop
est ignorée si la visibilité de la vue à laquelle je suis contraint a disparu.
Cela se produit avec la dernière version de la librairie de mise en page en ce moment com.Android.support.constraint:constraint-layout:1.0.0-beta4
Exemple:
tvMessage
et ivCommentImage
sont visible
- la marge supérieure de 16dp sur llLeftActions
et llRightActions
fonctionne bien. Si ivCommentImage
est gone
la marge est ignorée.
<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>
Cela fonctionne complètement comme prévu - notez que vous avez ajouté layout_goneMarginTop="0dp"
sur @id/llLeftActions
et @id/llRightActions
...
Ce qui signifie que lorsque le widget vers lequel ils pointent (@id/ivCommentImage
) est marqué comme disparu, la marge qui sera utilisée pour la connexion supérieure sera ... 0dp, et non la marge de 16dp. C'est pour ça que ces attributs sont là! :)
consultez la documentation sur comportement de visibilité et attributs de marge disparus
<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"/>
Veuillez noter la dernière ligne, l'ajout de contraintes autour des bords fait fonctionner la contrainte.
Vous pouvez également utiliser la vue de conception dans Studio et faire glisser et déposer les contraintes entre les objets.