Avec un Preview 1 d'Android 2.2 Studio de Google a publié une nouvelle mise en page dans sa bibliothèque de support: ConstraintLayout
. Avec ConstraintLayout, il est plus facile d'utiliser un outil de conception dans Android Studio, mais je n'ai pas trouvé de moyen d'utiliser des tailles relatives (pourcentages ou 'poids' comme dans LinearLayout). Existe-t-il un moyen de définir les contraintes en fonction des pourcentages? Par exemple, faire en sorte qu'une vue occupe 40% d'un écran, créer une marge de 20% entre les vues, définir la largeur d'une vue à 50% de la largeur d'une autre vue?
android
android-support-library
android-constraintlayout
Yury Fedorov
la source
la source
version 1.1
ConstraintLayout. Voir "Dimension en pourcentage" sur developer.android.com/reference/android/support/constraint/… ou certaines des réponses les plus récentes.Réponses:
Vous pouvez actuellement le faire de plusieurs manières.
La première consiste à créer des lignes directrices (cliquez avec le bouton droit sur la zone de conception, puis cliquez sur ajouter des lignes directrices verticales / horizontales). Vous pouvez ensuite cliquer sur "l'en-tête" de la ligne directrice pour modifier le positionnement pour qu'il soit basé sur un pourcentage. Enfin, vous pouvez contraindre les vues aux directives.
Une autre façon consiste à positionner une vue en utilisant le biais (pourcentage), puis à ancrer d'autres vues à cette vue.
Cela dit, nous avons réfléchi à la façon d'offrir des dimensions basées sur un pourcentage. Je ne peux faire aucune promesse mais c'est quelque chose que nous aimerions ajouter.
la source
app:layout_constraintGuide_percentage
Il peut être utile d'avoir une référence rapide ici.
Placement des vues
Utilisez une ligne directrice avec
app:layout_constraintGuide_percent
comme ceci:Et vous pouvez ensuite utiliser ce guide comme points d'ancrage pour d'autres vues.
ou
Utilisez le biais avec
app:layout_constraintHorizontal_bias
et / ouapp:layout_constraintVertical_bias
pour modifier l'emplacement de la vue lorsque l'espace disponible le permetTaille des vues
Une autre valeur en pourcentage est la hauteur et / ou la largeur des éléments, avec
app:layout_constraintHeight_percent
et / ouapp:layout_constraintWidth_percent
:la source
0dp
est utilisé dans ConstraintLayout pour indiquer le dimensionnement dynamique. Voir developer.android.com/reference/android/support/constraint/…1dp
, pas0dp
.. c'est ce dont je parle0dp
est déjà réservé,1dp
semble donc raisonnable.Depuis "ConstraintLayout1.1.0-beta1", vous pouvez utiliser le pourcentage pour définir les largeurs et les hauteurs.
Cela définira la largeur à 40% de la largeur de l'écran. Une combinaison de cela et des directives en pourcentage vous permet de créer n'importe quelle mise en page basée sur le pourcentage que vous souhaitez.
la source
version 1.1
ConstraintLayout. L'additionnel_default="percent"
n'est plus nécessaire sur la version stable! Voir "Dimension en pourcentage" sur developer.android.com/reference/android/support/constraint/…sp
unités, comment la taille du texte pourrait-elle être auto-proportionnelle à la taille de la vue (qui, en soi, est définie proportionnellement à la taille totale de la mise en page, c'est-à-dire en 'pourcentage') ?Avec la nouvelle version de ConstraintLayout v1.1, vous pouvez désormais effectuer les opérations suivantes:
Cela contraindra le bouton à 20% de la hauteur et 65% de la largeur de la vue parent.
la source
sp
unités, comment la taille du texte pourrait-elle être auto-proportionnelle à la taille de la vue (qui, en soi, est définie proportionnellement à la taille totale de la mise en page, c'est-à-dire en 'pourcentage') ?Comment utiliser les directives
La réponse acceptée n'est pas claire sur la façon d'utiliser les directives et sur ce qu'est "l'en-tête".
Pas
Ajoutez d'abord une directive.
Sélectionnez la ligne directrice ou déplacez-la un peu pour rendre les contraintes visibles.
Cliquez ensuite sur le cercle rond (l '"en-tête") jusqu'à ce qu'il devienne un pourcentage. Vous pouvez ensuite faire glisser ce pourcentage jusqu'à 50% ou ce que vous voulez.
Après cela, vous pouvez contraindre votre vue à la ligne directrice pour en faire un pourcentage du parent (en utilisant
match_constraint
la vue).la source
La directive est inestimable - et l'application: layout_constraintGuide_percent est un grand ami ... Cependant, parfois, nous voulons des pourcentages sans directives. Il est maintenant possible d'utiliser des poids :
Voici un exemple plus complet qui utilise une directive avec des poids supplémentaires :
la source
Avec ConstraintLayout v1.1.2, la dimension doit être définie sur
0dp
, puis définissez les attributslayout_constraintWidth_percent
oulayout_constraintHeight_percent
sur une valeur comprise entre 0 et 1, comme:(Vous n'avez pas besoin de définir
app:layout_constraintWidth_default="percent"
ouapp:layout_constraintHeight_default="percent"
avec ConstraintLayout 1.1.2 et les versions suivantes)la source
Contrainte Layout 1.0 faisant qu'une vue occupe un pourcentage de l'écran requis en faisant deux directives. Dans Constraint Layout 1.1, il a été simplifié en vous permettant de contraindre facilement n'importe quelle vue à un pourcentage de largeur ou de hauteur.
N'est-ce pas fantastique? Toutes les vues prennent en charge les attributs layout_constraintWidth_percent et layout_constraintHeight_percent. Celles-ci entraîneront la fixation de la contrainte à un pourcentage de l'espace disponible. Il est donc possible de créer un bouton ou une extension TextView pour remplir un pourcentage de l'écran avec quelques lignes de XML.
Par exemple, si vous souhaitez définir la largeur du bouton à 70% de l'écran, vous pouvez le faire comme ceci:
Veuillez noter que vous devrez mettre la dimension à utiliser en pourcentage à 0dp comme nous l'avons spécifié android: layout_width à 0dp ci-dessus.
De même, si vous souhaitez régler la hauteur du bouton à 20% de l'écran, vous pouvez le faire comme ceci:
Voir! nous avons spécifié android: layout_height à 0dp cette fois car nous voulons que le bouton utilise la hauteur en pourcentage.
la source
Essayez ce code. Vous pouvez modifier les pourcentages de hauteur et de largeur avec app: layout_constraintHeight_percent et app: layout_constraintWidth_percent.
Gradle:
la source
vous pouvez l'utiliser
app:layout_constraintVertical_weight
commelayout_weight
danslinearlayout
REMARQUE:
app:layout_constraintVertical_weight
(app:layout_constraintHorizontal_weight
) fonctionnera avecandroid:layout_width="0dp"
(android:layout_height="0dp"
la source
Pour quelqu'un qui pourrait trouver utile, vous pouvez utiliser
layout_constraintDimensionRatio
im n'importe quelle vue enfant à l'intérieur d'unConstraintLayout
et nous pouvons définir la hauteur ou la largeur un rapport de l'autre dimension (au moins un doit être 0dp soit largeur ou hauteur) exempledans ce cas le rapport d'aspect est de 16: 9
app:layout_constraintDimensionRatio="16:9"
vous pouvez trouver plus d'informations ICIla source
Je sais que ce n'est pas directement ce que OP demandait à l'origine, mais cela m'a beaucoup aidé dans cette situation quand j'avais une question similaire. . Ajoutez ceci à votre onCreate dans l'activité de question. (Le change à 80%)
la source
Remplacez simplement, dans votre balise de ligne directrice
avec
où 0,7 signifie 70%.
De plus, si vous essayez maintenant de faire glisser les directives, la valeur glissée apparaîtra désormais en% age.
la source
À l'aide des directives, vous pouvez modifier le positionnement pour qu'il soit basé sur un pourcentage
Vous pouvez également utiliser cette méthode
la source