Shrnutí kapitoly 2. Anatomie aplikace
Poznámka:
Tato kniha byla publikována na jaře roku 2016 a od té doby nebyla aktualizována. Existuje mnoho v knize, která zůstává cenná, ale některé materiály jsou zastaralé a některá témata už nejsou zcela správná nebo úplná.
Xamarin.Forms V aplikaci se objekty, které zabírají místo na obrazovce, označují jako vizuální prvky zapouzdřené VisualElement
třídou. Prvky vizuálu lze rozdělit do tří kategorií odpovídajících těmto třídám:
Derivát Page
zabírá celou obrazovku nebo téměř celou obrazovku. Podřízená položka stránky je Layout
často derivátem pro uspořádání podřízených vizuálních prvků. Podřízené položky Layout
mohou být jiné Layout
třídy nebo View
deriváty (často označované jako elementy), které jsou známé objekty, jako je text, rastrové obrázky, posuvníky, tlačítka, seznamy atd.
Tato kapitola ukazuje, jak vytvořit aplikaci zaměřením na Label
, což je View
derivát, který zobrazuje text.
Pozdravit
S nainstalovanou platformou Xamarin můžete vytvořit nové Xamarin.Forms řešení v sadě Visual Studio nebo Visual Studio pro Mac. Řešení Hello používá pro společný kód knihovnu přenosných tříd.
Poznámka:
Přenosné knihovny tříd byly nahrazeny knihovnami .NET Standard. Veškerý vzorový kód z knihy byl převeden na použití standardních knihoven .NET.
Tato ukázka ukazuje Xamarin.Forms řešení vytvořené v sadě Visual Studio bez úprav. Řešení se skládá ze čtyř projektů:
- Hello, přenosná knihovna tříd (PCL) sdílená ostatními projekty
- Hello.Droid, projekt aplikace pro Android
- Hello.iOS, projekt aplikace pro iOS
- Hello.UWP, projekt aplikace pro Univerzální platforma Windows (Windows 10 a Windows 10 Mobile)
Poznámka:
Xamarin.Forms už nepodporuje Windows 8.1, Windows Phone 8.1 nebo Windows 10 Mobile, ale Xamarin.Forms aplikace běží na stolním počítači s Windows 10.
Libovolný z těchto projektů aplikace můžete vytvořit jako spouštěný projekt a pak program sestavit a spustit na zařízení nebo simulátoru.
V mnoha programech Xamarin.Forms nebudete upravovat projekty aplikací. Tyto často zůstávají drobné zástupné procedury jen pro spuštění programu. Většina vašeho zaměření bude knihovna společná pro všechny aplikace.
Uvnitř souborů
Vizuály zobrazené programem Hello jsou definovány v konstruktoru App
třídy. App
je odvozena od Xamarin.Forms třídy Application
.
Poznámka:
Šablony řešení sady Visual Studio pro Xamarin.Forms vytvoření stránky se souborem XAML. XAML se v této knize nezabývá až do kapitoly 7.
Část Reference projektu Hello PCL obsahuje následující Xamarin.Forms sestavení:
- Xamarin.Forms. Jádro
- Xamarin.Forms. Xaml
- Xamarin.Forms. Nástupiště
Oddíly Reference pěti projektů aplikací zahrnují další sestavení, která se vztahují na jednotlivé platformy:
- Xamarin.Forms. Platform.Android
- Xamarin.Forms. Platform.iOS
- Xamarin.Forms. Platform.UWP
- Xamarin.Forms. Platform.WinRT
- Xamarin.Forms. Platform.WinRT.Tablet
- Xamarin.Forms. Platform.WinRT.Phone
Poznámka:
Oddíly Odkazy těchto projektů již nevypisují sestavení. Místo toho soubor projektu obsahuje značky PackageReference odkazující na Xamarin.Forms balíček NuGet. Oddíl Reference v sadě Visual Studio obsahuje Xamarin.Forms balíček, nikoli Xamarin.Forms sestavení.
Každý z projektů aplikace obsahuje volání statické Forms.Init
metody v Xamarin.Forms
oboru názvů. Tím se Xamarin.Forms knihovna inicializuje. Pro každou platformu Forms.Init
je definována jiná verze. Volání této metody lze nalézt v následujících třídách:
- Ios:
AppDelegate
- Android:
MainActivity
- UPW:
App
třída,OnLaunched
metoda
Kromě toho musí každá platforma vytvořit App
instanci umístění třídy ve sdílené knihovně. K tomu dochází při volání LoadApplication
v následujících třídách:
- Ios:
AppDelegate
- Android:
MainActivity
- UPW:
MainPage
V opačném případě jsou tyto projekty aplikací normální programy "nedělaly nic".
PCL nebo SAP?
Je možné vytvořit Xamarin.Forms řešení se společným kódem v knihovně přenosných tříd (PCL) nebo projektu sdíleného assetu (SAP). Pokud chcete vytvořit řešení SAP, vyberte v sadě Visual Studio možnost Sdílené. Řešení HelloSap předvádí šablonu SAP bez úprav.
Poznámka:
Knihovny přenosných tříd byly nahrazeny knihovnami .NET Standard. Veškerý vzorový kód z knihy byl převeden na použití standardních knihoven .NET. V opačném případě jsou knihovny PCL a .NET Standard koncepčně velmi podobné.
Přístup knihovny seskupuje veškerý společný kód v projektu knihovny, na který odkazují projekty aplikací platformy. S přístupem SAP efektivně existuje společný kód ve všech projektech aplikací platformy a sdílí se mezi nimi.
Většina Xamarin.Forms vývojářů upřednostňuje přístup ke knihovně. V této knize většina řešení používá knihovnu. Ty, které používají SAP, obsahují v názvu projektu příponu Sap .
S přístupem SAP může kód ve sdíleném projektu spouštět různé kódy pro různé platformy pomocí direktiv preprocesoru jazyka C# (#if
, #elif
a #endif
) s těmito předdefinovanými identifikátory:
- Ios:
__IOS__
- Android:
__ANDROID__
- UPW:
WINDOWS_UWP
Ve sdílené knihovně můžete určit, jakou platformu používáte za běhu, jak uvidíte později v této kapitole.
Popisky textu
Řešení Greetings ukazuje, jak přidat nový soubor C# do projektu Greetings . Tento soubor definuje třídu, která je odvozena GreetingsPage
od ContentPage
. Většina projektů v této knize obsahuje jeden ContentPage
derivát, jehož název je název projektu s připojenou příponou Page
.
Konstruktor GreetingsPage
vytvoří Label
instanci zobrazení, což je Xamarin.Forms zobrazení, které zobrazuje text. Vlastnost Text
je nastavena na text zobrazený objektem Label
. Tento program nastaví Label
vlastnost Content
ContentPage
. Konstruktor App
třídy pak vytvoří GreetingsPage
instanci a nastaví ji na jeho MainPage
vlastnost.
Text se zobrazí v levém horním rohu stránky. V iOSu to znamená, že se překrývá stavový řádek stránky. K tomuto problému existuje několik řešení:
Řešení 1. Zahrnout odsazení na stránce
Padding
Nastavte vlastnost na stránce. Padding
je typu Thickness
, struktura se čtyřmi vlastnostmi:
Padding
definuje oblast uvnitř stránky, kde je obsah vyloučen. To umožňuje Label
vyhnout se přepsání stavového řádku iOS.
Řešení 2. Zahrnout odsazení jenom pro iOS (jenom SAP)
Nastavte vlastnost Odsazení pouze pro iOS pomocí SAP s direktivou preprocesoru jazyka C#. To je znázorněno v řešení GreetingsSap .
Řešení 3. Zahrnutí odsazení jenom pro iOS (PCL nebo SAP)
Ve verzi Xamarin.Forms použité pro knihu Padding
lze pomocí nebo Device.OnPlatform<T>
statické metody vybrat Device.OnPlatform
vlastnost specifickou pro iOS v PCL nebo SAP. Tyto metody jsou teď zastaralé.
Metody Device.OnPlatform
se používají ke spuštění kódu specifického pro platformu nebo k výběru hodnot specifických pro platformu. Interně používají Device.OS
statickou vlastnost jen pro čtení, která vrací člena výčtu TargetPlatform
:
Všechny Device.OnPlatform
metody, Device.OS
vlastnost a TargetPlatform
výčet jsou nyní zastaralé. Místo toho použijte Device.RuntimePlatform
vlastnost a porovnejte návratovou string
hodnotu s následujícími statickými poli:
iOS
, řetězec "iOS"Android
, řetězec "Android"UWP
, řetězec "UPW", který odkazuje na Univerzální platforma Windows
Statická Device.Idiom
vlastnost jen pro čtení souvisí. Vrátí člena TargetIdiom
, který má tyto členy:
Desktop
Tablet
Phone
Unsupported
je nepoužívané
Pro iOS a Android je mezi Tablet
a Phone
výškou šířka 600 jednotek. Pro platformu Windows označuje Desktop
aplikaci pro UPW spuštěnou v systému Windows 10 a Phone
označuje aplikaci pro UPW spuštěnou v rámci aplikace windows 10.
Řešení 3a. Nastavení okraje na popisku
Vlastnost Margin
byla zavedena příliš pozdě, aby byla zahrnuta do knihy, ale je také typu Thickness
a můžete ji nastavit tak Label
, aby definovala oblast mimo zobrazení, které je součástí výpočtu rozložení zobrazení.
Vlastnost Padding
je k dispozici pouze pro Layout
a Page
deriváty. Nemovitost Margin
je k dispozici na všech View
derivátech.
Řešení 4. Na střed popisku na stránce
Můžete zacentrovat Label
uvnitř Page
(nebo ho umístit do jednoho z osmi dalších míst) nastavením HorizontalOptions
a VerticalOptions
vlastností Label
na hodnotu typu LayoutOptions
. Struktura LayoutOptions
definuje dvě vlastnosti:
Vlastnost
Alignment
typuLayoutAlignment
, výčet se čtyřmi členy:Start
, což znamená vlevo nebo nahoře v závislosti na orientaci,Center
,End
což znamená vpravo nebo dole v závislosti na orientaci aFill
.Vlastnost
Expands
typubool
.
Obecně se tyto vlastnosti nepoužívají přímo. Místo toho jsou kombinace těchto dvou vlastností poskytovány osmi statickými vlastnostmi LayoutOptions
typu jen pro čtení:
LayoutOptions.Start
LayoutOptions.Center
LayoutOptions.End
LayoutOptions.Fill
LayoutOptions.StartAndExpand
LayoutOptions.CenterAndExpand
LayoutOptions.EndAndExpand
LayoutOptions.FillAndExpand
HorizontalOptions
a VerticalOptions
jsou nejdůležitějšími vlastnostmi rozložení Xamarin.Forms a jsou podrobněji popsány v kapitole 4. Posouvání zásobníku
Tady je výsledek s vlastnostmi HorizontalOptions
obou VerticalOptions
nastavených Label
na LayoutOptions.Center
:
Řešení 5. Zarovnání textu do popisku
Text můžete také zacentrovat (nebo ho umístit do osmi dalších umístění na stránce) nastavením HorizontalTextAlignment
a VerticalTextAlignment
vlastností Label
na člena výčtu TextAlignment
:
Start
, význam vlevo nebo nahoře (v závislosti na orientaci)Center
End
, význam vpravo nebo dole (v závislosti na orientaci)
Tyto dvě vlastnosti jsou definovány pouze Label
, zatímco HorizontalAlignment
a VerticalAlignment
vlastnosti jsou definovány View
a zděděny všemi View
deriváty. Výsledky vizuálů se můžou zdát podobné, ale liší se, jak ukazuje další kapitola.