Sdílet prostřednictvím


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:

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:

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, #elifa #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:

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 typu LayoutAlignment, výčet se čtyřmi členy: Start, což znamená vlevo nebo nahoře v závislosti na orientaci, Center, Endcož znamená vpravo nebo dole v závislosti na orientaci a Fill.

  • Vlastnost Expands typu bool.

Obecně se tyto vlastnosti nepoužívají přímo. Místo toho jsou kombinace těchto dvou vlastností poskytovány osmi statickými vlastnostmi LayoutOptionstypu jen pro čtení:

HorizontalOptionsa 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:

Trojitý snímek obrazovky s programem s pozdravem

Ř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.