IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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 2 - Android Intenty a aktivity - SumActivity - Součet čísel

V minulé lekci, Android Intenty a aktivity - Úvod a hlavní aktivita, jsme zahájili práci na ukázkové Android aplikaci se šesti tlačítky, kterými se přepínáme mezi jednotlivými funkcemi.

K otevření jiné aktivity potřebujeme Intent (můžeme přeložit jako záměr). V základním Android kurzu je použití intentů (v souvislosti s otevíráním aktivit) jen lehce zmíněno bez většího vysvětlení. Zde si jej vysvětlíme podrobněji.

Intent

Jedná se o objekt s informacemi pro systém, obsahující popis operace (záměru), která má být provedena. Intenty jsou jedním z prostředků, sloužících k meziprocesové komunikaci, a neslouží pouze k otevírání aktivit. Dále můžeme Intent použít jako kontejner primitivních dat, čehož také využijeme.

Intent je objekt skládající se, v případě otevírání aktivit, ze dvou částí:

  • akce - Druh činnosti, která má být provedena (např. zobrazení webu).
  • data - Data, která potřebujeme aktivitě nebo systému předat (např. URL webu).

Explicitní a implicitní intenty

Existují dva základní typy intentů:

  • Explicitní intent - přesně určuje akci (třídu), která má být spuštěna. Systému dáme úkol, který "bez přemýšlení" provede. V hlavní aktivitě, popsané v předchozí lekci, prvních pět tlačítek otevírá jiné aktivity právě explicitním intentem.
  • Implicitní intent - určuje, co se má stát, ale již neříká, jak se to má stát. Systému pouze předáme informace, na základě kterých rozhodne, jak náš záměr uskuteční. Příkladem může být poslední tlačítko ITnetwork.cz (otevření webu) naší ukázkové aplikace, kdy systému řekneme, že chceme zobrazit web ITnetwork.cz. Intentu nastavíme data v podobě URL a o víc se nestaráme, protože v práci bude pokračovat systém. Ten intent "přečte" a zjistí, že chceme zobrazit web s přiloženou URL. Systém pokračuje hledáním nainstalovaných aplikací schopných tento záměr vykonat. Uživateli nabídne možnost jednu z nich spustit a tím náš záměr dokončit.

Aktivita SumActivity - Součet čísel

Nyní vytvoříme aktivitu SumActivity, kterou budeme otevírat z hlavní aktivity prvním tlačítkem. Zde budeme zadávat dvě čísla určená k součtu. Výpočet můžeme udělat přímo v aktivitě SumActivity, ale abychom si ukázali obousměrnou komunikaci dvou aktivit, bude tuto operaci provádět další aktivita SumResultActivity, která výsledek pak vrátí zpět do aktivity SumActivity.

Vytvoření souborů SumActivity.java a sum_activity.xml

V Android Studiu, v okně se strukturou projektu, klikneme pravým tlačítkem myši na složku podle následujícího obrázku a v zobrazeném menu zvolíme New -> Activity -> Empty Activity:

Android Intenty a aktivity

Otevře se okno New Android Activity:

Android Intenty a aktivity

V otevřeném okně do pole Activity Name napíšeme SumActivity, zaškrtneme políčko Generate Layout File a do pole Layout Name napíšeme sum_activity. Poté okno zavřeme tlačítkem Finish.

Android Studio vygeneruje soubory pro Java kód a druhý pro XML návrh grafického uživatelského rozhraní.

sum_activity.xml

Soubor pro uživatelské rozhraní upravíme do následující podoby:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@color/bg_activity_sum_activity"
    android:scrollbars="vertical">

    <Button
        android:id="@+id/btnSend"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_alignParentBottom="true"
        android:layout_marginTop="10dp"
        android:text="@string/activity_main_btn_sum_activity"
        android:textAllCaps="false" />

    <ScrollView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_above="@id/btnSend"
        android:background="@color/bg_activity_sum_activity"
        android:padding="10dp"
        android:scrollbars="vertical">

        <androidx.constraintlayout.widget.ConstraintLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:padding="10dp"
            android:scrollbars="vertical">

            <TextView
                android:id="@+id/textView"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:text="@string/sum_activity_title"
                android:textColor="@color/text_color_activity_sum_activity"
                android:textSize="30sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toTopOf="parent" />

            <TextView
                android:id="@+id/textView2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center_horizontal"
                android:text="@string/sum_activity_desc"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView" />

            <TextView
                android:id="@+id/textView3"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="@string/sum_activity_number_1"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView2" />

            <EditText
                android:id="@+id/etNumber1"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:ems="10"
                android:inputType="number"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView3" />

            <TextView
                android:id="@+id/textView4"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="@string/sum_activity_number_2"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/etNumber1" />

            <EditText
                android:id="@+id/etNumber2"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:ems="10"
                android:inputType="number"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView4" />

            <TextView
                android:id="@+id/textView5"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="24dp"
                android:text="@string/sum_activity_result"
                android:textColor="@color/text_color_activity_sum_activity"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/etNumber2" />

            <TextView
                android:id="@+id/labelResult"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:layout_marginTop="8dp"
                android:gravity="center_horizontal"
                android:text="0"
                android:textColor="@color/text_color_activity_sum_activity"
                android:textSize="30sp"
                app:layout_constraintEnd_toEndOf="parent"
                app:layout_constraintStart_toStartOf="parent"
                app:layout_constraintTop_toBottomOf="@+id/textView5" />

        </androidx.constraintlayout.widget.ConstraintLayout>

    </ScrollView>

</RelativeLayout>

Na začátku obrazovky máme tlačítko pro návrat do menu a nadpis aktivity. Níže pak máme několik <TextView> s informacemi pro uživatele a komponenty <EditText> pro zadání čísel k sečtení. Nakonec zobrazujeme výsledek a tlačítko k odeslání k výpočtu. Nic složitého.

Konstanty použitých textů

Soubor res/values/strings.xml doplníme o následující položky s texty použitými v projektu:

<string name="sum_activity_title">SumActivity</string>

<string name="sum_activity_desc">Oboustranná komunikace dvou aktivit. Tato aktivita od uživatele získá dvě čísla, která tlačítkem odešleme do jiné aktivity, kde tato čísla budou sečtena a výsledek bude vrácen do této aktivity.</string>

<string name="sum_activity_number_1">První číslo:</string>
<string name="sum_activity_number_2">Druhé číslo:</string>
<string name="sum_activity_result">Výsledek výpočtu:</string>
<string name="suma_ctivity_button">Odeslat k výpočtu</string>

<string name="info_no_result">Nepřišel žádný výsledek...</string>
<string name="info_error_loading_result">Chyba načítání výsledku...</string>
<string name="info_incorrect_entry">Chybné zadání...</string>

<string name="incoming_intent_data_error">Chyba přijatých dat...</string>

Konstanty použitých barev

Podobně doplníme soubor res/values/colors.xml o dvě položky s barvou pozadí aktivity a s barvou textu:

<color name="bg_activity_sum_activity">#AE3128</color>
<color name="text_color_activity_sum_activity">#EEEEEE</color>

Výstup XML kódu bude vypadat takto:

Android Intenty a aktivity

Je tu jedna odlišnost od hlavní aktivity - tlačítko nemá v XML atribut android:onClick pro obsloužení události kliknutí. Tuto událost obsloužíme totiž přímo v kódu v souboru SumActivity.java, abychom si vyzkoušeli další způsob obsloužení události kliknutí.

V příští lekci, Android Intenty a aktivity - SumActivity - Java kód, si použití intentů ukážeme na první ukázce z naší ukázkové aplikace Activities.


 

Předchozí článek
Android Intenty a aktivity - Úvod a hlavní aktivita
Všechny články v sekci
Android Intenty a aktivity
Přeskočit článek
(nedoporučujeme)
Android Intenty a aktivity - SumActivity - Java kód
Článek pro vás napsal Pavel
Avatar
Uživatelské hodnocení:
2 hlasů
Autor se věnuje programování v Javě, hlavně pro Android. Mezi jeho další zájmy patří Arduino, Minecraft.
Aktivity