Je crée une boîte de dialogue avec deux boutons alignés à droite par rapport au parent ConstraintLayout.
Tout va bien, jusqu'à ce que le texte des boutons devienne très long. Lorsque le texte de l'un des boutons ou des deux est long, les boutons s'étendent au-delà des limites du parent, provoquant un écrêtage du texte, comme illustré dans l'image ci-dessous. Je voudrais gérer les cas où le texte est plus long.
c'est-à-dire que le comportement souhaité serait
Lorsque le texte du bouton est court, la mise en page fonctionne comme prévu:
Lorsque le texte du bouton est long:
Code de mise en page
<?xml version="1.0" encoding="utf-8"?>
<Android.support.constraint.ConstraintLayout
Android:layout_width="match_parent"
Android:layout_height="wrap_content"
Android:paddingBottom="@dimen/dialog_padding"
Android:paddingLeft="@dimen/dialog_padding"
Android:paddingRight="@dimen/dialog_padding"
Android:paddingTop="@dimen/dialog_padding">
<TextView
Android:id="@+id/dialog_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
tools:text="Dialog title" />
<TextView
Android:id="@+id/dialog_content"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
app:layout_constraintTop_toBottomOf="@id/dialog_title"
tools:text="Dialog text content" />
<Button
Android:id="@+id/cancel_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@id/ok_btn"
app:layout_constraintTop_toBottomOf="@id/dialog_content"
tools:text="Dismiss" />
<Button
Android:id="@+id/ok_btn"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toBottomOf="@id/dialog_content"
tools:text="Accept" />
</Android.support.constraint.ConstraintLayout>
Choses que j'ai essayées en vain:
app:layout_constraintStart_toStartOf="parent"
au bouton Annuler entraîne l'alignement des boutons à droite et la solution est incorrectelayout_width="0dp"
pour les boutons et en utilisant app:layout_constrainedWidth="true"
n'a aucun effetVoici deux captures d'écran de ce que je pense que vous essayez d'accomplir.
Tout d'abord, avec un court texte:
Maintenant avec un long texte:
J'ai pris quelques libertés avec la mise en page et introduit une ligne directrice à 33% de la largeur à laquelle le bouton est contraint. Vous n'avez pas spécifié dans quelle mesure le bouton pouvait s'étendre horizontalement, j'ai donc fait cette hypothèse.
Le XML de cette disposition suit. J'ai défini la largeur des boutons sur 0dp
ou match_constraints
pour que leur taille s'ajuste. Les boutons ont également été placés dans une chaîne packed
qui regroupe les deux boutons. Le biais horizontal est défini sur 0.5
maintenant, mais en l'augmentant, le groupe se déplacera vers la droite s'il commence à se déplacer vers la gauche sur vous.
Le ConstraintLayout
documentation a de bonnes descriptions de ces fonctionnalités et comment les utiliser.
<Android.support.constraint.Guideline
Android:id="@+id/guideline"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:orientation="vertical"
app:layout_constraintGuide_percent="0.33" />
<TextView
Android:id="@+id/dialog_title"
Android:layout_width="wrap_content"
Android:layout_height="wrap_content"
Android:layout_marginTop="@dimen/dialog_text_margin"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
tools:text="Dialog title" />
<Button
Android:id="@+id/cancel_btn"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
app:layout_constraintEnd_toStartOf="@+id/ok_btn"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toEndOf="@+id/guideline"
app:layout_constraintTop_toBottomOf="@+id/dialog_title"
tools:text="Dismiss" />
<Button
Android:id="@+id/ok_btn"
Android:layout_width="0dp"
Android:layout_height="wrap_content"
Android:layout_marginEnd="8dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.5"
app:layout_constraintStart_toEndOf="@+id/cancel_btn"
app:layout_constraintTop_toTopOf="@+id/cancel_btn"
tools:text="Accept" />