1 of 36

Tvorba mobilních aplikací pro geografická data II.

Mgr. Michal Jakl

LS 2025

2 of 36

Obsah lekce

  1. Java
  2. Struktura projektu v Android Studiu
  3. Swift
  4. Struktura projektu v Xcode
  5. Životní cyklus aplikace
  6. Navigace mezi obrazovkami
  7. Práce s layouty a UI

Praktické cvičení: Tvorba první aplikace ve zvoleném prostředí

3 of 36

  1. Java
  • Java je objektově orientovaný programovací jazyk vyvinutý společností Sun Microsystems v roce 1995 (dnes vlastněný společností Oracle).
  • Největší výhody Javy:

✅ Přenositelnost – kód napsaný v Javě běží na různých platformách (Android, Windows, Linux).

✅ Silná komunita – Java je jeden z nejrozšířenějších jazyků na světě.

✅ Bezpečnost – správa paměti a ochrana proti běžným chybám.

✅ Multithreading – podpora vícevláknového programování (důležité pro mobilní aplikace).

4 of 36

  • Java v Android Studiu
  • Android používá upravenou verzi Javy běžící na Android Runtime (ART).
  • Aplikace jsou napsané v Javě, ale přeložené do bajtkódu běžícího na zařízení.

📝 Vysvětlení:

  • onCreate() – metoda, která se volá při spuštění aplikace.
  • setContentView(R.layout.activity_main); – nastaví rozložení obrazovky z XML souboru.

5 of 36

2. Struktura projektu v Android Studiu

  • Složky projektu:
    • manifest/ – AndroidManifest.xml (konfigurace aplikace)
    • java/com.example.app/ – zdrojový kód aplikace
    • res/ – obrázky, layouty, barvy, fonty
  • Gradle – build systém
    • Definuje závislosti a konfiguraci aplikace
    • Dva hlavní soubory:
      • build.gradle (Module: app) – specifické pro aplikaci
      • build.gradle (Project) – pro celý projekt

6 of 36

2. Kroky k založení nového projektu

1️⃣ Otevři Android Studio a klikni na "New Project".

2️⃣ Vyber šablonu aplikace (doporučeno: Empty Activity pro začátek).

3️⃣ Zadej název projektu, např. "MojePrvniAplikace".

4️⃣ Vyber jazyk (Java nebo Kotlin).

5️⃣ Klikni na "Finish" – Android Studio vytvoří strukturu projektu.

Po spuštění se zobrazí textové pole s nápisem „Hello World!“.

💡 Tip: Pro spuštění aplikace klikni na ▶ Run (v pravém horním rohu) a vyber emulátor nebo fyzické zařízení.

7 of 36

3. Swift

Co je Swift?

  • Swift je moderní, bezpečný a rychlý programovací jazyk vyvinutý Applem v roce 2014.
  • Swift nahradil Objective-C, který se používal pro vývoj iOS aplikací dříve.
  • Výhody Swiftu oproti Objective-C:

✅ Čitelnější syntaxe (podobná Pythonu).

✅ Bezpečnější správa paměti (žádné problémy s ukazateli).

✅ Lepší výkon – Swift je rychlejší než Objective-C.

8 of 36

3. Swift v Xcode a SwiftUI

Swift umožňuje deklarativní programování pomocí SwiftUI, což usnadňuje tvorbu uživatelského rozhraní.

📝 Vysvětlení:

  • Text("Ahoj, světe!") – vykreslí text na obrazovce.
  • .font(.largeTitle) – nastaví velikost písma.
  • .foregroundColor(.blue) – změní barvu textu na modrou.

9 of 36

4. Struktura projektu v Xcode

  • Složky projektu:
    • Assets.xcassets – obrázky, barvy, ikony
    • Info.plist – konfigurace aplikace
    • SwiftUI Views/ – složky s jednotlivými obrazovkami
  • Swift Package Manager (SPM)
    • Správa závislostí pro Swift projekty
    • Alternativa k CocoaPods a Carthage

10 of 36

4. Kroky k založení Xcode projektu

1️⃣ Otevři Xcode a klikni na "Create a new Xcode project".

2️⃣ Vyber šablonu aplikace (doporučeno: App (SwiftUI)).

3️⃣ Zadej název projektu – např. "MojePrvniAplikace".

4️⃣ Zvol Swift jako jazyk a potvrď.

5️⃣ Klikni na "Finish" – Xcode vytvoří strukturu projektu.

Po spuštění se zobrazí text „Ahoj, světe!“ ve SwiftUI.

💡 Tip: Pro spuštění aplikace klikni na ▶ Run (v horní liště) a vyber iOS simulátor nebo fyzické zařízení.

11 of 36

4. Rozdíl Java vs. Swift

💡 Zajímavost:

  • Apple představil Swift jako open-source, takže lze používat i na Linuxu a Windows.
  • Android dnes podporuje i Kotlin, což je modernější alternativa k Javě.

✅ Java je základní jazyk pro Android, Swift pro iOS.

✅ Swift má čistší a bezpečnější syntaxi než Java.

✅ Java používá XML pro UI, Swift preferuje deklarativní přístup (SwiftUI).

✅ Oba jazyky jsou silné, ale každý je optimalizován pro svou platformu.

12 of 36

4. Imperativní přístup

Programování lze rozdělit na imperativní a deklarativní přístup. Rozdíl je v tom, jak popisujeme, co má program udělat.

Imperativní programování (Java, XML v Androidu)

  • Programátor přesně říká, jak se má něco provést krok po kroku.
  • Zaměřuje se na postup (algoritmus), ne na výsledek.
  • Příklad: Ručně nastavujeme tlačítko, určujeme jeho polohu, barvu a vlastnosti pomocí kódu.

📝 Co děláme?

  • Ručně vytváříme tlačítko v XML.
  • Pak v Javě nastavujeme, co se má stát po kliknutí.
  • Musíme explicitně říct, co se kdy má stát.

13 of 36

4. Deklarativní přístup

Deklarativní programování (SwiftUI, Jetpack Compose v Androidu)

  • Programátor popisuje, jak má UI vypadat, a systém se postará o vykreslení.
  • Zaměřuje se na výsledek, ne na to, jak se k němu dostat.
  • Příklad: Řekneme „chci tlačítko, které se po kliknutí změní“ – systém už sám zajistí změnu UI.

📝 Co se tu děje?

  • Pouze říkáme, co chceme mít na obrazovce (Button(buttonText)).
  • @State zajišťuje, že se text tlačítka automaticky změní, když na něj klikneme.
  • SwiftUI se postará o vše – nemusíme psát složitý kód pro změnu UI.

14 of 36

4. Deklarativní vs. imperativní přístup

💡 Zajímavost:

  • Apple představil SwiftUI v roce 2019 – od té doby se vývoj aplikací zjednodušil o více než 50 %.
  • Google zavedl Jetpack Compose (2020) jako alternativu ke klasickým XML layoutům v Androidu.

🔥 Hlavní pointa:

  • Deklarativní přístup šetří čas, protože programátor nemusí ručně spravovat stav aplikace.
  • Je vhodnější pro moderní vývoj UI, protože je intuitivnější a méně náchylný na chyby.

15 of 36

5. Životní cyklus aplikace

  • Android (Activity lifecycle)
    • onCreate() – inicializace
    • onStart() – aplikace viditelná
    • onResume() – aplikace aktivní
    • onPause() – aplikace v pozadí
    • onStop() – aplikace skrytá
    • onDestroy() – uvolnění paměti
  • iOS (AppDelegate & SceneDelegate)
    • application(_:didFinishLaunchingWithOptions:) – spuštění
    • sceneDidBecomeActive() – aplikace aktivní
    • sceneWillResignActive() – aplikace v pozadí

16 of 36

6. Navigace mezi obrazovkami

Navigace je klíčová část mobilní aplikace – umožňuje přecházet mezi různými obrazovkami a přenášet mezi nimi data.

Každý systém (Android, iOS) má svůj vlastní způsob, jak s navigací pracovat.

17 of 36

6. Navigace mezi obrazovkami

  • Android:
    • Intent – přechod mezi Activity
    • Fragment – modularita UI
    • Navigation Component – moderní způsob navigace

  • iOS (SwiftUI):
    • NavigationView – základní struktura navigace
    • NavigationLink(destination:) – přechod mezi obrazovkami
    • TabView – přepínání mezi sekcemi

18 of 36

6. Přechod mezi obrazovkami pomocí Intent

Co se tu děje?

  • Intent se používá k přechodu mezi aktivitami.
  • putExtra() posílá data do druhé aktivity.
  • getIntent().getStringExtra() získá přijatá data a zobrazí je v TextView.

📌 Používá se pro přechod mezi dvěma aktivitami (obrazovkami).

📌 Může předávat data mezi aktivitami.

19 of 36

6. Navigace pomocí Fragmentů

📌 Fragmenty jsou lepší pro více sekcí v jedné aplikaci (např. menu, seznamy, detaily).

Výhoda:

  • Fragmenty lze znovu použít v různých částech aplikace.
  • Lépe fungují ve vícepanelových aplikacích (např. na tabletech).

20 of 36

6. Navigation Component (moderní navigace v Androidu)

📌 Google doporučuje používat Navigation Component, který umožňuje snadnou navigaci pomocí XML.

Výhoda:

  • Méně kódu než při použití Intent nebo FragmentManager.
  • Přehlednější správa navigace přes XML.

21 of 36

6. Navigace v iOS aplikacích (SwiftUI)

V iOS aplikacích se navigace řeší pomocí NavigationView a NavigationLink v SwiftUI.

📝 Vysvětlení:

  • NavigationView – obaluje navigaci, přidává horní panel.
  • NavigationLink(destination: SecondView()) – přechod na novou obrazovku.
  • SwiftUI se automaticky postará o animaci přechodu!

Pokud chceme předat data mezi obrazovkami, uděláme to pomocí proměnných.

📝 Vysvětlení:

  • SecondView(name: "Petr") – předáváme jméno do druhé obrazovky.
  • var name: String – druhá obrazovka přijímá data.

22 of 36

6. Navigace pomocí TabView (spodní menu)

Pokud chceme přepínat mezi obrazovkami pomocí spodního menu, použijeme TabView.

📝 Vysvětlení:

  • TabView vytváří spodní navigační menu.
  • tabItem definuje ikonu a text jednotlivých záložek.

23 of 36

6. Shrnutí navigačních metod

✅ V Androidu se navigace řeší pomocí Intentů, Fragmentů a Jetpack Navigation Component.�✅ V iOS se navigace v SwiftUI provádí pomocí NavigationView a NavigationLink.�✅ Oba systémy umožňují přenos dat mezi obrazovkami jednoduchým způsobem.�✅ Navigace je v SwiftUI intuitivnější a kratší na zápis než v Androidu.

💡 Zajímavost:

  • Apple i Google postupně upouštějí od klasických storyboardů/XML a přecházejí na deklarativní navigaci.
  • SwiftUI NavigationStack (iOS 16+) a Jetpack Compose Navigation (Android) přinášejí jednodušší navigační systém.

24 of 36

7. Práce s layouty a UI

Rozložení (layout) je způsob, jakým jsou prvky uživatelského rozhraní umístěny na obrazovce. Správný výběr layoutu je klíčový pro použitelnost aplikace, protože ovlivňuje vizuální přehlednost, přizpůsobení různým zařízením a interaktivitu.

25 of 36

7. Práce s layouty a UI

  • Android:
    • XML layouty (ConstraintLayout, LinearLayout)
    • Dynamické UI (RecyclerView, ViewBinding)

  • iOS (SwiftUI):
    • Deklarativní UI pomocí VStack, HStack, ZStack
    • @State a @Binding – správa stavu UI

26 of 36

7. Layouty v Android aplikacích

Android umožňuje dvě hlavní metody návrhu layoutů:

1️⃣ XML layouty – klasický způsob, kde se UI definuje v souboru XML.

2️⃣ Jetpack Compose – moderní deklarativní přístup, kde se UI píše v Kotlinu.

27 of 36

7. Layouty v Android aplikacích

📝 Vysvětlení:

  • android:orientation="vertical" – prvky se řadí pod sebe.
  • TextView – zobrazí text.
  • Button – tlačítko, které může reagovat na kliknutí.

V XML souborech definujeme strukturu UI. Každý layout je hierarchicky strukturován jako strom prvků.

📝 Vysvětlení:

  • Column {} – vertikální řazení prvků (jako LinearLayout).
  • Text() – textový prvek.
  • Button() – tlačítko s akcí při kliknutí.

💡 Výhody Jetpack Compose:�✅ Méně kódu a lepší přehlednost.�✅ Snadná dynamická změna UI.�✅ Moderní přístup podporovaný Googlem.

Jetpack Compose definovat UI přímo v Kotlinu deklarativním způsobem, podobně jako SwiftUI v iOS.

28 of 36

7. Layouty v iOS aplikacích (SwiftUI)

Apple umožňuje tvorbu rozložení pomocí:

1️⃣ Storyboardy (klasický způsob, vizuální editor v Xcode).

2️⃣ SwiftUI (moderní deklarativní přístup).

📌 1. Storyboardy (klasický způsob v Xcode)

  • V Xcode lze rozložení navrhnout vizuálně pomocí drag & drop.
  • Pro řízení rozložení se používají Auto Layout Constraints (podobné ConstraintLayout v Androidu).

📌 Příklad Auto Layout Constraint:

  • „Tento textový prvek bude vždy uprostřed obrazovky, bez ohledu na velikost displeje.“
  • Jak se nastaví?
    1. Přidáme constraint pro zarovnání na střed horizontálně i vertikálně.
    2. Nastavíme dynamickou velikost textu, aby se přizpůsobil.

📌 Nevýhody Storyboardů:� ❌ Může být nepřehledné u větších aplikací.� ❌ Nelze snadno verzovat v Git.

29 of 36

7. Layouty v iOS aplikacích (SwiftUI)

📌 2. SwiftUI (moderní deklarativní přístup)

Stejně jako Jetpack Compose, SwiftUI umožňuje definovat layout přímo v kódu.

📝 Vysvětlení:

  • VStack {} – vertikální rozložení (podobné LinearLayout v Androidu).
  • Text() – zobrazí text.
  • Button() – tlačítko s klikací akcí.

💡 Výhody SwiftUI:�✅ Kód je kratší a přehlednější než u Storyboardů.�✅ Okamžitý náhled v Xcode (Preview mode).�✅ Lepší práce s dynamickým obsahem (např. seznamy).

30 of 36

7. Layouty - shrnutí

✅ V Androidu se layouty tvoří pomocí XML nebo Jetpack Compose.�✅ V iOS se layouty tvoří pomocí Storyboardů nebo SwiftUI.�✅ Jetpack Compose a SwiftUI jsou moderní deklarativní řešení, která zjednodušují vývoj UI.�✅ Storyboardy a XML jsou stále používány, ale postupně jsou nahrazovány novějšími přístupy.

💡 Zajímavost:

  • Google i Apple postupně upouštějí od XML a Storyboardů a směřují k deklarativním UI řešením.
  • SwiftUI a Jetpack Compose se pravděpodobně stanou standardem v příštích letech.

31 of 36

Praktické cvičení I. - zadání

📌 Úkol:

1️⃣ Přidej tlačítko do XML layoutu.

2️⃣ Po kliknutí na tlačítko se změní text ve TextView.

📌 Úkol:

1️⃣ Přidej tlačítko do SwiftUI layoutu.

2️⃣ Po kliknutí na tlačítko se změní text.

32 of 36

Praktické cvičení I. - Android dodatek

33 of 36

Praktické cvičení II. - zadání

📌 Úkol:

1️⃣ Vytvoř druhou obrazovku (SecondActivity.java).

2️⃣ Přidej tlačítko pro přechod mezi obrazovkami.

📌 Úkol:

1️⃣ Vytvoř druhou obrazovku (SecondView).

2️⃣ Přidej tlačítko pro přechod mezi obrazovkami pomocí NavigationLink.

34 of 36

Praktické cvičení II. - Android dodatek

35 of 36

Praktické cvičení - shrnutí

36 of 36

Děkuji za pozornost a těším se příště!��Prostor pro zpětnou vazbu

mail@mjakl.cz

Tel. 608 544 839

Web: mjakl.cz

Telegram: t.me/mjakl_cz