Je suis confus quant à la différence entre ConstraintLayout
et RelativeLayout
. Quelqu'un pourrait-il me dire les différences exactes entre eux?
219
Je suis confus quant à la différence entre ConstraintLayout
et RelativeLayout
. Quelqu'un pourrait-il me dire les différences exactes entre eux?
RealtiveLayout
,LinearLayout
,GridLayout
etc.) pour obtenir la hiérarchie de la vue qu'ils veulent.Réponses:
L'intention
ConstraintLayout
est d'optimiser et d'aplatir la hiérarchie des vues de vos présentations en appliquant certaines règles à chaque vue pour éviter l'imbrication.Les règles vous rappellent
RelativeLayout
, par exemple, le réglage de la gauche vers la gauche d'une autre vue.Contrairement à
RelativeLayout
,ConstraintLayout
offre unebias
valeur qui est utilisée pour positionner une vue en termes de décalage horizontal et vertical de 0% et 100% par rapport aux poignées (marquées d'un cercle). Ces pourcentages (et fractions) offrent un positionnement transparent de la vue sur différentes densités et tailles d'écran.La poignée de ligne de base (long tuyau aux coins arrondis, sous la poignée circulaire) est utilisée pour aligner le contenu de la vue avec une autre référence de vue.
Des poignées carrées (à chaque coin de la vue) sont utilisées pour redimensionner la vue en dps.
C'est totalement basé sur l'opinion et mon impression de
ConstraintLayout
la source
Propriétés équivalentes de disposition relative et de disposition de contrainte
(1) Disposition relative:
(1) Équivalent de la disposition des contraintes:
(2) Disposition relative:
(2) Équivalent de la disposition des contraintes:
(3) Disposition relative:
(3) Équivalent de disposition de contrainte:
(4) Disposition relative:
(4) Équivalent de la disposition des contraintes:
(5) Disposition relative:
(5) Équivalent de disposition de contrainte:
(6) Disposition relative:
(6) Équivalent de la disposition des contraintes:
(7) Disposition relative:
(7) Équivalent de la disposition des contraintes:
(8) Disposition relative:
(8) Équivalent de la disposition des contraintes:
(9) Disposition relative:
(9) Équivalent de la disposition des contraintes:
(10) Disposition relative:
(10) Équivalent de la disposition des contraintes:
(11) Disposition relative:
(11) Équivalent de la disposition des contraintes:
(12) Disposition relative:
(12) Équivalent de la disposition des contraintes:
(13) Disposition relative:
(13) Équivalent de la disposition des contraintes:
(14) Disposition relative:
(14) Équivalent de la disposition des contraintes:
(15) Disposition relative:
(15) Équivalent de la disposition des contraintes:
(16) Disposition relative:
(16) Équivalent de la disposition des contraintes:
(17) Disposition relative:
(17) Équivalent de disposition de contrainte:
(18) Disposition relative:
(18) Équivalent de la disposition des contraintes:
(19) Disposition relative:
(19) Équivalent de la disposition des contraintes:
(20) Disposition relative:
(20) Équivalent de la disposition des contraintes:
(21) Disposition relative:
(21) Équivalent de la disposition des contraintes:
(22) Disposition relative:
(22) Équivalent de la disposition des contraintes:
la source
Rapporté par @davidpbr
ConstraintLayout
performanceJ'ai fait deux dispositions similaires pour 7 enfants, chacune avec un parent
ConstraintLayout
etRelativeLayout
. Basé sur l'outil de traçage de méthode Android Studio, il sembleConstraintLayout
passer plus de temps dans onMeasure et effectuer des travaux supplémentaires dansonFinishInflate
.Bibliothèque utilisée (
support-v4
,appcompat-v7
…):com.android.support.constraint:constraint-layout:1.0.0-alpha1
Appareils / Versions d'Android reproduites sur: Samsung Galaxy S6 (SM-G920A. Désolé, pas d'atmosphère Nexus). Android 5.0.2
Comparaison rapide du traçage des méthodes:
Exemple de référentiel Github: https://github.com/OnlyInAmerica/ConstraintLayoutPerf
la source
Voici les différences / avantages:
La disposition de contrainte a un double pouvoir de mise en page relative et de mise en page linéaire: définissez les positions relatives des vues (comme la mise en page relative) et définissez également des poids pour l'interface utilisateur dynamique (ce qui n'était possible que dans la mise en page linéaire).
Une utilisation très puissante est le regroupement d'éléments en formant une chaîne. De cette façon, nous pouvons former un groupe de vues qui dans son ensemble peut être placé de la manière souhaitée sans ajouter une autre couche de hiérarchie juste pour former un autre groupe de vues.
En plus des poids, nous pouvons appliquer un biais horizontal et vertical qui n'est rien d'autre que le pourcentage de déplacement par rapport au centre. (un biais de 0,5 signifie aligné au centre. Toute valeur inférieure ou supérieure signifie un mouvement correspondant dans la direction respective).
Une autre caractéristique très importante est qu'elle respecte et fournit les fonctionnalités pour gérer les vues GONE afin que les présentations ne se cassent pas si une vue est définie sur GONE via le code java. Plus d'informations peuvent être trouvées ici: https://developer.android.com/reference/android/support/constraint/ConstraintLayout.html#VisibilityBehavior
Fournit la puissance de l'application automatique de contraintes par l'utilisation de l'outil Blue print et Visual Editor qui facilite la conception d'une page.
Toutes ces fonctionnalités conduisent à un aplatissement de la hiérarchie des vues, ce qui améliore les performances et aide également à rendre l'interface utilisateur réactive et dynamique qui peut s'adapter plus facilement à différentes tailles et densités d'écran.
Voici le meilleur endroit pour apprendre rapidement: https://codelabs.developers.google.com/codelabs/constraint-layout/#0
la source
Une grande différence est que ConstraintLayout respecte les contraintes même si la vue a disparu. Cela ne cassera donc pas la disposition si vous avez une chaîne et que vous souhaitez faire disparaître une vue au milieu.
la source
En plus de la réponse @ dhaval-jivani.
J'ai mis à jour le projet github project vers la dernière version de la disposition des contraintes v.1.1.0-beta3
J'ai mesuré et comparé le temps de la méthode onCreate et le temps entre le début de onCreate et la fin de l'exécution de la dernière méthode preformDraw visible sur le moniteur du CPU. Tous les tests ont été effectués sur Samsung S5 mini avec android 6.0.1 Voici les résultats:
Nouveau départ (première ouverture d'écran après le lancement de l'application)
Disposition relative
OnCreate: 123ms
Dernier temps de préformeDessin - Temps de création: 311,3 ms
Disposition des contraintes
OnCreate: 120,3 ms
Dernière préforme Temps de tirage - Temps de création: 310 ms
En plus de cela, j'ai vérifié le test de performances de cet article , voici le code et j'ai constaté que sur le nombre de boucles, moins de 100 variantes de disposition de contraintes sont plus rapides lors de l'exécution du gonflage, de la mesure et de la disposition, puis des variantes avec la disposition relative. Et sur les anciens appareils Android, comme Samsung S3 avec Android 4.3, la différence est plus grande.
En conclusion, je suis d'accord avec les commentaires de l' article :
la source
Officiellement,
ConstraintLayout
c'est beaucoup plus rapidela source
La vraie question à se poser est la suivante: y a-t-il une raison d'utiliser une disposition autre qu'une disposition de contraintes? Je pense que la réponse pourrait être non.
Pour ceux qui insistent sur le fait qu'ils s'adressent à des programmeurs débutants ou similaires, ils devraient fournir une raison pour qu'ils soient inférieurs à toute autre mise en page.
Les dispositions de contraintes sont meilleures à tous points de vue (elles coûtent environ 150k en taille APK.). Ils sont plus rapides, ils sont plus faciles, ils sont plus flexibles, ils réagissent mieux aux changements, ils corrigent les problèmes lorsque les éléments disparaissent, ils se conforment mieux à des types d'écran radicalement différents et ils n'utilisent pas un tas de boucles imbriquées aussi longtemps dessiné une structure arborescente pour tout. Vous pouvez mettre n'importe quoi n'importe où, par rapport à n'importe quoi, n'importe où.
Ils étaient un peu fous à la mi-2016, où l'éditeur de disposition visuelle n'était tout simplement pas assez bon, mais ils sont au point que si vous avez une disposition, vous voudrez peut-être sérieusement envisager d'utiliser une disposition de contraintes, même quand il fait la même chose qu'un
RelativeLayout
, ou même un simpleLinearLayout
.FrameLayouts
ont clairement encore leur but. Mais, je ne vois rien construire d'autre à ce stade. S'ils avaient commencé par cela, ils n'auraient rien ajouté d'autre.la source
La conclusion que je peux faire est
1) Nous pouvons faire la conception de l'interface utilisateur sans toucher à la partie xml du code, pour être honnête, je pense que Google a copié la façon dont l'interface utilisateur est conçue dans les applications iOS , cela aura du sens si vous êtes familier avec le développement de l'interface utilisateur dans iOS, mais dans une disposition relative, son difficile de définir les contraintes sans toucher au design xml .
2) Deuxièmement, il a une hiérarchie de vues plates contrairement à d'autres mises en page, ainsi que de meilleures performances que la mise en page relative que vous auriez pu voir dans d'autres réponses
3) Il a également des choses supplémentaires en dehors de ce que la disposition relative a, comme le positionnement relatif circulaire où nous pouvons positionner une autre vue par rapport à celle-ci à un certain rayon avec un certain angle qui ne peut pas faire dans une disposition relative
Je le répète, la conception de l'interface utilisateur à l'aide de la disposition des contraintes est la même que la conception de l'interface utilisateur dans iOS, donc à l'avenir si vous travaillez sur iOS, vous trouverez plus facile si vous avez utilisé la disposition des contraintes
la source
La seule différence que j'ai remarquée est que les éléments définis dans une disposition relative par glisser-déposer ont automatiquement leurs dimensions par rapport aux autres éléments inférés, donc lorsque vous exécutez l'application, ce que vous voyez est ce que vous obtenez. Cependant, dans la disposition des contraintes, même si vous faites glisser et déposez un élément dans la vue de conception, lorsque vous exécutez l'application, les choses peuvent être déplacées. Cela peut être facilement résolu en définissant manuellement les contraintes ou, un mouvement plus risqué étant de cliquer avec le bouton droit sur l'élément dans l'arborescence des composants, en sélectionnant le sous-menu de disposition des contraintes, puis en cliquant sur «inférer les contraintes». J'espère que cela t'aides
la source