
Programujeme pre Android /4.časť
Po stručnom úvode je čas na ešte stručnejšie predstavenie základných stavebných prvkov aplikácií písaných pre OS Android. Začneme opisom súborovej štruktúry a možností rozmiestnenia (layouts) grafických prvkov (widgets).
Poznámka: Vývoj budeme realizovať v IDE Android Studio (AS).
Súborová štruktúra aplikácie
Novú aplikáciu (projekt) vytvoríme v menu File -> New Project... Okrem nastavenia mena aplikácie (Application name), jej umiestnenia (Project location), cieľového SDK (Target SDK) a kompilácie (Compile with) nezmeníme nijaký iný parameter. Na začiatok nie je vhodné veľmi experimentovať, pretože pri nesprávnom zadaní, resp. selekcii niektorých parametrov sa nám môže veľmi ľahko stať, že aplikáciu nebude možné skompilovať.
V koreňovej zložke (project root directory) sa nám okrem iného automaticky vytvoria nasledujúce súbory a podzložky:
app/src/main/ | Súbor XML obsahujúci atribúty aplikácie a jej komponentov (aktivít, služieb...) |
AndroidManifest.xml | |
app/src/main/java/ | Zdrojový súbor hlavnej (main) aktivity aplikácie s kódom Java |
com/example/ | |
názov_aplikácie/app/ | |
MainActivity.java | |
app/libs | Súbory JAR (Java ARchive) požadované aplikáciou |
app/src/main/res | Zložka s dátovými zdrojmi aplikácie (textové reťazce, obrázky, multimediálne súbory, rozmiestnenie grafických prvkov GUI...), ktoré budú priložené (packaged) ku skompilovanému balíčku aplikácie |
app/build/source/r/ | Automaticky generovaný kód Java obsahujúci triedu definujúcu konštanty zviazané s dátovými zdrojmi aplikácie |
debug/com/example/ | |
názov_aplikácie/app/ | |
R.java | |
.gradle, gradle, | Súbory používané zostavovacím systémom (builderom) Gradle |
build.gradle, | |
*.properties a ďalšie | |
app/build | Zložka na umiestnenie skompilovaných a ďalších súborov potrebných na prenos a spustenie aplikácie |
app/build/classes | Skompilované triedy Java |
app/build/dex/ | Spustiteľný súbor DEX vytvorený zo skompilovaných tried Java |
classes.dex | |
app/build/apk/ | Zostavený balíček aplikácie zbalený pomocou kompresora ZIP, obsahujúci spustiteľný súbor classes.dex, skompilovanú verziu zdrojov resources.arsc, všetky nekompilované zdroje (napr. multimediálne súbory) a binárny formát súboru AndroidManifest.xml |
app-debug-unaligned.apk |
Všimnime si časť cesty k súboru MainActivity.java: com/example/názov_aplikácie/app. Ide o tzv. plne klasifikované meno triedy (FQCN – Fully Qualified Class Name), ktoré je takisto obsahom atribútu package, uvedeného v manifeste aplikácie. FQCN je jedinečný identifikátor aplikácie. Je dôležité vedieť, že Google Play ponúka iba jeden projekt (aplikáciu) s daným FQCN. Na jednom zariadení s OS Android nemôže byť nainštalovaných viacero balíčkov s tým istým FQCN.
Jedna z najdôležitejších menovaných zložiek je zložka s dátovými zdrojmi aplikácie. Jej podzložky obsahujú totožné dátové zdroje upravené pre konkrétne prípady. Napríklad v prípade rozdielneho rozlíšenia používaného smartfónmi a tabletmi sa tu ukladajú tie isté obrázky v rôznom rozlíšení od nízkeho (drawable-ldpi) až po extra veľké (drawable-xxxdpi). Ďalej sa tu nachádzajú zložky: layout –súbory XML definujúce rozmiestnenie grafických prvkov GUI, menu – XML špecifikácie menu, values – súbory XML obsahujúce alfanumerické reťazce...
Manifest aplikácií písaných pre OS Android
„Srdcom“ všetkých aplikácií písaných pre OS Android je tzv. manifest, resp. súbor AndroidManifest.xml. Tento súbor obsahuje okrem iného aj deklarácie aktivít a služieb ponúkaných aplikáciou. Ich vzájomným prepojením budujeme komplexný programový systém.
Obr. 1 Manifest vzorovej aplikácie
V prípade nami vytvorenej aplikácie je obsahom elementu manifest podelement application, ktorý ďalej obsahuje podelement activity. Tento element obsahuje názov triedy implementujúcej aktivitu (name), označenie aktivity (label) a podelement intent_filter. Ten opisuje podmienky, za akých bude daná aktivita zobrazovaná.
Kód Java verzus XML
Prv ako sa začneme venovať úprave GUI, musíme uviesť spôsob, ako Android rieši prístup k prezentačnej vrstve aplikácií. Skúsenejší programátori sa už určite stretli so striktným oddeľovaním prezentačnej vrstvy od aplikačnej. Výhody, resp. nevýhody tohto prístupu nebudeme rozoberať. Faktom však je, že Android oddeľuje detaily týkajúce sa rozmiestnenia zobrazovaných grafických prvkov od aplikačného kódu. GUI síce možno plnohodnotne spravovať pomocou programovej logiky, ale Android preferuje návrh pomocou XML. Preto je všetka správa zobrazenia (view) umiestnená do súborov XML, ku ktorým má prístup rovnako programový kód, ako aj príslušné editory grafického návrhu.
Kontajnery
Zrejme prvá vec, o ktorú má programátor grafickej aplikácie záujem, je úprava GUI. AS nám v tomto smere poskytuje vynikajúci nástroj vo forme tzv. Design módu. Dostaneme sa k nemu tak, že zo zložky app/src/main/res/layout vyberieme súbor s XML definíciou GUI, napr. activity_main.xml, a v spodnej časti okna klikneme na záložku Design.
Obr. 2 Design mód s paletou rozmiestnení, grafických prvkov, textových polí, kontajnerov a ďalších prvkov GUI
S úpravou GUI súvisia tzv. kontajnery, ktoré sú určené na štruktúrovanie widgetov. Sú to kolekcie, ktoré definujú vzájomné usporiadanie grafických prvkov nachádzajúcich sa na konkrétnej obrazovke (v danom pohľade – view). AS ponúka nasledujúce základné kontajnery na usporiadanie widgetov:
FrameLayout | Všetky prvky sa vykreslia v rovnakom priestore obrazovky s možnosťou definície ich zarovnania (gravity) vzhľadom na kontajner |
LinearLayout | Horizontálne, resp. vertikálne zoradenie prvkov, ktoré sa zobrazia v danej postupnosti za sebou |
TableLayout | Zoradenie prvkov do tabuľky s možnosťou preklenutia stĺpcov podobne ako v prípade HTML |
GridLayout | Všeobecnejšia verzia zoradenia prvkov do tabuľky, pri ktorej možno prvky umiestňovať na ktorékoľvek miesto v rámci pravouhlej siete |
RelativeLayout | Zoradenie prvkov je závislé od zoradenia okolitých prvkov |
ScrollView | Špeciálny kontajner, do ktorého možno zabaliť (wrap) iné kontajnery, ktorých obsah bude automaticky posúvaný |
Zobrazit Galériu