Programování

Android Studio pro začátečníky, část 2: Prozkoumejte a kódujte aplikaci

Aktualizováno: leden 2020.

V části 1 úvodu tohoto článku pro Android Studio pro začátečníky jste ve svém vývojovém prostředí nastavili Android Studio a seznámili se s uživatelským rozhraním. Nyní v části 2 budete kódovat svou první aplikaci.

Animovaná mobilní aplikace se skládá z jedné aktivity, která představuje robotickou postavu Google pro Android a tlačítko pro animaci postavy. Klepnutí na tlačítko způsobí, že postava postupně změní barvu ze zelené na červenou na modrou a poté zpět na zelenou. I když aplikace není nijak zvlášť užitečná, její psaní vám pomůže pohodlně používat Android Studio. V části 3 vytvoříte a spustíte aplikaci pomocí emulátoru zařízení Android a tabletu Kindle Fire.

Všimněte si, že tato řada byla aktualizována pro Android Studio 3.2.1, aktuální stabilní vydání od tohoto psaní.

Okna projektu a editoru Android Studio

Na konci části 1 jsem představil hlavní okno Android Studio. Toto okno je rozděleno do několika oblastí, včetně okna projektu, kde identifikujete zdrojové soubory aplikace, a různých oken editoru, kde napíšete kód a zadáte zdroje pro mobilní aplikace. v Android Studio. Okno Projekt a okno editoru jsou zobrazeny na obrázku 1.

Jeff Friesen

Zvýrazní se okno projektu W2A, což je název aplikace W2A.java zdrojový soubor (i když .Jáva přípona souboru není zobrazena). Souhlasí s W2A je okno editoru, do kterého se dostanete poklepáním W2A v okně Projekt. Okno editoru odhaluje aktuální obsah souboru, v tomto případě základní zdrojový kód Java pro hlavní aktivitu aplikace.

Každé okno editoru je spojeno s kartou. Například, W2AOkno editoru je spojeno s W2A.java záložka. Druhá záložka označená jako main.xml (výchozí rozložení založené na XML pro hlavní aktivitu aplikace) je také zobrazeno. Přesouváte se z jednoho okna editoru do druhého kliknutím na kartu okna.

stáhnout Získat kód Stáhněte si zdrojový kód ukázkové aplikace pro Android: W2A.java. Vytvořil Jeff Friesen pro JavaWorld.

Ukázková aplikace pro Android

Ukázková aplikace (W2A.java) se skládá z hlavní aktivity, která zobrazuje znak robota Android a tlačítko. Když uživatel stiskne tlačítko, robot animuje pomocí řady barev. V této části prozkoumáme zdrojový kód a zdroje aktivity.

Prozkoumejte a kódujte ukázkovou aplikaci pro Android

Zdrojový kód aktivity je uložen v souboru W2A.java, uvedený v seznamu 1.

Výpis 1. W2A.java

 balíček ca.javajeff.w2a; import android.app.Activity; import android.graphics.drawable.AnimationDrawable; importovat android.os.Bundle; importovat android.view.View; import android.widget.Button; import android.widget.ImageView; veřejná třída W2A rozšiřuje aktivitu {AnimationDrawable androidAnimation; @Override public void onCreate (Bundle savedInstanceState) {super.onCreate (savedInstanceState); setContentView (R.layout.main); ImageView androidImage = (ImageView) findViewById (R.id.android); androidImage.setBackgroundResource (R.drawable.android_animate); androidAnimation = (AnimationDrawable) androidImage.getBackground (); final Button btnAnimate = (Button) findViewById (R.id.animate); View.OnClickListener ocl; ocl = nový View.OnClickListener () {@Override public void onClick (View v) {androidAnimation.stop (); androidAnimation.start (); }}; btnAnimate.setOnClickListener (ocl); }} 

The W2A.java soubor začíná a výpis balíku, který balíček pojmenuje (ca.javajeff.w2a), který ukládá W2A třída. Poté následuje řada příkazů k importu pro různé typy rozhraní Android Android. Dále kód popisuje W2A třída, která se rozšiřuje android.app.Activity.

W2A nejprve deklaruje androidAnimation instance pole typu android.graphics.drawable.AnimationDrawable. Objekty typu AnimationDrawable popsat animace snímek po snímku, ve kterém je aktuální kresba nahrazena další kreslicí v sekvenci animace.

Co je kresba?

A tažný je něco, co lze nakreslit, například obrázek. AnimationDrawable nepřímo rozšiřuje abstrakt android.graphics.drawable.Drawable třída, což je obecná abstrakce pro kreslicí.

Metoda onCreate ()

Celá práce aplikace se odehrává v W2Apřevažuje onCreate (balíček) metoda: nejsou vyžadovány žádné další metody, což pomáhá udržovat tuto aplikaci jednoduchou.

onCreate (balíček) first invokes its same-named superclass method, a rule that must be followed by all overriding activity methods.

Tato metoda se poté provede setContentView (R.layout.main) k vytvoření uživatelského rozhraní aplikace. R.layout.main je identifikátor (ID) pro prostředek aplikace, který je umístěn v samostatném souboru. Toto ID interpretujete následovně:

  • R je název třídy, která se generuje při vytváření aplikace. Tato třída se jmenuje R protože jeho obsah identifikuje různé druhy prostředků aplikace, včetně rozvržení, obrázků, řetězců a barev.
  • rozložení je název třídy, která je vnořená uvnitř R. Prostředek aplikace, jehož ID je uloženo v této třídě, popisuje konkrétní prostředek rozložení. Každý druh prostředku aplikace je přidružen k vnořené třídě pojmenované podobným způsobem. Například, tětiva identifikuje prostředky řetězce.
  • hlavní je jméno uživatele intkonstanta založená na deklaraci uvnitř rozložení. Toto ID zdroje identifikuje hlavní prostředek rozložení. Konkrétně hlavní označuje a main.xml soubor, který ukládá informace o rozložení hlavní aktivity. hlavní je W2Aje jediný prostředek rozložení.

Přihrávka R.layout.main na Aktivitaje void setContentView (int layoutResID) metoda instruuje Android, aby vytvořil obrazovku uživatelského rozhraní pomocí informací o rozložení uložených v main.xml. V zákulisí Android vytváří komponenty uživatelského rozhraní popsané v main.xml a umístí je na obrazovku zařízení podle specifikace main.xmldata rozvržení.

Obrazovka je založena na pohledy (abstrakce komponent uživatelského rozhraní) a zobrazit skupiny (pohledy, které seskupují související součásti uživatelského rozhraní). Pohledy jsou instance tříd, které podtřídu android.view.View třídy a jsou analogické komponentům AWT / Swing. Zobrazit skupiny jsou instance tříd, které podtřídu abstraktu android.view.ViewGroup třídy a jsou obdobou kontejnerů AWT / Swing. Android označuje konkrétní zobrazení (například tlačítka nebo číselníky) jako widgety.

Pokračování, onCreate (balíček) vykonává ImageView androidImage = (ImageView) findViewById (R.id.android);. Toto prohlášení nejprve volá Pohledje Zobrazit findViewById (int id) metoda k nalezení android.widget.ImageView prvek deklarovaný v main.xml a označeny jako Android. Vytváří to instanci ImageView a inicializuje jej na hodnoty deklarované v main.xml soubor. Příkaz poté uloží odkaz na tento objekt v místní proměnné androidImage.

ImageView a AnimationDrawable

Dále androidImage.setBackgroundResource (R.drawable.android_animate); příkaz vyvolá ImageViewje zděděno (od Pohled) void setBackgroundResource (int resID) metoda, nastavení pozadí pohledu na zdroj identifikovaný pomocí resID. The R.drawable.android_animate argument identifikuje soubor XML s názvem android_animate.xml (představeno později), který ukládá informace o animaci a který je uložen v resje tažný podadresář. The setBackgroundResource () odkazy na volání androidImage pohled na posloupnost obrázků popsaných uživatelem android_animate.xml, který bude vykreslen v tomto pohledu. Počáteční obrázek je vykreslen jako výsledek tohoto volání metody.

ImageView umožňuje aplikaci animovat sekvenci výkresů voláním AnimationDrawable metody. Než to aplikace dokáže, musí ji získat ImageViewje AnimationDrawable. The androidAnimation = (AnimationDrawable) androidImage.getBackground (); následující příkaz přiřazení splní tento úkol vyvoláním ImageViewje zděděno (od Pohled) Drawable getBackground () metoda. Tato metoda vrací AnimationDrawable pro dané ImageView, který je následně přidělen k androidAnimation pole. The AnimationDrawable instance se používá ke spuštění a zastavení animace, procesu, který krátce popíšu.

Konečně, onCreate (balíček) vytváří Animovat knoflík. Vyvolává to findByViewId (int) získat informace o tlačítku z main.xml, pak vytvoří instanci android.widget.Button třída.

Poté zaměstnává Pohled třída je vnořená onClickListener rozhraní k vytvoření objektu posluchače. Tento objekt void onClick (Zobrazit v) metoda je vyvolána vždy, když uživatel klikne na tlačítko. Posluchač je registrován u svého Knoflík objekt voláním Pohledje void setOnClickListener (posluchač AdapterView.OnClickListener) metoda.

Chcete-li zastavit a poté spustit animaci, Animovatvyvolá posluchač kliknutí androidAnimation.stop (); následován androidAnimation.start ();. The stop() metoda se volá dříve Start() zajistit, aby následné kliknutí na Animovat tlačítko způsobí zahájení nové animace.

Aktualizujte a uložte kód

Než budeme pokračovat, nahraďte základní kód ve vašem W2A.java karta s kódem ze seznamu 1. Stisknutím tlačítka uložte obsah tohoto okna Ctrl + S, nebo vyberte Uložit vše z Soubor Jídelní lístek.

Kódování main.xml aplikace pro Android

Hlavní aktivita aplikace je spojena s rozložením založeným na XML, které je uloženo v souboru main.xml, a který je uveden v seznamu 2.

Výpis 2. main.xml

Po deklaraci XML výpis 2 deklaruje a Lineární rozvržení prvek, který určuje a. element that specifies a rozložení (skupina zobrazení, která nějakým způsobem uspořádá obsažená zobrazení na obrazovce zařízení Android) pro uspořádání obsažených widgetů (včetně vnořených rozvržení) buď vodorovně nebo svisle přes obrazovku.

The tag určuje několik atributů pro ovládání tohoto lineárního rozvržení. Mezi tyto atributy patří následující:

  • orientace identifikuje lineární rozložení jako horizontální nebo vertikální. Obsažené widgety jsou rozloženy vodorovně nebo svisle a výchozí orientace je vodorovná. "horizontální" a "vertikální" jsou jediné legální hodnoty, které lze tomuto atributu přiřadit.
  • layout_width identifikuje šířku rozložení. Mezi legální hodnoty patří „fill_parent“ (být tak široký jako rodič) a "obsah zábal" (aby byla dostatečně široká, aby obsahovala obsah). (Všimněte si, že fill_parent byl přejmenován na match_parent v systému Android 2.2, ale je stále podporován a široce používán.)
  • rozložení_výška určuje výšku rozvržení. Mezi legální hodnoty patří „fill_parent“ (být stejně vysoký jako rodič) a "obsah zábal" (aby byla dostatečně vysoká, aby obsahovala obsah).
  • gravitace identifikuje, jak je rozložení umístěno vzhledem k obrazovce. Například, "centrum" určuje, že rozložení by mělo být na obrazovce vycentrováno vodorovně a svisle.
  • Pozadí identifikuje obrázek na pozadí, přechod nebo plnou barvu. Pro zjednodušení jsem napevno zakódoval hexadecimální identifikátor barvy, který označuje pevné bílé pozadí (#ffffff). (Barvy by byly normálně uloženy v colors.xml a odkazováno z tohoto souboru.)

The Lineární rozvržení prvek zapouzdřuje ImageView a Knoflík elementy. Každý z těchto prvků určuje id atribut, který identifikuje prvek tak, aby na něj bylo možné odkazovat z kódu. The identifikátor zdroje (speciální syntaxe, která začíná na @) přiřazené k tomuto atributu začíná na @ + id předpona. Například, @ + id / android identifikuje ImageView prvek jako Android; na tento prvek se odkazuje z kódu zadáním R.id. android.

Tyto prvky také specifikují layout_width a rozložení_výška atributy určující, jak je rozložen jejich obsah. Každý atribut je přiřazen obsah zábal takže se prvek objeví v jeho přirozené velikosti.

ImageView specifikuje a layout_marginBottom atribut k identifikaci oddělovače mezery mezi sebou a tlačítkem, které následuje svisle. Prostor je zadán jako 10 poklesynebo pixely nezávislé na hustotě. Jedná se o virtuální pixely, které aplikace mohou použít k vyjádření rozměrů / pozic rozvržení způsobem nezávislým na hustotě obrazovky.

Pixely nezávislé na hustotě

A pixel nezávislý na hustotě (dip) je ekvivalentní jednomu fyzickému pixelu na obrazovce s rozlišením 160 dpi, což je základní hustota předpokládaná systémem Android. Za běhu Android transparentně zpracovává jakékoli měřítko požadovaných jednotek dip na základě skutečné hustoty používané obrazovky. Dip jednotky jsou převedeny na pixely obrazovky pomocí rovnice: pixely = poklesy * (hustota / 160). Například na obrazovce s rozlišením 240 dpi se 1 pokles rovná 1,5 fyzickým pixelům. Google doporučuje používat dipovací jednotky k definování uživatelského rozhraní vaší aplikace, aby bylo zajištěno správné zobrazení uživatelského rozhraní na různých obrazovkách zařízení.

Výběr a uložení nového rozvržení