1 WINDOWS PHONE 7 KÓDGYŰJTEMÉNY Turóczy Attila Livesoft Kft. 1 O l d a l2 Készült a Microsoft Magyarország megbízásából 2 O l d a l3 Tartalomjegyzék E...
Előszó Amikor valaki a kezébe (vagy a monitorára) veszi ezt a könyvet, rögtön szembetűnik, hogy ez nem szokványos szakmai könyv hosszas leírásokkal, és általános kijelentésekkel. Ezen könyv megírásának az alapötlete az volt, hogy érthető, a Windows Phone 7 fejlesztésében tapasztalatlan szakemberek számára is átlátható útmutatókat készítsünk, melyek segítenek eligazodni ezen új terület fejlesztésében. Pont ezért a Windows Phone 7 fejlesztésének lényegesebb területeit kiemelve, a legtöbb funkcióhoz találunk benne rövid, maximum 1-2 oldalas leírásokat, melyek lépésről lépésre vezetnek végig egy-egy alkalmazás megírásában, és a kódok is szerepelnek minden lépésnél. A könyvben mindent meglelünk, amire csak szükségünk van: a rádió-alkalmazástól kezdve, a GPS kezelésen keresztül a Windows Phone 7 toolkit vezérlőkig, és az első lépésekben is nagy segítséget nyújt. A fejezetek nem kapcsolódnak szervesen egymáshoz, ahol mégis, ott jelölve van, így tetszőleges sorrendben haladhatunk, nem fontos az általunk összeállított sorrendet követni. Ebben a könyvben nem megyünk bele mélyen az egyes témákba, hanem példákon keresztül, a gyakorlatban segítünk elsajátítani a tudásanyagot. Ha ezen témák elméleti része komolyabban is érdekel, akkor minden kellő információt megtalálsz a Windows Phone Fejlesztés lépésről lépésre című könyvben. Ez a jegyzet egyfajta kiegészítése az előbb említett könyvnek, melyek együttes használatával mind elméleti, mind gyakorlati tudásodat fejlesztheted. Remélem, hasznosnak találod majd, és segít mindenben, amire szükséged lesz a fejlesztés során. Turóczy Attila Budapest, 2012. Február
5|Oldal
Képernyő orientáció módosítása A Visual Studio 2010-ben, amikor új Windows Phone 7 page-et (oldalt) hozunk létre, akkor a Landscape vagy a Portrait elrendezések közül választhatunk.
A Windows Phone 7 háromféle képernyő orientációt támogat: támogatja a Protrait-t, a Landscape-et, valamint a PortraitOrLandscape-et. Azt, hogy az alkalmazásunk mit támogasson,
a
PhoneApplicationPage
direktívájában
határozhatjuk
meg,
a
SupportedOrientations tulajdonságnál. Ha ez a tulajdonság Protrait-ra van állítva, akkor az alkalmazásunk csak portré módban fog futni, így ha elforgatjuk a kijelzőt, akkor sem történik változás. Landscape módban az alkalmazásunk csak a fektetett megjelenítést támogatja. A PortraitOrLandscape beállításával az alkalmazásunk az előbb említett mind a két módot támogatja, így ha a felhasználó a telefont elforgatja, akkor Landscape módra vált az alkalmazás, míg ha visszaállítja, akkor portrait módban fut tovább. Portrait mód
Landscape mód
SupportedOrientations="Portrait"
SupportedOrientations="Landscape"
Feliratkozhatunk értesülhetünk
az a
(PhoneApplicationPage)
változásról,
és
OrientationChanged
változtathatunk
is
az
eseményre, amivel
orientáción.
Ehhez
az
OrientationChangedEventArgs –ot is használhatjuk, amelynek az Orientation tulajdonsága megmondja, hogy a telefon jelenleg milyen pozícióban van.
6|Oldal
private void PhoneApplicationPage_OrientationChanged(object sender, OrientationChangedEventArgs e) { this.Orientation = e.Orientation; } Még annyit érdemes tudni erről, hogy ha az elforgatás után kicsúszik a képből a UI elem, akkor az scroll-ozható lesz a képernyőn. Tehát ha valamit rosszul mértünk fel a UI-on, a felhasználó akkor is tudja használni az alkalmazást, legfeljebb kényelmetlen lesz a számára. Emulátorban is megnézhetjük, hogy az alkalmazásunk hogy nézne ki: elfektethetjük a kijelzőt, ehhez az emulátor toolbar-ján két gomb is van. Bal és jobb irányba is eldönthetjük az emulátor kijelzőjét.
7|Oldal
Software Input Panel (SIP) A mobilkészülékeken viszonylag kicsi a kijelző, így egy teljes értékű billentyűzetet nem kaphatnak a felhasználók, ám vannak speciális billentyűzetek, speciális feladatok ellátására (SIP – Software Input Panel), amellyel megkönnyíthetjük a munkájukat. Az alkalmazásunk tervezésekor figyeljünk arra, hogy a beviteli mezőkhöz megfelelő beviteli panelt adjunk! Telefonszám beviteli mezőhöz teljes bevitelimező felesleges és kényelmetlen. Ilyen esetben a TextBox InputScope tulajdonságát állíthatjuk be a számunkra megfelelő típusra. Ezt a tulajdonságot célszerű minden beviteli mező esetében megadni. Nézzünk három textbox-ot, három különböző InputScope-pal! Az eredmény:
Az InputScope-ot dinamikusan, kódból is megadhatjuk: InputScope ins = new InputScope(); InputScopeName insName = new InputScopeName(); insName.NameValue = InputScopeNameValue.Number; ins.Names.Add(insName); tbTitle.InputScope = ins; A Windows Phone 7 –ben rengeteg speciális InputScope van. A teljesség igénye nélkül:
AddressCity
Date
FileName
AddressCountryName
DateDay
FullFilePath
AddressStateOrProvince
DateDayName
Hanja
AddressStreet
DateMonth
Hiragana
AlphanumericFullWidth
DateMonthName
KatakanaFullWidth
AlphanumericHalfWidth
DateYear
KatakanaHalfWidth
ApplicationEnd
Default
LogOnName
Bopomofo
Digits
Maps
Chat
EmailNameOrAddress
NameOrPhoneNumber
CurrencyAmount
EmailSmtpAddress
Number
CurrencyAmountAndSy mbol
EmailUserName
NumberFullWidth
EnumString
OneChar
CurrencyChinese
8|Oldal
Password
PostalCode
Text
PersonalFullName
Private
Time
PersonalGivenName
RegularExpression
TimeHour
PersonalMiddleName
Search
TimeMinorSec
PersonalNamePrefix
Srgs
Url
PersonalNameSuffix
TelephoneAreaCode
Xml
PersonalSurname
TelephoneCountryCode
Yomi
PhraseList
TelephoneLocalNumber
PostalAddress
TelephoneNumber
Látható, hogy a cím megadástól kezdve, az URL-en keresztül, a keresési beviteli mezőkig rengeteg scope áll a rendelkezésünkre. További információkat a Windows Phone fejlesztés lépésről lépésre könyv harmadik fejezetében olvashatunk. MSDN Cikk
9|Oldal
System Tray A System Tray a rendszer által lefoglalt terület, ahol a rendszerinformációk
jelennek
meg:
térerő,
töltöttség,
státuszinformációk stb. Ezt elrejthetjük, de ha nem muszáj, ne tegyük meg! Ezzel ugyan nyerhetünk némi területet, de a felhasználótól információkat rejtünk el (sarkított példa: ha a felhasználó játszik a készülékén egy online játékkal, és közben átmegy az országhatáron, nem fog örülni, amikor meglátja a telefonszámláján a roaming díjat, amit néhány megabyte miatt kell fizetni, amit eljátszott. Vagy épp játék közben hirtelen lemerül a készülék.) Ha mégis el akarjuk rejteni, akkor azt megtehetjük XAML-ben, a PhoneApplicationPage-nél: shell:SystemTray.IsVisible="True" Vagy C# kódból: Microsoft.Phone.Shell.SystemTray.IsVisible = false; A Windows Phone 7 első változatában a System Tray nem sok dologra volt alkalmas. Tulajdonképpen csak elrejthettük, ha akartuk, de más testreszabásra nem volt lehetőség. A Mango frissítéstől kezdve viszont plusz funkcionalitást is kapott, illetve némi testre szabhatóságot is. Sok alkalmazásnál probléma volt, hogy az alkalmazásnak volt egy alapértelmezett arculata, de ahhoz a fekete-fehér system tray nem alkalmazkodott, ezért eléggé kilógott az alkalmazás felső része, így egy kicsit bután nézhetett ki az alkalmazásunk. Most viszont már van arra lehetőség, hogy a System Tray színeit is testre szabjuk. Nézzünk egy példát XAML-ben!
A System Tray a testre szabhatóságon kívül kiegészült egy ProgressIndicatorral is, így nem kell külön progressbar-t használnunk, ha egy hosszabb folyamatot akarunk jelezni a
10 | O l d a l
felhasználó
számára.
Megtarthatjuk
a
System
Tray-t,
és
abban
elindíthatjuk
és
megjeleníthetjük a folyamatjelzőt. A ProgressIndicator-t elhelyezhetjük kódból. Ehhez szükségünk lesz a Microsoft.Phone.Shell névtérre. using Microsoft.Phone.Shell; Hozzuk létre a ProgressIndicator példányt (például a konstruktorban), és állítsuk be számunkra megfelelően a tulajdonságait! ProgressIndicator pIndicator = new ProgressIndicator(); pIndicator.IsVisible = true; pIndicator.Text = "Lekérdezés folyamatban..."; pIndicator.IsIndeterminate = true; Jelen esetben van egy ProgressIndicator-unk, aminek az IsVisible tulajdonsága True, a Text tulajdonsága a „Lekérdezés folyamatban…” szöveg, és az IsIndeterminate tulajdonsága True, azaz nem határozzuk meg, hogy hol tart a folyamat. Ha most elindítanánk az alkalmazást, nem jelenne meg a ProgressIndicator. Ezt külön meg kell mondanunk a System Tray-nek, az alábbi módon: SystemTray.SetProgressIndicator(this, pIndicator); Így már ha elindítjuk az alkalmazást (és ha most a konstruktorba helyeztük el a kódot), az alábbi eredményt láthatjuk:
A ProgressIndicator-t elhelyezhetjük XAML-ből is, és persze tulajdonságaihoz akár adatköthetünk is. Példa XAML-ben történő Progress Indicator megadására (PhoneApplicationPage és az elrendezés vezérlő közé helyezhetjük): <shell:SystemTray.ProgressIndicator> <shell:ProgressIndicator x:Name="pIndicator" IsVisible="True" IsIndeterminate="True" Text="Adatok lekérdezése"/> Az eredmény hasonló, mint az előző esetben. Ne feledjük: a ProgressIndicator eltüntetéséről is nekünk kell gondoskodnunk!
11 | O l d a l
Application Bar Az Application Bar egy kis toolbar a Windows Phone lapon. Maximum négy ikon gombot (icon button) és / vagy további menü elemeket tartalmazhat. Az Application Bar segítségével az alkalmazásunk fő funkcióit tehetjük könnyen elérhetővé. Bár maximum 4 menü elemet tartalmazhat, mégis ajánlott legfeljebb három ikon gombot (icon buttont) használnunk. Fontos megjegyezni, hogy az ApplicationBar nem szokványos vezérlő. Ő nem a Silverlight része, és elég sok megkötés van vele kapcsolatban. Egyfelől kódból is nehezebb elérni egyes menü elemeit, másfelől az adatkötést sem támogatja (főleg lokalizáció esetén kell kerülő megoldásokat alkalmazni). Nézzünk egy egyszerű példát a használatára: 1. Készítsünk egy új Windows Phone 7 alkalmazást! 2. Ha jól megnézzük a XAML kódot, akkor látható, hogy az oldalon már eleve van egy példa ApplicationBar elhelyezve, csak ki van kommentezve.