Xamarin.Forms [french]

Preview:

Citation preview

Xamarin.Forms

Montreal Mobile .NET Developers 10 Juin 2015

Laurent Duveaulaurent@ldex.ca

AngularJS, Azure et

Xamarin

MVP / MCT / RD @laurentduveau Montrealldex.ca

2Xamarin.Forms – Montreal Mobile .NET Developers

Mes services

Besoin

d’aide?

Web/HTML5/AngularJS

Xamarin

Contactez moi!

www.LDEX.ca

ASP.NET

3Xamarin.Forms – Montreal Mobile .NET Developers

Agenda

Introduction

Développement mobile multi-plateformes

Xamarin.Forms

Présentation

Principes de fonctionnement

XAML pour les écrans

Étendre les fonctionnalités

Android, iOS et Windows…

UX iOS != Android != Windows

6Xamarin.Forms – Montreal Mobile .NET Developers

UX Différente

7Xamarin.Forms – Montreal Mobile .NET Developers

UX Différente

8Xamarin.Forms – Montreal Mobile .NET Developers

Navigation

iOS (iPhone) Android OS

Application Applicatif + hardware

1 bouton système 3-4 boutons systèmes

9Xamarin.Forms – Montreal Mobile .NET Developers

Navigation

iOS: pas de bouton “précédent” physique.

10Xamarin.Forms – Montreal Mobile .NET Developers

Affichage et résolutions

iOS Android OS

3 Devices 1000+ Devices

6 résolutions Écrans: 3,7’ – 10,1’

Multitude de resolutions!!

iPhone iPod iPad

11Xamarin.Forms – Montreal Mobile .NET Developers

Vocabulaire

Android iOS Windows Phone

Layout (.axml) UIView (.xib ou

storyboard)

View (.xaml)

Activity UIViewController Page

Fragment UIView UserControl

Intent UINavigationController Frame

- UIApplication Application

Xamarin.Forms

13Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms:

Partage étendu à la couche UI!approche Xamarin traditionnelle

Shared UI Code

Xamarin et Xamarin.Forms

14Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms

Bâtir une app native iOS, Android et Windows à partir

d’une base de code C# unique.

15Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms

Partage aussi l’interface graphique!

Intégration possible de code spécifique à une

plateforme

Prise en main facile, pas de connaissance

spécifique des OS

Plus de 40 contrôles graphiques disponibles

16Xamarin.Forms – Montreal Mobile .NET Developers

Comment ça marche ?

A l’exécution, chaque élément

graphique Xamarin.Forms est

généré dans son équivalent

spécifique à la plateforme cible

Une seule API pour générerdes interfaces natives et spécifiques à l’OS

17Xamarin.Forms – Montreal Mobile .NET Developers

Pages, Layouts, et Contrôles

En code ou en XAML (MVVM)

Data Binding bidirectionnel

Navigation

API commune d’animation

Messaging Center

Accès aux API natives avec des

CustomRenderers et

DependencyService

Camera, GPS, …

NFC, … sur Android

PassKit, … sur iOS

Tiles, … sur WP

Shared UI Code

Qu’est ce qui est disponible?

18Xamarin.Forms – Montreal Mobile .NET Developers

Content MasterDetail Navigation Tabbed Carousel

Pages

19Xamarin.Forms – Montreal Mobile .NET Developers

Stack Absolute Relative Grid ContentView ScrollView Frame

Layouts

20Xamarin.Forms – Montreal Mobile .NET Developers

ActivityIndicator BoxView Button DatePicker Editor

Entry Image Label ListView Map

OpenGLView Picker ProgressBar SearchBar Slider

Stepper TableView TimePicker WebView EntryCell

ImageCell SwitchCell TextCell ViewCell

Contrôles

21Xamarin.Forms – Montreal Mobile .NET Developers

Ecosystème de contrôles

DEMONSTRATION

Une première app Xamarin.Forms

23Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms est un package NuGet

Le mettre à jour! (même sur un nouveau projet)

24Xamarin.Forms – Montreal Mobile .NET Developers

C# ou XAML

var red = new Label{

Text = "Stop",BackgroundColor = Color.Red,FontSize = 20,WidthRequest = 100

};var yellow = new Label{

Text = "Slow down",BackgroundColor = Color.Yellow,FontSize = 20,WidthRequest = 100

};var green = new Label{

Text = "Go",BackgroundColor = Color.Green,FontSize = 20,WidthRequest = 200

};

Content = new StackLayout{

Spacing = 10,VerticalOptions = LayoutOptions.Center,Orientation = StackOrientation.Horizontal,HorizontalOptions = LayoutOptions.Center,Children = { red, yellow, green }

};

<?xml version="1.0" encoding="utf-8" ?><ContentPage xmlns="http://xamarin.com/schemas/2014/forms" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" x:Class="HelloXamarinFormsWorldXaml.StackLayoutExample3"

Padding="20"><StackLayout Spacing="10"

VerticalOptions="Center"Orientation="Horizontal"HorizontalOptions="Center">

<Label Text="Stop"BackgroundColor="Red"FontSize="20"WidthRequest="100" />

<Label Text="Slow down"BackgroundColor="Yellow"FontSize="20"WidthRequest="100" />

<Label Text="Go"BackgroundColor="Green"FontSize="20"WidthRequest="200" />

</StackLayout></ContentPage>

25Xamarin.Forms – Montreal Mobile .NET Developers

XAML

XAML différent du XAML Microsoft

=> Pas de designer Visual Studio!

26Xamarin.Forms – Montreal Mobile .NET Developers

Code spécifique

if (Device.OS == TargetPlatform.WinPhone) // ou iOS, Android

{ ...

}

if (Device.Idiom == TargetIdiom.Phone) // ou .Tablet

{ ...

}

27Xamarin.Forms – Montreal Mobile .NET Developers

Code spécifique

Device.OnPlatform (

iOS: () => {

page.BackgroundImage = "back.png";

label.FontFamily = "HelveticaNeue-Thin";

label.FontSize = 20;

},

Android: () => {

page.BackgroundColor = Color.FromHex ("#AA66CC");

label.FontFamily = "sans-serif-condensed";

label.FontSize = Device.GetNamedSize (NamedSize.Medium, label);

}

);

28Xamarin.Forms – Montreal Mobile .NET Developers

Code spécifique

Device.OnPlatform (

iOS: () => {

page.BackgroundImage = "back.png";

label.FontFamily = "HelveticaNeue-Thin";

label.FontSize = 20;

},

Android: () => {

page.BackgroundColor = Color.FromHex ("#AA66CC");

label.FontFamily = "sans-serif-condensed";

label.FontSize = Device.GetNamedSize (NamedSize.Medium, label);

}

);

29Xamarin.Forms – Montreal Mobile .NET Developers

En XAML

<BoxView HorizontalOptions="Center">

<BoxView.Color>

<OnPlatform x:TypeArguments="Color"

iOS="Green"

Android="#738182"

WinPhone="Accent" />

</BoxView.Color>

<BoxView.WidthRequest>

<OnPlatform x:TypeArguments="x:Double"

iOS="30"

Android="40"

WinPhone="50" />

</BoxView.WidthRequest>

</BoxView>

30Xamarin.Forms – Montreal Mobile .NET Developers

Navigation

Root Page

Utiliser un NavigationPage: implémente Ia navigation dans les

pages

Navigation Standard

Navigation.PushAsync(nextPage);

Navigation.PopAsync();

Navigation Modale

Navigation.PushModalAsync(modalPage);

Navigation.PopModalAsync();

DEMONSTRATION

XAML, navigation et code spécifique

32Xamarin.Forms – Montreal Mobile .NET Developers

Model-View-ViewModel

ModelView ViewModel

Affichage Intéraction avec la

vue

Objets du domaine

d’affaire

Events

DataData

33Xamarin.Forms – Montreal Mobile .NET Developers

Model-View-ViewModel

ModelView ViewModel

Data Binding

Xamarin.Forms

Events

Data

34Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

35Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

36Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

37Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

binding bi-directionnel:

DEMONSTRATION

App Stock

Étendre Xamarin.Forms

41Xamarin.Forms – Montreal Mobile .NET Developers

Étendre Xamarin.Forms

Créer ou personnaliser les contrôles UI

Custom Renderers

Utiliser des services à implémentation spécifique pour chaque

plateforme

Dependency Service

42Xamarin.Forms – Montreal Mobile .NET Developers

Extensibilité

Custom Renderer Hériter d’un contrôle existant

Créer un nouveau contrôle

Ajout de propriétés bindable

http://developer.xamarin.com/guides/cross-platform/xamarin-forms/custom-renderer/

43Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

Contrôle de saisie de base que l’on désire étendre:

44Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

Étape 1: Créer le contrôle étendu Dans le projet commun (PCL):

45Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

Étape 2: L’utiliser dans une page Dans le projet commun (PCL):

46Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

Étape 3: Implémenter le code du renderer Dans les projets pour chaque plateforme

47Xamarin.Forms – Montreal Mobile .NET Developers

Étape 4: Exporter le renderer Dans les projets pour chaque plateforme:

Custom Renderer

48Xamarin.Forms – Montreal Mobile .NET Developers

Extensibilité

Dependency Service

Partager les fonctionnalités spécifiques aux

plateformes à l’aide d’interfaces.

49Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

Étape 1: Créer une interface Dans le projet commun (PCL):

50Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

Étape 2: Implémenter le code spécifique Dans les projets pour chaque plateforme:

51Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

Étape 3: Exposer le service Dans les projets pour chaque plateforme:

52Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

Étape 4: Utiliser depuis le code commun Dans le projet commun (PCL):

DEMONSTRATION

Synthétiseur vocal

54Xamarin.Forms – Montreal Mobile .NET Developers

Animations

API d’animation multi-plateforme

Asynchrone (async/await)

www.github.com/JamesMontemagno/FormsAnimations

57Xamarin.Forms – Montreal Mobile .NET Developers

Messaging Center

MessagingCenter.Subscribe<T>(object subscriber, string message, Action<T> callback);

MessagingCenter.Send(T item, string message);

58Xamarin.Forms – Montreal Mobile .NET Developers

Messaging Center

Page maître:

Page détails:

59Xamarin.Forms – Montreal Mobile .NET Developers

Pour aller plus loin…

Documentationhttp://developer.xamarin.com/guides/cross-platform/xamarin-forms/

XAMLhttp://developer.xamarin.com/guides/cross-platform/xamarin-forms/xaml-

for-xamarin-forms/

Exempleshttps://github.com/xamarin/xamarin-forms-samples

60Xamarin.Forms – Montreal Mobile .NET Developers