Partager via


Résumé du chapitre 14. Disposition absolue

Remarque

Ce livre a été publié au printemps 2016 et n’a pas été mis à jour depuis. Il y a beaucoup dans le livre qui reste précieux, mais certains documents sont obsolètes, et certains sujets ne sont plus entièrement corrects ou complets.

Comme StackLayout, AbsoluteLayout dérive et Layout<View> hérite d’une Children propriété. AbsoluteLayout implémente un système de disposition qui oblige le programmeur à spécifier les positions de ses enfants et, éventuellement, leur taille. La position est spécifiée par le coin supérieur gauche de l’enfant par rapport au coin supérieur gauche des unités indépendantes de l’appareil AbsoluteLayout . AbsoluteLayout implémente également une fonctionnalité de positionnement et de dimensionnement proportionnels.

AbsoluteLayout doit être considéré comme un système de disposition à usage spécial à utiliser uniquement lorsque le programmeur peut imposer une taille aux enfants (par exemple, BoxView des éléments) ou lorsque la taille de l’élément n’affecte pas le positionnement d’autres enfants. Les propriétés et VerticalOptions les HorizontalOptions propriétés n’ont aucun effet sur les enfants d’un AbsoluteLayout.

Ce chapitre présente également la fonctionnalité importante des propriétés pouvant être liées attachées qui permettent aux propriétés définies dans une classe (dans ce cas AbsoluteLayout) d’être attachées à une autre classe (enfant de l’objet AbsoluteLayout).

AbsoluteLayout dans le code

Vous pouvez ajouter un enfant à la Children collection d’une AbsoluteLayout méthode standard Add , mais AbsoluteLayout fournit également une méthode étendue Add qui vous permet de spécifier un Rectangle. Une autre Add méthode ne nécessite qu’un Point, auquel cas l’enfant n’est pas contraint et se dimensionne lui-même.

Vous pouvez créer une Rectangle valeur avec un constructeur qui nécessite quatre valeurs : les deux premières indiquant la position du coin supérieur gauche de l’enfant par rapport à son parent, et les deux autres indiquant la taille de l’enfant. Vous pouvez également utiliser un constructeur qui nécessite une Point valeur et une Size valeur.

Ces Add méthodes sont illustrées dans AbsoluteDemo, qui positionne BoxView les éléments à l’aide Rectangle de valeurs et d’un Label élément à l’aide d’une Point valeur.

L’exemple ChessboardFixed utilise 32 BoxView éléments pour créer le modèle d’échiquier. Le programme donne aux BoxView éléments une taille codée en dur de 35 unités carrées. Il AbsoluteLayout a sa HorizontalOptions valeur et VerticalOptions définie LayoutOptions.Centersur , ce qui provoque la AbsoluteLayout taille totale de 280 unités carrées.

Propriétés pouvant être liées jointes

Il est également possible de définir la position et, éventuellement, la taille d’un enfant d’une AbsoluteLayout fois qu’il a été ajouté à la collection à l’aide Children de la méthode AbsoluteLayout.SetLayoutBoundsstatique. Le premier argument est l’enfant ; la seconde est un Rectangle objet. Vous pouvez spécifier que les tailles enfants elles-mêmes horizontalement et/ou verticalement en définissant des valeurs de largeur et de hauteur sur la AbsoluteLayout.AutoSize constante.

L’exemple ChessboardDynamic place le AbsoluteLayout gestionnaire ContentView avec un SizeChanged gestionnaire pour appeler AbsoluteLayout.SetLayoutBounds tous les enfants pour les rendre aussi volumineux que possible.

La propriété pouvant être liée jointe qui AbsoluteLayout définit est le champ statique en lecture seule du type BindableProperty nommé AbsoluteLayout.LayoutBoundsProperty. La méthode statique AbsoluteLayout.SetLayoutBounds est implémentée en appelant SetValue l’enfant avec le AbsoluteLayout.LayoutBoundsProperty. L’enfant contient un dictionnaire dans lequel la propriété pouvant être liée jointe et sa valeur sont stockées. Pendant la disposition, la AbsoluteLayout valeur peut être obtenue en appelant AbsoluteLayout.GetLayoutBounds, qui est implémentée avec un GetValue appel.

Dimensionnement et positionnement proportionnels

AbsoluteLayout implémente une fonctionnalité de dimensionnement et de positionnement proportionnels. La classe définit une deuxième propriété LayoutFlagsPropertypouvant être liée, avec les méthodes AbsoluteLayout.SetLayoutFlags statiques associées et AbsoluteLayout.GetLayoutFlags.

L’argument auquel AbsoluteLayout.SetLayoutFlags et la valeur de AbsoluteLayout.GetLayoutFlags retour sont une valeur de type AbsoluteLayoutFlags, une énumération avec les membres suivants :

Vous pouvez les combiner avec l’opérateur OR au niveau du bit C#.

Avec ces indicateurs définis, certaines propriétés de la Rectangle structure des limites de disposition utilisées pour positionner et dimensionner l’enfant sont interprétées proportionnellement.

Lorsque l’indicateur WidthProportional est défini, une Width valeur de 1 signifie que l’enfant est la même largeur que le AbsoluteLayout. Une approche similaire est utilisée pour la hauteur.

Le positionnement proportionnel prend en compte la taille. Lorsque l’indicateur XProportional est défini, la X propriété des limites de Rectangle disposition est proportionnelle. La valeur 0 signifie que le bord gauche de l’enfant est positionné au bord gauche du bord gauche, AbsoluteLayoutmais qu’une position de 1 signifie que le bord droit de l’enfant est positionné au bord droit du AbsoluteLayout, pas au-delà du bord droit de l’enfant AbsoluteLayout comme prévu. Une X propriété de 0,5 centre l’enfant horizontalement dans le AbsoluteLayout.

L’exemple ChessboardProportional illustre l’utilisation du dimensionnement et du positionnement proportionnels.

Utilisation de coordonnées proportionnelles

Parfois, il est plus facile de penser à un positionnement proportionnel différemment de la façon dont il est implémenté dans le AbsoluteLayout. Vous préférerez peut-être travailler avec des coordonnées proportionnelles où une X propriété de 1 positionne le bord gauche de l’enfant (plutôt que le bord droit) sur le bord droit du AbsoluteLayout.

Ce schéma de positionnement alternatif peut être appelé « coordonnées enfants fractionnaires ». Vous pouvez convertir des coordonnées enfants fractionnaires en limites de disposition requises pour AbsoluteLayout utiliser les formules suivantes :

layoutBounds.X = (fractionalChildCoordinate.X / (1 - layoutBounds.Width))

layoutBounds.Y = (fractionalChildCoordinate.Y / (1 - layoutBounds.Height))

L’exemple ProportionalCoordinateCalc illustre cela.

AbsoluteLayout et XAML

Vous pouvez utiliser un AbsoluteLayout code XAML et définir les propriétés pouvant être liées jointes sur les enfants d’un AbsoluteLayout attribut à l’aide de valeurs d’attribut et AbsoluteLayout.LayoutBounds AbsoluteLayout.LayoutFlags. Ceci est illustré dans les exemples AbsoluteXamlDemo et ChessboardXaml. Ce dernier programme contient 32 BoxView éléments, mais utilise un implicite Style qui inclut la AbsoluteLayout.LayoutFlags propriété pour conserver le balisage au minimum.

Un attribut en XAML qui se compose d’un nom de classe, d’un point et d’un nom de propriété est toujours une propriété pouvant être liée attachée.

Superpositions

Vous pouvez utiliser AbsoluteLayout pour construire une superposition, qui couvre la page avec d’autres contrôles, peut-être pour protéger l’utilisateur de l’interaction avec les contrôles normaux de la page.

L’exemple SimpleOverlay illustre cette technique, et montre également la ProgressBarmesure dans laquelle un programme a terminé une tâche.

Un peu d’amusement

L’exemple DotMatrixClock affiche l’heure actuelle avec un affichage de matrice de points 5x7 simulé. Chaque point est un BoxView (il y a 228 d’entre eux) dimensionné et positionné sur le AbsoluteLayout.

Capture d’écran triple de l’horloge de matrice de points

Le programme BouncingText anime deux Label objets pour rebondir horizontalement et verticalement sur l’écran.