Eseményvezérelt alkalmazások fejlesztése II 11. előadás. Platformspecifikus Xamarin alkalmazások. Platformspecifikus Xamarin alkalmazások

Hasonló dokumentumok
Eseményvezérelt alkalmazások fejlesztése II 11. előadás. Platformspecifikus Xamarin alkalmazások. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése II 11. előadás. Window Runtime specifikus alkalmazások megvalósítása. Giachetta Roberto

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek. Windows Runtime alapismeretek A Windows Runtime

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET)

Eseményvezérelt alkalmazások fejlesztése II 5. előadás. Windows Forms alkalmazások párhuzamosítása. Cserép Máté

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET) Cserép Máté.

Programozási technológia

Swing GUI készítése NetBeans IDE segítségével

3. Beadandó feladat dokumentáció

Eseményvezérelt alkalmazások fejlesztése I 11. előadás. Szoftverek tesztelése

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése

3. Beadandó feladat dokumentáció

Webes alkalmazások fejlesztése 4. előadás. Megjelenítés és tartalomkezelés (ASP.NET Core) Cserép Máté

1. Beadandó feladat dokumentáció

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

Johanyák Zsolt Csaba: Ugráló gomb oktatási segédlet Copyright 2008 Johanyák Zsolt Csaba

Dropbox - online fájltárolás és megosztás

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Window Runtime alapismeretek, Modern UI alapú alkalmazások.

Globalizáció, Lokalizáció

Thermo1 Graph. Felhasználói segédlet

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET Core) Cserép Máté

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Xamarin alapismeretek. Xamarin alapismeretek. Xamarin alapismeretek. Xamarin alapismeretek

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Webes alkalmazások fejlesztése 10. előadás. Szolgáltatás alapú rendszerek megvalósítása (ASP.NET WebAPI) Cserép Máté

1. ábra Fájl feltöltése 2. ábra Megtekintés

Két csomag elemeiből lehet a felületet elkészíteni: awt: heavy weight komponensek; swing: light weight komponensek (időben később).

Haladóprogramozás (C#) , I. félév BMF NIK

Eseményvezérelt alkalmazások fejlesztése II 4. előadás. Windows Forms alkalmazások architektúrája és tesztelése. Giachetta Roberto

Grafikus felhasználói felületek. Dr. Szendrei Rudolf Informatikai Kar Eötvös Loránd Tudományegyetem. Programozási technológia I. Dr.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

ANDROID ALKALMAZÁSFEJLESZTÉS

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Vizuális és eseményvezérelt programozás , II. félév BMF NIK

Eseményvezérelt alkalmazások fejlesztése II 8. előadás. Összetett WPF alkalmazások. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

BME MOGI Gépészeti informatika 13.

Programozás BMEKOKAA146. Dr. Bécsi Tamás 8. előadás

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

BME MOGI Gépészeti informatika 18. Grafika, fájlkezelés gyakorló óra. 1. feladat Készítsen alkalmazást az = +

2. Beadandó feladat dokumentáció

ELTE SAP Excellence Center Oktatóanyag 1

Az ErdaGIS térinformatikai keretrendszer

Adabáziselérés ODBC-n keresztül utasításokkal C#-ban

Alap számológép alkalmazás

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Programozási technológia

3. Beadandó feladat dokumentáció

Mobil Partner telepítési és használati útmutató

A szerzõrõl... xi Bevezetés... xiii

BME MOGI Gépészeti informatika 7.

A Java EE 5 plattform

Webes alkalmazások fejlesztése 7. előadás. Autentikáció és autorizáció (ASP.NET)

Access adatbázis elérése OLE DB-n keresztül

2. Beadandó feladat dokumentáció

Az SQL*Plus használata

components : IContainer dx : int dy : int tmidőzítő : Timer toolstripseparator1 : ToolStripSeparator tsmikilépés : ToolStripMenuItem

Johanyák Zsolt Csaba: Grafikus felület programozása. Copyright 2008 Johanyák Zsolt Csaba

Java Programozás 5. Gy: Java alapok. Adatkezelő 1.rész

Objektumorientált programozás Pál László. Sapientia EMTE, Csíkszereda, 2014/2015

Webes alkalmazások fejlesztése 2. előadás. Webfejlesztés MVC architektúrában (ASP.NET) Webfejlesztés MVC architektúrában Fejlesztés ASP.

Mobil Informatikai Rendszerek

2. Beadandó feladat dokumentáció

2. Beadandó feladat dokumentáció

Java Programozás 11. Ea: MVC modell

Input Output Műveletek

Webes alkalmazások fejlesztése 3. előadás. Objektumrelációs adatkezelés (ASP.NET)

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

Johanyák Zsolt Csaba: Képnézegető program oktatási segédlet

Mobil Informatikai Rendszerek

Választó lekérdezés létrehozása

Adatbázis alapú rendszerek gyakorlat Adatbázis alapú alkalmazásfejlesztés Java, C# környezetben

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Eseményvezérelt alkalmazások fejlesztése II 10. előadás. Xamarin alapismeretek. Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

XML Webszolgáltatás alapú osztott alkalmazás fejlesztése Johanyák Zsolt Csaba 1

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) Állapotfenntartás. Állapotfenntartás. Állapotfenntartás.

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

Pelda öröklődésre: import java.io.*; import java.text.*; import java.util.*; import extra.*;

Nyíregyházi Egyetem Matematika és Informatika Intézete. Fájl rendszer

OOP és UML Áttekintés

Osztályok. 4. gyakorlat

Bevezetés a Programozásba II 4. előadás. Adattípusok hordozhatósága


Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

MVC. Model View Controller

JNDI - alapok. Java Naming and Directory Interface

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

Függőség injekció Konstantinusz Kft 2010

Listák, szótárak, fájlok Listák, szótárak, fájlok

Cikktípusok készítése a Xarayában

Kalapácsvetés 2016 szöveges

Bevezető. Servlet alapgondolatok

Grafikus felhasználói felület (GUI) létrehozása A GUI jelentése Egy egyszerű GUI mintaalkalmazás létrehozása

Belépés a GroupWise levelező rendszerbe az Internet felől

AWK programozás, minták, vezérlési szerkezetek

Átírás:

Eötvös Loránd Tudományegyetem Informatikai Kar Eseményvezérelt alkalmazások fejlesztése II 11. előadás Platformspecifikus Xamarin alkalmazások Giachetta Roberto groberto@inf.elte.hu http://people.inf.elte.hu/groberto Alkalmazások környezete Az alkalmazások egy biztonságos környezetben futnak nem férhetnek hozzá más alkalmazások adataihoz csak korlátozott módon férhetnek hozzá a rendszer adataihoz (pl. fájlrendszer), és azt is csak engedéllyel szintén engedéllyel használhatják csak az eszközöket (application manifest) Mindegyik alkalmazás számára rendelkezésre áll egy beállítás/tulajdonság tároló, amelyben kulcs/érték párokat helyezhet el (a kulcs szöveg, ) egy lokális könyvtár, amely csak az alkalmazás fájljait tárolja Alkalmazás törlésekor a hozzá tartozó adatok is törlődnek ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:2 A mobil alkalmazások más életciklusban futnak, mint az asztali alkalmazások a futás alatt (running) és a terminált (not running) állapotok mellett megjelenik a felfüggesztett (suspended) állapot is, amely akkor lép életbe, ha az alkalmazás a háttérbe (vagy a gép alvó állapotba) kerül, célja a takarékosság aktiválás futás alatt felfüggesztés A felfüggesztés célja az erőforrásokkal való takarékoskodás a fejlesztőnek törekednie kell rá, hogy felfüggesztett állapotban az alkalmazás minél kevesebb erőforrást igényeljen a futó tevékenységeket célszerű leállítani, az adatokat perzisztálni A rendszer úgy is dönthet (pl. ha kevés a memória), hogy a felfüggesztett alkalmazást leállítja, majd újraindítja, ha a felhasználó visszaváltott rá leállítva folytatás felfüggesztve célszerű, hogy a felhasználó ennek ellenére olyan állapotban kapja vissza az alkalmazást, amelyben hagyta, így ezt az állapotot vissza kell állítanunk leállítás az állapot eltárolását felfüggesztéskor kell elvégeznünk ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:3 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:4 A Xamarin Forms alkalmazások egységes életciklus kezeléssel rendelkeznek az alkalmazás (App) tartalmaz metódusokat indításkor (OnStart), felfüggesztéskor (OnSleep) és folytatáskor (OnResume) futtatandó tevékenységek végrehajtására emellett az egyes platformokon külön is kezelhetjük az életciklust a perzisztálás történhet az alkalmazás beállításai/tulajdonságai közé, amelyet a rendszer automatikusan tárol (Application.Properties) a fájlrendszerbe, vagy adatbázisba (pl. SQLite) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:5 Pl.: public class App : Application protected override void OnSleep() // felfüggesztés Properties["state"] = _data; // állapot elmentése a tulajdonság közé _data = null; // memória kiürítése protected override void OnSleep() // folytatás if (Properties.ContainsKey("state")) _data = Properties["state"]; // ha van elmentett állapot, visszatöltjük ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:6 1

Feladat: Készítsünk egy vizsgatétel generáló alkalmazást, amely ügyel arra, hogy a vizsgázók közül ketten ne kapják ugyanazt a tételt. kiegészítjük életciklus kezeléssel az alkalmazást, eltároljuk a modell állapotát, valamint a generálás állapotát az alkalmazás beállításai (Properties) közé mivel nincs külön perzisztencia, közvetlenül a modelltől kérjük el az információkat, és tároljuk el egyenként indításkor, illetve folytatáskor a korábbi állapotot betöltjük, és ennek megfelelően inicializáljuk a modellt a hatékony erőforrás gazdálkodás érdekében felfüggesztéskor felszabadítjuk a modellt és nézetmodellt is ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:7 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:8 Megvalósítás (App.cs): protected override void OnSleep() Properties["questionCount"] = _model.questioncount; // elmentjük a tételek számát Properties["periodCount"] = _model.periodcount; _model = null; _viewmodel = null; MainPage.BindingContext = null; // a szemétgyűjtő kitörli a memóriából a // modellt és a nézetmodellt Megvalósítás (App.cs): protected override void OnResume() // ha el lett mentve az állapot, akkor // visszatöltjük if (Properties.ContainsKey("questionCount")) _model = new ExamGeneratorModel( (Int32)Properties["questionCount"], (Int32)Properties["periodCount"]); // az elmentett adatokkal példányosítjuk a // modellt ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:9 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:10 Perzisztencia A Xamarin Forms nem biztosít egységes megoldást a perzisztenciára, mivel a megvalósítás platformonként jelentősen eltérhet a perzisztencia platformonként történő megvalósítását a függőség befecskendezés teszi lehetővé a hasonló platformfüggő függőségek kezelésének megkönnyítésére egy egységes módszer biztosított (DependencyService) a függőségek megvalósítását megjelölhetjük (Dependency attribútum), így a rendszer automatikusan regisztrálja és betölti őket a függőségeket az interfészen keresztül betölthetjük (DependencyService.Get) Perzisztencia // Android platformkód [assembly: Dependency(typeof(DroidPersistence))] // megjelöljük a függőséget namespace App.Droid public DroidPersistence : IPersistence public void SaveData(String data) // perzisztencia megvalósítása ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:11 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:12 2

Perzisztencia // Xamarin Forms kód public interface IPersistence // perzisztencia interfésze IPersistence persistence = DependencyService.Get<IPersistence>(); // megtalálja a perzisztencia megvalósítását // az adott platformon IModel model = new Model(persistence); // így most már befecskendezhető Perzisztencia Android plarformon Az Android (és ios) platform(ok) a fájlkezelés összes lehetővégét biztosítják könyvtárak (Directory) elérését, listázását (GetFiles, GetDirectories), benne könyvtárak létrehozását (CreateDirectory), fájlok és könyvtárak törlését (Delete) fájlok (File) létrehozását, megnyitását (Open), olvasást (ReadAllBytes, ReadAllLines, ReadAllText), írást (WriteAllBytes, ), másolást (Copy), az írás és olvasás történhet adatfolyamok segítségével is (StreamReader, StreamWriter), amelyeket a megszokott módon használhatunk ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:13 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:14 Perzisztencia Android plarformon Android platformon a perzisztálás történhet: az alkalmazás helyi könyvtárába (Environment.SpecialFolder.ApplicationData) a felhasználó személyes könyvtárába (SpecialFolder.Personal), vagy tematikus könyvtárba (SpecialFolder.MyMusic, SpecialFolder.MyPictures) az összes felhasználó által elérhető alkalmazás könyvtárba (SpecialFolder.LocalApplicationData) Az utak kezelését a Path osztály, speciális könyvtárak elér elérési ését az Environment.GetFolderPath metódus biztosítja Perzisztencia Android plarformon String documentspath = Environment.GetFolderPath (Environment.SpecialFolder.Personal); // felhasználó könyvtárának lekérése String filepath = Path.Combine(documentsPath, filename); // fájl elérési útvonalának létrehozása File.WriteAllText(filePath, text); // szöveg kiírása a fájlba ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:15 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:16 Perzisztencia Windows platformon Windows platformon az alkalmazás fájljait a megadott könyvtáron keresztül (StorageFolder) kezelhetjük listázhatunk (GetFilesAsync) létrehozhatunk (CreateFileAsync), betölthetünk (OpenAsync), törölhetünk (DeleteAsync) fájlokat, illetve könyvtárakat a könyvtárakban fájlok (StorageFile) helyezkednek el, amelyeknek elérhetjük a tulajdonságait (Name, FileType, Properties, ) a fájlokat a FileIO osztályon keresztül írhatjuk/olvashatjuk szöveges, illetve bináris tartalmat tudunk kezelni (ReadTextAsync(), ReadLinesAsync(), ReadBufferAsync(), WriteTextAsync()) Perzisztencia Windows platformon a megszokott adatfolyam kezelés is elérhető (StreamReader, StreamWriter), azonban funkcionalitása korlátozott Windows platform a perzisztálás történhet lokálisan, a helyi fájlrendszerben (ApplicationData.Current.LocalFolder) központilag (roaming), a felhasználói fiókhoz társítva (ApplicationData.Current.RoamingFolder), amelyek a felhasználó valamennyi eszközén elérhetőek átmenetileg, futás közben elérhető tárhelyen (ApplicationData.Current.TemporaryFolder) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:17 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:18 3

Perzisztencia Windows platformon StorageFolder folder = ApplicationData.Current.LocalFolder; // alkalmazás helyi könyvtárának lekérdezése StorageFile file = await Folder.GetFileAsync("data.txt"); // fájl (aszinkron) betöltése IList<String> lines = await FileIO.ReadLinesAsync(file); // összes sor kiolvasása a fájlból Feladat: Készítsünk egy Tic-Tac-Toe programot, amelyben két játékos küzdhet egymás ellen. elkésztjük a nézet Xamarin Forms megvalósítását, amelyben képekkel (Image) jelenítjük meg a mező tartalmát egy rácsban (FlowListView), a képeket csatoljuk a platformprojektekhez (circle.png, cross.png, empty.png) megvalósítjuk a perzisztenciát Android (AndroidFilePersistence) és Windows (WindowsFilePersistence) platformokra, amelyeket függőségként kezelünk a mentést a főprogram hajtja végre egy közös fájlba (így mindig csak az utolsó állapotot tudjuk menteni), valamint felfüggesztés esetén is mentjük az aktuális játékállapotot ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:19 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:20 Megvalósítás (App.cs): protected override void OnSleep() // elmentjük a jelenleg folyó játékot try Task.Run(() => await _model.savegameasync("suspendedgame")); // az aszinkron tevékenységet taszkban // futtatjuk catch ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:21 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:22 Megvalósítás (AndroidFilePersistence.cs): public async Task<Player[]> LoadAsync(String path) // a betöltés a személyes könyvtárból történik String filepath = Path.Combine(Environment.GetFolderPath( Environment.SpecialFolder.Personal), path); // a fájlműveletet taszk segítségével végezzük String text = await Task.Run(() => File.ReadAllText(filePath)); return text.split().select(number => (Player)Int32.Parse(number)).ToArray(); ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:23 Feladat: Készítsünk egy Tic-Tac-Toe programot, amelyben két játékos küzdhet egymás ellen. lehetőséget adunk a felhasználónak a betöltött/mentett fájl kiválasztására két új oldal segítségével (LoadGamePage, SaveGamePage), amt navigáció (NavigationPage) segítségével kapcsolunk a főoldalhoz a nézetek mellett meg kell valósítanunk a fájlböngészés perziszenciáját (IStore), amely beolvassa a könyvtárak tartalmát (platformonként eltérő módon) modelljét (StoredGameBrowserModel), amely kezeli a játékok adatait nézetmodelljét (StoredGameBrowserViewModel), amely biztosítja a frissítést és a parancsok végrehajtását ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:24 4

Viselkedések Lehetőségünk van a grafikus felület működését deklaratív módon bővíteni viselkedések (Behavior) segítségével a viselkedés egy olyan típus, amely adott vezérlőhöz biztosít hozzáférést, és adott típusú vezérlőhöz csatlakoztatható, további tevékenységeket pl. tulajdonságok megváltoztatása, állapot ellenőrzése megadhatunk vezérlő csatlakoztatásakor (OnAttachedTo) és lecsatlakoztatásakor (OnDetachingFrom) végrehajtható tevékenységet általában egy eseménykezelőt társítunk, amely egészen a lecsatlakoztatásig végrehajtódik a metódusokban mindig meg kell hívnunk az ős metódusát ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:25 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:26 Viselkedések public class NumericValidationBehavior : Behavior<Entry> // egy viselkedés beviteli mezőkre protected override void OnAttachedTo( Entry entry) entry.textchanged += OnEntryTextChanged; // eseménykezelő hozzárendelése szöveg // megváltoztatásakor base.onattachedto(entry); // az eseménykezelő validálja a tartalmat Viselkedések a viselkedések XAML kódban hasznosíthatóak a vezérlőkre példányosítva (Behaviors) így amennyiben a megfelelő viselkedés rendelkezésre áll, tetszőleges módon bővíthető deklaratívan a működés <Entry Placeholder="Enter number"> <Entry.Behaviors> <local:numericvalidationbehavior /> <!-- az ellenőrzés automatikusan lefut a szöveg megváltoztatásakor --> </Entry.Behaviors> </Entry> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:27 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:28 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. valósítsuk meg a tájoláskezelést viselkedések segítségével a tájolás platformonként eltérő módon kérhető le, ezért egy interfészen keresztül (IDeviceProperties) férünk hozzá a platformfüggő megvalósításhoz, mint függőséghez (DependencyService) két viselkedést veszünk fel egyik tetszőleges vezérlő elhelyezését befolyásolja (ViewOrientationBehavior) a másik a StackLayout elem elrendezési módját befolyásolja (StackLayoutOrientationBehavior) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:29 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:30 5

Megvalósítás (StackLayoutOrientationBehavior.cs): private void Bindable_SizeChanged(object sender, EventArgs e) // az eszköz tájolásának függvényében // változtatunk a StackLayout tájolásán switch (_properties.deviceorientation) case DeviceOrientation.Landscape: if (stacklayout.orientation!= StackOrientation.Horizonal) stacklayout.orientation = StackOrientation.Horizontal; break; Lokalizáció Általános elvárás, hogy az alkalmazások a felhasználó nyelvén kommunikáljanak, és annak megfelelő nyelvi környezetet használják (pl. számformátum, pénznem, ), ezt nevezzük az alkalmazás lokalizációjának (application localization) A.NET alkalmazások a lokalizációt egységes formában kezelik (a System.Globalization névtérben) az alkalmazás nyelvi környezete (CultureInfo) bárhol elérhető, módosítható, illetve az alkalmazás átveheti a rendszer nyelvi környezetét (CultureInfo.CurrentCulture) a megjelenített, nyelvfüggő tartalmakat (szöveg, képek) lehetőségünk van lokalizált erőforrásokból (resource file) betölteni ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:31 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:32 Lokalizáció A lokalizációt két lépésben határozhatjuk meg, nyelv, illetve terület (ország szintjén) angol (Egyesült Államok): en-us, angol (Egyesült Királyság): en-gb, magyar (Magyaország): hu-hu az adott lokalizációhoz kérhetjük le az erőforrásokat (CultureInfo), pl.: CultureInfo info = new CultureInfo("en-US"); // amerikai lokalizáció betöltése így lehetőségünk van elérni a lokális információkat, pl.: naptár (Calendar), időformátum (DateTimeFormat), számformátum (NumberFormat), tizedes elválasztó (NumberFormat.NumberDecimalSeparator) Lokalizált erőforrások Az alkalmazás erőforrásait elhelyezhetjük erőforrás fájlokban (.resx), majd közvetlenül, statikus tulajdonságokként hivatkozhatjuk meg őket az erőforrás fájl neve az osztálynév, a kulcs a tulajdonság neve lesz, pl.: namelabel.text = AppText.NameText; // az AppText.resx fájl NameText kulcsú // szövegének betöltése, és a címkére állítása az erőforrásfájlt több nyelvre is elkészíthetjük úgy, hogy a lokalizáció nevét hozzáillesztjük a fájlnévhez, pl.: AppText.en-US.resx // szövegek amerikai nyelvi környezetre AppText.hu-HU.resx // magyar környezetre ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:33 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:34 Lokalizált erőforrások a rendszer a beállított nyelvi környezetnek megfelelő erőforrásfájl tartalmát tölti be amennyiben a lokalizációnak megfelelő fájl nem található, vagy nincs benne megadott kulcsú elem, akkor a lokalizáció nélkül megadott erőforrásfájl tartalmát tölti be így célszerű minden esetben egy alapértelmezett erőforrás fájlt is készíteni, pl.: AppText.resx // alapértelmezett szövegek AppText.hu-HU.resx // lokalizáció magyar környezetre az erőforrások kezelése további lehetőségeket a ResourceManager típus biztosít Lokalizált erőforrások a nézetben Amennyiben a lokalizációt nem kódban, hanem a grafikus felületen (XAML-ben) szeretnénk betölteni, ki kell bővítenünk a Xamarin funkciónalitását a felületre történő beíráshoz szükséges egy bővítés a leíró nyelvhez (IMarkupExtension), amelyben megadjuk a lokalizált tartalom betöltésének módját (ProvideValue) Android és ios platformokon ezen felül a beépített nyelvi környezetet meg kell feleltetnünk.net nyelvi környezetnek, így azt platformfüggő módon kell lekérnünk pl. ki kell cserélnünk az összekötőt (_ helyett -), egyes környezetek helyett mást kell használnunk (gsw-ch helyett de-ch) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:35 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:36 6

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. jelenítsük meg a szövegeket és a tizedes elválasztót a nyelvi beállításnak megfelelően angolul, vagy magyarul a tizedes elválasztót a nézetmodell közvetlenül elkérheti a környezettől a szövegeket erőforrásban (ApplicationText) tároljuk, amelyből készítünk alapértelmezett és magyar változatot kiegészítjük az eszköztulajdonságokat (IDeviceProperties) a nyelvi környezet kezelésével Android platformra megvalósítunk egy XAML bővítést, ami szintén elvégzi a konverziót (TranslateExtension) ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:37 ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:38 Megvalósítás (MainPage.xaml): <ContentPage xmlns:view="clr-namespace:elte.calculator.view" > <Label Text="view:Translate HistoryListTitle" Style="StaticResource NumberListViewLabelStyle" /> <!-- nyelvfüggő szöveg betöltése a TranslateExtension típus segítségével --> ELTE IK, Eseményvezérelt alkalmazások fejlesztése II 11:39 7