2017-10-13 23 views
4

J'ai récemment eu une discussion avec mon équipe sur les mises en page Xamarin.Form, et ils pensaient que Xamarin.Forms.AbsoluteLayout était fragile et difficile à travailler (personnellement, je pense qu'ils sont très pratiques surtout pour les mises en page proportionnelles, et de tout ce dont je me souviens , ils ne sont généralement pas un problème de performance). Ils ont référencé this article, qui a dit d'éviter d'utiliser AbsoluteLayouts - mais qui était un article spécifique à Android, et il faisait référence à Android.Widget.AbsoluteLayout.Comment les mises en page Xamarin.Forms sont-elles traduites en mises en page spécifiques à la plate-forme?

Alors ça m'a fait penser ... est-ce que Xamarin.Forms.Layout se traduit en quelque sorte en Android.Widget.AbsoluteLayout (je pense qu'ils sont complètement différents puisque Xamarin.Forms permet une taille/position proportionnelle)? Comment est-ce que Xamarin.Forms traduit diverses dispositions dans des dispositions spécifiques à la plate-forme?

+1

https://github.com/xamarin/Xamarin.Forms – Jason

+0

Très bien, merci pour la référence, je vais essayer de creuser dans le code et de découvrir la réponse. Diriez-vous d'éviter catégoriquement Xamarin.Forms.AbsoluteLayout? – jbyrd

+2

@jbyrd La ligne de fond pour un 'Android.Views.View' est que' VisualElementTracker' basé sur Forms 'appelle directement la méthode native 'View.Layout' avec les paramètres' x, y, width, height' pour relier les contrôles placement. Forms a son propre gestionnaire de disposition basé sur la hiérarchie parent qui effectue les calculs. J'ai un client qui a remplacé l'ensemble du système de mise en page Forms avec une conversion native aux contraintes LayoutParams et iOS d'Android, il a une conversion de build basée sur Fody et un système de cache d'exécution et atteint presque la vitesse de mise en page native. directeur. – SushiHangover

Répondre

3

Les mises en page fonctionnent différemment dans les formes Xamarin que leurs équivalents sur la plate-forme native. La mise en page absolue XF est pas juste un emballage autour de l'Android AbsoluteLayout.

Les mises en page dans XF sont similaires à la façon dont elles fonctionnent dans WPF et les autres plates-formes Microsoft. La mise en page demande d'abord à tous ses enfants de lui donner une taille préférée (mesure). Ensuite, il utilise sa logique pour arranger ses enfants. Les commandes intégrées enveloppent les contrôles natifs existants (par exemple, des cartes d'entrée vers UITextBox sur iOS et EditText sur Android).

Cela étant dit. Je suis d'accord que les mises en page absolues en général ne sont pas une bonne approche pour prendre en charge plusieurs tailles d'écran. Il existe d'autres dispositions plus flexibles qui vous aident à créer une approche générale d'une interface utilisateur "universelle".