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!
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)
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"/>
Apparemment, match_parent
est:
ConstraintLayout
ConstraintLayout
Donc, si vous avez besoin que vos vues fonctionnent comme match_parent
, alors:
ConstraintLayout
devrait utiliser 0dp
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>
match_parent
n'est pas pris en charge par ConstraintLayout
. Définissez width sur 0dp
pour le laisser correspondre aux contraintes.
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" />
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"/>
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
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"
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.