web-dev-qa-db-fra.com

Définissez la largeur pour qu'elle corresponde aux contraintes dans ConstraintLayout

J'aimerais limiter les côtés gauche et droit d'une vue aux marges de sa vue parent et lui faire occuper l'espace alloué. Cependant, régler la largeur sur match_parent ou wrap_content semble produire le même résultat.

Y a-t-il quelque chose d'équivalent à match_constraints (par opposition à match_parent et wrap_content)? Est-ce que match_parent et wrap_content affectent la présentation ou sont-ils ignorés dans la nouvelle présentation de contrainte?

Aimant ce nouveau système de mise en page pour ma plate-forme préférée!

75
KG6ZVP

match_parent n'est pas pris en charge. Avec 0dp, vous pouvez considérer vos contraintes comme "évolutives" plutôt que comme "remplir ce qui reste".

De plus, 0dp peut être défini par une position, où match_parent s'appuie sur son parent pour sa position (x, y et width, height)

92
brob

match_parent n'est pas autorisé. Mais vous pouvez en réalité définir la largeur et la hauteur sur 0dp et définir les contraintes supérieure et inférieure ou gauche-droite sur "parent".

Donc, par exemple, si vous voulez avoir la contrainte match_parent sur la largeur de l'élément, vous pouvez le faire comme ceci:

<TextView
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    app:layout_constraintStart_toStartOf="parent"
    app:layout_constraintEnd_toEndOf="parent"/>
149
Arieck

Apparemment, match_parent est:

  • PAS OK pour les vues directement sous ConstraintLayout
  • OK pour les vues imbriquées à l'intérieur de vues se trouvant directement sous ConstraintLayout

Donc, si vous avez besoin que vos vues fonctionnent comme match_parent, alors:

  1. Enfants directs de ConstraintLayout devrait utiliser 0dp
  2. Éléments imbriqués (par exemple, petit-fils de ConstraintLayout) peut utiliser match_parent

Exemple:

<Android.support.constraint.ConstraintLayout
    Android:layout_width="match_parent"
    Android:layout_height="wrap_content"
    Android:paddingBottom="16dp">

    <Android.support.design.widget.TextInputLayout
        Android:id="@+id/phoneNumberInputLayout"
        Android:layout_width="0dp"
        Android:layout_height="wrap_content"
        app:layout_constraintLeft_toLeftOf="parent"
        app:layout_constraintRight_toRightOf="parent">

        <Android.support.design.widget.TextInputEditText
            Android:id="@+id/phoneNumber"
            Android:layout_width="match_parent"
            Android:layout_height="wrap_content"/>

    </Android.support.design.widget.TextInputLayout>
23
Gene Bo

match_parent n'est pas pris en charge par ConstraintLayout. Définissez width sur 0dp pour le laisser correspondre aux contraintes.

13
Marcin Koziński

De la document officiel :

Important: MATCH_PARENT n'est pas recommandé pour les widgets contenus dans ConstraintLayout. Un comportement similaire peut être défini en utilisant MATCH_CONSTRAINT avec les contraintes gauche/droite ou haut/bas correspondantes définies sur "parent".

Donc, si vous voulez obtenir l'effet MATCH_PARENT, vous pouvez le faire:

<TextView
    Android:id="@+id/textView"
    Android:layout_width="0dp"
    Android:layout_height="wrap_content"
    Android:gravity="center"
    Android:text="TextView"
    app:layout_constraintEnd_toEndOf="parent"
    app:layout_constraintStart_toStartOf="parent" />
8
xymelon

Créer votre vue en tant que match_parent n'est pas possible directement, mais nous pouvons le faire d'une manière légèrement différente, mais n'oubliez pas d'utiliser les attributs Left et Right avec Start et End, car si vous utilisez le support RTL, vous en aurez besoin.

    <Button
Android:layout_width="0dp"
Android:layout_height="wrap_content"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
2
Shubham Santuwala

définissez la largeur ou la hauteur (quel que soit le nom du parent) sur 0dp et définissez les marges gauche, droite, haut, bas pour qu'il corresponde

1
santhosh

dans la documentation de bureau: https://developer.Android.com/reference/Android/support/constraint/ConstraintLayout

Lorsqu'une dimension est définie sur MATCH_CONSTRAINT, le comportement par défaut consiste à faire en sorte que la taille résultante prenne tout l'espace disponible.

Utilisation de 0dp, ce qui équivaut à "MATCH_CONSTRAINT"

Important: MATCH_PARENT n'est pas recommandé pour les widgets contenus dans ConstraintLayout. Un comportement similaire peut être défini en utilisant MATCH_CONSTRAINT avec les contraintes correspondantes gauche/droite ou haut/bas définies sur "parent"

1
Chuanxing Zhao

Vous pouvez vérifier votre adaptateur.

 1 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater);
 2 - MyLayoutBinding binding = MyLayoutBinding.inflate(layoutInflater, viewGroup, false);

J'ai eu le même problème que toi quand j'ai utilisé 1. Tu peux essayer 2.

0
Kim Jeong woo