/ / Disposition de l'interface utilisateur en deux passes: pourquoi? - android, wpf, silverlight, interface utilisateur, mise en page

Disposition de l'interface utilisateur à deux passes: Pourquoi? - Android, Wpf, Silverlight, interface utilisateur, mise en page

J'ai remarqué qu'Android, WPF et Silverlighttous suivent un modèle de disposition en deux passes. Il existe une méthode Measure () récursive qui est appelée pour dimensionner l'élément, éventuellement plusieurs fois. Ensuite, une méthode Layout / Arrange () récursive est appelée, qui définit les positions exactes des enfants dans leur contrôle parent, et définit également la valeur finale. taille du contrôle.

Ma question: pourquoi est-ce divisé en deux passes, en particulier lorsque, pour certains types de contrôles, Measure () ne peut pas calculer la taille réelle d'un contrôle sans réellement définir les positions des enfants? Existe-t-il un type de cas de disposition minoritaire rendu possible par cela?

J'essaie de créer ma propre boîte à outils d'interface utilisateur, et je penche actuellement vers un modèle Layout () en une seule passe, mais j'aimerais être convaincu que cela est sage ou non.

Merci d'avoir lu ceci :)

Sean

Réponses:

11 pour la réponse № 1

La raison des deux passes est que tout élément de la structure peut influencer l'espace disponible restant des autres.

Certains éléments souhaitent prendre le plus grand nombre possiblel'espace tandis que d'autres ont des dimensions fixes. Vous pouvez également avoir des éléments avec uniquement un ensemble de largeur max. Il crée une équation qui ne peut pas être résolue en un seul passage.

Les différents panneaux de la hiérarchie demandent auéléments de la taille dont ils ont besoin lors de la première passe, puis répartissez l'espace entre eux en fonction de la nature de chaque panneau, et informe enfin chaque élément de son espace alloué.

EDIT: Quelques explications supplémentaires

Le principal inconvénient d'une disposition à passage unique est quevous gérez chaque élément séquentiellement. Un premier élément prend une certaine place et les autres prennent le reste. Pourquoi cet élément est-il le premier? Essayez votre algorithme avec un ordre d'élément différent et vous aurez différentes dispositions résultantes.

Une disposition en deux passes simule un comportement parallèle où chaque élément influence la disposition entière.