Résumé du chapitre 2. Anatomie d’une application
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.
Dans une Xamarin.Forms application, les objets qui occupent de l’espace sur l’écran sont appelés éléments visuels, encapsulés par la VisualElement
classe. Les éléments visuels peuvent être divisés en trois catégories correspondant à ces classes :
Un Page
dérivé occupe l’écran entier, ou presque l’écran entier. Souvent, l’enfant d’une page est un Layout
dérivé pour organiser les éléments visuels enfants. Les enfants de l’objet Layout
peuvent être d’autres Layout
classes ou View
dérivés (souvent appelés éléments), qui sont des objets familiers tels que du texte, des bitmaps, des curseurs, des boutons, des zones de liste, etc.
Ce chapitre montre comment créer une application en mettant l’accent sur le Label
dérivé qui affiche du View
texte.
Say hello
Une fois la plateforme Xamarin installée, vous pouvez créer une Xamarin.Forms solution dans Visual Studio ou Visual Studio pour Mac. La solution Hello utilise une bibliothèque de classes portable pour le code commun.
Remarque
Les bibliothèques de classes portables ont été remplacées par des bibliothèques .NET Standard. Tous les exemples de code du livre ont été convertis pour utiliser des bibliothèques .NET standard.
Cet exemple illustre une Xamarin.Forms solution créée dans Visual Studio sans modification. La solution se compose de quatre projets :
- Hello, bibliothèque de classes portable (PCL) partagée par les autres projets
- Hello.Droid, un projet d’application pour Android
- Hello.iOS, un projet d’application pour iOS
- Hello.UWP, un projet d’application pour le plateforme Windows universelle (Windows 10 et Windows 10 Mobile)
Remarque
Xamarin.Forms ne prend plus en charge Windows 8.1, Windows Phone 8.1 ou Windows 10 Mobile, mais Xamarin.Forms les applications s’exécutent sur le bureau Windows 10.
Vous pouvez effectuer l’un de ces projets d’application le projet de démarrage, puis générer et exécuter le programme sur un appareil ou un simulateur.
Dans la plupart de vos Xamarin.Forms programmes, vous ne modifierez pas les projets d’application. Ces petits stubs restent souvent minuscules pour démarrer le programme. La plupart de vos efforts seront la bibliothèque commune à toutes les applications.
À l’intérieur des fichiers
Les visuels affichés par le programme Hello sont définis dans le constructeur de la App
classe. App
dérive de la Xamarin.Forms classe Application
.
Remarque
Modèles de solution Visual Studio pour Xamarin.Forms créer une page avec un fichier XAML. XAML n’est pas abordé dans ce livre jusqu’au chapitre 7.
La section Références du projet Hello PCL inclut les assemblys suivants Xamarin.Forms :
- Xamarin.Forms. Noyau
- Xamarin.Forms. Xaml
- Xamarin.FormsPlate-forme.
Les sections Références des cinq projets d’application incluent des assemblys supplémentaires qui s’appliquent aux plateformes individuelles :
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.UWP
- Xamarin.Forms. Platform.WinRT
- Xamarin.Forms. Platform.WinRT.Tablet
- Xamarin.Forms. Platform.WinRT.Phone
Remarque
Les sections Références de ces projets ne répertorient plus les assemblys. Au lieu de cela, le fichier projet contient des balises PackageReference référençant le Xamarin.Forms package NuGet. La section Références de Visual Studio répertorie le Xamarin.Forms package plutôt que les Xamarin.Forms assemblys.
Chacun des projets d’application contient un appel à la méthode statique Forms.Init
dans l’espace Xamarin.Forms
de noms. Cela initialise la Xamarin.Forms bibliothèque. Une version différente est Forms.Init
définie pour chaque plateforme. Les appels à cette méthode se trouvent dans les classes suivantes :
- iOS :
AppDelegate
- Android :
MainActivity
- UWP :
App
classe,OnLaunched
méthode
En outre, chaque plateforme doit instancier l’emplacement de classe App
dans la bibliothèque partagée. Cela se produit dans un appel aux LoadApplication
classes suivantes :
- iOS :
AppDelegate
- Android :
MainActivity
- UWP :
MainPage
Dans le cas contraire, ces projets d’application sont des programmes « ne rien faire » normaux.
PCL ou SAP ?
Il est possible de créer une Xamarin.Forms solution avec le code commun dans une bibliothèque de classes portable (PCL) ou un projet sap (Shared Asset Project). Pour créer une solution SAP, sélectionnez l’option Partagé dans Visual Studio. La solution HelloSap illustre le modèle SAP sans modification.
Remarque
Les bibliothèques de classes portables ont été remplacées par des bibliothèques .NET Standard. Tous les exemples de code du livre ont été convertis pour utiliser des bibliothèques .NET standard. Sinon, les bibliothèques PCL et .NET Standard sont conceptuellement très similaires.
L’approche de bibliothèque regroupe tout le code commun dans un projet de bibliothèque référencé par les projets d’application de plateforme. Avec l’approche SAP, le code commun existe efficacement dans tous les projets d’application de plateforme et est partagé entre eux.
La plupart des Xamarin.Forms développeurs préfèrent l’approche de la bibliothèque. Dans ce livre, la plupart des solutions utilisent une bibliothèque. Ceux qui utilisent SAP incluent un suffixe Sap dans le nom du projet.
Avec l’approche SAP, le code du projet partagé peut exécuter un code différent pour les différentes plateformes à l’aide des directives de préprocesseur C# (#if
, #elif
et #endif
) avec ces identificateurs prédéfinis :
- iOS :
__IOS__
- Android :
__ANDROID__
- UWP :
WINDOWS_UWP
Dans une bibliothèque partagée, vous pouvez déterminer la plateforme sur laquelle vous exécutez au moment de l’exécution, comme vous le verrez plus loin dans ce chapitre.
Étiquettes pour le texte
La solution Greetings montre comment ajouter un nouveau fichier C# au projet Greetings . Ce fichier définit une classe nommée GreetingsPage
qui dérive de ContentPage
. Dans ce livre, la plupart des projets contiennent un dérivé unique ContentPage
dont le nom est le nom du projet avec le suffixe Page
ajouté.
Le GreetingsPage
constructeur instancie une Label
vue, qui est la vue qui affiche du Xamarin.Forms texte. La Text
propriété est définie sur le texte affiché par le Label
. Ce programme définit la Label
Content
propriété de ContentPage
. Le constructeur de la App
classe instancie GreetingsPage
et le définit sur sa MainPage
propriété.
Le texte s’affiche dans le coin supérieur gauche de la page. Sur iOS, cela signifie qu’il chevauche la barre d’état de la page. Il existe plusieurs solutions à ce problème :
Solution 1. Inclure le remplissage sur la page
Définissez une Padding
propriété sur la page. Padding
est de type Thickness
, une structure avec quatre propriétés :
Padding
définit une zone à l’intérieur d’une page où le contenu est exclu. Cela permet Label
d’éviter de remplacer la barre d’état iOS.
Solution 2. Inclure le remplissage uniquement pour iOS (SAP uniquement)
Définissez une propriété « Padding » uniquement sur iOS à l’aide d’un SAP avec une directive de préprocesseur C#. Ceci est illustré dans la solution GreetingsSap.
Solution 3. Inclure le remplissage uniquement pour iOS (PCL ou SAP)
Dans la version utilisée Xamarin.Forms pour le livre, une Padding
propriété spécifique à iOS dans une bibliothèque PCL ou SAP peut être sélectionnée à l’aide de la méthode statique ou Device.OnPlatform<T>
statiqueDevice.OnPlatform
. Ces méthodes sont désormais déconseillées
Les Device.OnPlatform
méthodes sont utilisées pour exécuter du code spécifique à la plateforme ou pour sélectionner des valeurs spécifiques à la plateforme. En interne, ils utilisent la Device.OS
propriété statique en lecture seule, qui retourne un membre de l’énumération TargetPlatform
:
Les Device.OnPlatform
méthodes, la Device.OS
propriété et l’énumération TargetPlatform
sont désormais déconseillées. Utilisez plutôt la Device.RuntimePlatform
propriété et comparez la string
valeur de retour avec les champs statiques suivants :
iOS
, chaîne « iOS »Android
, chaîne « Android »UWP
, la chaîne « UWP », faisant référence à la plateforme Windows universelle
La Device.Idiom
propriété statique en lecture seule est liée. Cela retourne un membre du TargetIdiom
, qui a les membres suivants :
Desktop
Tablet
Phone
Unsupported
est inutilisé
Pour iOS et Android, le découpage entre Tablet
et Phone
est une largeur portrait de 600 unités. Pour la plateforme Windows, Desktop
indique une application UWP s’exécutant sous Windows 10 et Phone
indique une application UWP s’exécutant sous l’application Windows 10.
Solution 3a. Définir la marge sur l’étiquette
La Margin
propriété a été introduite trop tard pour être incluse dans le livre, mais elle est également de type Thickness
et vous pouvez la définir sur la Label
zone pour définir une zone en dehors de la vue incluse dans le calcul de la disposition de la vue.
La Padding
propriété est disponible uniquement sur et Page
sur Layout
les dérivés. La Margin
propriété est disponible sur tous les View
dérivés.
Solution 4. Centrer l’étiquette dans la page
Vous pouvez centrer l’intérieur Label
Page
(ou le placer à l’un des huit autres emplacements) en définissant les propriétés et VerticalOptions
les HorizontalOptions
propriétés du Label
type sur une valeur de typeLayoutOptions
. La LayoutOptions
structure définit deux propriétés :
Propriété
Alignment
de typeLayoutAlignment
, énumération avec quatre membres :Start
, ce qui signifie gauche ou supérieur selon l’orientation,Center
,End
ce qui signifie droite ou inférieure en fonction de l’orientation etFill
.Propriété
Expands
de typebool
.
En règle générale, ces propriétés ne sont pas utilisées directement. Au lieu de cela, les combinaisons de ces deux propriétés sont fournies par huit propriétés statiques en lecture seule de type LayoutOptions
:
LayoutOptions.Start
LayoutOptions.Center
LayoutOptions.End
LayoutOptions.Fill
LayoutOptions.StartAndExpand
LayoutOptions.CenterAndExpand
LayoutOptions.EndAndExpand
LayoutOptions.FillAndExpand
HorizontalOptions
et VerticalOptions
sont les propriétés les plus importantes dans Xamarin.Forms la disposition et sont abordées plus en détail dans le chapitre 4. Défilement de la pile.
Voici le résultat avec les HorizontalOptions
propriétés des VerticalOptions
Label
deux valeurs définies sur LayoutOptions.Center
:
Solution 5. Centrer le texte dans l’étiquette
Vous pouvez également centrer le texte (ou le placer dans huit autres emplacements de la page) en définissant les propriétés et VerticalTextAlignment
les HorizontalTextAlignment
propriétés d’un membre de Label
l’énumération TextAlignment
:
Start
, signification gauche ou supérieure (en fonction de l’orientation)Center
End
, signification droite ou inférieure (en fonction de l’orientation)
Ces deux propriétés sont définies uniquement par Label
, tandis que les VerticalAlignment
HorizontalAlignment
propriétés sont définies par View
et héritées par tous les View
dérivés. Les résultats visuels peuvent sembler similaires, mais ils sont très différents comme le montre le chapitre suivant.