Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Lekce 4 - První multiplatformní aplikace v Xamarin a C# .NET

V minulé lekci, Jazyk XAML v Xamarin.Forms, jsme si popsali základy jazyka XAML pro tvorbu uživatelského rozhraní v Xamarin aplikacích.

Dnes konečně opustíme teoretické kruhy a napíšeme si naši první multiplatformní aplikaci v Xamarin, která bude reagovat na vstup od uživatele.

Úvodem

Jak již bývá zvykem, první aplikace je většinou typu "Hello World!". Ani v tomto případě tomu nebude jinak, pouze s tím rozdílem, že nebudeme psát oslovení přímo do kódu. Napíšeme ho do textového pole přímo v aplikaci, která jej uloží do proměnné, kterou vypíšeme v dialogovém okně.

Založení nového Xamarin.Forms projektu

Pokud již máte založený projekt z minulých lekcí, můžete ho použít. Pokud ne, tak spustíme Visual Studio, vybereme New Project a poté Mobile App (Xamarin.Forms). Projekt pojmenujeme DialogApp.

Konfigurace Android emulátoru

Ještě než se pustíme do programování, nastavíme si Android emulátor. Emulátor nám umožňuje spouštět systém Android v rámci Windows (nebo klidně i macOS), daný systém se pak zvenčí chová jako by běžel samostatně na fyzickém zařízení.

Ve Visual Studiu vybereme Tools, poté Android a Android Device Manager.... V nově otevřeném okně klikneme na Nový a nastavíme si parametry jaké chceme. Já jsem si např. vybral jako základ Pixel 3. Profil emulátoru si pojmenujeme dle libosti a vybereme API. Já si zvolil Android 10.0 API 29. Potvrdíme vytvoření, odsouhlasíme licenční podmínky a počkáme, než se nám stáhnou a nainstalují nové součásti. Emulátor si můžeme zkušebně spustit.

Pokud narazíte na chybovou či výstražnou hlášku ohledně Hyper-V či Hypervisoru, je nutné jej aktivovat ve funkcích Windows následujícím způsobem. Ve vyhledávání Windows zadejte: Funkce systému Windows a otevřete. Zaškrtněte Platforma hypervisoru Windows a aplikujte. Počítač bude vyžadovat restartování.

Instalace součásti Platforma hypervisor Windows - Xamarin - Mobilní aplikace v C# .NET

Podrobný návod na různé situace při potížích s Hypervisorem jsou k dispozici v oficiální dokumentaci.

Konfigurace iOS simulátoru

Ekvivalentem emulátorů jsou pro iOS simulátory, ty však mohou běžet pouze v macOS. Zde nemusíme nic konfigurovat. Stačí abychom si spárovali Visual Studio a náš MAC podle postupu v úvodní lekci. Xcode se pak sám postará o nakonfigurování simulátorů při jejich spouštění.

Jediné, co můžeme změnit, je, možnost zrcadlení simulátoru z macOS na Windows. Tuto funkci nalezneme v nastavení (v horním menu kliknout na Tools a poté zvolit Options...) v kategorii Xamarin a iOS Settings:

Nastavení zrcadlení simulátoru - Xamarin - Mobilní aplikace v C# .NET

Zde však upozorním, že toto zrcadlení stejně jako samotné párování nemusí být vždy stoprocentně spolehlivé a může vypadávat. Možná řešení nejčastějších problémů naleznete v oficiální dokumentaci.

Samozřejmě lze připojit i fyzické iOS zařízení pomocí technologie Xamarin Hot Restart.

C# DialogApp

Přesuňme se do Solution Explorer, kde si v sekci C# DialogApp otevřeme soubory MainPage.xaml a MainPage.xaml.cs.

Soubory sdíleného kódu multiplatformní Xamarin aplikace - Xamarin - Mobilní aplikace v C# .NET

MainPage.xaml

Jako první se podíváme do souboru MainPage.xaml. Z předchozích lekcí již víme, že slouží k rozložení komponent v naší aplikaci a zapisujeme do něj pomocí jazyka XML s rozšířenou syntaxí. Visual Studio nám při založení projektu vygenerovalo následující kód:

<?xml version="1.0" encoding="utf-8" ?>
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
             xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
             x:Class="DialogApp.MainPage">

    <StackLayout>
        <Frame BackgroundColor="#2196F3" Padding="24" CornerRadius="0">
            <Label Text="Welcome to Xamarin.Forms!" HorizontalTextAlignment="Center" TextColor="White" FontSize="36"/>
        </Frame>
        <Label Text="Start developing now" FontSize="Title" Padding="30,10,30,10"/>
        <Label Text="Make changes to your XAML file and save to see your UI update in the running app with XAML Hot Reload. Give it a try!" FontSize="16" Padding="30,0,30,0"/>
        <Label FontSize="16" Padding="30,24,30,0">
            <Label.FormattedText>
                <FormattedString>
                    <FormattedString.Spans>
                        <Span Text="Learn more at "/>
                        <Span Text="https://aka.ms/xamarin-quickstart" FontAttributes="Bold"/>
                    </FormattedString.Spans>
                </FormattedString>
            </Label.FormattedText>
        </Label>
    </StackLayout>

</ContentPage>

Již při prvním pohledu je jasné, jakým způsobem budeme zapisovat kód a také kam. Budeme ho psát do těla elementu <ContentPage>. Vše, co do něj napíšeme, se vnitřně ukládá do vlastnosti Content, která může obsahovat jen jeden element. Když tedy chceme používat více komponent, tak je musíme vkládat do nějakého kontejneru. V našem případě to je kontejner StackLayout, který jednoduše skládá ovládací prvky za sebe.

Defaultní kód Visual Studia nedělá nic jiného, než že zobrazí uvítací nápis: "Welcome to Xamarin.Forms!" a rady, jak postupovat, pomocí prvku <Label>. Tento prvek je v podstatě pouze textový popisek, který má vlastnost Text, jejíž hodnotou je textový řetězec, který se má zobrazit. Tomuto popisku můžeme taktéž nastavit horizontální a vertikální pozici pomocí atributů HorizontalOptions a VerticalOptions. O pozicování si ale více povíme až dále v kurzu.

Všechny ovládací prvky a jejich atributy se nemusíte učit nazpamět, protože Visual Studio nám nabízí ToolBox a okno Properties, kde si vše můžeme jednoduše naklikat. Pro zkušenější je však rychlejší psát rovnou kód. ToolBox nalezneme v levé vertikální liště Visual Studia, zkuste si ho otevřít a podívat se na jednotlivé komponenty. Dále si zkusme v kódu kliknout na <Label>, pod Solution Explorer se nám otevřelo okno Properties pro označený element. Opět doporučuji si okno projít řádek po řádku, ať máte představu, co vše lze s ovládacími prvky dělat.

Xamarin - Mobilní aplikace v C# .NET

Jistě již chápete, že tvořit klasické Hello World! by nám nedalo moc práce :) Stačilo by přepsat text a aplikaci spustit.

Úprava XAML

Defaultní obsah proto vymažeme a necháme si pouze prázdný element <StackLayout>. Tomu nastavíme vlastnost Margin na 25,50. Této vlastnosti se budeme věnovat podrobněji dále v kurzu. Teď nám stačí vědět, že nastaví odsazení obsahu elementu <StackLayout> zprava a zleva na 25 jednotek a shora a zdola na 50. Nastavujeme ji především proto, aby obsah nezasahoval do vrchní informační lišty (status baru) na iOS.

Do <StackLayout> poté přidáme ovládací prvek <Entry> a tlačítko <Button>. Kód bude vypadat následovně:

<StackLayout Margin="25,50">
    <Label Text="Vítejte, zadejte své oslovení" />
    <Entry x:Name="osloveniEntry" />
    <Button x:Name="button" Text="Pozdravit!" Clicked="Button_Clicked"/>
</StackLayout>

Nově se zde setkáváme s ovládacími prvky <Entry> a <Button>:

  • <Entry> slouží k uživatelskému vstupu (něco jako formulářové pole na webu, do kterého můžeme psát) a
  • <Button> je tlačítko.

Tlačítku jsme v atributu Clicked přiřadili metodu, která se má vyvolat po jeho stisknutí. Tuto metodu si můžeme nechat vygenerovat automaticky Visual Studiem. Po napsání Clicked=" nám Visual Studio nabídne, že nám po stisku Tab vygeneruje novou metodu. Toho samozřejmě využijeme. Atribut Clicked je ve skutečnosti událost.

Z minulé lekce si jistě pamatujete, že x: nám značí alias pro jmenný prostor s definicemi rozšiřujících parametrů. V tomto případě používáme parametr Name. Pomocí něj přiřazujeme jednotlivým prvkům jména, díky kterým poté můžeme k daným prvkům přistupovat v Code Behind.

Tímto máme v XAML souboru hotovo a formulář aplikace je připravený. Projekt uložíme, aby se změny provedené v XAML souboru projevily v celém projektu.

MainPage.xaml.cs

Přesunuli jsme se do tzv. Code Behind souboru MainPage.xaml.cs. Zde se již setkáme pouze s jazykem C# .NET, pomocí kterého budeme navržený formulář obsluhovat. Opět si ukažme vygenerovanou strukturu, která obsahuje potřebné using, namespace naší aplikace a třídu s metodou MainPage():

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Xamarin.Forms;

namespace DialogApp
{
    public partial class MainPage : ContentPage
    {
        public MainPage()
        {
            InitializeComponent();
        }
    }

    private void Button_Clicked(object sender, EventArgs e)
    {
        throw new NotImplementedException();
    }
}

Jak můžeme vidět, tak zde již máme vygenerovanou naši metodu z XAML. Metodu události tlačítka můžeme přiřadit i v C#, např. v konstruktoru MainPage():

button.Clicked += Button_Clicked;

Po napsání += nám Visual Studio stejně jako v XAML nabídne, že nám po stisku Tab vygeneruje novou metodu pro naše tlačítko.

Jelikož budeme chtít, aby dialogové okno nezaseknulo vlákno s formulářem, budeme potřebovat použít klíčové slovo await. Abychom ho mohli použít, hlavičku metody si přepíšeme na asynchronní. Asynchronní postupy se používají, když chceme v aplikaci provést nějakou akci a chceme, aby aplikace nadále reagovala, než se tato akce dokončí.

Nyní musíme říci, co se má stát po stisknutí tlačítka. Jelikož chceme, aby na nás vyskočilo dialogové okno s pozdravem a oslovením, které zapíšeme do <Entry>, tak musíme začít právě u <Entry>. Řádek s NotImplementedException() vymažeme a nahradíme ho našim kódem:

private async void Button_Clicked(object sender, EventArgs e)
{
    string osloveni = osloveniEntry.Text;
    await DisplayAlert($"Ahoj {osloveni}!", "Vítej v první multiplatformní aplikaci.", "OK");
}

První řádek nám říká, že obsah <Entry>, které jsme pojmenovali jako osloveniEntry, se uloží jako string (textový řetězec) do proměnné osloveni. Na druhém řádku zavoláme DisplayAlert() (dialogové okno), do kterého vypíšeme naši proměnnou, uvítání a OK pro zavření. Všimněte si, že metoda DisplayAlert() má fixně nastavené 3 hodnoty v uvozovkách, oddělené čárkou - "Titulek", "Obsah", "Patička". Při najetí myší na DisplayAlert() nám Visual Studio opět napovídá, jak máme data zapisovat. Dále si všimněte znaku $. Pokud bychom ho nenapsali, nemohli bychom proměnnou osloveni do řetězce takto jednoduše vložit. $ se zapisuje ještě před uvozovky ovlivněného řetězce.

Spuštění aplikace

Máme hotovo, nezbývá než naši aplikaci otestovat v emulátoru nebo simulátoru.

Spuštění na Android

V Solution Exploreru klikneme pravým tlačítkem na Android projekt a zvolíme Properties. Zde se v záložce Application ujistíme, že aplikaci kompilujeme ideálně pomocí nejnovější verze Android. Tato verze musí být stejná nebo větší než verze, na které aplikaci spouštíme:

Properties - Xamarin - Mobilní aplikace v C# .NET

Minimální požadovanou verzi můžeme změnit v záložce Android Manifest.

Poté nastavíme Android projekt jako spouštěcí projekt, v menu nahoře si vybereme náš emulátor a spustíme jej:

Spouštění Android aplikace - Xamarin - Mobilní aplikace v C# .NET

Aplikace se sama sestaví, nainstaluje na emulátor a spustí. Výsledek by měl vypadat nějak takto:

Xamarin - Mobilní aplikace v C# .NET
Xamarin - Mobilní aplikace v C# .NET

Spuštění na iOS

Ten, kdo má spárované Visual Studio a MAC nebo připojené iOS zařízení, může aplikaci otestovat i na něm. Postup je obdobný, nastavíme iOS projekt jako spouštěcí projekt, v menu nahoře si vybereme náš simulátor a spustíme jej:

Spuštění iOS aplikace - Xamarin - Mobilní aplikace v C# .NET

Aplikace se sama sestaví, nainstaluje na simulátor a spustí. V případě nastaveného zrcadlení se nám otevře nové okno s aplikací:

Zrcadlený simulátor - Xamarin - Mobilní aplikace v C# .NET

Na MACu se automaticky otevře simulátor:

Xamarin - Mobilní aplikace v C# .NET
Xamarin - Mobilní aplikace v C# .NET

Samozřejmě aplikaci můžeme spustit i v Universal Windows Platform.

Doufám, že se vám první aplikace líbí a všemu rozumíte.

V následujícím kvízu, Kvíz - Životní cyklus aplikace, XAML v C# .NET Xamarin, si vyzkoušíme nabyté zkušenosti z předchozích lekcí.


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 766x (445.11 kB)

 

Předchozí článek
Jazyk XAML v Xamarin.Forms
Všechny články v sekci
Xamarin - Mobilní aplikace v C# .NET
Přeskočit článek
(nedoporučujeme)
Kvíz - Životní cyklus aplikace, XAML v C# .NET Xamarin
Článek pro vás napsal Jaroslav Smrž
Avatar
Uživatelské hodnocení:
52 hlasů
Autor se věnuje primárně vývoji webových aplikací v .NET Core. Zajímá se také o vývoj her v Unreal Engine 4 a mobilních aplikací v Xamarin.
Aktivity