Programiranje

Android Studio za začetnike, 2. del: Raziščite in kodirajte aplikacijo

Posodobljeno: januar 2020.

V prvem delu uvodnega uvoda v Android Studio ste v svojem razvojnem okolju nastavili Android Studio in spoznali uporabniški vmesnik. Zdaj, v 2. delu, boste kodirali svojo prvo aplikacijo.

Animirana mobilna aplikacija je sestavljena iz ene same dejavnosti, ki predstavlja Googlov lik robota Android in gumb za animiranje lika. S klikom na gumb znak postopoma spremeni barvo iz zelene v rdečo v modro, nato pa nazaj v zeleno. Čeprav aplikacija ni posebej uporabna, boste z njenim pisanjem lažje uporabljali Android Studio. V 3. delu boste sestavili in zagnali aplikacijo z uporabo emulatorja naprave Android in tabličnega računalnika Kindle Fire.

Upoštevajte, da je bila ta serija posodobljena za Android Studio 3.2.1, trenutno stabilno izdajo od tega pisanja.

Okna za Project in urejevalnik za Android Studio

Na koncu 1. dela sem predstavil glavno okno sistema Android Studio. To okno je razdeljeno na več področij, vključno z oknom Project, kjer določite datoteke z viri aplikacije, in različnimi okni urejevalnika, kjer boste napisali kodo in določili vire za mobilne aplikacije. v Android Studio. Okno projekta in okno urejevalnika sta prikazana na sliki 1.

Jeff Friesen

Okno projekta poudarja W2A, kar je ime aplikacije W2A.java izvorna datoteka (čeprav .java končnica datoteke ni prikazana). Ustrezno W2A je okno urejevalnika, ki ga dosežemo z dvojnim klikom W2A v oknu Projekt. Okno urejevalnika razkrije trenutno vsebino datoteke, v tem primeru skeletno izvorno kodo Java za glavno dejavnost aplikacije.

Vsako okno urejevalnika je povezano z zavihkom. Na primer, W2AOkno urejevalnika je povezano z W2A.java zavihek. Drugi zavihek je označen kot main.xml Prikazana je tudi privzeta postavitev na osnovi XML za glavno dejavnost aplikacije. S klikom na zavihek okna se premaknete iz enega okna urejevalnika v drugo.

prenos Prenesite kodo Prenesite izvorno kodo za primer aplikacije za Android: W2A.java. Ustvaril Jeff Friesen za JavaWorld.

Primer aplikacije za Android

Primer aplikacije (W2A.java) je sestavljen iz glavne dejavnosti, ki prikazuje lik robota Android in gumb. Ko uporabnik pritisne gumb, robot animira skozi vrsto barv. V tem razdelku bomo raziskali izvorno kodo in vire dejavnosti.

Raziščite in kodirajte primer aplikacije za Android

Izvorna koda dejavnosti je shranjena v datoteki W2A.java, predstavljeno v seznamu 1.

Seznam 1. W2A.java

 paket ca.javajeff.w2a; uvoz android.app.Activity; import android.graphics.drawable.AnimationDrawable; uvoz android.os.Bundle; uvoz android.view.View; uvoz android.widget.Button; uvoz android.widget.ImageView; javni razred W2A razširja aktivnost {AnimationDrawable androidAnimation; @Override javna praznina 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 (); končni gumb btnAnimate = (gumb) findViewById (R.id.animate); View.OnClickListener ocl; ocl = novo View.OnClickListener () {@Override public void onClick (View v) {androidAnimation.stop (); androidAnimation.start (); }}; btnAnimate.setOnClickListener (ocl); }} 

The W2A.java datoteka se začne z izjava o paketu, ki poimenuje paket (ca.javajeff.w2a), ki shranjuje W2A razred. Sledi vrsta izjav o uvozu za različne vrste Android API. Nato koda opisuje W2A razred, ki se razširi android.app.Activity.

W2A najprej razglasi androidAnimation primerek polja tipa android.graphics.drawable.AnimationDrawable. Predmeti tipa AnimationDrawable opisujejo posamične animacije, pri katerih je trenutni risljivi del nadomeščen z naslednjim risanim v zaporedju animacije.

Kaj je mogoče risati?

A izvlečno je nekaj, kar je mogoče narisati, na primer sliko. AnimationDrawable posredno razširja povzetek android.graphics.drawable.Drawable razred, kar je splošna abstrakcija za risanje.

Metoda onCreate ()

Vsa dela aplikacije potekajo v W2Aprevlada onCreate (sveženj) metoda: nobene druge metode niso potrebne, kar pomaga, da je ta aplikacija preprosta.

onCreate (sveženj) najprej prikliče svojo istoimenovano metodo superrazreda, pravilo, ki mu morajo slediti vse nadrejene metode dejavnosti.

Ta metoda se nato izvede setContentView (R.layout.main) za vzpostavitev uporabniškega vmesnika aplikacije. R. postavitev.glavno je identifikator (ID) za aplikacijski vir, ki je v ločeni datoteki. Ta ID si razlagate na naslednji način:

  • R je ime razreda, ki se ustvari med izdelavo aplikacije. Ta razred je imenovan R ker njegova vsebina opredeljuje različne vrste aplikacijskih virov, vključno z postavitvami, slikami, nizi in barvami.
  • postavitev je ime razreda, ki je ugnezden znotraj R. Vir aplikacije, katerega ID je shranjen v tem razredu, opisuje določen vir postavitve. Vsaka vrsta aplikacijskega vira je povezana z ugnezdenim razredom, ki je poimenovan na podoben način. Na primer, vrvica identificira nizovne vire.
  • glavni je ime intna osnovi konstante, prijavljene znotraj postavitev. Ta ID vira določa glavni vir postavitve. Natančneje, glavni se nanaša na a main.xml datoteka, ki shranjuje informacije o postavitvi glavne dejavnosti. glavni je W2Aedini vir postavitve.

Mimo R. postavitev.glavno do Dejavnostje void setContentView (int layoutResID) metoda Androidu naroči, naj ustvari zaslon uporabniškega vmesnika z uporabo informacij o postavitvi, shranjenih v main.xml. V zakulisju Android ustvarja komponente uporabniškega vmesnika, opisane v main.xml in jih postavi na zaslon naprave, kot določa main.xmlpodatki o postavitvi.

Zaslon temelji na pogledi (abstrakcije komponent uporabniškega vmesnika) in ogled skupin (ogledi, ki združujejo povezane komponente uporabniškega vmesnika). Pogledi so primeri razredov, ki podrazvrstijo android.view.View razreda in so analogni komponentam AWT / Swing. Ogled skupin so primeri razredov, ki podrazvrstijo izvleček android.view.ViewGroup razreda in so analogni vsebnikom AWT / Swing. Android se na določene poglede (kot so gumbi ali vrtljivci) sklicuje kot pripomočki.

Nadaljujem, onCreate (sveženj) izvrši ImageView androidImage = (ImageView) findViewById (R.id.android);. Ta izjava najprej zahteva Pogledje Ogled findViewById (int id) metoda za iskanje android.widget.ImageView element, prijavljen v main.xml in opredeljena kot android. Instancira ImageView in ga inicializira na vrednosti, navedene v main.xml mapa. Stavek nato shrani referenco tega predmeta v lokalno spremenljivko androidImage.

ImageView in AnimationDrawable

Nato, androidImage.setBackgroundResource (R.drawable.android_animate); stavek prikliče ImageViewje podedovana (od Pogled) void setBackgroundResource (int resID) , nastavitev ozadja pogleda na vir, ki ga je določil resID. The R.drawable.android_animate argument identificira datoteko XML z imenom android_animate.xml (predstavljeno kasneje), ki shranjuje podatke o animaciji in ki je shranjen v resje izvlečno podimenik. The setBackgroundResource () klicne povezave androidImage pogled na zaporedje slik, ki ga opisuje android_animate.xml, ki bo narisano na tem pogledu. Začetna slika je narisana kot rezultat tega klica metode.

ImageView omogoča aplikaciji, da s klicem animira zaporedje risb AnimationDrawable metode. Preden lahko aplikacija to stori, mora pridobiti ImageViewje AnimationDrawable. The androidAnimation = (AnimationDrawable) androidImage.getBackground (); izjava o dodelitvi, ki sledi, opravi to nalogo s klicem ImageViewje podedovana (od Pogled) Dravable getBackground () metoda. Ta metoda vrne AnimationDrawable za dano ImageView, ki je nato dodeljeno androidAnimation polje. The AnimationDrawable primer se uporablja za zagon in zaustavitev animacije, postopek, ki ga bom opisal v kratkem.

Končno, onCreate (sveženj) ustvarja Animacija . Prikliče findByViewId (int) za informacije o gumbu main.xml, nato ustvari android.widget.Button razred.

Nato zaposluje Pogled razred ugnezden onClickListener vmesnik za ustvarjanje predmeta poslušalca. Ta predmet je void onClick (Pogled v) metoda se prikliče vsakič, ko uporabnik klikne gumb. Poslušalec je registriran pri svojem Gumb predmet s klicem Pogledje void setOnClickListener (poslušalec AdapterView.OnClickListener) metoda.

Če želite ustaviti, nato zaženite animacijo, Animacijaklikne poslušalec klikov androidAnimation.stop (); čemur sledi androidAnimation.start ();. The stop () metoda se pokliče prej začetek () da zagotovite, da bo poznejši klik na Animacija gumb povzroči, da se začne nova animacija.

Posodobite in shranite kodo

Preden nadaljujemo, zamenjajte skeletno kodo v vašem W2A.java zavihek s kodo iz seznama 1. Shranite vsebino tega okna s pritiskom na Ctrl + Sali izberite Shrani vse Iz mapa meni.

Kodiranje aplikacije main.xml za Android

Glavna dejavnost aplikacije je povezana s postavitvijo na osnovi XML, ki je shranjena v datoteki main.xml, ki je predstavljeno v seznamu 2.

Seznam 2. main.xml

Po izjavi XML seznam 2 razglasi a LinearLayout element, ki določa postavitev (skupina pogledov, ki na nek način ureja omejene poglede na zaslonu naprave Android) za urejanje pripomočkov (vključno z ugnezdenimi postavitvami) vodoravno ali navpično po zaslonu.

The tag določa več atributov za nadzor te linearne postavitve. Ti atributi vključujejo naslednje:

  • usmerjenost identificira linearno postavitev kot vodoravno ali navpično. Vsebovani pripomočki so postavljeni vodoravno ali navpično, privzeta usmeritev pa je vodoravna. "vodoravno" in "navpično" so edine pravne vrednosti, ki jih je mogoče dodeliti temu atributu.
  • postavitev_širina določa širino postavitve. Pravne vrednote vključujejo "fill_parent" (biti tako širok kot starš) in "wrap_content" (da je dovolj širok, da zajema vsebino). (Upoštevajte to fill_parent je bil preimenovan v match_parent v Androidu 2.2, vendar je še vedno podprt in se pogosto uporablja.)
  • postavitev_visina določa višino postavitve. Pravne vrednote vključujejo "fill_parent" (biti visok kot starš) in "wrap_content" (biti dovolj visok, da lahko zajame vsebino).
  • gravitacija določa, kako je postavitev postavljena glede na zaslon. Na primer, "center" določa, da mora biti postavitev centrirana vodoravno in navpično na zaslonu.
  • ozadje prepozna sliko ozadja, preliv ali enobarvno sliko. Zaradi enostavnosti sem trdo kodiral šestnajstiški identifikator barve, ki označuje trdno belo ozadje (#ffffff). (Barve bi običajno shranili v colors.xml in sklic iz te datoteke.)

The LinearLayout enkapsulira element ImageView in Gumb elementi. Vsak od teh elementov določa id atribut, ki identificira element, tako da se nanj lahko sklicuje iz kode. The identifikator vira (posebna skladnja, ki se začne z @), dodeljen temu atributu, se začne z @ + id predpono. Na primer, @ + id / android identificira ImageView element kot android; ta element se sklicuje iz kode z določitvijo R.id.android.

Ti elementi tudi določajo postavitev_širina in postavitev_visina atributi za določanje, kako je razporejena njihova vsebina. Vsak atribut je dodeljen wrap_content tako da bo element videti v svoji naravni velikosti.

ImageView določa a layout_marginBottom atribut za identifikacijo presledka med seboj in gumbom, ki sledi navpično. Prostor je določen kot 10 padci, ali od gostote neodvisne slikovne pike. To so navidezne slikovne pike, s katerimi lahko aplikacije izrazijo dimenzije / položaje postavitve na način, neodvisen od gostote zaslona.

Gostoto neodvisne slikovne pike

A od gostote neodvisna slikovna pika (dip) je enak enemu fizičnemu slikovnemu piku na zaslonu s 160 dpi, osnovno gostoto pa predpostavlja Android. Med izvajanjem Android na pregleden način obravnava kakršno koli skaliranje potrebnih enot za potapljanje glede na dejansko gostoto zaslona v uporabi. Enote dip se pretvorijo v slikovne pike zaslona z enačbo: slikovnih pik = padci * (gostota / 160). Na zaslonu z ločljivostjo 240 dpi je na primer 1 potop enak 1,5 fizični slikovni piki. Google priporoča uporabo enot dip za definiranje uporabniškega vmesnika aplikacije, da se zagotovi ustrezen prikaz uporabniškega vmesnika na različnih zaslonih naprav.

Izbira in shranjevanje nove postavitve

$config[zx-auto] not found$config[zx-overlay] not found