60
Xamarin.Forms Montreal Mobile .NET Developers 10 Juin 2015 Laurent Duveau [email protected] AngularJS, Azure et Xamarin MVP / MCT / RD @laurentduveau Montreal ldex.ca

Xamarin.Forms [french]

Embed Size (px)

Citation preview

Page 1: Xamarin.Forms [french]

Xamarin.Forms

Montreal Mobile .NET Developers 10 Juin 2015

Laurent [email protected]

AngularJS, Azure et

Xamarin

MVP / MCT / RD @laurentduveau Montrealldex.ca

Page 2: Xamarin.Forms [french]

2Xamarin.Forms – Montreal Mobile .NET Developers

Mes services

Besoin

d’aide?

Web/HTML5/AngularJS

Xamarin

Contactez moi!

www.LDEX.ca

ASP.NET

Page 3: Xamarin.Forms [french]

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

Page 4: Xamarin.Forms [french]

Android, iOS et Windows…

Page 5: Xamarin.Forms [french]

UX iOS != Android != Windows

Page 6: Xamarin.Forms [french]

6Xamarin.Forms – Montreal Mobile .NET Developers

UX Différente

Page 7: Xamarin.Forms [french]

7Xamarin.Forms – Montreal Mobile .NET Developers

UX Différente

Page 8: Xamarin.Forms [french]

8Xamarin.Forms – Montreal Mobile .NET Developers

Navigation

iOS (iPhone) Android OS

Application Applicatif + hardware

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

Page 9: Xamarin.Forms [french]

9Xamarin.Forms – Montreal Mobile .NET Developers

Navigation

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

Page 10: Xamarin.Forms [french]

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

Page 11: Xamarin.Forms [french]

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

Page 12: Xamarin.Forms [french]

Xamarin.Forms

Page 13: Xamarin.Forms [french]

13Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms:

Partage étendu à la couche UI!approche Xamarin traditionnelle

Shared UI Code

Xamarin et Xamarin.Forms

Page 14: Xamarin.Forms [french]

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.

Page 15: Xamarin.Forms [french]

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

Page 16: Xamarin.Forms [french]

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

Page 17: Xamarin.Forms [french]

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?

Page 18: Xamarin.Forms [french]

18Xamarin.Forms – Montreal Mobile .NET Developers

Content MasterDetail Navigation Tabbed Carousel

Pages

Page 19: Xamarin.Forms [french]

19Xamarin.Forms – Montreal Mobile .NET Developers

Stack Absolute Relative Grid ContentView ScrollView Frame

Layouts

Page 20: Xamarin.Forms [french]

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

Page 21: Xamarin.Forms [french]

21Xamarin.Forms – Montreal Mobile .NET Developers

Ecosystème de contrôles

Page 22: Xamarin.Forms [french]

DEMONSTRATION

Une première app Xamarin.Forms

Page 23: Xamarin.Forms [french]

23Xamarin.Forms – Montreal Mobile .NET Developers

Xamarin.Forms est un package NuGet

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

Page 24: Xamarin.Forms [french]

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>

Page 25: Xamarin.Forms [french]

25Xamarin.Forms – Montreal Mobile .NET Developers

XAML

XAML différent du XAML Microsoft

=> Pas de designer Visual Studio!

Page 26: Xamarin.Forms [french]

26Xamarin.Forms – Montreal Mobile .NET Developers

Code spécifique

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

{ ...

}

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

{ ...

}

Page 27: Xamarin.Forms [french]

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);

}

);

Page 28: Xamarin.Forms [french]

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);

}

);

Page 29: Xamarin.Forms [french]

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>

Page 30: Xamarin.Forms [french]

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();

Page 31: Xamarin.Forms [french]

DEMONSTRATION

XAML, navigation et code spécifique

Page 32: Xamarin.Forms [french]

32Xamarin.Forms – Montreal Mobile .NET Developers

Model-View-ViewModel

ModelView ViewModel

Affichage Intéraction avec la

vue

Objets du domaine

d’affaire

Events

DataData

Page 33: Xamarin.Forms [french]

33Xamarin.Forms – Montreal Mobile .NET Developers

Model-View-ViewModel

ModelView ViewModel

Data Binding

Xamarin.Forms

Events

Data

Page 34: Xamarin.Forms [french]

34Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

Page 35: Xamarin.Forms [french]

35Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

Page 36: Xamarin.Forms [french]

36Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

Page 37: Xamarin.Forms [french]

37Xamarin.Forms – Montreal Mobile .NET Developers

Data Binding

binding bi-directionnel:

Page 38: Xamarin.Forms [french]

DEMONSTRATION

App Stock

Page 39: Xamarin.Forms [french]
Page 40: Xamarin.Forms [french]

Étendre Xamarin.Forms

Page 41: Xamarin.Forms [french]

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

Page 42: Xamarin.Forms [french]

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/

Page 43: Xamarin.Forms [french]

43Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

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

Page 44: Xamarin.Forms [french]

44Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

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

Page 45: Xamarin.Forms [french]

45Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

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

Page 46: Xamarin.Forms [french]

46Xamarin.Forms – Montreal Mobile .NET Developers

Custom Renderer

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

Page 47: Xamarin.Forms [french]

47Xamarin.Forms – Montreal Mobile .NET Developers

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

Custom Renderer

Page 48: Xamarin.Forms [french]

48Xamarin.Forms – Montreal Mobile .NET Developers

Extensibilité

Dependency Service

Partager les fonctionnalités spécifiques aux

plateformes à l’aide d’interfaces.

Page 49: Xamarin.Forms [french]

49Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

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

Page 50: Xamarin.Forms [french]

50Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

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

Page 51: Xamarin.Forms [french]

51Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

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

Page 52: Xamarin.Forms [french]

52Xamarin.Forms – Montreal Mobile .NET Developers

Dependency Service

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

Page 53: Xamarin.Forms [french]

DEMONSTRATION

Synthétiseur vocal

Page 54: Xamarin.Forms [french]

54Xamarin.Forms – Montreal Mobile .NET Developers

Animations

API d’animation multi-plateforme

Asynchrone (async/await)

Page 55: Xamarin.Forms [french]

www.github.com/JamesMontemagno/FormsAnimations

Page 56: Xamarin.Forms [french]
Page 57: Xamarin.Forms [french]

57Xamarin.Forms – Montreal Mobile .NET Developers

Messaging Center

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

MessagingCenter.Send(T item, string message);

Page 58: Xamarin.Forms [french]

58Xamarin.Forms – Montreal Mobile .NET Developers

Messaging Center

Page maître:

Page détails:

Page 59: Xamarin.Forms [french]

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

Page 60: Xamarin.Forms [french]

60Xamarin.Forms – Montreal Mobile .NET Developers