• A Xamarin egy többplatformos szoftverfejlesztői környezet, amely lehetőséget ad Android, iOS, Windows Phone (8+) és Windows (8+) alkalmazások fejlesztésére a .NET keretrendszerre alapozva
Eseményvezérelt alkalmazások fejlesztése II
• lehetőséget ad közös kódbázissal rendelkező alkalmazások fejlesztésére, amelyeket natív alkalmazásokká (Objective-C, Java, …) fordít át
10. előadás
• a Xamarin.Forms csomag az architektúrát (MVVM) és a grafikus felületet is egységesíti
Xamarin alapismeretek
• alapja a Mono, amely a .NET keretrendszer alternatív megvalósítása Linux és MacOS rendszerekre
Giachetta Roberto
• a programcsomagok NuGet segítségével kezelhetők és frissíthetők
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
Xamarin alapismeretek
Alkalmazások felépítése Desktop alkalmazás C# kód (WinForms/WPF) Windows (Phone) alkalmazás C# kód (WinRT, UWP)
10:2
Xamarin.Forms alkalmazások felépítése
közös C# kódbázis (üzleti logika)
• Xamarin.Forms alkalmazások esetén a közös programegységek (osztálykönyvtárak) tartalmazzák
Portable Class Library
• a modellt, amely tartalmazza az üzleti logikát, szokványos eszközök segítségével felépítve
• a nézetmodellt, amelyet az alapvető eszközök segítségével tudunk felépíteni (ICommand, INotifyPropertyChange, …) Android C# kód (vezérlés, megjelenítés, perzisztencia)
• a nézetet, amely XAML alapon írunk le, és adatkötés (Binding) segítségével kapcsoljuk a nézetmodellhez
iOS C# kód (vezérlés, megjelenítés, perzisztencia)
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
• az alkalmazás vezérlését (App), amely meghatározza a közös viselkedést minden platformon
10:3
Xamarin alapismeretek
• a perzisztencia interfészét, a konkrét megvalósítás nélkül, amely platformonként eltérhet
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
Xamarin.Forms alkalmazások felépítése
Xamarin.Forms alkalmazások felépítése
• Az alkalmazások közös funkcionalitást Portable Class Library segítségével valósíthatjuk meg
• a közös programegységek is felruházhatóak platformspecifikus jellemzőkkel (Device)
Desktop alkalmazás C# kód (WinForms/WPF)
• A platformspecifikus programegységek (Android, iOS, Windows, WindowsPhone) tovább bővíthetik a közös funkcionalitást
• tartalmazza a perzisztencia megvalósítását, mivel az adattárolás módja platformonként eltér • tartalmazhatnak speciális nézetbeli elemeket, amelyek adott platformban érhetőek csak el, illetve lehetőséget a nézet adaptálására (pl. Material Design)
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Portable Class Library Xamarin.Forms Portable Class Library
Windows C# kód (perzisztencia, …) 10:6
1
Xamarin alapismeretek
Xamarin alapismeretek
• Azt alkalmazások számára a közös belépési pontot az alkalmazás (Application) jelenti
• A Xamarin.Forms alkalmazások egy egységes grafikus felülettel rendelkeznek, amelyeket a platform egyedi vezérlőire fordít le a rendszer
Xamarin.Forms alkalmazások felépítése
Xamarin.Forms grafikus felület felépítése
• tartalmazza a nyitóképernyőt (MainPage), valamint az alkalmazás életciklus eseménykezelőit (OnStart, OnResume, OnSleep)
• kezeli az alkalmazás tulajdonságait (Properties), erőforrásait (Resources)
• a felület lapokból (Page) áll, amelyek különböző felépítéssel rendelkezhetnek • pl. egyszerű tartalom (ContentPage), többlapos (TabbedPage), húzható (CarouselPage), többnézetű (MasterDetailPage)
• Az alkalmazást minden platform egyedileg kezeli és tölti be, pl.:
• a lapoknak lehet címe (Title), háttere (BackgroundImage) és ikonja (Icon), valamint platformspecifikus eszköztára (ToolbarItems)
• Android platformon a főtevékenység (MainActivity) létrehozáskor (OnCreate)
• Windows platformon a főképernyő (MainPage) a konstruktor lefutásakor ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
• megjeleníthetnek üzeneteket (DisplayAlert), valamint választódialógust (DisplayActionSheet) 10:7
Xamarin alapismeretek
• a tartalmat elrendező (Layout) elemekkel igazíthatjuk el, pl. rács (Grid), vízszintes/függőleges lista (StackLayout), abszolút pozíciós (AbsoluteLayout), relatív pozíciós (RelativeLayout) • a tartalmat nézet (View) elemekből építhetjük fel, pl. Label, Button, DatePicker, Entry (egy soros szövegdoboz), Editor (több soros szövegdoboz), Picker (kiválasztó), TableView, Image, WebView
• a nézeten megjelenő betűk alapértelmezetten platformspecifikusak, és mértük is platformnak megfelelően szabályozható (Small, Medium, …)
• lehetőségünk van egyedileg formázott szöveg megjelenítésére (FormattedString) 10:9
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
Xamarin alapismeretek
• Az alkalmazások tulajdonságait, képességeit az alkalmazás leíró (application manifest) segítségével írhatjuk le
• Az alkalmazások rendelkezhetnek platformfüggetlen, és platformfüggő erőforrásokkal
Alkalmazás tulajdonságok és kiehlyezés
10:10
Alkalmazás erőforrások
• tartalmazza az alkalmazás nevét, leírását, verzióját és a fejlesztő adatait
• megadja az engedélyeket a rendszerhez, és más alkalmazásokhoz, pl. internet, kamera, pozicionálás, telefonkönyv, … • Android esetén az AndroidManifest.xml fájl, Windows esetén a Package.appmanifest fájl tartalmazza a leírást
• A megfelelően konfigurált alkalmazások kihelyezhetőek fizikai eszközökre, illetve elhelyezhetőek a platform alkalmazásboltjában is, ehhez az alkalmazást megfelelő aláírással kell ellátnunk, amely szintén platformspecifikus ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:8
Xamarin alapismeretek
Xamarin.Forms grafikus felület felépítése
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:11
• a nézethez használat erőforrások (stílusok, animációk, …) a nézetben direkt (Resources), vagy erőforrásgyűjtemény (ResourceDictionary) formájában lehetnek jelen • az Android platform megkülönbözteti
• a felügyelt erőforrásokat (Resources), amelyek tartalmat egyedileg illeszti be az alkalmazásba (pl. ikon)
• a felügyeletmentes erőforrásokat (Assets), amelyek tartalma nyersen kerül az alkalmazásba
• a Windows platform speciális erőforrásként kezeli az alkalmazás ikonjait (Assets) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:12
2
Xamarin alapismeretek
Xamarin alapismeretek
Feladat: Készítsünk egy egyszerű számológépet, amellyel a négy alapműveletet végezhetjük el, illetve láthatjuk korábbi műveleteinket is.
Tervezés:
Példa
Példa
• a modell (CalculatorModel) biztosítja a számológép funkcionalitást, ezt újrahasznosítjuk
• a nézetben (MainPage) elhelyezünk egy rácsot, benne a beviteli mezőt (Entry), a gombokat (Button), valamint a számítások listáját (Label) • a gombokhoz közös eseménykezelőt rendelünk (Button_Blick), és a gomb szövege alapján döntünk a műveletről • az eredményről figyelmeztető üzenetet küldünk (DisplayAlert) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:13
Xamarin alapismeretek
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
MVVM architektúra
MVVM architektúra
• A Xamarin.Forms támogatja az MVVM architektúra alapú fejlesztést, így biztosított
• az adatkötés (Binding) a nézet oldalon, amelynek megadhatunk tetszőleges forrást (BindingContext) • minden vezérlőnek külön is megadható forrás a BindingContext tulajdonság segítségével
• a változásjelzés (INotifyPropertyChanged, ObservableCollection), valamint a parancsvégrehajtás (ICommand, Command, Command) nézetmodell oldalon
• az alkalmazás vezérlése az alkalmazás (App osztály) segítségével
• a nézet adatforrását a MainPage tulajdonság BindingContext tulajdonságán keresztül adhatjuk meg, pl.: ViewModel viewModel = new ViewModel(model); MainPage = new MainPage(); MainPage.BindingContext = viewModel; // nézetmodell befecskendezése
• az elnevezett elemekre (x:Name) is hivatkozhatunk a kötésben (x:Reference), pl.:
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:14
10:15
• a nézet cseréjét a MainPage tulajdonságon keresztül végezhetjük, ám ehelyett célszerű több lapot tartalmazó nézet használata (pl. TabbedPage, MasterDetailPage) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
Xamarin alapismeretek
Feladat: Készítsünk egy egyszerű számológépet, amellyel a négy alapműveletet végezhetjük el, illetve láthatjuk korábbi műveleteinket is.
Tervezés:
Példa
10:16
Példa
• valósítsunk meg MVVM architektúrát a nézetmodell kiemelésével
• a nézetmodell (CalculatorViewModel) tartalmazza az aktuális értéket (NumberFieldValue), a számítások listáját (Calculations) és a számítást parancs formájában (CalculateCommand) • a számítási hibákkal kapcsolatosan eseményt küld (ErrorOccured)
• az alkalmazás példányosítja és összeállítja az alkalmazás rétegeit, és kezeli a számítási hibák eseményeit ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:17
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:18
3
Xamarin alapismeretek
Xamarin alapismeretek
Megvalósítás (MainPage.xaml):
• A mobil/táblagépes környezetben alkalmazásunknak számos speciális követelményt kell teljesíteni
ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
10:19
• könnyű áttekinthetőség, infografikus megjelenítés
• folyamatos, gyors működés aszinkron tevékenységekkel • alkalmazkodás (resposiveness): az alkalmazás • különböző hardvereken,
• különböző méretű/felbontású képernyőkön, • különböző tájolással (portré/tájkép),
• különböző üzemmódokban (teljes képernyő, oldalra zárt, …) futhat
• kézmozdulatok kezelése, és kihasználása
• speciális hardverek igénybevétele (GPS, gyorsulásmérő, …) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II
Xamarin alapismeretek
Xamarin alapismeretek
• Célszerű az alkalmazás vezérlésében a felhasználó kézmozdulataira támaszkodni
• A mobil eszközök képernyőmérete jelentősen eltérhet, és az alkalmazásunknak alkalmazkodnia kell a teljes képernyős megjelenítéshez
Kézmozdulatok kezelése
• bármely vezérlőre állíthatunk kézmozdulat érzékelést (GestureRecognizer), így tetszőleges tevékenységet (Command) rendelhetünk bármely vezérlőhöz
• támogatott az érintés (TapGestureRecognizer), a csíptetés (PinchGestureRecognizer) és a húzás (PanGestureRecognizer), illetve tetszőleges egyedi mozdulat megvalósítása (IGestureRecognizer), pl.: