Souhrn kapitoly 2. Anatomie aplikace

Ukázka stažení Stažení ukázky

Poznámka

Tato kniha byla publikována na jaře 2016 a od té doby nebyla aktualizována. Kniha je mnohem v knize, která zůstává cenná, ale některé z nich jsou zastaralé a některá témata už nejsou úplně správná nebo dokončí.

V Xamarin.Forms aplikaci jsou objekty, které přisazují místo na obrazovce, známé jako Xamarin.Formszapouzdřené VisualElement třídou. Vizuální prvky lze rozdělit do tří kategorií odpovídajících těmto třídám:

PageOdvozenina zabírá celou obrazovku nebo téměř celou obrazovku. Podřízená položka stránky je často Layout odvozená pro uspořádání podřízených vizuálních prvků. Podřízené Layout objekty mohou být jiné Layout třídy nebo View odvozeniny (často označované jako Layout), které jsou známé objekty jako text, bitmapy, posuvníky, tlačítka, seznamy a tak dále.

Tato kapitola ukazuje, jak vytvořit aplikaci tím, že zaměříte na Label , což je View derivát, který zobrazuje text.

Vyslovit Hello

s nainstalovanou platformou Xamarin můžete vytvořit nové Xamarin.Forms řešení v Visual Studio nebo Visual Studio pro Mac. Řešení Hello používá pro společný kód přenosnou knihovnu tříd.

Poznámka

Knihovny přenosných tříd byly nahrazeny .NET Standard knihovnami. Veškerý vzorový kód z knihy byl převeden tak, aby používal standardní knihovny .NET.

tato ukázka demonstruje Xamarin.Forms řešení vytvořené v 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.Formsuž nepodporuje Windows 8.1, Windows Phone 8,1 nebo Windows 10 Mobile, ale Xamarin.Forms aplikace běží na Windows 10 desktop.

Můžete provést některé z těchto aplikačních projektů a potom sestavit a spustit program na zařízení nebo simulátoru.

V mnoha Xamarin.Forms programech nebudete měnit projekty aplikací. Tyto často neumožňují spuštění programu pouze v neměnném zástupných procedurách. Většina fokusů bude společnou knihovnou pro všechny aplikace.

Uvnitř souborů

Vizuály zobrazené programem Hello jsou definovány v konstruktoru třídy. App je odvozen z Xamarin.Forms třídy Application .

Poznámka

šablony řešení Visual Studio pro Xamarin.Forms vytvoření stránky se souborem XAML. V této knize se nezabývá kód XAML až do kapitoly 7.

Oddíl REFERENCES v projektu PCL v programu Hello obsahuje následující sestavení:

  • . Core
  • . Formátu
  • . Platformy

Části odkazy na pět aplikačních projektů zahrnují další sestavení, která se vztahují na jednotlivé platformy:

  • . Platforma. Android
  • . Platforma. iOS
  • . Platforma. UWP
  • . Platform. WinRT
  • . Platform. WinRT. tablet
  • . Platform. WinRT. Telefon

Poznámka

V sekcích odkazujících na tyto projekty se již neuvádějí sestavení. místo toho soubor projektu obsahuje značky PackageReference odkazující na balíček NuGet. oddíl references v Visual Studio uvádí balíček místo Xamarin.Forms sestavení.

Každý projekt aplikace obsahuje volání statické Forms.Init metody v Xamarin.Forms oboru názvů. Tím se inicializuje Xamarin.Forms Knihovna. Forms.InitPro každou platformu je definována jiná verze aplikace. Volání této metody lze nalézt v následujících třídách:

Kromě toho musí každá platforma vytvořit instanci App umístění třídy ve sdílené knihovně. K tomu dochází ve volání do LoadApplication následujících tříd:

V opačném případě jsou tyto projekty aplikace normálními programy "nedělat nic".

PCL nebo SAP?

je možné vytvořit Xamarin.Forms řešení se společným kódem v přenosných knihovnách tříd (PCL) nebo ve službě shared Asset Project (SAP). Pokud chcete vytvořit řešení SAP, vyberte možnost sdílená v Visual Studio. Řešení HelloSap demonstruje šablonu SAP bez úprav.

Poznámka

Knihovny přenosných tříd byly nahrazeny .NET Standard knihovnami. Veškerý vzorový kód z knihy byl převeden tak, aby používal standardní knihovny .NET. V opačném případě jsou knihovny PCL a .NET Standard koncepčně velmi podobné.

Přístup ke knihovně zabalí veškerý společný kód v projektu knihovny, na který odkazují projekty aplikace platformy. S přístupem SAP společný kód efektivně existuje ve všech projektech aplikací platformy a sdílí se mezi nimi.

Většina Xamarin.Forms vývojářů preferuje přístup k knihovně. Většina řešení v této knize používá knihovnu. Ty, které používají SAP, zahrnují v názvu projektu příponu SAP .

S přístupem SAP kód ve sdíleném projektu může spouštět různé kódy pro různé platformy pomocí direktiv preprocesoru jazyka C# ( #if , # a elif#endif ) s těmito předdefinovanými identifikátory:

  • iOS __IOS__
  • Android: __ANDROID__
  • PODPORUJÍ WINDOWS_UWP

Ve sdílené knihovně můžete určit, na jakou platformu je spuštěná za běhu, jak uvidíte později v této kapitole.

Popisky pro text

Řešení Greetings ukazuje, jak přidat nový soubor C# do projektu Greetings . Tento soubor definuje třídu s názvem GreetingsPage , která je odvozena z ContentPage . V této knize většina projektů obsahuje jeden ContentPage odvozený, jehož název je název projektu s Page připojenou příponou.

GreetingsPageKonstruktor vytvoří instanci Label zobrazení, což je Xamarin.Forms zobrazení, které zobrazuje text. Vlastnost Xamarin_Forms _Label_Text data-LINKTYPE = "absolutní cesta" >Text vlastnost je nastavena na text zobrazený v Label . Tento program nastaví LabelContent vlastnost na hodnotu ContentPage . Konstruktor App třídy se pak vytvoří GreetingsPage a nastaví na jeho MainPage vlastnost.

Text se zobrazí v levém horním rohu stránky. V systému iOS to znamená, že se překrývá se stavovým řádkem stránky. Tento problém má několik řešení:

Řešení 1. Zahrnutí odsazení na stránce

Nastavte Xamarin_Forms _Page_Padding data-linktype="absolute-path">Padding na stránce. Padding je typu Thickness , struktura se čtyřmi vlastnostmi:

Padding definuje oblast uvnitř stránky, kde je vyloučen obsah. To umožňuje zabránit přepsání stavového řádku Label iOSu.

Řešení 2. Zahrnout odsazení pouze pro iOS (pouze SAP)

Nastavte vlastnost Odsazení pouze v iOSu pomocí SAP s direktivou preprocesoru jazyka C#. To je znázorněno v řešení GreetingsSap.

Řešení 3. Zahrnout odsazení pouze pro iOS (PCL nebo SAP)

Ve verzi použité pro knihu je možné vlastnost specifickou pro iOS v PCL nebo SAP vybrat pomocí metody Xamarin.FormsPadding Xamarin_Forms Xamarin.Forms _Device_OnPlatform_System_Action_System_Action_System_Action_System_Action_" data-linktype="absolute-path">Device.OnPlatform nebo Device.OnPlatform<T> static. 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í vlastnost _Device_OS" data-linktype="absolute-path">statickou vlastnost jen pro čtení, která vrací člen Device.OSTargetPlatform výčtu:

Metody, Device.OnPlatform vlastnost a výčet jsou teď Device.OSTargetPlatform zastaralé. Místo toho použijte vlastnost Xamarin_Forms _Device_RuntimePlatform" data-linktype="absolute-path">a porovnejte vrácenou hodnotu s následujícími statickými Device.RuntimePlatformstring poli:

  • iOS– řetězec "iOS"
  • Android– řetězec "Android"
  • UWP– řetězec UPW odkazující na Univerzální platformu Windows Platform

Vlastnost Xamarin_Forms _Device_Idiom" data-linktype="absolute-path">která souvisí se statickou Device.Idiom vlastností jen pro čtení. Tím se vrátí člen TargetIdiom třídy , který má tyto členy:

U iOSu a Androidu je šířka mezi a na výšku TabletPhone 600 jednotek. U platformy Windows označuje aplikaci pro UPW spuštěnou v rámci Windows 10 a označuje aplikaci pro UPW spuštěnou DesktopPhone v rámci Windows 10 aplikace.

Řešení 3a. Nastavení okrajů u popisku

Vlastnost Xamarin_Forms _View_Margin" data-linktype="absolute-path">byla zavedena příliš pozdě na to, aby byla zahrnuta do knihy, ale je také typu a můžete ji nastavit na a definovat tak oblast mimo zobrazení, které je součástí výpočtu rozložení MarginThicknessLabel zobrazení.

Vlastnost Padding je dostupná jenom u a LayoutPage odvozených vlastností. Vlastnost Margin je k dispozici pro všechny odvozené View hodnoty.

Řešení 4. Zamykaní popisku na stránce

Objekt můžete vy středem umístit (nebo umístit na jedno z osmi dalších míst) nastavením LabelPage Xamarin_Forms Label _View_HorizontalOptions" data-linktype="absolute-path">HorizontalOptions and Xamarin_Forms Page _View_VerticalOptions" data-linktype="absolute-path">VerticalOptionsLabelLayoutOptions vlastností na hodnotu typu . Struktura LayoutOptions definuje dvě vlastnosti:

  • Vlastnost Xamarin_Forms _LayoutOptions_Alignment" data-linktype="absolute-path">typu , což je výčet se čtyřmi členy: Xamarin_Forms _LayoutAlignment_Start" data-linktype="absolutní_cesta">, což znamená vlevo nebo nahoře v závislosti na AlignmentLayoutAlignmentAlignment orientaci, Xamarin_Forms Start _LayoutAlignment_Center" data-linktype="absolute-path">Center , Xamarin_Forms LayoutAlignment _LayoutAlignment_End" data-linktype="absolute-path">, což znamená vpravo nebo dole v závislosti na End orientaci, a Xamarin_Forms _LayoutAlignment_Fill" data-linktype="absolute-path">Fill .

  • An Xamarin_Forms _LayoutOptions_Expands" data-linktype="absolute-path">Expands vlastnost typu bool .

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

HorizontalOptions a jsou nejdůležitější vlastnosti v rozložení a jsou podrobněji popsány v VerticalOptionsXamarin.FormsHorizontalOptions.

Tady je výsledek s vlastnostmi HorizontalOptionsVerticalOptions a obou Label vlastností nastavenými na LayoutOptions.Center :

s trojitým snímkem obrazovky programu Pozdravy vodorovně a svisle

Řešení 5. Zamykaní textu v rámci popisku

Text (nebo ho můžete umístit na osm dalších míst na stránce) můžete také vy středem nastavením _Label_HorizontalTextAlignment" data-linktype="absolute-path">HorizontalTextAlignment and Xamarin_Forms HorizontalTextAlignment _Label_VerticalTextAlignment" data-linktype="absolute-path">VerticalTextAlignmentLabel vlastností na člen TextAlignment výčtu:

Tyto dvě vlastnosti jsou definovány pouze pomocí , zatímco vlastnosti a jsou definovány a LabelHorizontalAlignmentVerticalAlignmentView zděděny všemi View odvozenými objekty. Výsledky vizuálu můžou vypadat podobně, ale jak ukazuje následující kapitola, jsou velmi odlišné.