You are on page 1of 184

Razvoj mobilnih aplikacija

Prirunik za edukaciju
Osijek, 2013
Ovaj projekt fnancira
Europska unija
Elektrotehniki
fakultet Osijek
Poduzetniki
inkubator Bios d.o.o.
IPA komponenta IV
Operatvni program Razvoj ljudskih potencijala
Projekt
U korak s globalnim trendovima za usklaenost s aktvnom politkom trita rada
htp://edumobi.etos.hr/
Izdava:
Elektrotehniki fakultet Osijek
Za izdavaa
Prof. dr. sc. Radoslav Gali, dekan
Suradnici:
Poslovanje 2 d.o.o.
Centar za poduzetnitvo Osijek
Lektura:
Ivana Vrban, prof.
Dizajn i prijelom:
Biroprint d.o.o.
Tisak:
Biroprint d.o.o.
Projekt U korak s globalnim trendovima za usklaenost s aktvnom politkom trita rada provo-
di Elektrotehniki fakultet Osijek u partnerstvu s Poduzetnikim inkubatorom BIOS d.o.o.
Ova je publikacija izraena uz pomo Europske unije. Sadraj je ove publikacije iskljuiva odgo-
vornost Elektrotehnikog fakulteta Osijek i Poduzetnikog inkubatora BIOS i ni na koji nain ne
odraava gledita Europske unije.
Europsku uniju ini 27 zemalja lanica koje nastoje povezivat svoja znanja, resurse i sudbine.
Tijekom svog su pedesetogodinjeg razdoblja proirenja izgradile zonu stabilnost, demokracije
i odrivog razvoja, zadravajui pri tome kulturalnu raznolikost, toleranciju i osobne slobode.
Europska unija dijeli svoja postgnua i vrijednost sa zemljama i narodima izvan svojih granica.
Europska komisija izvrno je tjelo Europske unije.
Obrazovanje je odraslih osoba defnirano kao cjelina procesa uenja koji su namijenjeni ostvari-
vanju prava na slobodan razvoj osobnost, osposobljavanju za zapoljivanje i osposobljavanju za
aktvno graanstvo. Ljudski je kapital jedan od najvanijih resursa Hrvatske koja nastoji postat
najkonkurentnije drutvo temeljem znanja u regiji. Cjeloivotno obrazovanje ima vanu ulogu u
ovom procesu. Obzirom na ubrzan rast nezaposlenost posljednjih nekoliko godina i prognoza
da e ona i dalje rast, potrebno je reagirat i osigurat dodatno obrazovanje kako bi se unaprije-
dile kompetencije nezaposlenih osoba.
Elektrotehniki fakultet Osijek je javno znanstvena nastavna ustanova koja s projektnim par-
tnerom Poduzetnikim inkubatorom BIOS provodi projekt U korak s globalnim trendovima za
usklaenost s aktvnom politkom trita rada kroz IPA komponentu IV, Operatvni program Ra-
zvoj ljudskih potencijala.
Projekt je namijenjen visokoobrazovanim osobama koje su zavrile struni studij na nekom od
tehnikih fakulteta u Slavoniji i Baranji. Cilj je projekta poveanje broja zaposlenih visokoobra-
zovanih osoba u Osjeko-baranjskoj upaniji kroz edukaciju koja je zasnovana na potcanju sa-
mozapoljavanja. Uz pomo edukacije Razvoj mobilnih aplikacija polaznici e stei nova znanja
i vjetne, predstavit svoje aplikacije javnost, podii svoj poduzetniki duh i saznat sve mogu-
nost samozapoljavanja.
Cilj je prirunika polaznicima edukacije olakat praenje nastave i pomoi im u usvajanju novih
znanja i vjetna. Prirunik se sastoji iz tri dijela:
1. Dizajn mobilnih aplikacija
2. Programiranje mobilnih aplikacija
3. Poduzetnitvo
Kroz navedene e nastavne cjeline polaznici edukacije nauit samostalno dizajnirat i programi-
rat mobilne aplikacije, razvijat osnovne poduzetnike vjetne i bit e potaknut na pokretanje
vlasttog posla.
Elektrotehniki fakultet Osijek zahvaljuje tvrtki Poslovanje2 te Centru za poduzetnitvo Osijek
koji su pomogli u izradi ovog prirunika.
Polaznicima edukacije i svim ostalim korisnicima ove knjige elimo uspjeh u radu!
Projektni tm:
Doc.dr.sc. Nenadi Kreimir, dipl.ing.
Bonjak Sonja, dipl.iur.
Pekanov Tihana, mag.ing.comp. , Poduzetniki inkubator BIOS d.o.o.
Balen Josip, dipl.ing.
Doc.dr.sc. Baumgartner Alfonzo, dipl.ing.
Zori Bruno, mag.ing.comp.
Hanzer Mirta, dipl.oec.
Dekan Elektrotehnikog fakulteta Osijek
Prof.dr.sc. Radoslav Gali
SADRAJ
1. UVOD U DIZAJN ......................................................................................................... 2
1.1. Teorija boja .......................................................................................................................... 2
1.2. Teorija dizajna ...................................................................................................................... 3
1.3. Dizajn logotpa i identteta................................................................................................... 4
1.4. Dizajn grafkih elemenata .................................................................................................. 5
2. DIZAJN KORISNIKOG SUELJA .................................................................................7
2.1. Uvod u korisnika suelja .................................................................................................... 7
2.2. Odnos izmeu DP i PX ......................................................................................................... 7
2.3. Osnovna struktura suelja aplikacije ................................................................................... 8
2.4. Osnove uspjenog dizajna ................................................................................................... 9
2.5. Korisniki unos za mobilne ureaje i ekrane osjetljive na dodir .......................................... 9
2.6. Dizajn prilagoen korisniku ............................................................................................... 10
2.7. Trajnost dizajna .................................................................................................................. 11
2.8. Prototpi, koncept, proof of concept ................................................................................. 11
2.9. Utjecaj ogranienja mobilnih ureaja ............................................................................... 13
2.10. Postupak dizajniranja aplikacije za mobilne ureaje ....................................................... 14
2.11. Slubene platormske smjernice ...................................................................................... 14
2.11.1. Slubene teme .............................................................................................................. 14
2.11.2. Efekt koji se pojavljuju kod interakcije korisnika s nekim elementom ......................... 15
2.11.3. Minimalna veliina tpki i ostalih elemenata ............................................................... 15
2.11.4. Veliine ekrana ............................................................................................................. 16
2.11.5. Fontovi ......................................................................................................................... 16
2.11.6. Boje .............................................................................................................................. 17
2.11.7. Ikone ............................................................................................................................ 17
2.12. Informacijske poruke ....................................................................................................... 22
2.13. Uzorci ............................................................................................................................... 23
2.14. Reusable UI ...................................................................................................................... 25
2.15. Building blocks ................................................................................................................. 25
2.15.1. Kartce (engl. Tabs) ....................................................................................................... 25
2.15.2. Liste ............................................................................................................................. 26
2.15.3. Reetke (engl. Grid List) ................................................................................................ 27
2.15.4. Prelistavanje (engl. Scrolling) ........................................................................................ 28
2.15.5. Spinners ........................................................................................................................ 28
2.15.6. Gumb (engl. Buton) ..................................................................................................... 28
2.15.7. Polje za unos teksta (engl. Text felds) .......................................................................... 29
2.15.8. Traka za pretragu (engl. Seek bar) i klizai (engl. Sliders) .............................................. 30
2.15.9. Napredak i aktvnost (engl. Progress and Actvity) ....................................................... 30
2.15.10. Prekidai (engl. Switches) ........................................................................................... 32
2.15.11. Dijalozi ........................................................................................................................ 33
2.15.12. Pickers ......................................................................................................................... 34
2.16. Navigacija i widget .......................................................................................................... 35
2.17. Geste i animacija ............................................................................................................. 36
2.17.1. Geste ............................................................................................................................ 36
2.17.2. Animacija ...................................................................................................................... 38
2.18. Skalabilni dizajn ............................................................................................................... 38
2.19. Layout aplikacije .............................................................................................................. 40
3. OSNOVE PROGRAMIRANJA ..................................................................................... 46
3.1. Uvod u programski jezik Java ............................................................................................. 46
3.2. Varijable, operatori [6] ...................................................................................................... 46
3.3. Kontrola toka programa [8] ............................................................................................... 48
3.3.1. Grananja ......................................................................................................................... 48
3.3.2. Petlje ............................................................................................................................... 50
3.4. Polja ................................................................................................................................... 51
3.5. Metode [8]......................................................................................................................... 52
3.6. Razine pristupa .................................................................................................................. 56
4. OBJEKTNO ORIJENTIRANO PROGRAMIRANJE ........................................................ 58
4.1. Klase, objekt i enkapsulacija ............................................................................................. 58
4.2. Konstruktori ....................................................................................................................... 59
4.3. Nasljeivanje ..................................................................................................................... 61
4.4. Apstraktne klase [10] ......................................................................................................... 62
4.5. Polimorfzam ..................................................................................................................... 63
5. RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU ...................................................66
5.1. Instalacija potrebnih alata .................................................................................................. 66
5.2. Kreiranje Android projekta ................................................................................................ 68
5.3. XML kao osnova Android korisnikog suelja (UI-a) .......................................................... 72
5.4. Android Actvity i UI XML ................................................................................................... 74
5.5. Pokretanje aktvnost (engl. Intent) ................................................................................... 78
Dizajn
5.6. ivotni ciklus Android aktvnost [14] ................................................................................ 81
5.7. Podravanje razliith ureaja [11] .................................................................................... 85
5.8. Fragment .......................................................................................................................... 88
5.9. Asinkroni pozivi ................................................................................................................. 92
5.10. Preference Actvity .......................................................................................................... 95
5.11. ListView i List Actvity ...................................................................................................... 98
5.12. Acton Bar ...................................................................................................................... 109
5.13. Android SQLite baza podataka ...................................................................................... 117
5.14. Koritenje senzora ......................................................................................................... 125
5.15. Google mape ................................................................................................................. 127
5.16. Multtasking ................................................................................................................... 136
6. IZRADA ANDROID APLIKACIJE ............................................................................... 138
7. PODUZETNITVO ................................................................................................... 158
7.1. to je to poduzetnitvo? .................................................................................................. 136
7.2. Procjena poduzetnikih sposobnost ............................................................................... 158
7.3. Poslovni plan ................................................................................................................... 159
7.4. Marketng i marketng plan ............................................................................................. 163
7.5. E-marketng ..................................................................................................................... 165
7.6. Financiranje poslovnog poduhvata .................................................................................. 166
8. LITERATURA ........................................................................................................... 170
9. POPIS SLIKA ............................................................................................................ 171
10. POPIS TABLICA ..................................................................................................... 175
11. POPIS PRIMJERA .................................................................................................. 176
1
Dizajn
2
1. UVOD U DIZAJN
1.1. Teorija boja
Oko je ovjekov najsofstciraniji alat. Razlikuje i do 7500000 boja i njihovih nijansi. Boje ne
bi postojale bez svjetla jer se boja refektra s odreenog objekta u odreenoj valnoj duini u
obliku svjetla. Tako je primjerice duga bijelo sunevo svjetlo razlomljeno kroz kapljice vode u
zraku i predstavlja vidljiv spektar boja. Svaka boja ima vlasttu valnu duinu. Postoje tri primarne
boje: crvena, uta i plava. Iz th se boja mijeanjem mogu dobit ostale, sekundarne boje kao to
su zelena, naranasta i ljubiasta, ali i neogranien broj nijansi u raznim kombinacijama. Isaac
Newton je 1666. godine razvio tzv. kota boja (engl. the color wheel), tj. prvi kruni dijagram
boja (Slika 1.), a od tada brojni znanstvenici i umjetnici prouavaju i dizajniraju brojne varijacije
tog koncepta.
Slika 1. Newtonov kota boja
Iz ovih su osnova proizala dva sustava boja u raunalnom svijetu:
1. RGB (engl. Red, Green, Blue) je sustav boja kojemu su primarne boje crvena, zelena i
plava. Primjenjuje se na raunalnim zaslonima i temelji se na prikazu svjetlom. Pozadina je za-
slona crna pa tamo gdje nema svjetla, nema ni boje. Na taj se nain dobiva crna boja, a bijela se
boja dobiva jednakim omjerom svih triju primarnih boja.
2. CMYK je sustav boja kojemu su svijetloplava (C - cyan), svijetlocrvena (M - magenta),
uta (Y - yellow) i crna (K Key - oznaka crne boje) primarne boje. CMYK sustav boja najvie se
korist u tsku i pripremi za tsak.
Priprema se za tsak uvijek radi s CMYK setom boja kako bi ono to je prikazano na zaslonu bilo
najslinije onomu to se dobije u ispisu. Kako bi se lake odabrala paleta boja za dizajn (ukoliko
nije defnirana vizualnim identtetom klijenta), koriste se brojni alat koji su besplatno dostu-
pni na Internetu kao to su Color Scheme Designer (htp://colorschemedesigner.com/) i Color
Wizard (htp://www.colorsontheweb.com/colorwizard.asp) (Slika 2.).
UVOD U DIZAJN
3
UVOD U DIZAJN
Slika 2. Alat za izbor boja
1.2. Teorija dizajna
U dananjem je modernom dobu dizajn sve ono to je vidljivo i opipljivo. Dizajn se bavi obliko-
vanjem svih predmeta koji se koriste. Nastao je pojavom industrijske revolucije kojom se serijski
i automatzirano proizvodila roba za nepoznate potroae. Dizajn nastoji odredit ukus razliith
profla kupaca. Reklame i marketng odreuju modu i privlanost nekog proizvoda pa potranja
za nekim proizvodom postaje sve vea. Dobar dizajn treba ponudit proizvod koji e se razliko-
vat od uobiajenih standarda i stereotpa, a da pri tome bude u granicama kako bi ga kupac
shvato i kupio. Ako se dizajn previe odmakne od standarda, kupac nee kupit proizvod jer nije
shvato to je umjetnik hto rei. Dizajn nikako ne smije bit teak za uporabu i koritenje. Treba
bit ekonomski isplatv za proizvodnju.
Dizajn se dijeli na:
a) grafki dizajn (naljepnice, plakat, logotpi)
b) industrijski dizajn (engl. product design) (strojevi, automobili, kuanski aparat)
c) tekstlni dizajn (materijali i krojevi)
Dizajn koji se korist u izradi mobilnih aplikacija jest digitalni dizajn. Digitalni je dizajn najraire-
niji i najtraeniji dizajn. Temelji se na dizajnu korisnikih suelja, a popularno se jo naziva i UI
dizajn (engl. User Interface design). Trendovi i standardi digitalnog dizajna mijenjaju se iz dana u
dan. Dananji se trend dizajna temelji na izgledu proizvoda iz davnih trideseth godina prologa
stoljea pa se zbog toga naziva vintage dizajn (Slika 3.).
Slika 3. Primjeri vintage dizajna kod izrade UI-a i logotpa [1]
4
Alat koji se najvie koriste za dizajn i obradu fotografja su:
a) Adobe Photoshop
Jedan je od najkvalitetnijih alata na tritu koji korist svaki profesionalni i ozbiljni dizajner. Ado-
be Photoshop primarno je alat za obradu i retuiranje fotografja, no njegovi mu alat i funkcije
daju status jednog od najboljih alata za izradu UI-a za internetske ili mobilne aplikacije. Najno-
vija inaica ovog alata donosi 3D funkcije kao i tmeline.
b) CorelDraw alat
Vrlo je slian Photoshopu, ali ima kvalitetnije funkcije za pripremu sadraja za tsak. Jednosta-
van je za koritenje i posjeduje najmonije alate za obradu vektorske grafke (grafke koja ne
mijenja svoju kvalitetu promjenom veliine).
c) GIMP [5] (engl. GNU Image Manipulaton Program)
Besplatan je, brz i malen alat koji posjeduje veinu Photoshopovih funkcija i odlina je alterna-
tva komercijalnim alatma.
1.3. Dizajn logotpa i identteta
Logotp je unikatan, jednostavan i prepoznatljiv potpis neke tvrtke ili pojedinca. Trebao bi na
jednostavan nain u jednoj boji prikazat ono ime se tvrtka ili pojedinac bavi. Moe se pojavit
samo u tekstualnom obliku ili u kombinaciji teksta i slikovnog prikaza. Pod utjecajem trendo-
va, logotpi su sve rjee jednobojni, a ee praeni slikovnim prikazom. Kao i u dizajnu UI i u
logotpima se pojavljuje vintage dizajn. Tako se razvio oblik i dizajn logotpa koji preteno ko-
rist kaligrafju (grki , kaligraphia; kalos = lijepo, graphein = pisat) ili krasopis, tj.
umjetnost lijepog pisanja rukom uz pomo pera ili kista (Slika 4.).
Slika 4. Primjeri logotpa [1]
Slika 5. Primjer smjernica izvedenih iz imena tvrtke ili pojedinca
UVOD U DIZAJN
5
UVOD U DIZAJN
Prije samog dizajniranja i crtanja logotpa, zapisuju se svi pojmovi koji su povezani s podrujem
kojim se pojedinac ili tvrtka bavi ili proizvodom koji proizvodi. Na taj se nain odreuje smjer
logotpa. Svrha je logotpa ponudit vizualni identtet odreenoj tvrtki. Izabrani se logotp ne
mijenja due vrijeme ili nikada. Ako je logotp kombinacija teksta i slike i ako se iz imena tvrtke
ne moe razaznat ime se tvrtka bavi, dobro bi bilo da to slika vizualno prikae. Klijent e uvijek
trait vie primjera logotpa za svoje poslovanje. U veini se sluajeva klijent ne odlue za jedan
osmiljeni logotp, ve kombiniraju elemente razliith prijedloga i na osnovu njih sastavljaju
idealan logotp.
Slika 6. Nekoliko prijedloga logotpa za istu tvrtku [1]
Svaki bi logotp trebao bit napravljen u vektorskom obliku kako bi se lake tskao na plakate,
posjetnice, zaglavlja dokumenata, majice, alice, kalendare itd. Stoga je uz svaki logotp nuna
izrada knjige standarda. Knjiga je standarda dokument u kojemu su defnirane sve smjernice za
provoenje vizualnog identteta. Sadri tone ifre boja i dimenzija logotpa, podatke o mini-
malnoj i maksimalnoj dimenziji logotpa koji se tska na odreeni medij te podatke o odstupa-
njima u bojama nakon tska.
ZADATAK 1
Dizajniraj vlastt logotp (na papiru) na temelju navedenih principa izrade logotpa.
1.4. Dizajn grafkih elemenata
Dizajn je grafkih elemenata opsean i sloen zadatak koji ovisi iskljuivo o ukusu i zahtjevima
klijenata. Svaki grafki element suelja mora bit precizan i jasno prikazivat ono za to je nami-
jenjen. Kada to nije mogue, uz svaki se grafki element dodaje i kratki tekstualni opis koji je
vidljiv samo kod interakcije s pojedinim elementom (engl. tooltp, hint).
6
Slika 7. Veze izmeu vizualnog identteta i izgleda aplikacije [1]
Zbog raznolikost se ureaja posebno mora pazit na skalabilnost grafkih elemenata, a da pri
tome ostanu nepromijenjene kvalitete. Taj se proces moderno naziva Responsive Design, tj.
osjetljiv, brz dizajn koji osigurava optmalan doivljaj gledanja sadraja. To su primjerice Facebo-
ok, Pinterest, MySpace itd. Platorma kojom se najtee prikazuju grafki element jest Android
platorma. Razlog tomu je veliki broj razliith modela mobilnih ureaja (u svibnju 2012. godine
bilo ih je priblino 3975) koji imaju razliite veliine dijagonala svojih ekrana, tj. razliite gustoe
piksela - DP (engl. Density-independent Pixel) (Slika 8.). Odreena se ikona treba jednako otro
i isto prikazivat na svim ureajima i zbog toga ju je nuno izradit u najmanje etri veliine
(Slika 9.).
Slika 8. Razne veliine Android ureaja [2]
Slika 9. Primjer veliine jedne ikone za razliite gustoe piksela [2]
UVOD U DIZAJN
7
2. DIZAJN KORISNIKOG SUELJA
2.1. Uvod u korisnika suelja
Kao to je ve reeno u prethodnom poglavlju, ureaji koji se temelje na Android platormi
trenutno su najraireniji, a postoji i veliki broj razliith veliina i izvedbi. Upravo je ta rairenost
najvei problem svakog dizajnera korisnikih suelja. Osnovna je podjela Android ureaja po-
djela na mobilne telefone (manje od 600dp) i tablet raunala (vee od 600dp) kao to je prika-
zano na slici 10. DP se korist jer pridonosi gustoi piksela na ekranu za svaki mobilni ureaj, a
na taj nain odreuje i tone mjere svakog elementa suelja kako bi se prikazivao to slinije na
razliitm ureajima.
Slika 10. Odnosi veliine ekrana mobilnog telefona i tablet raunala [2]
2.2. Odnos izmeu DP i PX
Ekranu srednje gustoe, tj. 160dp jedan DP odgovara jednom pikselu, a ekranu iznimno velike
gustoe, tj. 320dp jedan DP odgovara dvama pikselima itd. Radi lakeg snalaenja i konverzije iz
jednog oblika u drugi, dostupni su brojni alat poput Android DP/PX convertera koji je dostupan
na htp://labs.skinkers.com/content/android_dp_px_calculator/.
Gustoe se piksela u svijetu Androida dijele u 4 kategorije: LDPI 120 (engl. Low Dots Per Inch),
MDPI 160 (Medium), HDPI 240 (High) i XHDPI 320 (Extra High), a veliina ekrana moe bit:
mala, normalna, velika i iznimno velika. Prilikom dizajniranja posebno se treba pazit na velii-
nu elemenata, tj. element ne smiju bit premaleni za dodir. Svaka osoba ima kaiprst razliite
veliine i stoga je nuno da element koji slui za tpkanje bude dovoljno velik jer e u protvnom
izazvat nezadovoljstvo korisnika. Optmalna veliina, odnosno minimalna irina i veliina nekog
klikabilnog elementa je otprilike 7mm ili 48dp. Ako se prilikom dizajniranja suelja u obzir
uzme ovo pravilo, zavrna e aplikacija bit prikladna za koritenje.
Slika 11. Optmalna veliina nekog klikabilnog elementa suelja [2]
DIZAJN KORISNIKOG SUELJA
8
2.3. Osnovna struktura suelja aplikacije
Svaka gotova aplikacija ima dva osnovna dijela, izbornik i sadraj (Slika 12.). Izbornik korisniku
omoguuje odabir podataka koje eli prikazat, poziv funkcija za unos novih podataka ili izlaz iz
aplikacije.
Slika 12. Primjeri izbornika i sadraja [1]
Cijeli se koncept aplikacija za mobilne ureaje temelji na izborniku. Mobilni je ureaj oduvijek
bio ureaj za razmjenu poziva i SMS poruka i iz tog je razloga bio jednostavan za upotrebu.
Danas su mobilni ureaji mnogo razvijeniji i nude mogunost koje su se nekada mogle samo
zamiljat. Usprkos tome, i dalje stanu u dep, a slue za obavljanje zadataka u pokretu. Iz tog
su razloga aplikacije za mobilne ureaje napravljene na nain da osiguraju brz i jednostavan pri-
stup informacijama u pokretu. Upravo je zbog toga izbornik mobilne aplikacije najvanija stavka
(Slika 13.). Izbornici se danas rade kao obine liste ili tablice sastavljene uglavnom od dva ili tri
stupca s neogranienim brojem redova. Svako polje tablice ili liste moe, ali i ne mora, imat
sliicu i tekst kao opis funkcije, ali se u pravilu koriste oba opisa. Pritskom na odreeno polje
izbornika aplikacija korisnika vodi do detaljnijih informacija koje su zatraene.
Slika 13. Primjeri dviju vrsta izbornika [1]
DIZAJN KORISNIKOG SUELJA
9
Slika 14. Od skice na papiru do gotovog suelja [1]
2.4. Osnove uspjenog dizajna
Uspjenim se dizajnom smatra svaki dizajn koji sam za sebe govori i opisuje pojedine funkcije
proizvoda, ne zbunjuje korisnika i olakava upotrebu proizvoda. Izrada uspjenog dizajna zapo-
inje skiciranjem. Skiciranje je osnova i skrauje proizvodni tjek i do 50%. Sama je skica ujedno
i koncept kompletne aplikacije, a pokazuje i detaljno razrauje osnovne funkcije i ponaanje
aplikacije kod interakcije korisnika. Kada je skica na papiru gotova, dizajner ju kopira u digitalni
oblik (fnalni koncept) koji se alje klijentu na pregled i odobrenje za nastavak rada. Sljedei je
korak dodavanje dubine i boje u koncept to dizajn aplikacije privodi kraju. To su principi kojih
se treba pridravat jer olakavaju proces dizajniranja.
Uspjean je dizajn onaj dizajn kod kojega aplikacija na 90% ureaja izgleda gotovo identno.
Zbog toga je vrlo vano da element suelja ne budu previe komplicirani i ne sadre previe
detalja. Meutm, Apple iPhone ureaji nisu raeni na ovakav nain i svako se suelje radi po
mjeri zbog postojanja dviju veliina ekrana i dviju vrsta DPI-a. Kod Androida se svaki element
radi u minimalno etri veliine jer dizajn mora bit feksibilan i kvalitetan.
2.5. Korisniki unos za mobilne ureaje i ekrane osjetljive na dodir
Dva su osnovna elementa za unos podataka i interakciju korisnika s aplikacijom na mobilnim
ureajima: prostor za unos teksta i jednostavni gumb. Ova su dva elementa gotovo uvijek pri-
sutna zajedno, ali ih je mogue rabit i odvojeno. Neizostavni su u svakoj aplikaciji i koliko god
jednostavna aplikacija bila, barem jedan od ova dva elementa nai e svoje mjesto u njoj. Svaki
gumb ima maksimalno pet stanja vlasttog prikaza ovisno o interakciji (Slika 15.): (i) normalno
stanje, (ii) aktvno ili pritsnuto stanje, (iii) fokusirano stanje (nije aktvno ili pritsnuto), (iv) one-
mogueno stanje i (v) onemogueno i fokusirano stanje. Svako navedeno stanje prikazuje gumb
ili polje za unos teksta na drugaiji nain kako bi korisnik znao da je neto napravio.
DIZAJN KORISNIKOG SUELJA
10
Slika 15. Primjer stanja gumba
Postoje jo mnogi element koji omoguuju korisniku unos informacija u aplikaciju, ali i ele-
ment koji daju potvrdu da je uspjeno, tj. neuspjeno obavio neku operaciju. Takvi se element
nazivaju dijalozi, a prikazuju da je neka funkcija obavljena, da je u obradi ili da trai potvrdu za
obavljanje neke vanije operacije. Tzv. su obavijest (engl. Notfcatons) suprotne dijalozima,
a daju kratku obavijest korisniku to se trenutno dogodilo. Koja je, dakle, razlika izmeu dijaloga
i obavijest? Dijalozi obino obavjetavaju korisnika kada neto nije u redu ili kada se aplikacija
iznenada zaustavi. Takoer su i najei oblik potvrde kod brisanja podataka, a obavjetavaju
kratko i jasno korisnika da je neto izvreno.
2.6. Dizajn prilagoen korisniku
Slika 16. Primjer dizajna koji je prilagoen korisniku [2]
Svaki je korisnik u isto vrijeme i kritar jer svojim kritkama moe pridonijet, ali i odmoi uspje-
hu aplikacije. Svaku kritku, pozitvnu ili negatvnu, treba cijenit. Negatvna kritka pridonosi
unaprjeenju proizvoda. Dobar je dizajner onaj dizajner koji svoj rad pokazuje i trai miljenje
ljudi koji i nisu toliko struni u podruju kojim se bavi. Dakle, nakon svakog je veeg dizajniranog
djela poeljno upitat ljude to misle. Ako veina ljudi shvat koja je funkcija svakog pojedinog
dijela suelja bez prevelikog dodatnog objanjavanja, onda je dizajner napravio jako dobar po-
DIZAJN KORISNIKOG SUELJA
11
sao. Ako se proizvod dizajnira za velike mase, ne bi se trebao dizajnirat ukoliko se svia samo
dizajneru. Ako se proizvod dizajnira za odreenog klijenta, tvrtku ili korporaciju, sve se smjerni-
ce dobivaju od klijenata i tei se slijedit vizualni identtet to je vie mogue. Suelje bi trebalo
bit pregledno, jasnih boja, jasnog i loginog rasporeda, a ipak svjee i novo. To nije nimalo lak
zadatak.
2.7. Trajnost dizajna
Trajan ili bezvremenski dizajn je dizajn koji je uvijek moderan i nikada ne zastarijeva (Slika 17.).
Ne oslanja se na moderne trendove, nego se uklapa u njih bez nekih veih ili gotovo nikakvih
izmjena. Danas postoji veliki broj stlova i zadanih trendova koji e za odreeno vrijeme bit
zamijenjeni nekim novim. Da bi dizajn bio trajan i bezvremenski, najbolje je izradit ga to jedno-
stavnije i ie. Poeljno je koristt to vie bijele, sive i crne boje kao i provjerene teksture koje
se koriste ve dugi niz godina (drvo, metal, crna koa, trava itd.). Kod izrade je bezvremenskog
dizajna vizualni identtet od velike korist jer je sam po sebi napravljen da traje.
Slika 17. Primjeri nekih bezvremenskih inaica dizajna [2]
2.8. Prototpi, koncept, proof of concept
Svaka aplikacija prije izlaska na trite mora proi veliki broj prototpa i testranja. Prototpi-
ma se provjerava mogunost i funkcionalnost koncepta, tj. je li mogue napravit ono to je
zamiljeno. Koncept nastaje tako da se ideje prvo zapiu na papir, a tek onda u digitalni oblik i
prvi prototp. Gruba skica na papiru znatno skrauje vrijeme izrade digitalnog oblika (Slika 18.).
Sljedei je korak biranje alata za obradu slike i izraivanje prvog digitalnog oblika koncepta. Na
praznom se dokumentu, koji je prethodno postavljen na eljene dimenzije i eljenu gustou
piksela, skiciraju smjernice koje e olakat crtanje grafkih elemenata. To su iste one smjernice
ili grube linije koje su povuene na papiru kako bi se predoio raspored grafkih elemenata, no
sada su postavljene tono na eljene dimenzije (Slika 19.).
Nakon to su smjernice postavljenje, kree se u postavljanje elemenata suelja. Za ovaj se dio
procesa korist to manje boja jer se zapravo radi gruba skica, tj. wireframe. Nakon to su svi
DIZAJN KORISNIKOG SUELJA
12
element suelja grubo nacrtani, tj. precrtani s papira, prvi je koncept gotov. Ovakav koncept
klijent moe mijenjat i u veini sluajeva se na njemu provode odreene izmjene.
Slika 18: Primjeri digitalnog oblika koncepta, tj. wireframe
Slika 19: Primjer postavljanja smjernica
Slika 20. Koraci u izradi koncepta, tj. wireframea
DIZAJN KORISNIKOG SUELJA
13
ZADATAK 2
Kreiraj wireframe, tj. koncept za aplikaciju. Dozvoljeno je koritenje najvie pet boja i pravilnih oblika.
2.9. Utjecaj ogranienja mobilnih ureaja
Razliit mobilni ureaji imaju razliite komponente: ekrane, procesore, memoriju itd. Ekrani
koji su osjetljivi na dodir postoje u mnogo dimenzija i otrina zbog ega boje u prikazu mogu
neprimjetno varirat. Najvea je prednost ekrana na dodir osjeaj koji korisnik ima kada ga ko-
rist. Razni efekt i animacije stvaraju ugodno okruenje za rad. Efekt i animacije imaju svoja
ogranienja. Ne treba koristt napredne grafke animacije ako se radi na primjer o aplikaciji
koja slui za itanje pote.
Slika 21. Animacija od prve do zadnje sliice [1]
Za takve i sline aplikacije koriste se jednostavne animacije koje se najee sastoje od: poste-
penog prikazivanja (engl. fade in), postepenog nestajanja (engl. fade out), pomaka sadraja u
lijevo, desno, gore, dolje itd. Takve animacije i efekt ne naruavaju rad ureaja i aplikacije jer su
jednostavne, a ne koriste ni previe resursa mobilnog telefona. Prednost im je to se prikazuju
na gotovo svim ureajima jednako. Za ovakav tp animacija nisu potrebni dodatni grafki ele-
ment, ve se animacija izvrava programski, kodom. Kompleksne animacije mogu koristt niz
grafkih elemenata koji se izmjenjuju u odnosu na vrijeme, ali takve animacije nisu poeljne i
mogu dovest do velikog pada brzine u izvravanju neke funkcije.
DIZAJN KORISNIKOG SUELJA
14
2.10. Postupak dizajniranja aplikacije za mobilne ureaje
Slika 22. Dizajn aplikacije
Aplikacije za mobilne ureaje moraju bit jednostavne, ali i ugodne za koritenje. Moraju pruat
brz pristup informacijama i olakavat svakodnevne zadatke. Postupak dizajna mobilne aplika-
cije nije lak zadatak, a voen je zahtjevima i eljama klijenata. Nakon to je razvijen koncept i
prvi prijedlog dizajna, potrebno je isjei ga na elemente, tj. izvadit iz dizajna sve elemente
koji tvore korisniko suelje. Dakle, dizajn je samo jedna obina slika koja ne moe tvorit neto
funkcionalno.
ZADATAK 3
Iz kreiranog wireframea iz prethodnog zadatka isjeci pojedine elemente i spremi ih kao zasebne uz
prilagoeni naziv svakog elementa.
2.11. Slubene platormske smjernice
Slika 23. Primjer ikona [2]
Platormske smjernice opisuju kako i na koji nain pojedini element treba izgledat i kako se
treba ponaat. Platormske smjernice postoje i zbog imida platorme. UI Android sustav je
jednostavan, pregledan i privlaan pa bi i aplikacije trebale bit takve kako ne bi previe vizualno
odstupale od izgleda sustava ili izgledale kao neki drugi operacijski sustav.
2.11.1. Slubene teme
Pomou slubenih tema aplikacija izgleda kao dio sustava (Slika 24.). Tema daje konzistentan
izgled aplikaciji i njene elemente ini istma kao i u operacijskom sustavu. Ako ne postoji vlastt
dizajn za aplikaciju, neka e se od standardnih tema primijenit automatski.
DIZAJN KORISNIKOG SUELJA
15
Slika 24. Primjer dviju standardnih tema Android sustava [2]
2.11.2. Efekt koji se pojavljuju kod interakcije korisnika s nekim elementom
Efekt korisniku daju do znanja da je napravio odreenu interakciju s nekim dijelom korisnikog
suelja. Ovakvi su efekt uobiajeni u interakciji s gumbima, listama, prekidaima i ostalim ele-
mentma. Ako se korist slubena tema Android sustava za aplikaciju, efekt e bit naslijeeni
od te teme, a ako se korist vlastt dizajn, efekte e morat kreirat pojedinac sam. Obino se
za jednostavne efekte, npr. pritsak na neku tpku (Slika 25.), koriste .xml datoteke u kojima je
opisana animacija, tj. efekt.
Slika 25. Primjer efekta nakon dodira prstom [2]
2.11.3. Minimalna veliina tpki i ostalih elemenata
Android operacijski sustav odreuje preporuenu najmanju veliinu elemenata koji se klikaju, a
koja je priblino 7 mm ili 48dp-a. Minimalan je razmak izmeu elemenata 8dp. Ovaj se razmak iz-
meu pojedinih elemenata dodjeljuje automatski. U vlasttom dizajnu treba osobito vodit rauna
o razmacima izmeu elemenata jer e inae nastala suelja bit nepregledna i nefunkcionalna.
Slika 26. Primjer dimenzionalnih odredbi i raspored elemenata[2]
DIZAJN KORISNIKOG SUELJA
16
2.11.4. Veliine ekrana
Veliine ekrana ve su opisane prema razliitm rezolucijama i gustoama piksela. Standardne
smjernice sustava za razliite dimenzije zaslona su:
a) Budite feksibilni
Suelja se trebaju automatski prilagoavat bilo kojem zaslonu.
b) Optmizirajte suelje
Korisnik e za dizajn za maleni zaslon morat uloit vie truda da doe do razliith informacija
jer sav sadraj nije mogue smjestt na zaslon malih dimenzija. Veliki zasloni (npr. tablet rau-
nala) imaju puno mjesta za raspored elemenata i sadraja. Dakle, ako aplikacija sadri pregrt
informacija, kod malih e zaslona imat jedno suelje, a kod velikih drugo suelje. Ovdje se ne
misli na drugaiji izgled suelja (boja, oblik itd.), nego na suelje koje e prikazivat vie infor-
macija odjednom.
c) Element suelja za sve
Potrebno je priloit sve sliice/grafke, tj. elemente suelja u svim ponuenim razluivostma
(ldpi, mdpi, hdpi, xhdpi) kako bi svaki element suelja izgledao lijepo, otro i pravilne veliine na
razliitm dimenzijama zaslona.
2.11.5. Fontovi
Slubeni je font Android operatvnog sustava od verzije Ice Cream Roboto (Slika 27.). Posebno je
kreiran za potrebe novog sustava i prilagoen je svim dimenzijama zaslona. Sav tekst koji postoji
u aplikaciji korist SP (engl. Scale-Independent Pixels) kao mjernu jedinicu dimenzije. SP mjerna
jedinica osigurava jednako prikazan tekst na bilo kojem ureaju bilo kojih dimenzija zaslona, tj.
nee bit nit manji nit vei na razliitm rezolucijama zaslona.
Slika 27. Izgled Roboto slubenog fonta [2]
DIZAJN KORISNIKOG SUELJA
17
Slika 28. Predefnirane veliine teksta [2]
2.11.6. Boje
Slubena je boja Android platorme plava pa prema tome i veina elemenata suelja korist tu
boju nakon korisnikove interakcije. Ne postoje odreena pravila kod odabira boja, bitno je da
boje odgovaraju vizualnom identtetu i da imaju dobar kontrast (Slika 29.). Ne smije se zaboravi-
t na osobe koje ne razlikuju boje, a posebno zelenu i crvenu. Alat poput ranije navedenog Color
Scheme Designera nude i pregled sheme boja kroz oi osobe koja ne razlikuje boje.
Slika 29. Primjeri raspona boja
2.11.7. Ikone
Ikone su malene sliice koje uglavnom grafki opisuju neku funkciju (npr. simbol olovke govori
korisniku da moe promijenit ili dodat neki tekst). Razlikujemo nekoliko vrsta ikona:
a) Pokretaka ikona (engl. Launcher Icon) je vizualna prezentacija aplikacije i nalazi se na
poetnom zaslonu i izborniku aplikacija. Ikone se trebaju dizajnirat s posebnom panjom, tre-
baju izgledat lijepo i otro na svim pozadinskim slikama poetnog zaslona Android platorme.
Dimenzija je ovih ikona propisana, a iznosi 48x48dp. Moraju bit lagane dubine ili 3D izgleda s
gornje strane.
Slika 30. Primjer ikona, tj. dubine kod poetnog zaslona [2]
DIZAJN KORISNIKOG SUELJA
18
b) Ikone na traci s alatma su vizualne prezentacije neke odreene funkcije. Tako je na
primjer u alatnima trakama mogue posjedovat ikone za brisanje, izmjenu podataka, snimanje
podataka, novi izbornik, dodavanje korisnika itd. Dimenzija je ovakvih ikona strogo propisana i
iznosi 32x32dp. Stl je takoer strogo propisan, tj. ikone ne bi trebale bit previe detaljne, nego
ravnog (engl. fat) izgleda. Ako ikona sadri tanku grafku, potrebno je zakrenut ju za 45 stup-
njeva kako bi se ispunio prostor od 32x32dp.
Slika 31. Ikona za alatnu traku ima propisanu veliinu 32x32dp [2]
ZADATAK 4
Dizajniraj vlasttu pokretaku ikonu pomou GIMP alata za obradu fotografja.
RJEENJE ZADATKA
Za kreiranje se jednostavne pokretake ikone korist GIMP, besplatan alat za obradu fotografje.
Najnovija je verziju GIMP-a dostupna na htp://www.gimp.org. GIMP je malen i jednostavan
alat za obradu fotografje, crtanje i kreiranje razliith elemenata. Vrlo je slian Photoshopu. Iako
nije napredan kao Photoshop, donosi vrlo zanimljive i napredne alate. (Slika 32.).
Slika 32. Korisniko suelje GIMP-a: 1. Traka s alatma; 2. Radna povrina; 3. Traka s bojama i slojevima
DIZAJN KORISNIKOG SUELJA
19
Nakon upoznavanja s GIMP-ovim sueljem, kree se u izradu pokretake ikone. Prvi je korak
kreiranje novog dokumenta tako da se u glavnoj alatnoj traci odabere File New. Zatm se unosi
veliina dokumenta, njegova rezolucija i boja pozadine (Slika 2.26.). Budui da postoje razliit
Android ureaji s razliitm zaslonima, mora se izradit najmanje tri razliite veliine pokreta-
kih ikona. Postavlja se pitanje zato izraivat samo tri razliite veliine elemenata ako postoje
etri gustoe piksela (XHDPI, HDPI, MDPI, LDPI)? Razlog tomu je injenica to se danas vie ne
proizvode zasloni s najmanjom gustoom piksela, odnosno zasloni LDPI rezolucije. Ako netko i
posjeduje takav ureaj, Android platorma e mu automatski dodijelit grafke elemente MDPI
gustoe piksela koji su najblii LDPI rezoluciji.
Slika 33. Postavljanje novog dokumenta u GIMP-u
U prostor za unos irine i visine dokumenta unosi se 72px (piksela) (Slika 33.) jer dokument
treba bit kvadratnog oblika. Visina i irina od 72px je standardna veliina ikone za HDPI rezolu-
ciju. Ove granice dokumenta osiguravaju tonu veliinu ikone koja je jednaka ostalim ikonama
na zaslonima s HDPI rezolucijom. Kada se kreira pokretaka ikona za XHDPI rezoluciju, veliina
dokumenta bit e za 24px vea, odnosno 96x96px, a za MDPI rezoluciju 24px manja u odnosu
na HDPI rezoluciju, tj. 48x48px. Kao rezolucija dokumenta navedena je rezolucija od 150dpi.
Ova rezolucija moe ostat i standardna 72dpi, no poveanjem se na 150dpi osigurava otrina i
vea koliina detalja ikone. Postavlja se pozadina ikone koja je prozirna. Pozadina ne mora nu-
no bit prozirna jer e bit kreirana pokretaka ikona koja ima sjenu pa je ovaj korak od iznimne
vanost.
Nakon to je kreiran novi dokument, crta se osnovni oblik ikone koji je kvadratnog oblika sa za-
obljenim rubovima. Na slici 34. prikazan je poloaj alata koji su potrebni. Ranije kreirani kvadrat
imat e zaobljen rub od 12px. Jednostavno se desnim klikom mia na radnu povrinu, povlae-
njem ocrtava osnovni oblik ikone.

DIZAJN KORISNIKOG SUELJA
20
Slika 34. Postavljanje alata u GIMP-u: 1. oznaava se Rectangle selecton tool; 2. u postavkama
Rectangle selecton tool oznaava se da kvadrat ima zaobljen rub, a nakon toga se zadaje polumjer
od 12px; 3. dranjem lijevog klika na miu i povlaenjem mia preko radne povrine ocrtava se osnovni
oblik kvadrata sa zaobljenim rubom
Napravljeni se osnovni oblik mora obojit. Na slici 35. prikazan je poloaj alata za bojanje i njego-
ve postavke. Kada se odabere boja u dijalogu za odabir boje, boja se objekt unutar okvira oblika
(iscrtani okvir).
Slika 35. Postavljanje alata za bojenje u GIMP-u: 1. oznaava se Bucket fll tool i otvara se dijalog za iz-
mjenu boje ispune; 2. u otvorenom dijalogu odabire se boja za ispunu objekta; 3. klikom unutar granica
objekta (iscrtan dio) nanosi se boja ispune ime zavrava bojanje objekta
Nakon bojanja objekta dodaje se sjena na objekt tako da se napravi kopija postojeeg objekta
(Slika 36.). Kopiju koja je kreirana sakriva se od pogleda, a original e se obojit (istm postupkom
kao i prvi puta) u crnu boju.
DIZAJN KORISNIKOG SUELJA
21
Slika 36. Kopiranje objekta u GIMP-u: 1. klikom na tpku za kopiranje Layera, odnosno sloja radi se
kopija objekta; 2. klikom na tpku (simbol oka) pored kopiranog sloja skriva se kopija od pogleda
Kada je originalni objekt obojan, kreira se sjena pomou Gaussian blur fltera. GIMP podrava
mnotvo fltara koji omoguuju razliite efekte i manipulacije objekata i fotografja. Prije pri-
mjenjivanja blur efekta potrebno je maknut oznake s objekta. Ako objekt ostane obiljeen, blur
efekt e se primjenjivat unutar granica objekta (iscrtani dio) pa e se dobit otar rub unutar
kojeg e objekt bit zamuen. Oznake se uklanjaju istovremenim pritskom tpaka SHIFT+CTRL+A
na tpkovnici.
Slika 37. Blur flter u GIMP-u: 1. u glavnom se izborniku bira Filters; 2. u padajuem se izborniku obilje-
ava Blur i klika se na Gaussian Blur

DIZAJN KORISNIKOG SUELJA
22
Slika 38. Blur flter u GIMP-u: 1. u novootvorenom dijalogu postavljaju se vrijednost blur po horizontal-
noj i vertkalnoj osi; 2. pritskom na tpku OK dodajemo efekt na na objekt
Nakon primijenjenog blur fltra na objekt, kopija objekta koji je skriven od pogleda dobit e se
ponovnim pritskom na tpku pokraj sloja sa simbolom oka. Ovim se postupkom pravi osnovni
oblik ikone. Daljnjim modifciranjem i dodavanjem sadraja na osnovni oblik moe se dobit
veliki broj varijant ikone.
Kada se zavri s kreiranjem ikone i kada se doe do zadovoljavajueg izgleda, ikonu se pohranju-
je sa eljenim imenom u *.png format. PNG (engl. Portable Network Graphics) format podrava
prozirnost tako da e se sjena i zaobljeni rubovi vidjet na Android ureaju. Postupak izrade
ikone odreene gustoe piksela uvijek je ist. Razlika je samo u veliini dokumenta kao to je ve
objanjeno prije.
Slika 39. Izgled jedne gotove ikone sa zaobljenim rubovima i sjenom na Android ureaju s odreenom
pozadinskom slikom.
2.12. Informacijske poruke
Operacijski sustav Android temelji se na jednostavnost i ugodnom koritenju. Postoje odreene
smjernice koje jednostavno i jasno obavjetavaju korisnika da se neto dogodilo ili da se izvra-
va:
a) Budite kratki. Obavijestte korisnika o nekoj radnji sa to manje rijei.
b) Budite jednostavni. Nije potrebno korisniku postavljat duge upite kao na primjer: Je-
ste li sigurni da elite obrisat ovu datoteku?. Dovoljni su jednostavni upit: Obrisat?.
DIZAJN KORISNIKOG SUELJA
23
c) Obraajte se korisniku koristei zamjenicu Ti. Tekst poruke ili upita koji se postavlja
korisniku treba zvuat kao oputeni razgovor kojim se i inae sluite u slobodno vrijeme.
d) Vane stvari stavljajte na prvo mjesto.
e) Opiite samo to je nuno.
f) Izbjegavajte ponavljanja.
2.13. Uzorci
Uzorci su na Android platormi element suelja. Ako za takve elemente nije predvien poseban
dizajn, onda se koriste neke od slubenih Android tema. Uzorci dolaze u velikom broju, a naj-
vaniji su:
a) Obavijest
Obavijest informiraju i obavjetavaju korisnike. To su: nove dolazne poruke, elektronika pota,
proputeni telefonski pozivi itd.
Slika 40. Primjer obavijest dolazne poruke
b) Traka alata
Traka alata slui za brz pristup pojedinim funkcijama aplikacija i ubrzava korisnikov rad s aplika-
cijom (Slika 41.).
Slika 41. Primjer jedne alatne trake koja sadri osnovne alate: pretraga, opcije itd. [2]
c) Swipe Views
Swipe Views predstavlja brzu navigaciju kroz sadraj aplikacije lijevim i desnim pokretma prsta
po zaslonu. Na taj se nain poste efekt listanja stranica.

DIZAJN KORISNIKOG SUELJA
24
Slika 42. Primjer Swipe View navigacije pokretom u lijevo [2]
d) Potvrivanje i informiranje (Slika 43.)
Potvrivanje (engl. Confrming) je maleni dijalog kojim se potvruju radnje, npr. brisanje i sl.
e) Informiranje (engl. Acknowledging)
Informiranje podrazumijeva informaciju koja je upuena korisniku da je neto uspjeno obav-
ljeno.
Slika 43. Confrming & Acknowledging [2]
f) Widgets
Widget predstavljaju produeno suelje neke aplikacije (Slika 44.). Nalaze se na poetnom za-
slonu i obavljaju svoje funkcije ak i kada je aplikacija ugaena. Obino widget nemaju sve
funkcije normalne aplikacije i pritskom se na njih otvara normalna aplikacija.
Slika 44. Najpopularniji primjeri widgeta [2]
Android aplikacija ima stroga pravila o tome kako element suelja i ikone za pojedini dio suelja
trebaju izgledat. Ako se kreira multplatormska aplikacija, ne bi se trebao koristt ist stl, tj.
ist skup ikona na svim platormama. Ta pravila ne vrijede ukoliko postoji kompletno dizajnirano
suelje koje ne korist nit jednu slubenu temu Android platorme.
DIZAJN KORISNIKOG SUELJA
25
2.14. Reusable UI
Reusable UI je korisniko suelje iji se element mogu iskoristt za neke druge projekte (Slika
45.). Element korisnikog suelja (ikone, izgled tpki, pozadinska tekstura) koji su raeni za
nekog klijenta mogu se ponovno iskoristt u nekom drugom projektu. Zbog toga je potrebno
napravit skup ikona koje se mogu koristt vie puta, a da se ne primijet da su preuzete iz neke
druge aplikacije. Ikone na alatnoj traci jedne aplikacije ne razlikuju se mnogo u stlu i veliini od
ikona neke druge aplikacije. Isto vrijedi i za pozadine i neke druge elemente UI-a. Ako se ue-
stalo koriste ist element, korisno bi bilo organizirat ih po direktorijima kako bi se proces izrade
suelja jo vie ubrzao.
Slika 45. Primjeri Reusable UI elemenata [1]
ZADATAK 5
Iz isjeenih elemenata u prethodnom zadatku stliziraj svaki element i spremi ga pod odgovarajuim
nazivom.
2.15. Building blocks
Building blocks su gotovi grafki element koji se mogu koristt odmah (engl. out of the box),
a nalaze se u svakoj aplikaciji. Slue za prikaz i organizaciju podataka i omoguavaju interakciju
korisnika s aplikacijom. Izgled im varira ovisno o osnovnoj temi odreenog mobilnog ureaja na
koji nije primijenjen nit jedan drugi grafki element.
2.15.1. Kartce (engl. Tabs)
Kartce slue za brzu navigaciju kroz aplikaciju. Obino se nalaze na vrhu aplikacije, a postoje
u razliitm izvedbama. Promjena sadraja ovakvim nainom navigacije odvija se pritskom na
odreenu kartcu ili pomicanjem prsta preko ekrana u desno ili lijevo (engl. swipe).
a) Pomine kartce (engl. Scrollable tabs)
Najpoznatji je primjer pominih kartca Google Play aplikacija (Slika 46.). Kartce se nalaze pri
samom vrhu aplikacije i reagiraju na dodir i pokret. Ovaj nain navigacije podrava Android
operacijski sustav 3.0. Moe sadravat velik broj naslova (engl. Item), ali uvijek prikazuje samo
tri tako da izmjenjuje naslove tjekom korisnikog kretanja kroz izbornik. Obine, fksne kartce
to ne mogu.

DIZAJN KORISNIKOG SUELJA
26
Slika 46. Google Play i Scrollable tabs
b) Fiksne kartce (engl. Fixed tabs)
Fiksne se kartce takoer najee nalaze na samom vrhu ekrana i slue za brzu navigaciju kroz
sadraj aplikacije. Za razliku od pominih kartca mogu sadravat samo mali broj naslova. Navi-
gacija se vri dodirom na naslov ili pomicanjem prsta po ekranu. Svaki naslov je jednake irine,
a irina je odreena najveom kartcom, odnosno kartcom koja ima najdui tekst. U sluaju da
nema dovoljno mjesta, kartce postaju pomine. Iz tog se razloga preporuuje koristt samo tri
kartce sa to kraim tekstom.
Slika 47. Primjer fksnih kartca (Fixed tabs)
2.15.2. Liste
Liste prikazuju podatke koji su organizirani jedan ispod drugoga to omoguava njihov laki pre-
gled. Navigacija se kroz listu provodi pomicanjem prsta prema gore ili dolje. Svaki je podatak u
list odvojen od drugog tankom linijom zbog preglednost, a takav se podatak naziva element
liste. Liste podravaju interakciju korisnika s pojedinim naslovim.
Liste se mogu pojavit u vie oblika:
a) Liste s naslovom koji ima samo jedan red podataka jesu primitvne liste. Korisne su kod
lakih suelja i kratkih podataka.
b) Liste s naslovom koji ima dva reda podataka koriste se u reprodukciji glazbe, imenika
itd. Jedan naslov ili polje liste sadri vie redova od kojih je jedan red naslov, a drugi opis.
c) Liste s vie redova podataka mogu sadravat tekst, slike, gumbe i ostale elemente za
prikazivanje podataka.
Liste sadre i razdjelnik sekcija koji olakava organizaciju podataka i poveava preglednost.

DIZAJN KORISNIKOG SUELJA
27
Slika 48. Liste s jednim i vie redova podataka
2.15.3. Reetke (engl. Grid List)
Tablice su alternatva listama, a najee prikazuju neki podatak koji sam sebe opisuje slikom. Za
razliku od obinih lista pomine su u svim smjerovima, a dolaze u dva oblika:
a) Generike reetke (engl. Generic grids)
Redoslijed sadraja odreuje smjer u kojem se pomie prst (kod obinih lista sadraj je jedan
ispod drugoga) to moe zbunit korisnika jer su reetke pomine u svim smjerovima. Kako ne
bi dolo do zabune, ograniavaju se ili na vertkalan (Slika 49.) ili na horizontalan smjer. Kod
horizontalnog se smjera pomicanja ne bi trebala korist pomina kartca jer se kod horizontalne
interakcije prstom mijenja sadraj.
Slika 49. Primjer reetke s vertkalnim pomakom
b) Reetke s naslovima
Reetke se s naslovima po svojoj funkcionalnost ne razlikuju od generikih reetki. Jedina je
razlika to uz sliku posjeduju i tekst koji opisuje pojedinu reetku (Slika 50.).

DIZAJN KORISNIKOG SUELJA
28
Slika 50. Reetke sa slikom i naslovima
2.15.4. Prelistavanje (engl. Scrolling)
Prelistavanje je funkcija koja se korist kada postoji velika koliina sadraja koji se ne nalazi nit u
list nit u reetci. Obino se nalazi u raznim prozorima opcija. Za pomak se korist prst u smjeru
gore, dolje, a ponekad i lijevo, desno. Brzina prelistavanja ovisi o brzini pomaka prsta. Aplikacija
omoguuje ovu funkciju ako je sadraj prevelik za ekran ureaja. Na lijevu stranu ekrana dodaje
indikator (engl. scrollbar) da je pomak omoguen.
2.15.5. Spinners
Spinneri omoguuju brz odabir pojedinog podatka. U nefokusiranom stanju spinner prikazuje
zadnju odabranu stavku. Dodirom na spinner otvara se padajua lista s ponuenim podatcima
za odabir koji se nalaze u formama ili alatnim trakama (Slika 51.). Ako se nalaze u formama,
pogodni su za odabir raznih informacija prilikom registracije korisnika na neki servis (spol, ku-
na adresa, adresa na poslu). Ako se nalaze u alatnim trakama, uglavnom slue za promjenu ili
pregled podataka. Ako se promjena ili pregled podataka vri esto, preporuuje se koritenje
kartca.
Slika 51. Primjer spinnera u formi ili alatnoj traci
2.15.6. Gumb (engl. Buton)
Gumb je osnovni i najpoznatji element svakog suelja. Korist se za potvrivanje podataka,
izvravanje neke akcije itd. Moe sadravat i sliku i tekst. Android podrava dva tpa gumba:
standardni gumb i gumb bez ruba.
a) Standardni gumb
Standardni je gumb osnova svakog suelja. Pojavljuje se s obrubom i pozadinom, a moe bit
veliki i mali. Mali se korist kako bi se uklopilo u sadraj aplikacije, a veliki u dijalozima. Razlikuju
se veliinom gumba i veliinom teksta u njima.

DIZAJN KORISNIKOG SUELJA
29
Slika 52. Primjer malog i velikog gumba
b) Gumb bez ruba
Gumb bez ruba sadri sve funkcije standardnog gumba, ali nema pozadinu i rub zbog ega se
lake uklapa u moderan izgled novijih verzija Android sustava. Ovim svojstvom izgleda kao obi-
na sliica koja je podlona interakciji korisnika
Slika 53. Primjer gumba bez ruba
ZADATAK 6
Gotove stlizirane elemente suelja iz prethodnog zadatka primjeni na jednom gumbu u Eclipse razvoj-
nom okruenju.
2.15.7. Polje za unos teksta (engl. Text felds)
Polje za unos teksta omoguava korisniku unos teksta u aplikaciju. Kada korisnik dodirne polje
za unos teksta, Android automatski prikazuje tpkovnicu i omoguuje korisniku unos. Polja za
unos podravaju odabir teksta, ali i kopiranje i lijepljenje u neko drugo polje za unos. Mogu bit
jednoredna ili vieredna. Ako su polja jednoredna, tekst se pri unosu pomie u lijevo i uvijek
prikazuje zadnju rije ili slovo koje je korisnik upisao, a vieredna polja tekst na kraju unosa
prebacuju u sljedei red. Polja za unos mogu bit i kategorijski opredijeljena. Postoje polja koja
omoguuju unos lozinke, broja telefona, adrese elektronike pote i sl. Kategorija prilagoava
tpkovnicu za laki i bri unos teksta: ako postoji polje za unos broja telefona, tpkovnica je auto-
matski postavljena na numeriku verziju, a ako postoji polje za unos lozinke, unos e prikazivat
samo zvjezdice (*). Polja se za unos teksta mogu i sama zavravat, tj. davat prijedloge na osnovi
teksta koji upisujemo (engl. auto-complete). Ovakav je tp pogodan za unose adresa elektroni-
ke pote ili telefonskih brojeva jer se ponaaju kao jednostavna pretraga.

DIZAJN KORISNIKOG SUELJA
30
Slika 54. Primjer tekstualnog unosa
2.15.8. Traka za pretragu (engl. Seek bar) i klizai (engl. Sliders)
Klizai daju brz i jednostavan odabir neke razine ili vrijednost. Sastoje se od trake i gumba koji
klize po traci. Najmanja je vrijednost na lijevoj strani, a najvea na desnoj. Najee se koriste
kod promjene glasnoe ili otrine, kontrasta, intenziteta itd.
Slika 55. Primjer klizaa u standardnim Android 4.0 temama
2.15.9. Napredak i aktvnost (engl. Progress and Actvity)
Napredak i aktvnost ukazuju da se neki proces izvrava te obavjetavaju korisnika da prieka
dok se aktvnost u potpunost ne izvri.
a) Traka napretka
Traka se napretka korist za one aktvnost za koje se zna koliko tono traju te obavjetava korisni-
ka koliko je vremena potrebno da se zadatak izvri. Traka se napretka uvijek ispunjava od 0% do
100% i nikada se ne vraa na niu vrijednost. Ako se u pozadini izvrava vie od jedne aktvnost,
traka napretka prikazuje ukupno stanje izvrenost svih aktvnost. Kada doe na 100% oznaava
kraj svih aktvnost. Na primjer, ako postoji samo jedan zadatak koji se trenutno izvrava, traka
napretka pokazuje proces od 0% do 100% izvrenost. Ako postoji vie procesa u pozadini, oni
se zbrajaju i njihov se zbroj dijeli sa 100 i tako se dobiva postotak izvrenja pojedinog procesa:

2.15.8. Traka za pretragu
Klizai daju brz i jednostavan odabir
koji klize po traci. Najmanja je
koriste kod promjene glasnoe
Slika 2.46. Primjer klizaa u standardnim Android 4.0 temama
2.15.9. Napredak i aktivnost
Napredak i aktivnost ukazuju da se neki proces izvrava te obavjetavaju korisnika da prieka
dok se aktivnost u potpunosti
Traka napretka
Traka se napretka koristi za one
korisnika koliko je vremena potrebno da se zadatak izvri. Traka
od 0% do 100% i nikada se ne
jedne aktivnosti, traka napretka prikazuje ukupno stanje izvrenosti svih aktivnosti
doe na 100% oznaava kraj svih aktivnosti. Na primjer
se trenutno izvrava, traka napretka pokazuje proces od 0% do 100% izvrenosti. Ako
vie procesa u pozadini, oni se zbrajaju
izvrenja pojedinog procesa:
postotok po]cJinog proccso
Kada je dobiven iznos u postotcima pojedinog procesa
jednu vrijednost postotka. Dakle
svaki daje postotak od 25%. Pri izvrenju prvog procesa traka napretka
izvrenju drugog procesa traka se
dok se ne doe do 100% napretka.
za pretragu (engl. Seek bar) i klizai (engl. Sliders)
brz i jednostavan odabir neke razine ili vrijednosti. Sastoje se od tra
je vrijednost na lijevoj strani, a najvea na desnoj. Najee se
glasnoe ili otrine, kontrasta, intenziteta itd.
Primjer klizaa u standardnim Android 4.0 temama
Napredak i aktivnost (engl. Progress and Activity)
ukazuju da se neki proces izvrava te obavjetavaju korisnika da prieka
ne izvri.
Traka se napretka koristi za one aktivnosti za koje se zna koliko tono traju
potrebno da se zadatak izvri. Traka se napretka uvijek ispunjava
od 0% do 100% i nikada se ne vraa na niu vrijednost. Ako se u pozadini
traka napretka prikazuje ukupno stanje izvrenosti svih aktivnosti
doe na 100% oznaava kraj svih aktivnosti. Na primjer, ako postoji samo
traka napretka pokazuje proces od 0% do 100% izvrenosti. Ako
oni se zbrajaju i njihov se zbroj dijeli sa 100 i tako se

proccso =
proccs 1 +proccs 2 +proccs S +
1uu
iznos u postotcima pojedinog procesa, poveava se iznos trake napretka za
Dakle, ako postoje etiri procesa koji se izvravaju u pozadini,
svaki daje postotak od 25%. Pri izvrenju prvog procesa traka napretka
traka se napretka uveava za jo 25% , tj. ukupno
do 100% napretka.

ili vrijednosti. Sastoje se od trake i gumba
vrijednost na lijevoj strani, a najvea na desnoj. Najee se

Primjer klizaa u standardnim Android 4.0 temama
ukazuju da se neki proces izvrava te obavjetavaju korisnika da prieka
aktivnosti za koje se zna koliko tono traju te obavjetava
napretka uvijek ispunjava
vrijednost. Ako se u pozadini izvrava vie od
traka napretka prikazuje ukupno stanje izvrenosti svih aktivnosti. Kada
postoji samo jedan zadatak koji
traka napretka pokazuje proces od 0% do 100% izvrenosti. Ako postoji
i tako se dobiva postotak
+proccs n

iznos trake napretka za
procesa koji se izvravaju u pozadini,
svaki daje postotak od 25%. Pri izvrenju prvog procesa traka napretka je na 25%, pri
, tj. ukupno 50% i tako redom
DIZAJN KORISNIKOG SUELJA
31
Kada je dobiven iznos u postotcima pojedinog procesa, poveava se iznos trake napretka za
jednu vrijednost postotka. Dakle, ako postoje etri procesa koji se izvravaju u pozadini, svaki
daje postotak od 25%. Pri izvrenju prvog procesa traka napretka je na 25%, pri izvrenju drugog
procesa traka se napretka uveava za jo 25% , tj. ukupno 50% i tako redom dok se ne doe do
100% napretka.
Slika 56. Traka napretka sa standardnom temom Android 4.0 sustava
b) Aktvnost
Indikator aktvnost obavjetava korisnika da se proces izvrava, ali ne i kada e zavrit. Obino
se korist za procese za koje se ne zna kada e zavrit i kojima treba due vrijeme da se izvre.
Moe se pojavit u dva standardna oblika: kao traka ili kao kruni indikator.
Slika 57. Traka aktvnost sa standardnom temom Android 4.0 sustava
Kruni indikator ne dozvoljava pruanje dodatnih informacija korisniku i uvijek se prikazuje sam.
Trake indikatora doputaju takve tekstualne informacije.
Slika 58. Lijevo je prikazan neispravan, a desno ispravan nain prikazivanja krunog indikatora
c) Unikatni indikatori napretka (engl. Custom progress indicators)
Element koji su opisani za prikaz napretka nekog procesa obino su dovoljni za svaku aplikaciju,
no ponekad se mora posezat za vlasttm rjeenjima. Unikatni indikatori mogu prikazivat tok
pojedinog procesa na razne naine. Za to se koriste razliite sliice i boje kako bi se korisniku dao
uvid u ono to se trenutno dogaa, to se dogodilo, a to nije. Slika 59. prikazuje jedan unikatni
indikator procesa koji korist aplikacija Google Play. Plavi krug indicira stanje, tj. da se proces
izvrava, a bijela pribadaa informira korisnika to se dogodilo s datotekom koju je pokuao
spremit na svoj mobilni telefon.
DIZAJN KORISNIKOG SUELJA
32
Slika 59. Unikatni indikator napretka
Ako standardni indikatori korisniku ne pruaju dovoljno informacija, uvijek se moe kreirat vla-
stt indikator koji e nastojat to bolje uklopit se u temu ili UI koji se korist.
2.15.10. Prekidai (engl. Switches)
Prekidai korisniku pruaju mogunost izbora odreene funkcionalnost. Postoje tri vrste preki-
daa: checkbox, radio buton i on/of prekidai.
a) Checkbox
Checkbox se sastoji od okvira i kvaice, a korisniku prua mogunost izbora: hoe li omoguit
ili onemoguit vie opcija odjednom. Koritenje se checkboxa izbjegava ako je samo jedan iz-
bor. Tada se prednost daje on/of prekidau. Checkbox ima dva stanja: unchecked ili neoznaeno
i checked ili oznaeno.
Slika 60 Prikaz checkboxa i izgled svih njegovih stanja
b) Radio buton
Radio buton ili kruni gumb vrlo je slian checkboxu, a razlikuje se u radu s izbornikom. Kod
checkboxa je mogue odabrat vie ponuenih izbora, a kod radio butona samo jedan izbor iz
ponuene liste. Od korisnika trai da odabere samo jednu opciju iz liste, a pri tome moe vidjet
sve ponuene opcije. Ako nije bitno da korisnik vidi sve ponuene opcije, preporua se korite-
nje spinera jer zauzima manje mjesta.
Slika 61. Prikaz radio butona i izgled svih njegovih stanja
DIZAJN KORISNIKOG SUELJA
33
c) On/Of gumb
Ovaj gumb omoguuje promjenu stanja jedne funkcije. Stanja su: istnito (engl. True) ili neist-
nito (engl. False).
Slika 62. Prikaz on/of gumba i izgled svih njegovih stanja
ZADATAK 7
Gotove stlizirane elemente suelja iz zadatka 4 primijeni na jednom on/of gumbu u Eclipse razvojnom
okruenju putem XML layouta.
2.15.11. Dijalozi
Dijalozi su maleni prozori koji od korisnika oekuju donoenje odluka kako bi proces mogao
nastavit s radom. Obino se sastoje od poruke s dva gumba, tj. da ili ne gumba, ali im sadraj
moe bit i kompleksniji, na primjer unos teksta ili postavka neke opcije.
Slika 63. Primjer dijaloga
Dijalog se sastoji od tri glavna podruja: naslova, sadraja dijaloga i gumba.
a) Naslov
Naslov bi trebao u to kraem obliku prenijet korisniku ono to se od njega trai. Primjerice, ako
je potrebno da korisnik promijeni kontrast zaslona, u naslovu e pisat kontrast zaslona. Treba
bit kratak, jednostavan i govorit sam za sebe.
b) Sadraj dijaloga
U sadraj se dijaloga postavljaju svi eljeni element teksta, spinera, ili seek bara. Sadraj dijalo-
ga moe bit i prazan ako korisnik treba samo potvrdit neku radnju. U tom sluaju je dovoljno
napisat to se trai u naslovu.
DIZAJN KORISNIKOG SUELJA
34
c) Gumbi
Gumbi predstavljaju zadnji dio dijaloga. Obino su prisutni gumbi koji oznaavaju potvrdan i
gumbi koji oznaavaju negatvan odgovor i u skladu s njima se izvrava odreena operacija.
Slika 64. Nekoliko razliith verzija dijaloga
2.15.12. Pickers
Picker prua mogunost izbora jedne vrijednost iz cijelog kompleta. Odabir se vri uz pomo
strelica u smjeru gore/dolje, dodira ili unosa pomou tpkovnice. Picker je najbolje postavit u
dijalog zbog njegove veliine.
Slika 65. Prikaz standardnog Pickera koji je smjeten u dijalogu
Android operacijski sustav prua specijalne pickere kao to je picker za odabir datuma i vreme-
na. Takvi se pickeri nalaze u samom dijalogu, a omoguuju jednostavan i toan odabir datuma
ili vremena po postavkama vremenske zone telefona. Ovakvim je nainom pogreka kod unosa
svedena na minimum.
Slika 66. Prikaz specijalnog pickera: vrijeme i datum
DIZAJN KORISNIKOG SUELJA
35
2.16. Navigacija i widget
Navigacija Android aplikacija mijenjala se iz verzije u verziju jer su se uklanjale postojee po-
greke. Prijanje su se verzije sustava oslanjale na fziku tpku Back (nazad) kojom se vraala
aplikacija na prethodni sadraj. Pojavom novih tehnologija fzika se tpka rjee korist za na-
vigaciju. U alatnu se traku aplikacije sada dodaje tpka za povratak na prijanji sadraj. Ta tpka
obino predstavlja ikonu aplikacije sa strjelicom prema nazad. Strjelica je vidljiva samo ako je
korisnik napredovao naprijed kroz aplikaciju.
Slika 67. Back ili tpka za povratak na prijanji sadraj
Iako tpka za povratak, koja se nalazi u traci alata, slui za povratak na prijanji sadraj, prven-
stveno je namijenjena za navigaciju unutar aplikacije. Fizika se tpka za povratak na ureaju
korist samo za povratak na prethodni sadraj. Tipkom za povratak moe se i izii iz aplikacije, a
u nekim sluajevima moe posluit kao navigacija na prijanju aplikaciju ako je ostala u funkciji
u pozadini sustava. Fizika tpka ureaja takoer sakriva ili odbacuje razne dijaloge i upozorenja
koji se prikazuju korisniku, uklanja obiljeeni tekst i skriva virtualnu tpkovnicu.
Slika 68. Primjer rada Back tpke kao dijela aplikacije i kao dijela ureaja
Ako aplikacija posjeduje widget, navigacija se na neki sadraj aplikacije moe izvravat i pu-
tem poetnog zaslona. Widget je maleno korisniko suelje koje se nalazi na poetnom ekranu
Android sustava, a korisniku omoguava brzi pregled pojedinog vanog sadraja i obavljanje
najosnovnijih funkcija. Widget uglavnom prikazuju informacije u kratkom obliku, a za izvrava-
nje operacija koriste tpku koja otvara glavnu aplikaciju i nudi korisniku mogunost interakcije.
Te bi se tpke na widgetma mogle nazvat i preacima. Zahvaljujui widgetma nije potrebno
navigirat cijelom aplikacijom kako bi se dolo do odreene funkcije. Funkcija se od njih dobiva
automatski samo jednim dodirom.
DIZAJN KORISNIKOG SUELJA
36
Slika 69. Primjer navigacije kroz suelje widgeta
Navigacija se na odreeni sadraj aplikacije moe izvravat i putem notfkacija. Notfkacije
obavjetavaju korisnika da se neka funkcija izvrila, da je korisnik dobio novu poruku, da je pro-
pusto poziv itd. Pritskom na notfkaciju korisniku se prikazuje glavna aplikacija s detaljnijim
pojanjenjem, tj. sadrajem notfkacije i tpka za dodatnu interakciju ili upravljanje sadrajem.
Primjer je ovakve navigacije Gmail. Korisniku dolazi notfkacija da je stgla nova elektronika po-
ta. Pritskom na notfkaciju otvara se prozor Gmail aplikacije s cijelom porukom koju je korisnik
primio. Ako korisnik ne eli odgovorit na poruku, pritskom fzike tpke Back na ureaju dolazi
na poetni zaslon Android operacijskog sustava, a pritskom Back tpke u aplikaciji koja se nalazi
u alatnoj traci navigira unutar Gmail aplikacije i odlazi na prozor koji prikazuje svu elektroniku
potu.
ZADATAK 8
Dizajniraj jednostavnu, ali unikatnu navigaciju koja se temelji na smjernicama za navigaciju koje su
opisane u ovom poglavlju.
2.17. Geste i animacija
2.17.1. Geste
Pomou gesta korisnik moe manipulirat sadrajem koji mu je ponuen: moe obiljeavat
tekst, otvarat novi sadraj, poveavat slike itd. Ispod su prikazane sve geste koje su mogue u
Android operacijskom sustavu i koje se mogu koristt u aplikacijama.
Dodir je gesta kojom korisnik pokree odreene funkcije pritskom gumba ili ostalih
sadraja.
DIZAJN KORISNIKOG SUELJA
37
Dug dodir je gesta kojom korisnik, kao i kod kratkog dodira, pokree odreene
funkcije pritskom gumba ili ostalih sadraja. Korist se kada neki objekt (tpka,
polje za unos teksta itd.) ima vie funkcija. Tipian je primjer polje za unos teksta.
Kratkim se dodirom otvara virtualna tpkovnica, a dugim se dodirom (u trajanju od
jedne do dvije sekunde) prikazuju funkcije za kopiranje ili lijepljenje teksta.
Pomak (engl. Swipe) je gesta brzog pomicanja prsta lijevo ili desno po ekranu. Efekt
je slian listanju stranica. Ovakva je gesta postala uobiajena na Android operatv-
nom sustavu koji ima verziju veu od 3.0, a korist se za navigaciju kroz sadraj.
Povlaenje (engl. Drag) je gesta koja se korist za pomicanje odreenih objekata
po zaslonu. Nalazi se u raznim igricama i jedna je od osnovnih funkcija poetnog
zaslona (premjetanje ikona i widgeta).
Dupli dodir (engl. Double touch) se korist kod centriranja i brzog pribliavanja slika
ili mapa. Moe se koristt i na gumbima i ostalim dijelovima suelja.
Rairivanje prstju (engl. Pinch open) je gesta koja se korist kod pribliavanja (engl.
zoom in) sadraja (dokumenata, slika i mapa). Ne preporua se koritenje u druge
svrhe.
DIZAJN KORISNIKOG SUELJA
38
Spajanje prstju (engl. Pinch close) je gesta koja se korist kod udaljavanja (engl.
zoom out) sadraja (dokumenata, slika i mapa). Ne preporua se koritenje u dru-
ge svrhe.
2.17.2. Animacija
Animacija je standard koji je prisutan u gotovo svim elementma Android operacijskog sustava i
njegovim aplikacijama. Animacije korisniku pruaju vizualnu informaciju o onome to se dogaa
ili se dogodilo. Aplikaciji daju profesionalni izgled i kvalitetu. S koritenjem animacija ipak treba
pripazit. Ne smije ih bit previe nit smiju usporavat rad aplikacije. Ako ih ima previe, rad s
aplikacijom bi se oduio, a to bi moglo dovest do nezadovoljstva korisnika.
2.18. Skalabilni dizajn
Skalabilni je dizajn dizajn koji se prilagoava veliini zaslona mobilnog ureaja. Budui da se
Android mobilni ureaji pojavljuju u velikom broju razliith dimenzija zaslona, dizajniranje je
UI-a veoma teko. Kao to je ve reeno, uz razliite se veliine zaslona vezuju i razliite gustoe
piksela na zaslonima. Prema tome, crtanje jednog gumba s odreenim dimenzijama jednostav-
no nije mogue jer takav gumb ne bi bio isth dimenzija na razliitm ureajima. Zbog razliith
bi gustoa piksela i razliith dimenzija zaslona takav gumb bio distorziran i vrlo loe kvalitete
(Slika 70.).
Slika 70. Primjer distorzije na gumbu s unikatnom grafkom
Android razvojno okruenje nudi jednostavno rjeenje ovog problema. U razvoju aplikacije
stvorene su etri mape: ldpi, mdpi, hdpi i xhdpi u koje se smjetaju sliice za razliite gustoe
zaslona. Na taj nain ureaj trai i prepoznaje sliicu koja mu najbolje odgovara i koja e se naj-
pravilnije prikazivat na korisnikovom zaslonu (Slika 71.). Ova varijanta ima najvei uinak kod
otrine i boja grafke.
Slika 71. Izgled datoteka za razliite gustoe zaslona
DIZAJN KORISNIKOG SUELJA
39
Ovakav se nain ne moe primijenit na gumb i njegovu pozadinu koja je prilagoena (engl. cu-
stom) grafka jer tone dimenzije sliice nisu prihvatljive. Tada u obzir dolaze skalabilne grafke
koje razvlaenjem ne gube na kvalitet, a koje posjeduju prijelomne toke koje omoguavaju da
se pojedini element grafke razvlae, a pojedini ne razvlae. Ovo je mogue koritenjem .9.png
formata.
*.9png format je jedinstven grafki format, a do njega se dolazi pomou aplikacije koja dolazi s
Eclipse razvojnim sustavom (..\sdk\tools\draw9patch.bat) (Slika 72.).
Slika 72. Izgled poetnog zaslona aplikacije za izradu 9.png grafka
Otvaranjem aplikacije za izradu .9.png grafke otvara se prozor (Slika 73.) koji trai unos slike od
koje se grafka .9.png eli kreirat. Nakon to je slika ubaena u program, automatski se generira
prikaz izgleda grafka za odreeni element ako na nju nisu primijenjena pravila kontroliranog
rastezanja ili ako .9.png grafka nije izraena (Slika 73. desno). Na lijevoj se strani aplikacije
nalazi prostor za ureivanje, tj. prostor za dodavanje toaka irenja.
Slika 73. Izgled zaslona aplikacije za izradu 9.png grafka nakon dodavanja grafke
U prostoru za ureivanje, tj. dodavanje toaka irenja nalazi se grafka. Toke koje se zadaju
odreuju granice, tj. mjesta gdje se slika smije rairivat, a gdje ne. Postoji etri razliita prosto-
ra na kojima se toke mogu dodavat. Svaki se od njih nalazi na jednoj strani slike. Na slici 74.
vidljivo je da se crvene strjelice nalaze gore i lijevo od slike. Ove dvije strane slue za postav-
ljanje toaka koje odreuju granice do kojih se slika smije irit. Dodavanjem toke na gornju i
lijevu stranu uz sam rub slike pojavljuje se zeleni marker koji pomae u uoavanju zadane toke.
DIZAJN KORISNIKOG SUELJA
40
Slika 74. Dodavanje toaka koje kontroliraju irenje slike
Ako se krene od gornje toke, sve to se nalazi lijevo i desno od zelene linije nee se rairivat, a
toka e se, tj. prostor unutar zelene linije, irit horizontalno. Isto vrijedi i za toku koja se nalazi
na lijevoj strani slike. Sav se prostor od zelene linije prema gore i prostor ispod zelene linije nee
irit, a prostor e se unutar zelene linije irit vertkalno. Ovakvim se nainom ne gubi kvaliteta
slike i ne dolazi do distorzije rubova koji su na navedenom primjeru kompliciranog oblika. Na
desnoj je strani aplikacije za kreiranje .9.png grafke (Slika 74.) vidljiv rezultat: kako bi slika izgle-
dala da se rairi vertkalno, a kako da se rairi horizontalno. Kao to se vidi, sve ostaje na svome
mjestu bez distorzije, a na desnoj je strani aplikacije u pregledu prikazan plavi prostor koji je
oznaen na razliitm dimenzijama slike. Taj plavi prostor oznaava podruje do kojeg e bit
smjeten sadraj koji e se nalazit unutar slike, tj. pozadine nekog elementa suelja (npr. tekst
gumba). Prostor se odreuje istom metodom kao i dodavanje toaka za ograniavanje irenja
odreenih dijelova slike. Na slici 74. te su toke oznaene plavim strjelicama. Slike formata
.9.png mogu bit i bez oznaenog prostora za sadraj. Ako je rije o gumbu, aplikacija e postavit
tekst u centar slike, tj. pozadine.
Napomena: Ako se oznaava prostor za sadraj, postavljanje margina ili paddinga na gumb ili
neki drugi element u svrhu centriranja sadraja nee imat nikakvog efekta.
Grafka formata .9.png nezaobilazan je dio svakog suelja i postavlja se u direktorije za razliite
gustoe piksela na ist nain kao i klasina grafka. Pruaju otrinu i istou zavrnog proizvoda
bez obzira na veliinu i orijentaciju mobilnog ureaja, automatski se ire i prilagoavaju zaslonu.
ZADATAK 9
Dizajniraj pet razliith izgleda gumba i pretvori ih u *.9.png format, a da pri tome nit jedan gumb ne
izgubi na kvalitet.
2.19. Layout aplikacije
Layout je osnova svake aplikacije, a defnira strukturu korisnikog suelja. Postoje dva naina
deklariranja layouta: XML dokumentom i direktno (za vrijeme prirodnog rada aplikacije). Ispod
je prikazan XML nain deklariranja layouta. XML nain defniranja layouta vrlo je slian defnira-
DIZAJN KORISNIKOG SUELJA
41
nju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog objekta suelja,
mogue je vrlo brzo napisat vlastt layout. Eclipse razvojno okruenje sadri grafki editor za
kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz rezultata u realnom vre-
menu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje TextView, a koji je zapravo
naljepnica s nekim tekstom i gumbom. Ovi se element nalaze u LinearLayoutu (kasnije e
detaljno bit pojanjen svaki tp layouta).
Da bi se tekst (naljepnica) defnirao, prvo se navodi ime objekta koji se eli postavit na layout,
a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar toga vora
naveden je ID (identfkacija) naljepnice, irina i visina naljepnice i eljeni tekst koji e se prikazi-
vat. ID naljepnica mora bit unikatna, tj. ne mogu postojat dva ili vie elemenata s istm ID-om.
ID slui za identfkaciju pojedinog objekta kroz kod aplikacije.
Za gumb vrijedi ist postupak. Prvo se dodaje XML vor <buton /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivat na gumbu.
Ako se bolje pogleda prijanji kod, moe se uoit da se spominju dvije stavke za irinu i visinu,
a one su opisane nekom varijablom.


Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
definiranju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog
objekta suelja, mogue je vrlo brzo napisati vlastiti layout. Eclipse razvojno okruenje
sadri grafiki editor za kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz
rezultata u realnom vremenu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje
TextView, a koji je zapravo naljepnica s nekim tekstom i gumbom. Ovi se elementi nalaze u
LinearLayoutu (kasnije e detaljno biti pojanjen svaki tip layouta).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
Da bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout, a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar
toga vora naveden je ID (identifikacija) naljepnice, irina i visina naljepnice i eljeni tekst koji
e se prikazivati. ID naljepnica mora biti unikatna, tj. ne mogu postojati dva ili vie elemenata
s istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
Za gumb vrijedi isti postupak. Prvo se dodaje XML vor <button /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivati na gumbu.
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do
koje mjere pojedini element rairiti.


Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
definiranju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog
objekta suelja, mogue je vrlo brzo napisati vlastiti layout. Eclipse razvojno okruenje
sadri grafiki editor za kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz
rezultata u realnom vremenu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje
TextView, a koji je zapravo naljepnica s nekim tekstom i gumbom. Ovi se elementi nalaze u
LinearLayoutu (kasnije e detaljno biti pojanjen svaki tip layouta).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
Da bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout, a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar
toga vora naveden je ID (identifikacija) naljepnice, irina i visina naljepnice i eljeni tekst koji
e se prikazivati. ID naljepnica mora biti unikatna, tj. ne mogu postojati dva ili vie elemenata
s istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
Za gumb vrijedi isti postupak. Prvo se dodaje XML vor <button /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivati na gumbu.
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do
koje mjere pojedini element rairiti.


Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
definiranju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog
objekta suelja, mogue je vrlo brzo napisati vlastiti layout. Eclipse razvojno okruenje
sadri grafiki editor za kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz
rezultata u realnom vremenu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje
TextView, a koji je zapravo naljepnica s nekim tekstom i gumbom. Ovi se elementi nalaze u
LinearLayoutu (kasnije e detaljno biti pojanjen svaki tip layouta).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
Da bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout, a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar
toga vora naveden je ID (identifikacija) naljepnice, irina i visina naljepnice i eljeni tekst koji
e se prikazivati. ID naljepnica mora biti unikatna, tj. ne mogu postojati dva ili vie elemenata
s istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
Za gumb vrijedi isti postupak. Prvo se dodaje XML vor <button /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivati na gumbu.
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do
koje mjere pojedini element rairiti.


Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
definiranju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog
objekta suelja, mogue je vrlo brzo napisati vlastiti layout. Eclipse razvojno okruenje
sadri grafiki editor za kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz
rezultata u realnom vremenu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje
TextView, a koji je zapravo naljepnica s nekim tekstom i gumbom. Ovi se elementi nalaze u
LinearLayoutu (kasnije e detaljno biti pojanjen svaki tip layouta).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
Da bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout, a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar
toga vora naveden je ID (identifikacija) naljepnice, irina i visina naljepnice i eljeni tekst koji
e se prikazivati. ID naljepnica mora biti unikatna, tj. ne mogu postojati dva ili vie elemenata
s istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
Za gumb vrijedi isti postupak. Prvo se dodaje XML vor <button /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivati na gumbu.
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do
koje mjere pojedini element rairiti.
DIZAJN KORISNIKOG SUELJA
42
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do koje
mjere pojedini element rairit.
wrap_content varijabla govori elementu da bude irok ili visok kao i sadraj koji se nalazi u nje-
mu.
fll_parent varijabla govori elementu da bude irok ili visok kao i glavni layout u kojem se ele-
ment nalazi.
irina i visina objekta ne moraju bit zadani ovim varijablama, ve se mogu koristt i standardne
numerike vrijednost uz mjernu jedinicu DP.
U svijetu Android aplikacija postoje dva najpopularnija layouta: Linear layout i Relatve layout.
a) Linear layout
Linear layout je veinom osnova svake aplikacije, a dijeli se na horizontalni i vertkalni. Kod hori-
zontalnog su layouta svi element smjeteni jedan pored drugog. Ukoliko prelaze irinu zaslona,
sustav automatski dodaje pominu traku kako bi se s lakoom moglo doi do onih elemenata
koji se ne vide. Kod vertkalnog su layouta svi element smjeteni jedan ispod drugog. Ukoliko
prelaze visinu zaslona, sustav automatski dodaje pominu traku za pristup elementma koji nisu
vidljivi.
Slika 75. Raspored elemenata u horizontalnom layoutu
b) Relatve Layout
Relatve layout predstavlja raspored elemenata jedan nasuprot drugome. Primjerice, mogue
je imat gumb A i gumb B i mogue je naredit gumbu A da bude pored, ispod ili iznad gumba B.



Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
definiranju elemenata u izradi internetskih stranica. Ako se dobro poznaje naziv svakog
objekta suelja, mogue je vrlo brzo napisati vlastiti layout. Eclipse razvojno okruenje
sadri grafiki editor za kreiranje layouta to jo vie ubrzava rad, a ujedno omoguuje prikaz
rezultata u realnom vremenu. Bit e prikazan izgled vrlo jednostavnog layouta koji posjeduje
TextView, a koji je zapravo naljepnica s nekim tekstom i gumbom. Ovi se elementi nalaze u
LinearLayoutu (kasnije e detaljno biti pojanjen svaki tip layouta).
<?xml version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
Da bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout, a to je TextView. Ime objekta se navodi dodavanjem XML vora <textview />. Unutar
toga vora naveden je ID (identifikacija) naljepnice, irina i visina naljepnice i eljeni tekst koji
e se prikazivati. ID naljepnica mora biti unikatna, tj. ne mogu postojati dva ili vie elemenata
s istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
Za gumb vrijedi isti postupak. Prvo se dodaje XML vor <button /> unutar kojega su navedeni
osnovni parametri kao to su: ID, visina, irina i tekst koji e se prikazivati na gumbu.
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do
koje mjere pojedini element rairiti.

android:layout_width="wrap_content"
android:layout_height="wrap_content"
wrap_content varijabla govori elementu da
njemu.
android:layout_width="fill_parent"
android:layout_height="fill_parent"
fill_parent varijabla govori elementu da bude
element nalazi.
irina i visina objekta ne mora
standardne numerike vrijednosti uz mjernu jedinicu
U svijetu Android aplikacija postoje dva
layout.
Linear layout
Linear layout je veinom osnova svake aplikacije,
horizontalnog su layouta svi elementi smjeteni
zaslona, sustav automatski dodaje pominu traku kako bi s
elemenata koji se ne vide. Kod vertikalnog
drugog. Ukoliko prelaze visinu zaslona
elementima koji nisu vidljivi.
Slika 2.66
Relative Layout
Relative layout predstavlja
mogue je imati gumb A i gumb
iznad gumba B.
"wrap_content"
"wrap_content"
varijabla govori elementu da bude irok ili visok kao i sadraj koji se nalazi u
"fill_parent"
"fill_parent"
la govori elementu da bude irok ili visok kao i glavni
moraju biti zadani ovim varijablama, ve se mog
standardne numerike vrijednosti uz mjernu jedinicu DP.
aplikacija postoje dva najpopularnija layouta: Linear layout i Relative
osnova svake aplikacije, a dijeli se na horizontalni i vertikalni. Kod
svi elementi smjeteni jedan pored drugog. Ukoliko prelaze irinu
ustav automatski dodaje pominu traku kako bi se s lakoom moglo doi do onih
Kod vertikalnog su layouta svi elementi smjeteni
visinu zaslona, sustav automatski dodaje pominu traku za pristup


66. Raspored elemenata u horizontalnom
predstavlja raspored elemenata jedan nasuprot drugome.
gumb B i mogue je narediti gumbu A da bude pored

sadraj koji se nalazi u
irok ili visok kao i glavni layout u kojem se
ve se mogu koristiti i
Linear layout i Relative
ntalni i vertikalni. Kod
edan pored drugog. Ukoliko prelaze irinu
e s lakoom moglo doi do onih
svi elementi smjeteni jedan ispod
sustav automatski dodaje pominu traku za pristup
raspored elemenata jedan nasuprot drugome. Primjerice,
A da bude pored, ispod ili
DIZAJN KORISNIKOG SUELJA
43
Slika 76. Raspored elemenata u Relatve layoutu
ZADATAK 10
Kreiraj jedan Linear layout i u njega smjest <TextView /> i dva <buton /> te na svaki element primijeni
unikatan izgled pomou *.9.png grafka.
ZADATAK 11
Kreiraj jedan Relatve layout i u njega smjest dva <TextView /> i etri <buton /> te na svaki element
primijeni unikatan izgled pomou *.9.png grafka.
DIZAJN KORISNIKOG SUELJA
44
Programiranje
45
Programiranje
46
OSNOVE PROGRAMIRANJA
3. OSNOVE PROGRAMIRANJA
3.1. Uvod u programski jezik Java
Java je programski jezik koji je osmislio James Gosling iz Sun Microsystems 1991. godine,
a prva se verzija u javnost pojavila 1995. godine. Razlikuje se od ostalih programskih
jezika jer se kod izvrava u Java virtualnom stroju (engl. Java Virtual Machine, JVM). JVM
se razvija posebno za svaku platormu. Dakle, jedna je implementacija JVM za Linux, a
druga za Windows operacijski sustav. Java je kao programski jezik neovisna o platormi
na kojoj se izvodi jer se uvijek izvodi na svom JVM. Java prevoditelji (engl. compiler)
prevode Javu u tzv. bytecode koji interpretra JVM i izvrava Java program. Java se javlja
u dva paketa: Java Runtme Environment (JRE) i Java Development Kit (JDK). JRE sadri
JVM, biblioteke Java klasa i potrebnu funkcionalnost za pokretanje Java programa. JDK
sadri sve sastavnice kao i JRE, ali i razvojne alate za razvoj Java programa. Dakle, za
pokretanje je Java programa dovoljno instalirat JRE paket, a za razvoj Java programa
JDK paket. Java je pisana s namjerom da se programski kod napie samo jednom, a
program se izvrava na vie razliith operacijskih sustava. Kao to je ve spomenuto,
Java se programi izvravaju na JVM. Zbog toga Java ne mora pristupat direktno operaci-
jskom sustavu, tj. neovisna je o operacijskom sustavu na kojem se izvrava. Programsko
rjeenje koje je napisano jednom moe se bez ikakvih izmjena odvijat na Linuxu, Win-
dowsima i sl.
Java je objektno orijentran programski jezik (engl. ObjectOriented Programming lan-
guage: OOP) to znai da se kod predstavlja kao stvarni objekt u svijetu. Svi su element
u Javi objekt, a izuzetak su primitvni tpovi (int, long, foat, boolean itd.). Java je vrlo
striktan programski jezik. Svaki tp varijable mora bit predefniran, tj. varijabli se ne
moe dodijelit tp koji nije prethodno defniran, koji nema pripadajuu klasu. Java ima
automatski menadment memorije to znai da programer ne mora vodit brigu o alo-
kaciji i dealokaciji memorije za kreiranje novih objekata. Program nema direktni pristup
memoriji. Automatsko je skupljanje smea (engl. Garbage Collector) implementacija
automatskog menadmenta memorije, a vodi brigu o oslobaanju memorije kada in-
stancirani objekt nemaju aktvne pokazivae na memoriju.
3.2. Varijable, operatori [6]
Java programski jezik razlikuje sljedee vrste varijabli:
a) Varijable objekata (instanci) se defniraju izvan svih metoda i izvan konstruktora klase.
Sve one varijable koje ispred sebe nemaju kljunu rije statc jesu varijable objekta. Izmjenom
se th varijabli mijenja stanje objekta koji se kreira u programskom kodu pomou kljune rijei
new.
Automobil automobil = new Automobil();
Svaki put kada se kreira novi objekt, kompajler kreira i kopiju svih varijabli koje ispred sebe ne-
maju kljunu rije statc. Dakle, svaki objekt sadrava svoj skup nestatnih varijabli.
47
OSNOVE PROGRAMIRANJA
b) Varijable klasa su sve varijable koje ispred sebe sadravaju kljunu rije statc. Za kom-
pajler to znai da postoji samo jedna kopija te varijable neovisno o tome koliko se objekata iz te
klase stvorilo. U primjeru automobil statna bi varijabla mogla bit:
statc brojKotaca = 4;
Ta vrijednost vrijedi za sve automobile i stoga se ne bi trebala mijenjat za nit jedan automobil.
c) Lokalne varijable su varijable koje se nalaze u metodama objekata. Te su varijable uglav-
nom pomone i koriste se prilikom izraunavanja ili sl. Ne postoji posebna kljuna rije kojom
se oznaava je li varijabla lokalna, nego se zakljuuje iz lokacije u kojoj je varijabla deklarirana,
tj. izmeu vitasth zagrada koje oznaavaju metodu. Lokalne su varijable vidljive samo metodi
koja ju sadrava, ali ne i ostatku klase.
d) Parametri su varijable koje se koriste u deklaraciji metode. Metoda moe zahtjevat
neki odreeni parametar kao ulaz tako da obradom ulaznog parametra, moe kreirat izlaznu
vrijednost.
private int zbrajanje (int a, int b){
int c = a + b;
return c;
}
Primjer 1. Parametri metode
Metoda zbrajanje sadri dva parametra a i b koji su tpa int. Varijabla c je lokalna varijabla. U Javi
se razlikuju sljedee vrste operatora:
e) Aritmetki operatori [2]
Pretpostavimo sljedee: a = 10, b =20.
Tablica 1. Aritmetki operatori
f) Relacijski operatori
Pretpostavimo sljedee: a = 10, b = 20.
Tablica 2. Relacijski operatori
c) Lokalne varijable su varijable koje se nalaze u metodama objekata. Te su varijable uglavnom
pomone i koriste se prilikom izraunavanja ili sl. Ne postoji posebna kljuna rije kojom se
oznaava je li varijabla lokalna, nego se zakljuuje iz lokacije u kojoj je varijabla deklarirana,
tj. izmeu vitiastih zagrada koje oznaavaju metodu. Lokalne su varijable vidljive samo
metodi koja ju sadrava, ali ne i ostatku klase.

d) Parametri su varijable koje se koriste u deklaraciji metode. Metoda moe zahtijevati neki
odreeni parametar kao ulaz tako da obradom ulaznog parametra, moe kreirati izlaznu
vrijednost.
private int zbrajanje (int a, int b){
int c = a + b;
return c;
}
Primjer 1.2.1.Parametri metode
Metoda zbrajanje sadri dva parametra a i b koji su tipa int. Varijabla c je lokalna varijabla. U Javi se
razlikuju sljedee vrste operatora:
e) Aritmetiki operatori [2]
Pretpostavimo sljedee: a = 10, b =20.
Operator Opis Primjer
+ Zbrajanje a + b = 30
- Oduzimanje a b = -10
* Mnoenje a * b = 200
/ Dijeljenje b / a = 2
% Modul vraa ostatak cjelobrojnog dijeljenja b % a = 0
++ Increment poveava vrijednost za 1 a++ = 11
-- Decrement smanjuje vrijednost za 1 a-- = 9
Tablica 1.2.1. Aritmetiki operatori
f) Relacijski operatori
Pretpostavimo sljedee: a = 10, b = 20.
Operator Opis Primjer
== Provjerava da li su 2 vrijednosti jednake a == b false
!= Provjerava da li su 2 vrijednosti razliite a != b true
> Provjerava da li je lijevi operand vei od desnog a > b false
< Provjerava da li je lijevi operand manji od desnog a < b true
>= Provjerava da li je lijevi operand vei ili jednak desnom a >= b false
<= Provjerava da li je lijevi operand manji ili jednak desnom a <= b true
Tablica 1.2.2. Relacijski operatori
g) Logiki operatori
Pretpostavimo sljedee a = true, b = false.


c) Lokalne varijable su varijable koje se nalaze u metodama objekata. Te su varijable uglavnom
pomone i koriste se prilikom izraunavanja ili sl. Ne postoji posebna kljuna rije kojom se
oznaava je li varijabla lokalna, nego se zakljuuje iz lokacije u kojoj je varijabla deklarirana,
tj. izmeu vitiastih zagrada koje oznaavaju metodu. Lokalne su varijable vidljive samo
metodi koja ju sadrava, ali ne i ostatku klase.

d) Parametri su varijable koje se koriste u deklaraciji metode. Metoda moe zahtijevati neki
odreeni parametar kao ulaz tako da obradom ulaznog parametra, moe kreirati izlaznu
vrijednost.
private int zbrajanje (int a, int b){
int c = a + b;
return c;
}
Primjer 1.2.1.Parametri metode
Metoda zbrajanje sadri dva parametra a i b koji su tipa int. Varijabla c je lokalna varijabla. U Javi se
razlikuju sljedee vrste operatora:
e) Aritmetiki operatori [2]
Pretpostavimo sljedee: a = 10, b =20.
Operator Opis Primjer
+ Zbrajanje a + b = 30
- Oduzimanje a b = -10
* Mnoenje a * b = 200
/ Dijeljenje b / a = 2
% Modul vraa ostatak cjelobrojnog dijeljenja b % a = 0
++ Increment poveava vrijednost za 1 a++ = 11
-- Decrement smanjuje vrijednost za 1 a-- = 9
Tablica 1.2.1. Aritmetiki operatori
f) Relacijski operatori
Pretpostavimo sljedee: a = 10, b = 20.
Operator Opis Primjer
== Provjerava da li su 2 vrijednosti jednake a == b false
!= Provjerava da li su 2 vrijednosti razliite a != b true
> Provjerava da li je lijevi operand vei od desnog a > b false
< Provjerava da li je lijevi operand manji od desnog a < b true
>= Provjerava da li je lijevi operand vei ili jednak desnom a >= b false
<= Provjerava da li je lijevi operand manji ili jednak desnom a <= b true
Tablica 1.2.2. Relacijski operatori
g) Logiki operatori
Pretpostavimo sljedee a = true, b = false.


48
g) Logiki operatori
Pretpostavimo sljedee a = true, b = false.
Tablica 3. Logiki operatori
Izvoenje programa tee od smjera gore prema dolje, tj. redoslijedom kako je kod napisan. Taj
se niz izvoenja programa moe prekinut primjenom odreenih kontrola toka: if naredbama,
for petljama, grananjem, izvoenjem dijela koda ovisno o odreenom stanju i sl.
ZADATAK 12
Unesi realni broj i pohrani unesenu vrijednost u varijablu. Ispii poruku na ekran ovisno o tome je li
broj negatvan, 0 ili pozitvan.
3.3. Kontrola toka programa [8]
3.3.1. Grananja
Java razlikuje sljedee vrste grananja koje se koriste ovisno o situaciji:
a) If-then kontrola je najosnovnija kontrola toka programa. Govori programu da izvri
odreeni dio koda ovisno o tome je li odreeni uvjetni izraz istnit. Npr. automobil bi mogao
koit samo ako je ve u pokretu. Jedna je od moguih implementacija ovog algoritma:
private void koci (){
if(jeUPokretu){
brzina--;
}
}
Primjer 2. If-then naredba
Ako varijabla jeUPokretu ima vrijednost false, brzina se nee smanjivat to znai da i sam au-
tomobil stoji. Ako postoji samo jedan redak koda, ova se if-then naredba moe napisat i bez
vitasth zagrada. Dakle:
private void koci (){
if(jeUPokretu)
brzina--;
}
Primjer 3. If-then naredba u jednom retku
b) If-then-else kontrola omoguuje izvravanje drugih dijelova koda u sluaju da je if izraz
false. Npr. ako je automobil u stanju mirovanja, moe se izvrit neki drugi dio koda.
Operator Opis Primjer
&& Logiki AND operator. Ako oba operanda
vraaju true onda je rezultat true
a && b false
|| Logiki OR operator. Ako bar jedan
operand vraa vrijednost true onda je
rezultat true
a || b true
! Logiki NOT operand. Slui za
dodjeljivanje suprotne vrijednosti
operandu.
!a false
!b true
Tablica 1.2.3. Logiki operatori
Izvoenje programa tee od smjera gore prema dolje, tj. redoslijedom kako je kod napisan. Taj se niz
izvoenja programa moe prekinuti primjenom odreenih kontrola toka: if naredbama, for petljama,
grananjem, izvoenjem dijela koda ovisno o odreenom stanju i sl.
Zadatak 1.2.1
Unesi realni broj i pohrani unesenu vrijednost u varijablu. Ispisi poruku na ekran
ovisno o tome je li broj negativan, 0 ili pozitivan.

1.3. Kontrola toka programa [3]
1.3.1. Grananja
Java razlikuje sljedee vrste grananja koje se koriste ovisno o situaciji:
a) If-then kontrola je najosnovnija kontrola toka programa. Govori programu da izvri odreeni
dio koda ovisno o tome je li odreeni uvjetni izraz istinit. Npr. automobil bi mogao koiti
samo ako je ve u pokretu. Jedna je od moguih implementacija ovog algoritma:
private void koci (){
if(jeUPokretu){
brzina--;
}
}
Primjer 1.3.1. If-then naredba
Ako varijabla jeUPokretu ima vrijednost false, brzina se nee smanjivati to znai da i sam automobil
stoji. Ako postoji samo jedan redak koda, ova se if-then naredba moe napisati i bez vitiastih
zagrada. Dakle:
private void koci (){
if(jeUPokretu)
brzina--;
}
Primjer 1.3.2. If-then naredba u jednom retku

b) If-then-else kontrola omoguuje izvravanje drugih dijelova koda u sluaju da je if izraz false.
Npr. ako je automobil u stanju mirovanja, moe se izvriti neki drugi dio koda.
OSNOVE PROGRAMIRANJA
49
private void koci (){
if(jeUPokretu){
brzina--;
} else {
System.out.println(Automobil je u stanju mirovanja);
}
}
Primjer 4. If-then-else naredba
If-then-else naredbom mogu se radit i viestruke provjere nekog uvjeta. To se moe vidjet na
primjeru rezultata testa i dodijeljene ocjene.
private int izraunajOcjenu(int brojBodova){
int ocjena = 1;
if(brojBodova >= 90){
ocjena = 5;
} else if(brojBodova >= 80){
ocjena = 4;
} else if(brojBodova >= 70){
ocjena = 3;
} else if(brojBodova >= 60){
ocjena = 2;
}
return ocjena;
}
Primjer 5. If-the-else grananje
Primjer 5. pokazuje da ako uenik ima rezultat vei od 90, svi su izrazi ispunjeni. Meutm, na-
redba radi tako da im se jedan uvjet zadovolji, ostali se uvjet zanemaruju.
c) Switch kontrola je slina if-then-else naredbi. Podrava byte, short, char i int primitvne
tpove podataka, ali i enumerirane i String tpove podataka.
private String odrediNazivMjeseca(int mjesec){
String nazivMjeseca = ;
switch(mjesec){
case 1:
nazivMjeseca = Sijeanj;
break;
case 2:
nazivMjeseca = Veljaa;
break;
...
case 12:
nazivMjeseca = Prosinac;
break;
default:
System.out.println(Nevaei mjesec);
break;
}
return nazivMjeseca;
}
Primjer 6. Switch naredba
OSNOVE PROGRAMIRANJA
50
Hoe li se koristt if-then-else ili switch naredba ovisi o itljivost koda, ali i o izrazu koji treba
provjeravat. If-then-else naredba testra izraze koji se temelje na udaljenost nekih vrijednost
ili za provjeru nekog stanja, a switch naredba provjerava izraz koji se temelji na jednoj int, enum
vrijednost ili String objektu. Izvoenje se kod switch naredbe ne prekida iako je uvjet i prvi put
ispunjen. Zbog toga je nakon svakog izraza nuno stavit kljunu rije break kako bi prevoditelj
izaao iz petlje ukoliko je uvjet prvi put zadovoljen.
3.3.2. Petlje
Java razlikuje sljedee vrste petlji koje se koriste ovisno o situaciji:
a) While petlja neprekidno izvrava blok koda sve dok je odreeni izraz istnit.
int i = 1;
while(i < 10){
System.out.println(Petlja se izvrila + i puta);
i ++;
}
Primjer 7. While petlja
Moe se implementrat i beskonana petlja ako u while petlju stavimo true.
while(true){
// kod
}
Primjer 8. Neograniena while petlja
b) Do-while petlja provjerava izraz tek na kraju petlje i to ju razlikuje od while petlje. Kod se
unutar do-while petlje izvodi najmanje jedanput, a u while petlji se ne mora izvest nit jednom.
do{
// kod
} while(izraz);
Primjer 9. Do-while petlja
c) For petlja omoguuje kompaktan nain iteracije kroz skup vrijednost. Opi se oblik for
petlje moe zapisat na sljedei nain:
for(inicijalizacija; uvjetni izraz; inkrement){
// kod
}
Primjer 10. Opi oblik for petlje
Inicijalizacija inicijalizira petlju. Izvrava se samo jednom, tj. kada petlja zapoinje. Petlja se izvr-
ava sve dok je uvjetni izraz istnit. Kada uvjetni izraz poprimi vrijednost false, petlja se prekida.
Inkrement je izraz koji se izvrava prilikom svake iteracije petlje. Najee je to inkrement (uve-
anje) ili dekrement (umanjenje) neke vrijednost.
for(int i = 0; i < 10; i++){
System.out.println(Broj iteracije: + i);
}
Primjer 11. For petlja
OSNOVE PROGRAMIRANJA
51
ZADATAK 13
Uz pomo do-while petlje ispii sve brojeve koji su vei od 500 a manji od 700, a koji su djeljivi sa 17.
Ispii koliko takvih brojeva ima. Rijei zadatak uz pomo for petlje.
3.4. Polja
Polje je kontejner objekata koji sadri fksni broj vrijednost istog tpa. Veliina se polja odreuje
kada se kreira polje.
Slika 77. Opi oblik jednodimenzionalnog polja
Na slici 77. prikazano je polje veliine 10. Svaki element u polju ima svoj indeks, odnosno redni
broj na kojem se nalazi u polju. Indeksiranje elemenata u polju kree od broja 0 i stoga je indeks
zadnjeg elementa u polju 9, a ne 10.
private void primjerPolja(){
int[] polje = new int[10];
int[0] = 100;
int[1] = 200;
int[2] = 300;
int[3] = 400;
int[4] = 500;
int[5] = 600;
int[6] = 700;
int[7] = 800;
int[8] = 900;
int[9] = 1000;

System.out.println(Vrijednost na indeksu 0 je : + polje[0]);
System.out.println(Vrijednost na indeksu 1 je : + polje[1]);
System.out.println(Vrijednost na indeksu 9 je : + polje[9]);
}

OUTPUT:
Vrijednost na indeksu 0 je : 100
Vrijednost na indeksu 1 je : 200
Vrijednost na indeksu 9 je : 1000
Primjer 12. Popunjavanje i indeksiranje polja
Polja se deklariraju slino kao i varijable, a poslije tpa slijedi uglata zagrada. Polje se moe ini-
cijalizirat i skraenom sintaksom.
int polje[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}
Primjer 13. Popunjavanje polja u deklaraciji
Veliina se polja u primjeru 11. odreuje brojem elemenata izmeu vitasth zagrada. Mogue je
defnirat i polje polja, tj. viedimenzionalno polje koritenjem dva ili vie skupova vitasth zagrada.
U Javi je viedimenzionalno polje jednostavno polje koje u sebi sadrava polja, a ne tp podataka.
OSNOVE PROGRAMIRANJA
52
String[][] imena = {
{Pero, Marko, Ivan},
{Peri, Markovi, Ivi}
};

System.out.println(imena[0][0] + + imena[1][0]);
System.out.println(imena[0][2] + + imena[1][2]);

OUTPUT:
Pero Peri
Ivan Ivi
Primjer 14. Polje u polju (dvodimenzionalno polje)
Sljedea slika pokazuje indeksiranje elemenata u viedimenzionalnom polju.
Primjer 15. Opi oblik dvodimenzionalnog polja
ZADATAK 14
Napii program koji e uitat 5 realnih brojeva u polje i ispisat najmanji element u polju.
3.5. Metode [8]
Metode se mogu zamislit kao mehanizam koji pretvara ulazne jedinice u izlazne. Npr. ulazne su
jedinice tvornice papira stabla i drugi sastojci, a izlazna je jedinica papir. Dakle, tvornica papira
iz nekih ulaznih vrijednost stvara izlaznu vrijednost. Na takvom principu rade i metode u pro-
gramiranju.
private Papir kreirajPapir(Stablo stablo, Sastojci ostaliSastojci){
//kod kreiranja papira
return papir;
}
Primjer 16. Pretvaranje ulaznih jedinica u izlazne
Neophodni dijelovi deklaracije metode su: tp koji metoda vraa, naziv, zagrade i tjelo izmeu
vitasth zagrada. Deklaracija se metode sastoji od 6 komponent:
1. Vidljivost: private, protected, public vidljivost metoda
2. Vrijednost koju metoda vraa: tp varijable koju metoda vraa (ako metoda ne vraa
vrijednost, onda je void)
3. Naziv metode: treba izbjegavat kljune rijei kao nazive metoda
4. Lista parametara: lista parametara je u zagradama i metoda ih prima kao ulazne podat-
ke. Mora se navest tp i naziv parametra. Ako parametri nisu potrebni, korist se prazna zagrada ().
OSNOVE PROGRAMIRANJA
53
5. List iznimaka: ponekad odreeni kod baca iznimke, a iznimke se mogu vezat na dekla-
raciju metode tako da se navede lista svih moguih iznimaka koje se mogu dogodit prilikom
izvoenja metode.
6. Tijelo metode: sadri sav potreban kod za metodu zajedno s deklaracijom lokalnih varijabli.
Slijedi primjer jedne metode.
public double zbroji(double a, double b){
//kod
}
Primjer 17. Metoda s dva parametra
Svaka metoda ima svoj potpis (engl. signature) koji metodu ini jedinstvenom. Potpis je gore
napisane metode sljedei:
public double zbroji(double a, double b);
Primjer 18. Potpis metode
Preporua se da se metode imenuju s glagolom koji je napisan malim slovima, a ako se sastoji
od vie rijei, prva rije treba bit glagol, a druga imenica, pridjev i sl.
tri
triBrzo
koi
dohvatiPodatkeIzBaze
Primjer 19. Primjeri naziva metoda
Java omoguava preoptereivanje (engl. overloading) metoda. Moe razlikovat metode s razli-
itm potpisom. To znai da metode u istoj klasi mogu imat jednake nazive ako imaju razliitu
listu parametara.
public class MojaKlasa{
private int zbroj(int a, int b){};
private int zbroj (int a, int b, int c){};
private double zbroj(double a, double b){};
}
Primjer 20. Preoptereivanje metoda
Dakle, java razlikuje sve tri gore navedene metode. Preoptereene metode razlikuje po broju i
tpu argumenata u list parametara.
NAPOMENA: Ne smije se zamijenit preoptereivanje metoda s prepisivanje (engl. override)
metodom jer se ne odnose na isto. Prepisivanje metode se koriste kada jedna klasa nasljeuje
drugu, ali nema isto ponaanje u metodama. Metode se prepisuju, a klasi se moe opisat pona-
anje koje se razlikuje od ponaanja klase roditelja kojeg je naslijedila. U svakodnevnom ivotu
objekt imaju odreene atribute kao to npr. ormar ima visinu, irinu i duinu. Ormaru se mogu
mijenjat stanja pomou akcija kao to su otvaranje i zatvaranje ormara. Kao to s varijablama
defniramo atribute objekta, tako s metodama defniramo akcije koje se mogu radit na objektu.
Dakle, metode omoguuju promjenu stanja objekta. U ovom se sluaju moe mijenjat stanje
ormara iz zatvorenog u otvoreno i obrnuto.
OSNOVE PROGRAMIRANJA
54
package org.gauss.toturial;
public class Ormar {
private int visina;
private int irina;
private int duina;
private boolean otvoren = false;
public Ormar(int visina, int irina, int duina) {
this.visina = visina;
this.irina = irina;
this.duina = duina;
}
public void otvoriOrmar() {
this.otvoren = true;
}
public void zatvoriOrmar(){
this.otvoren = false;
}
public boolean jeOtvoren() {
return this.otvoren;
}
}
Primjer 21. Klasa ormar
Primjeri metoda ve zahvaaju granicu objektno orijentranog programiranja, ali je lake ra-
zumjet koncepte metoda kroz takve primjere. Ako se u ulazu u program kreira objekt ormar,
njegovo je poetno stanje zatvoren. To je zato to je varijabla otvoren defnirana kao false:
private boolean otvoren = false
Ako se na tom objektu pokrene metoda otvoriOrmar(), vrijednost otvoren e se promijenit u
true to znai da je tom objektu promijenjeno stanje. Stanje se ormara moe provjerit s me-
todom jeOtvoren(). Isto tako, ako se pokrene metoda zatvoriOrmar(), varijabla otvoren e se
promijenit u false to znai da je ormar zatvoren.
package org.gauss.toturial;
public class Main {
public static void main(String[] args) {
Ormar ormar = new Ormar(5,5,5);
System.out.println("Ormar instanciran - Ormar je otvoren : " +
ormar.jeOtvoren());
ormar.otvoriOrmar();
System.out.println("Pokrenuta metoda otvoriOrmar() - Ormar je otvoren :
" + ormar.jeOtvoren());
ormar.zatvoriOrmar();
System.out.println("Pokrenuta metoda zatvoriOrmar() - Ormar je otvoren :
" + ormar.jeOtvoren());
}
}
Primjer 22. Izmjena stanja objekta kroz metode
Program u primjeru 20. kreira objekt tpa Ormar koji je visine 5, irine 5 i duine 5 i nakon toga se
na njemu izvode akcije otvaranja i zatvaranja ormara. Program ispisuje sljedei tekst u konzolu:
OSNOVE PROGRAMIRANJA
55
Slika 78. Ispis stanja objekta ormar u konzoli
Pomou metoda mogu se radit i neki sloeniji postupci kao npr. raunanje opsega krunice.
Takva metoda ne mijenja stanje objekta, ali vraa informacije o objektu koje se mogu dobit iz
njegovih svojstava. Ako je zadan polumjer krunice, iz tog se svojstva moe dobit informacija o
opsegu krunice. Prvo se kreira objekt Krunica u kojem se defnira metoda izraunajOpseg(). Ta
metoda e vraat broj tpa double.
package org.gauss.toturial;
public class Krunica{
private double x, y;
private double r;
public Krunica(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
}
public double izraunajOpseg(){
return 2 * 3.14159 * r;
}
}
Primjer 23. Klasa krunica s metodom izraunajOpseg()
Instanciranjem objekta tpa Krunica i pozivanjem metode izraunajOpseg() program bi trebao
ispisat opseg krunice u konzolu.
package org.gauss.toturial;
public class Main {
public static void main(String[] args) {
Krunica krunica1 = new Krunica(5, 5, 10);
System.out.println("Opseg krunice 1 je: " +
krunica1.izraunajOpseg());
Krunica krunica2 = new Krunica(10, 10, 20);
System.out.println("Opseg krunice 2 je: " +
krunica2.izraunajOpseg());
}
}
Primjer 24. Raunanje opsega dviju razliith krunica
U primjeru 1.4.8. kreiraju se dvije razliite krunice. Prva krunica ima centar u toki (5, 5) i po-
lumjer 10, a druga u toki (10, 10) i polumjer 20. U konzolu se ispisuje sljedee:
OSNOVE PROGRAMIRANJA
56
Slika 79. Ispis opsega dviju krunica u konzoli
ZADATAK 15
Napii program koji uitava cijeli broj n (2 n 30), a zatim poziva metode:
unesiElemente za uitavanje n elemenata u polje
sortirajPolje za sortiranje polja uzlazno po veliini
getMin za dohvaanje najmanjeg elementa
getMax za dohvaanje najveeg elementa polja
getSrvr za dohvaanje srednje vrijednosti svih elemenata
okreniPolje za mijenjanje mjesta elementima zadnje na prvo mjesto, predzadnje na
drugo itd.
toString koji kreira string od elemenata polja razdvojenih zarezom ili razmakom
3.6. Razine pristupa
Postoje razliite kljune rijei ispred metoda kao to su private i public. Predstavljaju razinu pri-
stupa metodama ili varijablama u klasi. Postoje 4 vrste razina pristupa:
a) private
b) package
c) protected
d) public
Najee se u programiranju koriste samo private i public razine pristupa. Razina pristupa opi-
suje kojim e klasama metode bit vidljive. Ako je razina pristupa private, samo klasa u kojoj se
nalazi ta metoda ima pristup toj metodi i samo ju ona moe koristt. Package razina pristupa
oznaava da metodi moe pristupat klasa u kojoj se nalazi, ali i sve klase koje se nalaze u istom
pakovanju (engl. package). Ako je razina pristupa protected, metodi moe pristupit klasa u kojoj
se metoda nalazi, ali i klase koje se nalaze u istom pakovanju i sve podklase. Ako je pak razina
pristupa public, metodi moe pristupit bilo koja klasa. Malom se izmjenom klase Krunica moe
pokazat primjer utjecaja razine pristupa na pozivanje metoda.
OSNOVE PROGRAMIRANJA
57
package org.gauss.toturial;
public class Krunica{
private double x, y;
private double r;
public Krunica(int x, int y, int r) {
this.x = x;
this.y = y;
this.r = r;
}
public double izraunajOpseg(){
return 2 * 3.14159 * r;
}
private double izraunajPovrinu(){
return r*r*3.14159;
}
}
Primjer 25. Private i public metode Krunice
Ako se instancira objekt Krunica, moe se pozvat samo metoda izraunajOpseg(), ali ne i meto-
da izraunajPovrinu() jer je metoda izraunajOpseg() razina pristupa public to znai da meto-
du moe pozvat bilo koja klasa. To se moe primijett i prilikom pisanja samog koda gdje Eclipse
alat ne doputa pozivanje metode izraunajPovrinu() jer je ona private, tj. ne moe se pozvat
u nekoj drugoj klasi.
Slika 80. U drugoj klasi nije mogue pozvat private metode
OSNOVE PROGRAMIRANJA
58
4. OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
4.1. Klase, objekt i enkapsulacija
Klase se mogu opisat kao shematski plan (engl. blueprint) objekta. Klasa je specifkacija kako
konstruirat objekt. Svaki put kada u programskom kodu stvaramo objekt, taj objekt nastaje iz
napisane klase, tj. instancira se objekt iz klase. Klasa je i kolekcija podataka i metoda koje rukuju
tm podatcima. Podatci i metode zajedno slue za defniranje sadraja i ponaanja nekog objek-
ta. Npr. krunica se moe opisat s x, y koordinatama koje odreuju njezin centar i polumjer.
Postoji mnogo operacija koje se mogu radit s krunicama: izraunat njen opseg, povrinu, pro-
vjerit jesu li zadane toke unutar krunice itd. Svaka je krunica drugaija, ima razliite toke
sredita i razliite polumjere, ali ako krunicu opisujemo kao klasu, ima svojstva koje moemo
postavit kao defniciju same krunice.
public class Krunica{
private double x, y //koordinate centra krunice
private double r; // polumjer krunice

// metode krunice
public double izraunajOpseg(){ return 2 * 3.14159 * r}
public double izraunaj Povrinu(){ return 3.14159 * r * r}
}
Primjer 26. Klasa krunica
Kada je napravljena klasa za krunicu, neto se eli i radit s njom. Ali sa samom se klasom ne
moe radit nita. Prvo se mora stvorit objekt iz te klase kako bi se s njim moglo manipulirat.
Defniranjem klase stvorio se vlastt tp podatka. Dakle, kao to postoji int, foat, double, String,
sada postoji i tp podataka Krunica koji je neto sloeniji od th osnovnih tpova podataka. On
se sastoji od vie jednostavnih tpova podataka. Kao to se nekoj varijabli dodijelio neki tp po-
dataka, i nekoj se varijabli moe dodijelit tp Krunica.
int broj;
float drugiBroj;
String tekst;
Primjer 27. Dodjeljivanje jednostavnog tpa podataka
Na ovaj se nain varijablama dodjeljuje jednostavan tp podataka. Ako se varijabli eli dodijelit
tp Krunica, mora se koristt kljuna rije new.
Krunica mojaKrunica = new Krunica();
Primjer 28. Dodjeljivanje vlasttog tpa podataka
Ovakvom se linijom koda kae programu da iz klase Krunica konstruira objekt krunica koji se
sprema u varijablu mojaKrunica. Sada se koritenjem objekta mojaKrunica moe raunat op-
seg i povrina krunice postavljanjem polumjera krunice. Polumjer se krunice moe postavit
direktnim pristupom varijabli u objektu ili pomou metoda enkapsulacije.
U pisanju klasa preporua se postavit sve varijable na to niu razinu pristupa (engl. access level).
To se odnosi na private, public i protected kljune rijei ispred varijable:
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
59
a) public varijabla je vidljiva svim klasama
b) private varijabla je vidljiva samo klasi u kojoj se varijabla nalazi
c) protected varijabla je vidljiva klasi u kojoj se nalazi i svim podklasama
Metoda kojom se moe postavit polumjer krunice jest postavljanje varijable r kao public i di-
rektno pristupanje varijabli.
Krunica mojaKrunica = new Krunica();
mojaKrunica.r = 5;
Primjer 29. Direktni pristup varijabli
Ova se metoda ne preporua jer varijabla nepotrebno postaje vidljiva svim klasama. Druga i
bolja metoda je metoda enkapsulacije kojom se razina pristupa varijable postavlja na private, a
metodama se omoguava manipulacija tom varijablom.
public class Krunica{
private double x, y //koordinate centra krunice
private double r; // polumjer krunice

public double getR(){
return r;
}
public void setR(double r){
this.r = r;
}
// metode krunice
public double izraunajOpseg(){ return 2 * 3.14159 * r}
public double izraunaj Povrinu(){ return 3.14159 * r * r}
}
Primjer 30. Enkapsulacija varijabli
S get i set metodama omoguava se dohvaanje i postavljanje varijable r, a takve se metode jo
nazivaju pristupnim metodama (engl. accessor methods). Nakon toga se postavlja vrijednost te
varijable preko metode void setR (double r);
Krunica mojaKrunica = new Krunica();
mojaKrunica.setR(5);
Primjer 31. Pristup varijabli preko set metode
4.2. Konstruktori
Klasa sadri konstruktore koji se pozivaju prilikom kreiranja objekta. Deklaracije su konstruktora
sline metodama, a razlikuju se po tome to naziv mora bit ist kao i naziv klase i ne vraa nika-
kav tp podataka (ak ni void). Konstruktori se koriste kada je potrebno postavit stanje objek-
ta (inicijalizirat objekt) prilikom njegovog stvaranja (instanciranja). Na primjeru klase Krunica
mogu se postavljat varijable nakon inicijalizacije pozivanjem set metoda ili prilikom inicijalizaci-
je slanjem koordinata i polumjera u konstruktor.
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
60
public class Krunica{
private double x, y //koordinate centra krunice
private double r; // polumjer krunice

//Konstruktor
public Krunica (double x, double y, double r){
this.x = x;
this.y = y;
this.r = r;
}
}
Primjer 32. Konstruktor krunice s parametrima koordinata i polumjerom
Sada je mogue kreirat objekt i odmah mu postavit stanje.
Krunica mojaKrunica = new Krunica(0, 0, 5);
Primjer 33. Konstruiranje objekta pomou vlasttog konstruktora
Tako kreiran objekt imat e centar u koordinatama (0, 0) s polumjerom 5. Klasa moe imat pro-
izvoljan broj konstruktora.
public class Krunica{
private double x, y //koordinate centra krunice
private double r; // polumjer krunice

public Krunica (double x, double y, double r){
this.x = x;
this.y = y;
this.r = r;
}
public Krunica (double r){
this.x = 0;
this.y = 0;
this.r = r;
}
public Krunica (double x, double y){
this.x = x;
this.y = y;
this.r = 5;
}
}
Primjer 34. Klasa s veim brojem konstruktora
Svaka klasa sadri osnovni konstruktor bez parametara koji se ne mora defnirat.
Krunica mojaKrunica = new Krunica();
Primjer 35. Kreiranje objekta s osnovnim konstruktorom
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
61
ZADATAK 16
Napii klasu Zarulja koja ima: atribut bool tipa Stanje, podrazumijevani i parametarski
konstruktor, jedinstvenu metodu za paljenje i gaenje arulje i metodu koja provjerava svijetli li
arulja. Kreiraj objekt klase Zarulja, upali i ugasi arulju nekoliko puta i provjeri svijetli li arulja.
4.3. Nasljeivanje
Klasa moe naslijedit drugu klasu i tada se naziva podklasa (engl. subclass, derived class, exten-
ded class, child class). Klasa koja je naslijeena naziva se nadklasa (engl. superclass, base class,
parent class). Svaka klasa moe naslijedit samo jednu nadklasu (u sluaju potrebe za viestru-
kim nasljeivanjem koriste se suelja (engl. interface). Kada se kreira nova klasa, a ve postoji
klasa koja sadri dio koda koji je potreban, moe se naslijedit tu klasu i iskoristt ve gotove
dijelove koda, tj. nije potrebno pisat cijelu klasu ispoetka. Ipak, nasljeivanje slui da bi se
kreirao is-a odnos koji je nuan prilikom implementacije nasljeivanja. Podklasa nasljeuje sva
polja, metode i ugnijeene klase od svoje nadklase. Konstruktori se ne nasljeuju, ali se moe
pozvat konstruktor nadklase u podklasi.
public class Zaposlenik {

// klasa Zaposlenik sadri 3 varijable
public String ime;
public String prezime;
public String adresa;

// klasa Zaposlenik ima jedan konstruktor
public Zaposlenik (String ime, , String prezime, String adresa) {
this. ime = ime;
this. prezime = prezime;
this.adresa = adresa;
}

// klasa Zaposlenik sadri 4 metode
public void setIme(String ime) {
this.ime = ime;
}
public void setPrezime(String prezime) {
this. prezime = prezime;
}
public void setAdresa(String adresa){
this.adresa = adresa;
}
public void obavljajRad() {
//kod
}
public void uzmiGodinji() {
//kod
}
}
Primjer 36.Klasa Zaposlenik
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
62
Klasa Inenjer koja nasljeuje klasu Zaposlenik mogla bi ovako izgledat:
public class Inenjer extends Zaposlenik {

// Inenjer podklasa dodaje jo jednu varijablu
public int brojNadziranihObjekata;

// Inenjer podklasa ima jedan konstruktor
public Inenjer(String ime, String prezime, String adresa, int
brojNadziranihObjekata){
super(ime, prezime, adresa);
this. brojNadziranihObjekata = brojNadziranihObjekata;
}

// Inenjer podklasa dodaje jo jednu metodu
public void nadziriNoviObjekt () {
this.brojNadziranihObjekata++;
}
}
Primjer 37. Klasa Inenjer nasljeuje klasu Zaposlenik
Inenjer klasa nasljeuje sve varijable i metode od klase Zaposlenik i dodaje jo polje brojNadzi-
ranihObjekata i metodu nadziriNoviObjekt. Dakle, kao da je napisana klasa Zaposlenik ispoetka
s etri varijable i pet metoda. Podklasa ne nasljeuje varijable s razinom pristupa private, tj.
naslijedit e samo varijable koje su public i protected i u istom paketu.
4.4. Apstraktne klase [10]
Apstraktna klasa je klasa koja se deklarira s kljunom rijeju abstract i moe, ali i ne mora, sa-
dravat apstraktne metode. Apstraktne se klase mogu instancirat, tj. mogu se naslijedit iako
nije mogue kreirat objekte takvih klasa. Apstraktna metoda je metoda koja ima deklaraciju, ali
nema implementaciju.
abstract void pomakni (double pomakX, double pomakY);
Primjer 38. Apstraktna klasa pomakni
Ako klasa sadri apstraktnu metodu, i klasa mora bit apstraktna.
public abstract Zaposlenik{
abstract void obavljajRad();
}
Primjer 39. Apstraktna klasa s apstraktnom metodom
Zaposlenik je klasa koja se moe naslijedit i mogua je nadklasa za Inenjer, Radnik, Menader,
Programer i sl. Ti zaposlenici imaju neka zajednika svojstva kao to je npr. obavljanje posla i
zato se moe odredit apstraktna nadklasa Zaposlenik.
public abstract Zaposlenik{
abstract void obavljajRad();
abstract void uzmiGodinji();
}
Primjer 40. Klasa Zaposlenik koja e sluit kao nadklasa
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
63
Klasa moe sadravat jednu ili vie apstraktnih metoda. Klase koje nasljeuju takvu klasu mo-
raju imat implementaciju za svaku od apstraktnih metoda nadklase jer e inae i same bit ap-
straktne. Tako svaka klasa koja naslijedi klasu Zaposlenik, mora imat implementaciju za metode
obavljajRad() i uzmiGodinji().
public Inenjer extends Zaposlenik{
void obavljajRad(){
//kod
}
void uzmiGodinji(){
//kod
}
}
Primjer 41. Klasa Inenjer mora implementrat apstraktne metode
ZADATAK 17
Napii apstraktnu klasu Rukometas koja ima atribute za ime, starost i teinu. Napii
podrazumijevani konstruktor, parametarski konstruktor i apstraktnu metodu double
igraj(). Izvedi klasu Napadac koja ima atribut za snagu uta (1-100) i postotak
realizacije (0-100). Prepii metodu igraj tako da se rauna mogunost gola prema
formuli (1). Izvedi klasu Golman koja ima atribute refleksi (1-100) i postotak obrana (0-
100). Prepii metodu igraj tako da rauna mogunost obrane prema formuli (2).
Kreiraj jednog golmana i jednog napadaa, pozovi na obojici metode igraj i ispii na
ekran je li postignut gol. To odredi na temelju izraunatih mogunosti obrane i gola
(ako je vea, dogodilo se).
Snaga * Realizacija - 10 * Starost (1)
Refleksi * Postotak Obrana - 2 * Starost (2)
4.5. Polimorfzam
Polimorfzam je u rjeniku defniran kao princip u biologiji prema kojemu organizam ili vrsta
moe imat vie razliith oblika ili razina razvoja. Taj se princip moe primijenit i u Java pro-
gramskom jeziku. Podklase neke klase sadre vlastto ponaanje, ali i dio ponaanja koji dijeli sa
svojom nadklasom. Polimorfzam se moe demonstrirat manjom izmjenom klase Zaposlenik.
Moe se dodat metoda ispiiOpis koja e ispisivat sve trenutne podatke o zaposleniku.
public void printDescription(){
System.out.println("Zaposlenik " + this.ime + " " + this.prezime + " ivi na
adresi " + this.adresa);
}
Primjer 42. Metoda printDescripton()
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
64
Kako bi demonstrirali polimorfzme, naslijedit emo klase Zaposlenik s klasama Inenjer i Arhitekt.
public class Inenjer extends Zaposlenik {

public int brojNadziranihObjekata;

public Inenjer(String ime, String prezime, String adresa, int
brojNadziranihObjekata){
super(ime, prezime, adresa);
this. brojNadziranihObjekata = brojNadziranihObjekata;
}

public void nadziriNoviObjekt () {
this.brojNadziranihObjekata++;
}

public void printDescription(){
super.ispiiOpis();
System.out.println("Inenjer " + this.ime + " " + this.prezime + "
nadzire " + this. brojNadziranihObjekata + " objekata");
}
}
Primjer 43.Klasa Inenjer
Arhitekt je isto zaposlenik, ali se njegov rad razlikuje od rada Inenjera.
public class Arhitekt extends Zaposlenik{

private intbrojNacrta;

Arhitekt(Stringime,String prezime,String adresa,intbrojNacrta){
super(ime,prezime,adresa);
this.brojNacrta = brojNacrta;
}
private void izradi NoviNacrt(){
this.brojNacrta++;
}
public void ispiiOpis() {
super.ispiiOpis();
System.out.println("Arhitekt " + this.ime + "" + this.prezime + " je
izradio " + this.brojNacrta + " nacrta");
}
}
Primjer 44. Klasa Arhitekt
Sada je mogue testrat polimorfzam u par primjera.
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
65
public static void main (String[] args){
Zaposlenik zaposlenik01, zaposlenik02, zaposlenik03;

zaposlenik01= new Zaposlenik("Pero", "Peri", "Kralja Zvonimira 1A");
zaposlenik02= new Inenjer("Marko","Mari","Kralja Tomislava 2B", 10);
zaposlenik03= new Arhitekt("Ivan", "Ivi", "Kravlja Kreimira 3A", 23);

zaposlenik01.printDescription();
zaposlenik02.printDescription();
zaposlenik03.printDescription();
}
Primjer 45. Polimorfzam:sva su tri zaposlenika istog tpa, ali su instancirani kao razliit objekt
U testnom se programu moe vidjet da se varijablama zaposlenik01, zaposlenik02 i zaposle-
nik03 dodijelio tp varijable Zaposlenik, ali se svaka varijabla instancirala kao drugaiji tp objek-
ta. To je mogue zbog polimorfzma. Dakle, zaposlenik01 je instanciran kao new Zaposlenik(), a
zaposlenik02 kao new Inenjer(). Budui da je klasa Inenjer naslijedila klasu Zaposlenik, a zapo-
slenik02 je zapravo i Zaposlenik i Inenjer, moe mu se dodijelit tp Zaposlenik. Isto vrijedi i za
zaposlenik03. Arhitekt je Arhitekt, ali je i Zaposlenik. No ako bi se instancirao objekt Zaposlenik
u neku varijablu, ta bi varijabla mogla bit samo tpa Zaposlenik, ali ne i Inenjer ili Arhitekt jer je
taj objekt samo Zaposlenik, ali nije Inenjer ili Arhitekt. Slina situacija moe postojat i kod pa-
rametara metoda u kojima se moe defnirat parametar tpa Zaposlenik to znai da e metoda
primat parametre tpa Zaposlenik, ali i Inenjer i Arhitekt.
public void metoda(Zaposlenik zaposlenik){
//kod
}
Primjer 46. Metoda kao parametar prima tp Zaposlenik
Ova se metoda moe pozivat na sljedee naine i sva su tri naina ispravna.
metoda(zaposlenik01);
metoda(zaposlenik02);
metoda(zaposlenik03);
Primjer 47. U metodu se mogu slat sve podklase klase Zaposlenik
OBJEKTNO ORIJENTIRANO PROGRAMIRANJE
66
5. RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
5.1. Instalacija potrebnih alata
Kako bi se zapoelo s razvojem Android aplikacija, prvo se izrauje instalacija potrebnih alata,
prije svega JDK. JDK je dostupan na sljedeoj internetskoj stranici:
htp://www.oracle.com/technetwork/java/javase/downloads/jdk7-downloads-1880260.html
JDK mora bit kompatbilan s operacijskim sustavom na kojemu e se aplikacije razvijat. Andro-
id aplikacije se razvijaju u Eclipse IDE (engl. Intergrated Development Environment) razvojnom
alatu. Eclipse je dostupan na:
htp://www.eclipse.org/downloads/
Odabire se verzija Eclipse alata. Uz ovu se skriptu preporuuje koritenje Eclipse IDE for Java
EE Developers, ali je mogua i druga verzija, ovisno o vlasttm preferencijama. Primjeri koji su
navedeni u ovoj skript, pisani su u Eclipse verziji Indigo koja je nia verzija od trenutne Juno.
Stoga e izgled samog Eclipsea bit neto drugaiji u primjerima. Osim ovih dviju instalacija, po-
trebno je instalirat i Android SDK, tj. klase i razvojno okruenje koje se korist za razvoj Android
aplikacija. Android SDK se instalira preko Eclipse plugina i to na sljedei nain. U Eclipse menu
se klikne na Help -> Install New Sofware. Otvorit e se prozor Install u kojem se klikne na Add.
U Name se stavi proizvoljan naziv npr. ADT plugin te se kopira sljedea adresa u Locaton:
https://dl-ssl.google.com/android/eclipse/
Slika 81. Instalacija Android SDK plugina
Nakon toga se oznai Developer Tools, prihvaaju se licence, klikne se na Finish i eka se izvre-
nje instalacija. Nakon instalacije restartra se Eclipse i pokree se u Eclipse menu Window -> An-
droid SDK Manager. Ako se korist verzija Juno, prvo se dodaje AndroidSDK manager u izbornik
Window tako da se pokrene Window -> Customize Perspectve... te se oznai Android SDK and
AVD Manager nakon ega se manageri pokreu na prethodno navedeni nain.
U Android SDK alatu odreuje se za koje se platorme Androida eli razvijat. Trenutno se podr-
ava od verzije 1.5 (API 3), tj. Cupcake do verzije 4.2 (API 17), tj. Jelly Bean. Novije verzije Andro-
ida imaju vee i bolje mogunost i programer bira verziju platorme kojom eli razvijat aplikaci-
ju. Ovdje su trenutno dostupne sve verzije SDK-ova te Tools folder. Za SDK-ove se odabire samo
SDK platorm, a ako se ele razvijat aplikacije s Google mapama, oznauje se i Google APIs.
Ostalo je proizvoljno. Odabiru se i System Image datoteke za kreiranje i pokretanje emulatora.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
67
Slika 82. Android SDK Manager
Zatm se izrauje emulator u kojem e se testrat izraene aplikacije. Emulatori se ureuju kli-
kom na meni Window -> AVD Manager u kojem se bira New i postavljaju se sljedei parametri:
a) AVD Name - postavlja se naziv emulatora.
b) Devic AVD manager sadri ve gotove konfguracije ureaja. Moe se odabrat jedna
od ve postojeih konfguracija. Ne mora se postavljat ukoliko se eli napravit vlastta konfgu-
racija.
c) Target programer odabire za koju verziju Androida eli radit aplikaciju i koju mini-
malnu verziju eli podravat. Sve novije verzije Androida podravaju i starije verzije tako da je
najbolje postavit najnoviju verziju Androida.
d) CPU/ABI Android ureaji koriste razliite arhitekture procesora. Bira se arhitektura
koju e emulator koristt. Postoje razliite prednost i nedostatci ovakvog izbora. Npr. Intelova
arhitektura podrava GPU akceleraciju to znai da e emulator koristt grafku kartcu rauna-
la kako bi se ubrzao rad emulatora.
e) Memory Opton emulator za svoj rad korist RAM memoriju raunala. Postavlja se
koliko e RAM memorije emulator imat na raspolaganju. to je vie RAM memorije, bolje je za
emulator.
f) Internal Storage Android ureaji imaju odreenu koliinu unutarnje memorije u koju
se spremaju brojevi kontakata, aplikacije, razne datoteke i sl.
g) SD Card u neke se Android ureaje moe ubacit SD kartca s dodatnom memorijom
kako bi se poveao njegov kapacitet. Moe se odredit koliko e vanjske memorije emulator imat.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
68
Slika 83. Kreiranje Android emulatora
Kada se ispune svi potrebni element, klikne se na OK i emulator je spreman za koritenje.
5.2. Kreiranje Android projekta
Android projekt sadri sve potrebne datoteke koje obuhvaaju izvorni kod Android aplikacije.
Android SDK alat omoguavaju jednostavan nain kreiranja Android projekta sa skupom osnov-
nih direktorija i datoteka. Android projekt se kreira na sljedei nain: File -> New -> Other ->
Android -> Android Applicaton Project.
Slika 84. Kreiranje Android projekta
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
69
a) Applicaton Name naziv aplikacije koja e se prikazat korisnicima.
b) Project Name naziv projekta vidljivog u Eclipse IDE
c) Package Name namespace paket u kojem se nalaze Java klase (pravila su ista kao i u
Javi). Naziv paketa mora bit unikatan u cijelom Android sustavu. Postoje razne preporuke kako
imenovat paket.
d) Minimum Required SDK najmanja verzija Android OS-a na kojoj e se pokretat aplika-
cija. Ako je minimalna verzija 2.2., aplikaciju nee podravat ureaji s 2.1. OS-om
e) Target SDK ciljani Android OS za koji se eli razvijat aplikacija. Ako je ciljani SDK 4.1.,
aplikaciju nee podravat ureaji s 4.2. OS-om.
f) Compile With verzija operacijskog sustava za koji se aplikacija kompilira. Inae se
ostavlja ista kao Target SDK.
g) Theme odreuje se Android tema koja odreuje izgled odreenih komponent aplika-
cije.
Na sljedeem se prozoru ugasi opcija Create custom launcher. Ako je ova opcija upaljena, nudi
se izrada Launcher ikona. Launcher ikona je ikona koju korisnici vide na Home screenu Android
ureaja, tj. klikom na tu ikonu ulazi se u aplikaciju. Ona se moe i kasnije izradit.
Zatm se moe kreirat:
a) Blank Actvity
Blank Actvity je prazna aktvnost koja sadri samo osnovne komponente prozora. To je najee
Title bar traka na vrhu na kojoj pie naziv aplikacije ili sl.
b) Fullscreen Actvity
Fullscreen Actvity je takoer prazna aktvnost, ali su osnovne komponente skrivene. Dakle, ova
je aktvnost u potpunost prazna.
c) Master Detail Flow Actvity
Master Detail Flow Actvity je aktvnost koja se najee korist u tabletma. Zahtjeva da najma-
nja verzija OS-a bude 3.0. jer korist fragmente koji su podrani od te verzije. Sastoji se od liste
stavki s lijeve strane i detaljnog opisa stavki s desne strane.
Najbolje je odabrat Blank Actvity. Sljedei je korak odabir naziva aktvnost, naziv Java klase i
naziv layouta to je XML datoteka u kojoj se kreira UI, tj. izgled aktvnost. Tip se navigacije moe
ostavit na None.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
70
Slika 85.Arhitektura Android projekta
Android projekt sastoji se od vie datoteka i direktorija, a pojanjeni su sljedei:
a) AndroidManifest.xml
Manifest datoteka opisuje osnovne karakteristke aplikacije i defnira njene komponente. Jedan
je od najvanijih elemenata manifesta <uses-sdk> element kojim se deklarira kompatbilnost
aplikacije za razliite verzije Android operacijskog sustava. Kada se Android projekt kreira, oda-
bire se najmanja i najvia podrana verzija OS-a koja je zabiljeena ovim elementom:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
Primjer 48 Najmanja i najvia podrana verzija OS-a u manifestu
U manifestu se takoer moraju defnirat sve aktvnost koje aplikacija sadri.
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="android.gauss.androidtutorial.MainActivity"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Primjer 49. Defniranje aktvnost u manifestu
U Actvity se elementu pomou Name atributa defnira putanja do Actvity klase. Label atribu-
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
71
tom se oznaava string koji e se koristt kao naziv aktvnost, a prikazat e se u Title Baru. U
intent-flter elementu MainActvity aktvnost se oznaava kao Home aktvnost, tj. kao glavna
ulazna aktvnost aplikacije android.intent.acton.Main. Oznaava se i da e ova aktvnost bit pri-
kazana kao ikona na Android applicaton launcher ekranu android.intent.category.LAUNCHER.
b) src
U src se direktoriju nalaze glavne Java klase. Kreiraju se nove klase potrebne za razvoj razliith
komponent aplikacije.
c) res
U res se direktoriju nalaze razne dodatne komponente za razvoj aplikacije kao to su slike, XML
datoteke za defniranje UI-a, datoteke za defnirane nekih vrijednost, lokalizacija i sl.
d) drawable-hdpi
Predstavlja direktorij za slike koje su dizajnirane za ureaje s HDPI ekranima. Postoje i direktoriji
za vrste ekrana druge gustoe piksela (LDPI, MDPI, XHDPI).
e) Layout
Layout je direktorij za XML datoteke kojima defniramo UI.
f) Values
Values je direktorij za ostale XML datoteke koje sadre skup resursa kao to su string vrijednost,
defnicije boja i sl.
Kreiranjem projekta SDK je ve stvorio testnu Hello world! aplikaciju. Aplikacija se moe testrat
tako da se napravi desni klik na projekt -> Run As -> Android Applicaton. Nakon to se emulator
uitao, pokree se Android Tutorial aplikacija.
Slika 86. Hello World aplikacija
Nakon uspjeno prevedenog Android projekta, u gen se direktoriju moe nai R.java
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
72
klasa. Tu klasu generira sam kompajler, a slui za referenciranje svih resursa koji se ko-
riste u projektu. Android svakom resursu dodjeljuje identfkator pomou kojeg pristupa
resursu, a programer tm resursima pristupa R.java klasom. Kada se kreirao projekt,
kreirala se i XML layout datoteka. Ona se nalazi u resursima u direktoriju res->layout
kojemu je prevoenjem dodan identfkator u R.java klasu.
public static final class layout {
public static final int activity_main=0x7f030000;
}
Primjer 50. Identfkator actvity_main layouta
Rasursima se razliito pristupa u kodu to ovisi o tome gdje se nalaze:
a) R.layout.actvity_main pristupa se layout-u actvity_main koji se nalazi u direktoriju
layout
b) R.drawable.ic_launcher pristupa se slici ic_launcher koja se nalazi u direktoriju drawa-
ble
c) R.string.app_name pristupa se string varijabli koja se nalazi u direktoriju values u
datoteci strings.xml
d) R.id.helloText pristupa se elementu u XML layout datoteci.
Postoji jo nekolicina resursa koji se mogu i ne moraju koristt i svima se pristupa preko R.java
klase.
5.3. XML kao osnova Android korisnikog suelja (UI-a)
XML (engl. eXtensible Markup Language) se veoma esto korist kao format prikaza, strukture i
prenoenja podataka i upravo je zbog toga poznavanje strukture XML formata od iznimne va-
nost. XML je striktan dokument u kojemu svi element moraju bit pravilno otvoreni i zatvoreni.
Element podrazumijeva zapis koji poinje izmeu znaka manje od(<) i vee od(>). Izmeu se
nalazi naziv elementa, a zavrava s manje od + kosa crta (</) i vee od(>). Element izgleda ovako:
<krunica>Moja krunica</kruica>
Primjer 51. osnovni XML element
<krunica> se na engleskom jo naziva opening tag ili otvarajua oznaka, a </krunica> closing
tag ili zatvarajua oznaka. Razlika je u kosoj crt kada se element zatvara. U primjeru ispred
nalazi se element iji je naziv (engl. name) krunica, a vrijednost (engl. value) je Moja kruni-
ca. Vano je da svaki element bude otvoren, a na kraju zatvoren. Svaki element osim naziva i
vrijednost moe sadravat i atribute. Atribut su vrijednost koje se nalaze u otvorenom dijelu
elementa u stlu klju vrijednost. Npr.
<krunica polumjer = "10">Moja Krunica</krunica>
Primjer 52. XML atribut elementa
Dakle, atribut elementa krunica je polumjer, a njegova je vrijednost 10. Elementi mogu imati i vie od
jednog atributa. Ne postoji granica koja odreuje maksimalan broj atributa koji element moe imati.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
73
<krunica polumjer = "10" x = "5" y = "5">Moja Krunica</krunica>
Primjer 51. XML element podrava vei broja atributa
Ako element nema vrijednost, a ima npr. samo atribute, moe se odmah zatvorit tako da se
defnira slino kao i element zatvaranja, ali je kosa crta na kraju.
<krunica polumjer = "10" x = "5" y = "5" />
Primjer 53. XML element koji je istovremeno otvoren i zatvoren
Kao to je ve reeno, XML se korist za prikaz strukture podataka. Tako se moe prikazat struk-
tura kue i vlasnika na sljedei nain:
<kua>
<adresa>Kralja Zvonimira</adresa>
<kuni_broj>10</kuni_broj>
<vlasnik>
<ime>Pero</ime>
<prezime>Peri</prezime>
<dob>30</dob>
<spol>Muko</spol>
</vlasnik>
</kua>
Primjer 54. XML prikaz strukture podataka
Kua sadri nekoliko elemenata: adresu, kuni broj i vlasnik. Za vlasnika se takoer mogu defni-
rat i njegovi element, tj. ime, prezime, dob, spol. Moe se ii jo dublje u strukturu pa se tako za
vlasnika koji ima ivotnju defniraju element za ivotnju. Postoji uska poveznica i s objektma
u OOP. Ako postoji klasa Kua, ima varijable: adresa tpa String, kuniBroj tpa int, vlasnik tpa
Vlasnik. Tada bi se kreirala jo jedna klasa Vlasnik koja ima varijable: ime tpa String, prezime
tpa String, dob tpa int i spol tpa String.
Slika 87. Odnos strukture objekata i XML strukture
U defniranju se korisnikog suelja za Android ne koriste vrijednost elemenata nego samo atri-
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
74
but. Svaki View defnira svoja svojstva kroz atribute elementa. Npr. ako se eli u XML-u kreirat
gumb, kreira se element <Buton> kojemu se dodjeljuju svojstva kroz atribute na sljedei nain:
<Button
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />
Primjer 55. Buton View u Android XML-u
Atributom id gumbu se dodjeljuje jedinstveni identfkator kako bi se kasnije mogao programski
referencirat i manipulirat. Atribut layout_width i layout_height su atribut koji odreuju visinu
i irinu gumba. U ovom je sluaju postavljena vrijednost wrap_content to znai da e visina i
irina bit jednake veliini teksta unutar gumba, u ovom sluaju veliine teksta OK. Atributom
text postavlja se koji e tekst bit prikazan unutar gumba.
5.4. Android Actvity i UI XML
Android Actvity se moe zamislit kao prazno platno kojem programer daje izgled koji defnira
u XML layout datoteci. Vrlo se esto pojam Actvity izjednauje s pojmom Context. Context je,
kao to mu i sam naziv govori, kontekst trenutnog stanja aplikacije/objekta. Novokreiranim ob-
jektma omoguava razumjet to se zapravo dogaa. Osnovno je svojstvo konteksta da se moe
pozivat kada je potrebna informacija o nekom drugom dijelu programa (aktvnost, aplikacije).
Context je suelje za globalne informacije o okruenju aplikacije. Veoma esto kod programi-
ranja Android aplikacija neki objekt prilikom instanciranja zahtjevaju da se u konstruktor alje
Context. Zato je vano znat da je aktvnost Context.
Slika 88. Spajanje XML layouta u aktvnost
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
75
Kada se kreirao Android projekt, odabrana je Blank Actvity koja sadri Title Bar traku na vrhu
(traka u kojoj pie Android Tutorial). Ova traka nije direktni dio aktvnost i zbog toga se u layou-
tu defnira izgled za prazan dio aktvnost ispod Title Bara. Title Bar se moe maknut programski
ili u manifestu. Ako se Title Bar makne, layout se rairi po cijeloj aktivnosti. U manifestu se
dodijeli android: theme atribut s vrijednou:
@android:style/Theme.NoTitleBar
<activity
android:name="android.gauss.androidtutorial.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
Primjer 56. Micanje Title Bara u manifestu
Programski se Title Bar odstranjuje tako da se u onCreate() metodi napie sljedei kod:
requestWindowFeature(Window.FEATURE_NO_TITLE);
Slika 89. Micanje Title Bar programski
Layout defnira vizualnu strukturu korisnikog suelja kao to je UI za aktvnost. Layout se mogu
defnirat na dva naina: deklaracijom UI elemenata u XML-u ili instanciranjem layout eleme-
nata u kodu. Android prua mogunost kreiranja elemenata preko XML datoteke tako to se
pozivanjem elemenata u XML datoteci referencira na View i ViewGroup klase i podklase. Isto
tako, programer moe i u samoj aktvnost kreirat i slagat View i VewGroup objekte. Prednost
je deklariranja UI-a u XML-u to se poste razdvajanje koda od prezentacijskog dijela aplikacije.
Tako je UI neovisan o programskom kodu to znai da se svojstva elemenata mogu mijenjat
bez utjecaja na programski kod. Deklariranje UI elemenata strukturno vrlo blisko prat nazive
njihovih klasa i metoda: nazivi su elemenata vrlo slini nazivima klasa, a nazivi atributa nazivi-
ma metoda. Npr. Buton element u XML-u se odnosi na Buton klasu, a njegov atribut text na
metodu Buton.setText().
Kao to je ve reeno, UI aktvnost se defnira u layout XML datoteci. U takvoj se datoteci ko-
riste dvije vrste objekata: View i ViewGroup. ViewGroup u sebi moe sadravat vie Viewova i
ViewGroupa, a View ne moe sadravat nit jedan element. Dakle, ViewGroup je kontejner za
Viewove koji se u njemu hijerarhijski razliito slau to ovisi o tpu ViewGroupa.
ViewGroup je nadklasa sljedeih klasa [5]:
a) LinearLayout pozicionira elemente u jedan redak ili stupac ovisno o orijentaciji.
b) TableLayout pozicionira elemente u obliku tablice po redovima i stupcima.
c) FrameLayout uglavnom dodjeljuje pozicije jednom elementu. Ako sadri vie eleme-
nata, slau se jedan na drugi po zamiljenoj Z osi.
d) RelatveLayout vjerojatno najmoniji od svih ViewGroupova. Omoguava pozicioni-
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
76
ranje elemenata relatvno u odnosu na druge elemente i u odnosu na sam layout.
e) AbsoluteLayout element se pozicioniraju na specifcirane X i Y koordinate unutar
layouta. Koritenje se ovog layouta ne preporua jer nee bit ispravno prikazan na razliitm
veliinama ekrana i kod razliith orijentacija.
Viewovi su element koji se slau u ViewGroupu. Viewovi mogu bit: Buton, TextView, EditText,
ImageView, VideoView i sl. Za kreiranje se UI layouta ne preporua grafki editor jer najee
ne prikazuje dobro sadraj. Preporua se koritenje XML editora za slaganje elemenata. Slijedi
primjer layouta kao na slici iznad.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<TextView
android:id="@+id/textView1"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Top Left" />

<TextView
android:id="@+id/textView2"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Middle" />

<TextView
android:id="@+id/textView3"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bottom Right" />

</RelativeLayout>
Primjer 57. Defniranje XML layouta
Prvom TextViewu se dodjeljuje ID preko kojeg se u kodu moe dohvatt. S @+id/text-
View1 je reeno da u R.java klasu zapie ovaj ID kako bi se kasnije mogao koristt. Align-
ParentTop i AlignParentLef govore TextViewu da se smjest na vrh i lijevo u odnosu na
roditelja, tj. ViewGrupu u kojoj se nalazi, a u ovom sluaju RelatveLayout. Width i Height
su atribut koji odreuju irinu i duinu za ovaj TextView, tj. koliko e prostora zauzima-
t. Text oznaava koji e tekst bit prikazan. Moe se uoit da se editor buni kod napisanog
teksta. Razlog tomu je to bi svi stringovi trebali bit zapisani u posebnu datoteku i refer-
encirani u atributu text. Dakle, treba otvorit datoteku strings.xml i upisat sljedei kod:
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
77
<?xml version="1.0" encoding="utf-8"?>
<resources>

<string name="top_left">Top Left</string>
<string name="middle">Middle</string>
<string name="bottom_right">Bottom Right</string>

</resources>
Primjer 58 Defniranje string resursa u string.xml datoteci
Nakon toga se u text atributu taj string referencira na sljedei nain:
<TextView
android:id="@+id/textView2"
android:layout_centerInParent="true"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/middle" />
Primjer 59. Referenciranje string resursa u TextViewu
Najee se provodi na ovakav nain zbog lokalizacije.
ZADATAK 18

Kreiraj aktivnost i dodijeli joj XML layout datoteku kao na slici:

RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
78
5.5. Pokretanje aktvnost (engl. Intent)
Android aplikacije najee imaju vei broj ekrana zbog aktvnost koje prikazuju razliite stavke.
To zahtjeva pozivanje razliith aktvnost kojima se alju odreeni podatci koji se ele prikazat.
Zbog toga se postavlja EditText u koji se upisuje neka vrijednost i Buton kojim se poziva druga
aktvnost. Vrijednost koja je upisana u EditTextu alje se u aktivnost. Dakle, potrebno je promi-
jenit main_actvity.xml.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity" >

<EditText
android:id="@+id/myEditText"
android:layout_width="100dp"
android:layout_height="wrap_content"
android:textSize="20sp"/>

<Button
android:id="@+id/buttonOk"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/myEditText"
android:text="@string/button_ok"/>

</RelativeLayout>
Primjer 60. XMl layout datoteka s Butonom
Izgled Actvity klase:
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
79
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

//Dohvaa se referenca na element EditText kojega smo postavili u layout
XMLu sa ID-em R.id.myEditText
final EditText editText = (EditText)findViewById(R.id.myEditText);

//Dohvaa se referenca na element Button kojega smo postavili u layout
XMLu sa ID-em R.id.buttonOk
Button button = (Button) findViewById(R.id.buttonOk);

//Registrira se onClick listener na button. Listener "slua" kada
//korisnik klikne na button i u tom sluaju
//pokree metodu OnClick(View v)
button.setOnClickListener(new OnClickListener() {

//Metoda koje se pokree kada korisnik klikne na button
@Override
public void onClick(View v) {

//Iz EditTexta dohvaamo upisanu vrijednost
String myValue = editText.getText().toString();

Intent intent = new Intent(MainActivity.this,
SecondActivity.class);
//U intent objekt se stavlja vrijednost dohvaena iz
//EditText-a i postavlja joj se
//identifikator "editTextValue" kako bi se preko tog
//identifikatora kasnije mogla dohvatiti ta vrijednost
intent.putExtra("editTextValue", myValue);
startActivity(intent);
}
});
}

}
Primjer 61. Pokretanje aktvnost pomoi Intent objekta
View se uz pomo metode fndViewById(R.id.my_edit_text) dohvat u layout XML-u s ID-em
my_edit_text. Ova metoda vraa objekt tpa View i casta ga u tp EditText. String se sprema
u myValue varijablu koja se nalazi u EditTextu, tj. predstavlja vrijednost koju korisnik upie u
EditText. Kao to se dohvaa EditText, dohvaa se i buton iz XML-a. Njemu se postavlja OnClic-
kListener. OnClickListener je interface koji slua, tj. eka klik na buton. Kada se klikne na buton,
pokree se metoda onClick(View v). U toj je metodi kreiran Intent objekt koji se moe prevest
kao namjera. Predstavlja klasu kojom programer izvrava neku namjeru, a koja je u ovom slu-
aju pokretanje nove aktvnost. Intent se moe zamislit kao ljepilo izmeu dviju aktvnost. U
konstruktor Intent klase alje se prvo Context, a zatm i naziv Actvity klase koja se eli pokrenut.
U Intent je postavljena i vrijednost koja se alje u sljedeu aktvnost metodom putExtra. Pomou
startActvity(intent) pokree se druga aktvnost.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
80
Sljedei je korak kreiranje klase za drugu aktvnost, tj. SecondActvity. Prvo se mora kreirat XML
layout datoteka.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/textView"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textSize="20sp"/>

</LinearLayout>
Primjer 62. XML layout datoteka druge aktvnost
Nakon toga se kreira aktvnost SecondActvity.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class SecondActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_second);

//Kada se iz prole aktivnosti poslao objekt intent, ovdje ga se
//dohvaa i iz njega izvlai string preko identifikatora
final String myValue=getIntent().getStringExtra("editTextValue");

//Iz layout XML-a se dohvaa TextView i kao vrijednost mu se //postavlja
string iz intenta
TextView textView=(TextView) findViewById(R.id.textView);
textView.setText(myValue);
}
}
Primjer 63. Aktvnost koja se pokree pomou Intent objekta
Nova se aktvnost mora registrirat u manifestu jer inae aplikacija nee radit, tj. javljat e gre-
ku da ne moe nai aktvnost.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
81
<application
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
...
<activity
android:name="android.gauss.androidtutorial.SecondActivity"
android:theme="@android:style/Theme.NoTitleBar">
</activity>
</application>
Primjer 64 Defniranje aktvnost u manifestu
Nakon svih se koraka aplikacija pokree i trebao bi se dobit sljedei rezultat:
Slika 89. Pokretanje aktvnost u emulatoru
Klikom na OK gumb trebala bi se pokrenut druga aktvnost u kojoj pie vrijednost koja
je napisana u prvoj aktvnost u EditTextu.
5.6. ivotni ciklus Android aktvnost [14]
Od pokretanja, rada s aplikacijom pa sve do izlaska instance aktvnost u aplikaciji prelaze u
razliita stanja svog ivotnog ciklusa. Npr. kada se aktvnost pokree prvi put, dolazi u prednji
plan sustava i dobiva fokus. Kroz taj proces Android sustav poziva niz metoda ivotnog ciklusa
aktvnost. Ako korisnik pokree akciju koja zapoinje neku drugu aktvnost ili pokree neku
drugu aplikaciju, sustav opet poziva niz metoda u aktvnost dok ju stavlja u pozadinu. Ponaanje
se aktvnost unutar th metoda ivotnog ciklusa moe odredit kada korisnik ulazi i izlazi iz ak-
tvnost. Npr. ako se izvodi streaming nekog videa, pauzira se streaming ako korisnik izlazi iz
aplikacije. Kada se korisnik vrat u aplikaciju, klikom na Play nastavlja streaming video na onom
mjestu gdje je stao.
Temeljne programske paradigme pokreu aplikacije iz neke main aktvnost, a Android pokree
kod u Actvity instanci pokretanjem odreene callback metode koja odgovara stanjima ivotnog
ciklusa aktvnost.
Postoji slijed callback metoda koje se izvode kada se aktvnost pokree i slijed callback metoda
kada se aktvnost zaustavlja. Tijekom ivota aktvnost sustav poziva metode njenog ivotnog
ciklusa u obliku piramide i korak po korak se kree po stanjima ivotnog ciklusa. Dakle, svako je
stanje ivotnog ciklusa sljedei korak u toj piramidi. Vrh piramide je stanje aktvnost u kojem
je aktvnost prikazana na ekranu, a korisnik je u interakciji s aktvnou. Kako korisnik izlazi iz
aktvnost, sustav poziva drugi niz metoda, tj. kree se niz piramidu kako bi se rastavio i pravilno
iziao iz aktvnost. U nekim se sluajevima stanje aktvnost u izlazu nee obavit do kraja, tj. stat
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
82
e na nekom odreenom stanju (npr. kada korisnik pokrene drugu aktvnost). S tog se stanja ak-
tvnost kasnije moe vratt na stanje u vrhu piramide i nastavit rad tamo gdje je zadnji put stala.
Slika 90. ivotni ciklus aktvnost [15]
Nije potrebno implementrat sva stanja ivotnog ciklusa. Meutm, potrebno je razumjet svaki
od njih i implementrat ih tako da se aplikacija ponaa onako kako korisnik to oekuje. Pravilna
implementacija metoda ivotnog ciklusa aktvnost osigurava da se aplikacija pravilno ponaa i
da:
se aplikacija ne rui ako korisnik primi poziv ili pokrene neku drugu aplikaciju
aplikacija ne korist dragocjene sistemske resurse ako je korisnik ne korist aktvno
se ne izgubi stanje aplikacije ako korisnik izae iz nje i kasnije se vrat
se aplikacija ne srui ili izgubi stanje prilikom tranzicije ekrana iz Portrait i Landscape
Od est moguih stanja, samo su tri stanja statna, tj. aplikacija moe ivjet samo u tri stanja:
a) Resumed
U ovom je stanju aktvnost vidljiva na ekranu i korisnik moe bit u interakciji s njom. U ovom je
stanju aktvnost najee.
b) Paused
U ovom je stanju aktvnost pomraena, djelomino vidljiva zbog druge aktvnost. Kada npr.
neka druga aktvnost ne prikriva cijeli ekran, prva se aktvnost samo djelomino vidi. Pauzirana
aktvnost ne moe prihvatt unos korisnika ili pokretat neki kod.
c) Stopped
U ovom je stanju aktvnost u potpunost skrivena iza neke druge aktvnost i nije vidljiva kori-
sniku. Smatra se da je aktvnost u pozadini. Instanca aktvnost i njeno stanje (npr. varijable) su
ouvani, ali se ne moe izvravat nikakav kod.
Druga stanja (Created i Started) su stanja tranzicije u kojima se aktvnost ne zadrava, nego se
brzo kree iz jednog stanja u sljedee pozivanjem sljedee callback metode. Kada sustav pozove
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
83
onCreate() metodu, ubrzo nakon toga poziva i onStart() metodu koja zatm brzo poziva onResu-
me() metodu. Da bi se vidio redoslijed pokretanja th metoda stanja, moe se napravit primjer
u kojem e se u svakoj od th metoda ispisivat neto u Log.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class MainActivity extends Activity {

private static final String TAG = MainActivity.class.getName();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Log.d(TAG, "POKRENUT CREATE");
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "POKRENUT START");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "POKRENUT RESUME");
}
@Override
protected void onPause() {
super.onPause();
Log.d(TAG, "POKRENUT PAUSE");
}
@Override
protected void onStop() {
super.onStop();
Log.d(TAG, "POKRENUT STOP");
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.d(TAG, "POKRENUT DESTROY");
}
}
Primjer 65. Ispis stanja ivotnog ciklusa aktvnost u Log
Ispis se moe vidjet u alatu LogCat koji se skida zajedno s Android SDK. Ako nije prika-
zan u Eclipseu, moe se nai u Window -> ShowView -> LogCat.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
84
Slika 91. Android Log s prikazom ispisanih vrijednost u svakom stanju ivotnog ciklusa
Crvenim su pravokutnicima oznaene poruke koje su postavljene u aktvnost da se ispiu.
Pokretanjem aktvnost pokrenule su se metode: onCreate(), onStart() i onResume() Ako koris-
nik stsne gumb Back nakon to se prikazao ekran, pokrenut e se sljedee metode: onPause(),
onStop() i onDestroy(). Kada se aplikacija normalno korist, aktvnost mogu preprijeit neke
druge vizualne komponente koje uzrokuju odlazak aktvnost u Pause stanje. Npr. ako se otvori
neka polutransparentna aktvnost u obliku nekog Dialog prozora, aktvnost se pauzira. Kada
aktvnost jednom postane potpuno nevidljiva, prelazi u stanje Stop. Kada aktvnost ue u Pause
stanje, sustav poziva onPause() metodu aktvnost kako bi programer mogao zaustavit neke
akcije koje traju kao to su: izvoenje video sadraja ili spremanje onih informacije koje e
kasnije bit potrebne ukoliko korisnik nastavi izlazak iz aplikacije. Ako se korisnik vrat iz pauzi-
rane aktvnost, sustav poziva onResume() metodu. Ako aktvnost ode u Pause stanje, aktvnost
e se na trenutak zaustavit i korisnik e nastavit svoj rad ili u potpunost izai iz aplikacije. U
onPause() treba izbjegavat one radnje koje zahtjevaju puno procesiranja jer usporavaju tran-
ziciju aktvnost iz jednog stanja u drugo. Takve se radnje obavljaju u onStop() metodi. Kada se
aktvnost pauzira, Actvity instanca je u memoriji i poziva se kada aktvnost prelazi u Resume
stanje. Nije potrebno ponovno inicijalizirat komponente koje su kreirane za vrijeme bilo kojih
od callback metoda prije Resume stanja.
Pravilno je zaustavljanje i ponovno pokretanje aktvnost vaan proces u ivotnom ciklusu ak-
tvnost jer stvara kod korisnika osjeaj da je aplikacija iva i da ne gubi svoje stanje. Postoji par
kljunih scenarija kada se aktvnost zaustavlja i ponovno pokree:
a) Korisnik otvara ekran Recent Apps (dugim pritskom na Home tpku) i prebacuje se s
trenutne aplikacije na drugu. Prva aktvnost prelazi u Stop stanje. Kada se korisnik vraa u apli-
kaciju kroz Android Home Screen ili Recent Apps ekran, aktvnost se ponovno pokree.
b) Korisnik pravi akciju u aplikaciji koja pokree novu aktvnost. Prva aktvnost se zaustav-
lja i prelazi u Stop stanje. Ako korisnik klikne Back tpku i vraa se u prvu aktvnost, ta se aktv-
nost ponovno pokree.
c) Korisnik prima poziv kad korist aplikaciju.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
85
Actvity klasa osigurava dvije metode ivotnog ciklusa: onStop() i onRestart(). One omoguuju
specifno rukovanje aktvnost kada se zaustavlja i ponovno pokree. Pause stanje se pokree
kada je aktvnost djelomino vidljiva, a Stop stanje osigurava da UI nije vidljiv i da je korisnikov
fokus u drugoj aktvnost ili aplikaciji.
Trenutno jo nije opisana onDestroy() metoda. Ova se metoda poziva u par sluajeva. Kada je ko-
risnik u aktvnost i klikne na Back tpku, poziva se onDestroy() metoda nakon onStop() metode.
Sustav moe i sam pozvat ovu metodu ako je aktvnost u stanju Stop, ako se nije dugo koristla
ili ako trenutna aktvnost zahtjeva puno memorije. Ovom se metodom oslobaa memorija i
resursi za neke druge stvari. Ako se aktvnost unit pritskom na tpku Back, sistemski je koncept
Actvity instance zauvijek nestao jer aktvnost smatra da vie nije potrebna. Meutm, ako se
aktvnost unit zbog sistemskih ogranienja, aktvnost nije samo nestala, ve i sustav pamt da
je aktvnost unitena. Ako se korisnik vrat na tu aktvnost, sustav ju ponovno kreira koritenjem
skupa spremljenih podataka koji opisuju stanje aktvnost prije njenog unitenja. Spremljeni
se podatci, koje sustav korist za ponovno kreiranje aktvnost, nazivaju instance state. ine
kolekciju klju vrijednost parova koji su spremljeni u Bundle objekt. Sustav korist Bundle
instancu kako bi spremio informacije svakog View objekta u layoutu aktvnost (npr. tekst na-
pisan u EditTextu). Dakle, ako se instanca unit i ponovno kreira, stanje se layouta obnavlja bez
potrebnog dodatnog koda. U takvom se sluaju pozivaju jo dvije dodatne metode: onSaveIn-
stanceState() i onRestoreInstanceState().
Kako bi se spremili dodatni podatci o stanju aktvnost, potrebna je overrideat onSaveInstan-
ceState() callback metoda. Sustav poziva ovu metodu kada korisnik izlazi iz aktvnost. alje
aktvnost Bundle objekt koji se sprema kada se poziva onDestroy(). Ako kasnije sustav mora
ponovno kreirat instancu aktvnost, alje Bundle objekt u onCreate() i u onRestoreInstanceS-
tate() metode.
Slika 92.Spremanje i ponovno kreiranje stanja aktvnost [16]
5.7. Podravanje razliith ureaja [11]
Uvijek je dobro izdvajat UI stringove iz aplikacijskog koda i drat ih u eksternoj datoteci. U An-
droidu je to lako jer postoji direktorij za resurse u svakom Android projektu. Kreiranjem Android
projekta, alat kreira i res/ direktorij. Unutar tog direktorija su: direktoriji za dranje razliith
vrsta resursa i res/values/strings.xml datoteka koja sadrava string resurse.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
86
Ako se eli podrat vie jezika, kreiraju se dodatni values/ direktoriji unutar res/ direktorija u
kojima e biti datoteke za dranje resursa. Direktoriji se oznaavaju imenovanjem s values- , a
nakon okomite crte dodaje se ISO kod za oznaavanje drave. Npr. values-es/ e bit direktorij
za dranje resursa za panjolski jezik. Android automatski uitava resurse iz direktorija ovisno o
postavljenom jeziku ureaja. Dakle, ako je u glavnim postavkama ureaja postavljen panjolski
jezik, sustav e automatski uitavat resurse iz values-es/ direktorija. Ukoliko je u postavkama
postavljen panjolski jezik, a ne postoji values-es/ direktorij s resursima, automatski se uitavaju
resursi iz values/ direktorija.
Slika 93. Direktoriji i datoteke za lokalizaciju
Slijede primjeri razliith resursa stringova za razliite jezike.
Za engleski jezik:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">My Application</string>
<string name="hello_world">Hello World!</string>
</resources>
Primjer 66. Primjer lokalizacije za engleski jezik
Za panjolski jezik:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mi Aplicacin</string>
<string name="hello_world">Hola Mundo!</string>
</resources>
Primjer 67. Primjer lokalizacije za panjolski jezik
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
87
Za francuski jezik:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="title">Mon Application</string>
<string name="hello_world">Bonjour le monde !</string>
</resources>
Primjer 68. Primjer lokalizacije za francuski jezik
String resursi se mogu referencirat u kodu i XML datotekama koritenjem naziva u atri-
butu name koji je defniran u elementu <string>. U kodu se string referencira sa sljede-
om sintaksom:
R.string.<naziv_stringa>
U XML datotekama string se referencira sljedeom sintaksom:
@string/<naziv_stringa>
Android kategorizira veliine ekrana dvama osnovnim svojstvima: veliina i gustoa [7]. Pro-
gramer mora imat u vidu da e njegova aplikacija bit pokrenuta na ekranima razliith veliina
i gustoa. Stoga bi trebao ukljuit alternatvne resurse kako bi optmizirao izgled aplikacije na
razliitm ekranima:
postoje 4 ope veliine: small, normal, large, xlarge
postoje 4 ope gustoe: low (ldpi), medium (mdpi), high (hdpi) i extra high (xhdpi)
Kako bi deklarirao razliite layoute i slike za koritenje na razliitim ekranima, postavljaju se
alternativni resursi u razliite direktorije, slino kao i kod lokalizacije. Orijentacija se ekrana (por-
trait i landscape) interpretra kao razliita veliina ekrana i aplikacije bi trebale revidirat layout
kako bi bile optmizirane u svakoj orijentaciji. Za ovakvu je optmizaciju nuno kreirat jedinst-
veni layout XML za svaku veliinu ekrana koju bi aplikacija trebala podravat. Svaki bi layout tre-
bao bit spremljen u odgovarajui direktorij za resurse imenovan s -<veliina_ekrana> sufksom.
Npr. jedinstveni layout za velike ekrane trebao bi bit spremljen unutar res/layout-large/. Nazivi
datoteka moraju bit identni, ali sadraj moe bit razliit kako bi bio optmiziran za razliite
ekrane. Layout se referencira na sljedei nain:
R.layout.<naziv_layouta>
Layout se postavlja u onCreate() metodu pomou metode setContentView(int layouResID). An-
droid automatski skalira layout kako bi pravilno stao na ekran. Zbog toga se layout za razliite
ekrane ne moraju brinut o apsolutnim veliinama UI elemenata, nego se moraju fokusirat na
strukturu elemenata. Sustav uitava layout fle iz odgovarajueg direktorija na temelju veliine
ekrana ureaja na kojoj se vrt aplikacija. Trebaju se ponudit i razliite slike koje su pravilno ska-
lirane za svaki osnovni tp gustoe ekrana. Na taj se nain poste vrlo dobra grafka kvaliteta i
poveanje performansi na svim gustoama. Gustoe ekrana su u sljedeim odnosima:
a) xhdpi: 2.0
b) hdpi: 1.5
c) mdpi: 1.0 (osnovno)
d) ldpi: 0.75
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
88
Prema tome, ako postoji slika veliine 200x200 za xhdpi ureaje, izrauje se ista ta slika 150x150
za hdpi, 100x100 za mdpi i 75x75 za ldpi.
Slika 94. Direktoriji za slike za ureaje razliith gustoa ekrana
Svaki put kada se referencira slika u Android sustav, isto kao i kod razliith veliina ekrana, odre-
uje se i koje e slike uitat to ovisi o gustoi ekrana samog ureaja.
5.8. Fragment
Android UI se gradi do skupa View i VewGroupa, a takva se hijerarhija Viewova uitava iz resursa
nakon pokretanja aktvnost. Aktvnost se inicijalizira i prikazuje na ekranu ureaja. Za manje je
ekrane ovakvo ponaanje prihvatljivo. Korisnik se kree iz jedne aktvnost u drugu, podravan
je brz i intuitvni prelazak izmeu aktvnost. No, ako je UI rairen na nekom veem ekranu (npr.
ekranu tableta), neki e dijelovi ekrana ostat statni i nee se uope mijenjat. Dakle, veliki e
dio ekrana ostat neiskoriten, a kretanje iz aktvnost u aktvnost nema nekog smisla. Imple-
mentacija je UI-a u potpunost podrana i u njoj se dijelovi ekrana izmjenjuju jednostavnim
sakrivanjem i prikazivanjem elemenata ekrana, tj. Viewova. Trebalo bi mijenjat onoliko Viewova
koliko ih ima na ekranu, ali to nema smisla. Kako bi se omoguila interakcija u kojoj bi se dijelovi
ekrana dinamiki izmjenjivali bez pokretanja novih aktvnost, u Android OS uvedena je Frag-
ment klasa. Fragment su podrani od verzije 3.0 (API 11, Honeycomb). Fragment se opisuje kao
neto izmeu Viewa i aktvnost. Kao i View, moe bit dodan u ViewGroup ili bit dio layouta.
Nije podklasa od Viewa, ali moe bit dodan u ViewGroup koritenjem FragmentTransacton ob-
jekta. Kao i aktvnost, fragment ima svoj ivotni ciklus, ali za razliku od aktvnost, fragment nije
Context i njegov je ivotni ciklus ovisan o aktvnost u kojoj se nalazi. Kao i svaki View, moe se
dodat u layout XML ili programski.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
89
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="horizontal" >

<fragment
android:id="@+id/firstFragment"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
class="android.gauss.androidtutorial.FirstFragment" />

</LinearLayout>
Primjer 69. Defniranje fragmenta u layout XMLu
Ovaj layout korist aktvnost normalno kao i svaki drugi. Layout korist <fragment> ele-
ment u ijem se class atributu defnira putanja do klase koja e predstavljat fragment.
Dakle, na ovoj se putanji mora kreirat klasa koja e bit podklasa Fragment klase. An-
droid Framework automatski kreira instancu tog fragmenta kada se layout uita. Kao
i Actvity, i fragment moe uitat svoj layout i za svaki se fragment defnira poseban
layout.
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/first_fragment"/>

</LinearLayout>
Primjer 70. Defniranje XML layout datoteke za fragment
Nakon toga se kreira fragment klasa koja uita svoj layout i korist elemente isto kao i aktvnost.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
90
package android.gauss.androidtutorial;

import android.app.Fragment;
import android.os.Bundle;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;

public class FirstFragment extends Fragment{

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle
savedInstanceState) {

return inflater.inflate(R.layout.fragment_first, container, false);
}
}
Primjer 71. Kreiranje FirstFragment klase
Layout se u fragmentu postavlja u metodi onCreateView(), a u aktvnost u metodi onCreate().
Iako fragment ima svoj ivotni ciklus, nije identan ivotnom ciklusu aktvnost. Fragment imaju
dodatne metode ivotnog ciklusa kao to je i onCreateView(). Ova se metoda poziva kada se
inicijalizira layout fragment, a onCreate() kada se inicijalizira sam fragment. Slijedi primjer aktv-
nost s dva fragmenta koji su jedan ispod drugog.
U layoutu aktvnost ubaen je jo jedan fragment i svakom je elementu postavljen
atribut weight = 1 kako bi oba fragmenta dijelila ekran na pola. Postavljena je i orijent-
acija LinearLayouta kao vertcal, a height atribut je postavljen na 0dp zbog defniranog
atributa weight. Drugi fragment je kreiran isto kao i prvi i uitan je njegov layout.
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<fragment
android:id="@+id/firstFragment"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
class="android.gauss.androidtutorial.FirstFragment" />

<fragment
android:id="@+id/secondFragment"
android:layout_width="fill_parent"
android:layout_height="0dp"
android:layout_weight="1"
class="android.gauss.androidtutorial.SecondFragment" />

</LinearLayout>
Primjer 72. Defniranje dva fragmenta u layout aktvnost
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
91
Fragmentma su postavljeni sljedei layout:
a) za prvi fragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/red"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/first_fragment"/>

</LinearLayout>
Primjer 73. XML layout prvog fragmenta
b) za drugi fragment:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/blue"
android:orientation="vertical" >

<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/second_fragment"/>

</LinearLayout>
Primjer 74. XML layout drugog fragmenta
Dobiva se sljedei rezultat:
Slika 95. Aktvnost koja sadri dva fragmenta
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
92
ZADATAK 19
Kreiraj aktivnost koja dijeli ekran na 3 fragmenta kao na slici:

5.9. Asinkroni pozivi
AsyncTask klasa u Androidu omoguava pokretanje vie operacija istovremeno bez runog stva-
ranja posebnih dretvi. S asinkronim je pozivima mogue kreirat posebnu dretvu na kojoj e se
obavit neka dugotrajna radnja ili radnja koja zahtjeva puno procesorske obrade. Nakon toga
se rezultat vraa u glavnu dretvu. Na taj se nain poste ii programski model asinkronog
pozivanja.
Dretva (negdje se naziva i nit procesa) je dio procesa koji izvrava neku radnju. Dretve se odvi-
jaju istovremeno u procesu. Skup se dretvi naziva proces. Android aplikacija sadri nekolicinu
dretvi koje se mogu vidjet u DDMS (engl. Dalivk Debug Monitor Server) pogledu. Ako se s lijeve
strane oznai paket aplikacije i u alatma iznad klikne na debug, s desne e se strane otvorit
debug prozor i moi e se vidjet popis dretvi u trenutnoj aplikaciji.
Slika 96. Dretve jedne Android aplikacije
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
93
Trenutno aplikacija sadri tri Deamon dretve i tri dretve aplikacije. Deamon dretve nisu
dio aplikacije i neovisne su o JVM. Deamon dretve ne ograniavaju JVM u izlaenju, tj.
prisutne su i onda kada se JVM ugasi. Deamon dretva je npr. Garbage Collector.
Od ostale se tri dretve koje su dretve aplikacije, izdvajaju dvije Binder dretve. Binder
dretve je postavio sustav, a koriste se samo ako treba doi do komunikacije izmeu pro-
cesa tzv. IPC (engl. Inter-Process Communicaton).
Dretva na koju treba obratt pozornost je:
Thread[<1> main] (Running)
Zasluna je za izvoenje i odravanje aplikacije. Ako bi ova dretva zastala ili bila neaktv-
na neko vrijeme, aplikacija ne bi reagirala na korisnikove interakcije. Ako Android sustav
primijet da aplikacija ne reagira na korisnikove interakcije, rui aplikaciju jer smatra da
nije valjana. Na taj nain oslobaa memoriju. Sustav smatra da je aplikacija neaktvna,
tj. da je zaglavila ukoliko se u roku od pet sekundi glavna dretva ne vrat na odravanje
aplikacije. Upravo se iz tog razlog uvode asinkroni pozivi. Ako glavna dretva skida neki
sadraj s Interneta, mora napustt svoj zadatak odravanja aplikacije i poet se spajat
na internetsku stranicu, skidat sadraj, spremat sadraj u datoteku, parsirat sadraj i
sl. Za to bi vrijeme sustav primijeto da je aplikacija neaktvna i sruio bi aplikaciju. Kako
bi se to izbjeglo, uvode se asinkroni pozivi, tj. korist se AsyncTask klasa. AsyncTask klasa
je naslijeena i potrebno je napravit svoju klasu koja e radit neku dugotrajnu radnju.
package android.gauss.androidtutorial;
import android.os.AsyncTask;

public class MyAsyncTask extends AsyncTask<Void, Void, Void>{

@Override
protected void onPreExecute() {
// TODO Auto-generated method stub.
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
// TODO Auto-generated method stub.
return null;
}
@Override
protected void onPostExecute(Void result) {
// TODO Auto-generated method stub.
super.onPostExecute(result);
}
}
Primjer 75. Kreiranje MyAsyncTask klase
Na naslijeenu se AsyncTask klasu obavezno mora implementrat doInBackground() metoda,
a ostale su metode proizvoljne. U onPreExecute() metodi se npr. moe prikazat dijalog koji e
oznaavat proces skidanja sadraja ili sl. U doInBackground() je potrebno napravit svu potreb-
nu dugotrajnu aktvnost (spajanje na internetsku stranicu, skidanje njenog sadraja, parsiranje i
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
94
sl). Metoda onPostExecute() je metoda koja se izvodi na glavnoj dretvi, tj. AsyncTask predaje sav
sadraj glavnoj dretvi i tada se npr. moe prikazat u aktvnost sadraj koji je skinut s Interneta.
Postavlja se pitanje zato se onPostExecute() metoda izvodi na glavnoj dretvi, a ne u asinkronoj
dretvi? Razlog je to se sve izmjene na ekranu (izmjene na UI) moraju obavljat na glavnoj dretvi.
Ako se nalazimo u dretvi koja nije glavna, tj. koja nije main dretva, nekom se TextViewu ne moe
dodijelit vrijednost. Na glavnoj dretvi programer moe postavit sve potrebne promjene na UI.
esto se AsyncTask korist kao unutarnja klasa u Actvity klasi kako bi se odmah imao pristup
layoutu i svim varijablama unutar aktvnost.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;

public class MainActivity extends Activity {

private static final String TAG = MainActivity.class.getName();

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

MyAsyncTask myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
}
private class MyAsyncTask extends AsyncTask<Void, Void, Void>{

@Override
protected void onPreExecute() {
//Kod koji se izvrava prije doInBackground()
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
//Kod koji e se vrtiti u pozadini
return null;
}
@Override
protected void onPostExecute(Void result) {
//Kod koji se izvrava poslije doInBackground()
//Ovdje se mogu raditi izmjene na UI elementima
super.onPostExecute(result);
}
}
}
Primjer 76 Ugnijeena MyAsyncTask klasa
AsyncTask se pokree tako da se kreira objekt na koji se pozove metoda execute(). Ako
prilikom koritenja asinkronih poziva metoda odlazi u onStop() stanje, zaustavlja se pro-
cesiranje. Ako se aktvnost prekine zato to korisnik izlazi iz aplikacije jer ju ne eli koris-
tt, zaustavljaju se asinkroni pozivi kako se ne bi odvijala pozadinska radnja.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
95
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.AsyncTask;
import android.os.Bundle;

public class MainActivity extends Activity {

MyAsyncTask myAsyncTask;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

myAsyncTask = new MyAsyncTask();
myAsyncTask.execute();
}
@Override
protected void onStop() {
super.onStop();

if(myAsyncTask != null){
myAsyncTask.cancel(true);
}
}
private static class MyAsyncTask extends AsyncTask<Void, Void, Void>{

@Override
protected void onPreExecute() {
//Kod koji se izvrava prije doInBackground()
super.onPreExecute();
}
@Override
protected Void doInBackground(Void... params) {
//Kod koji e se vrtiti u pozadini
return null;
}
@Override
protected void onPostExecute(Void result) {
//Kod koji se izvrava poslije doInBackground()
//Ovdje se mogu raditi izmjene na UI elementima
super.onPostExecute(result);
}
}
}
Primjer 77. Pokretanje asinkronog poziva
5.10. Preference Actvity
Preference su korisnike postavke aplikacije. PreferenceActvity se obino sastoji od konfgura-
cijskih podataka i UI preko kojih korisnik manipulira konfguracijskim podatcima. S gledita kori-
snikog suelja, preference mogu bit jednostavne tekstualne vrijednost, check-boxovi, selekci-
je s padajueg izbornika i sl. S gledita podataka, preference su skup klju-vrijednost parova. Te
su vrijednost jednostavni tpovi podataka kao integer, boolean, string.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
96
Kako bi aplikacija rukovala s korisnikim postavkama, izrauje se aktvnost u koju e se unosit
informacije, tj. Java kod koji e provjerit i procesirat informacije i nekakav mehanizam za spre-
manje th informacija. Ako bi se obavljalo runo, bilo bi to puno posla. Upravo zbog toga An-
droid prua gotov framework koji pomae pri izradi korisnikih postavki. Prvo se defnira izgled
preferenci u XML datoteci. Za kreiranje je korisnikih postavki potrebno sljedee:
a) kreiranje Preference resurs datoteke naziva prefs.xml.
b) impementacija PrefsActvity.java datoteke koja korist prefs.xml kao UI
c) registriranje Preference Actvity u manifestu
d) pruanje mogunost ulaska u aktvnost kroz aplikaciju
XML datoteke za preference spremaju se u XML direktorij koji se kreira unutar glavnog direk-
torija aplikacije. Unutar direktorija kreira se XML datoteka desnim klikom -> New-> Other ->
Android XML File. Otvara se prozor u kojem se u Resource Type padajuem izborniku odabire
Preference, a u Root Element Preference Screen i klikne se na fnish. Sve se to moe i runo na-
pisat. Eclipse e kreirat novu datoteku koju je najbolje otvorit u XML pogledu. Sada se mogu
dodavat element koji e predstavljat korisnike postavke. U elementma koji se rade, nemaju
svi atribut istu vanost . Najvaniji su sljedei atribut:
a) Key
Jedinstveni je identfkator za svaku preference stavku. Pomou njega se kasnije dohvaa spre-
mljena postavka.
b) Title
Predstavlja naziv postavke koji e korisnik vidjet. Trebao bi bit kratki naziv koji stane u jednu
liniju ekrana.
c) Summary
Kratki je opis postavke. Iako je koritenje ovog atributa stvar izbora, preporua se.
Preference Actvity s jednostavnim UI koji ima jedan EditTextPreference u koji se unosi neka
string vrijednost i jedan CheckBoxPreference koji oznauje da je neto true ili false:
<?xml version="1.0" encoding="utf-8"?>
<PreferenceScreen xmlns:android="http://schemas.android.com/apk/res/android" >

<EditTextPreference
android:key="myStringPreference"
android:title="@string/preference_myString"
android:summary="@string/preference_summary_myString"/>

<CheckBoxPreference
android:key="myBooleanPreference"
android:title="@string/preference_myBoolean"
android:summary="@string/preference_summary_myBooelan" />

</PreferenceScreen>
Primjer 78.. XML layout za aktvnost korisnikih postavki
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
97
Zatim se kreira PrefActivity klasa koja nasljeuje PreferenceActivity, a u onCreate()
metodi se postavlja layout iz defniranog XML-a.
package android.gauss.androidtutorial;

import android.os.Bundle;
import android.preference.PreferenceActivity;

public class PrefsActivity extends PreferenceActivity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
addPreferencesFromResource(R.xml.prefs);
}
}
Primjer 79. Kreiranje PrefActvity klase
Ova se aktvnost pokree kontrolom, tj. ubacuje se npr. buton u glavnu aktvnost. Isto
tako treba defnirat PrefsActvity u manifestu. Ist je sluaj kao i kod defniranja obine
Actvity. Kada korisnik ue u PrefsActvity, moe postavljat te vrijednost.
Slika 97 Preference Actvity
Ove se vrijednost automatski pamte u ureaju i ne moraju se runo odraivat. Vri-
jednost se pamte u tzv. shared preferences. To se moe provjerit postavljanjem but-
tona u MainActvity koji e korisnika odvest u PrefActvity aktvnost. U MainActvity
postoje dva TextViewa koja predstavljaju vrijednost koje je korisnik unio u preference.
Te se vrijednost dohvaaju na nekoliko naina. Prvo se dohvat SharedPreference objekt
pomou PreferenceManager klase i njene metode getDefaultSharedPreferences(). Na
taj se nain dobije Shared Preference objekt koji sadri sve vrijednost koje je korisnik
unio u preference. Svaku je preferencu sada mogue dohvatt preko key atributa koji
mu je dodijeljen u XML datoteci. Metoda kojom se dohvaa preferenca po key atributu
sadri jo jedan element defValue koji je potreban ukoliko korisnik nije unio nita u
preferencu. Tada se korist vrijednost defnirana u deValue. U sluaju prvog TextViewa,
ako korisnik nije unio nita u preferencu, Moj String e koristiti defaultna vrijednost, a u
TextViewu e pisat Korisnik nije unio. U preferencama su trenutno unesene vrijednost:
Moj String android
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
98
Moj Boolean checked (true)
Ako se pokrene MainActvity, te bi se vrijednost trebale nalazit tamo.
Slika 98. Dohvaanje vrijednost iz Shared Preferences
ZADATAK 20
Kreiraj glavnu aktivnost koja ima dva gumba. Jedan gumb vodi u aktivnost korisnikih postavki u
kojima korisnik odabire svoje postavke. Drugi gumb vodi u aktivnost u kojoj su ispisane sve
korisnike postavke i njihove vrijednosti.
5.11. ListView i List Actvity
U mobilnim se aplikacijama skup stavki esto prikazuje u obliku liste koju korisnik moe pomicat
gore, dolje (eng. scroll), a klikom na jednu stavku najee se otvara detaljniji prikaz te stavke. Za
tu svrhu postoji ListView klasa koja prikazuje liste stavki. Stavke mogu bit bilo kojeg tpa jer List-
View klasa korist adapter uzorak dizajna koji prilagoava tp podataka tpu ListViewa. Adapter
defnira izgled svake pojedine stavke koja e bit prikazana u ListViewu. Postoji nekoliko vrsta
adaptera u Androidu i koriste se ovisno o potrebi. Npr. ArrayAdapter je podklasa BaseAdaptera
i korist se za prikaz podataka koji se temelje na poljima ili list. ListView se defnira u XML layout
datoteci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical" >

<ListView
android:id="@+id/mylist"
android:layout_width="match_parent"
android:layout_height="wrap_content" >
</ListView>

</LinearLayout>
Primjer 80. XML layout aktvnost koja sadri ListVIew
Lista se u XML-u mora dohvatt u kodu i adapter joj mora bit proslijeen.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
99
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.widget.ArrayAdapter;
import android.widget.ListView;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ListView listView = (ListView) findViewById(R.id.mylist);
String[] myValues = new String[] {"Osijek", "Zagreb", "Varadin",
"Zadar", "Vukovar", "Dubrovnik", "Pula", "Split", "Virovitica", "Karlovac"};

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1 , myValues);

listView.setAdapter(adapter);
}
}
Primjer 81. Kreiranje adaptera u aktvnost i postavljanje u ListView
Kreirana je lista gradova koja se poalje u konstruktor adaptera. U konstruktoru se moe primi-
jett resurs simple_list_item_1. Taj se resurs preuzima iz android.R.layout resursa. Ako se ko-
riste resursi koji poinju s android, koriste se ve gotovi resursi koji se nalaze u Android SDK. Da-
kle, ovo je XML layout datoteka koja je dola zajedno sa SDK-om, tj. unaprijed je kreirana (slino
kao kada programer sam kreira layout datoteku). Kao prvi se parametar alje Context. Nakon
to se kreirao, adapter se alje u ListView. Pokretanjem aplikacije trebalo bi se dobit sljedee:
Slika 99. ListView sa stavkama gradova
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
100
Ukupno postoji deset stavki, ali se trenutno prikazuje samo osam. Pokretom prsta pre-
ma gore korisnik moe pomaknut listu i prikazat e se preostale dvije stavke. esto
se aplikacije kreiraju tako da se klikom na jednu stavku liste, otvori detaljan prikaz te
stavke. Kako bi se to postglo, mora se postavit OnItemClickListener na ListView koji e
sluat korisnikovu interakciju s ListViewom, tj. sluat e je li korisnik pritsnuo stavku i
koja je to stavka.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ArrayAdapter;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ListView listView = (ListView) findViewById(R.id.mylist);
String[] myValues = new String[] {"Osijek", "Zagreb", "Varadin",
"Zadar", "Vukovar", "Dubrovnik", "Pula", "Split", "Virovitica", "Karlovac"};

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1 , myValues);

listView.setAdapter(adapter);
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
Toast.makeText(MainActivity.this,
"Pritisnuta je stavka pod rednim brojem:" +
position, Toast.LENGTH_LONG).show();
}
});
}
}
Primjer 82. Postavljanje OnItemClickListener na ListView
U OnItemClick() metodi rukuje se pritskom na stavku u ListViewu. Positon parametar govori
koji je redni broj u list pritsnut. Ako se pritsne lista koja je odozgora trea po redu, positon
parametar e vratt broj 2 (indeksiranje stavki poinje od 0). Moe se primijett i Toast klasa.
Toast klasa je klasa koja prikazuje kratke poruke koje iskoe na ekranu. Toast poruka je vidljiva
i u sljedeem primjeru:
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
101
Slika 100. ListView koji reagira na pritsak korisnika
U izradi aplikacije pritsak na ListItem stavku obrauje se (engl. handle) tako da se poziva neka
aktvnost koja e detaljno prikazat tu stavku. Dakle, instancira se Intent objekt, u njega se stav-
ljaju svi potrebni podatci o stavci te se poziva nova aktvnost koja dalje obrauje i prikladno
prikazuje te podatke. No najee programer mora kreirat vlastt adapter koji ima jedinstveni
prikaz podataka. Za to se nasljeuje ve gotova implementacija Adapter klase ili BaseAdapter
klasa.
Veoma se esto za prikaz stavki u ListViewu koriste objekt, a ne samo lista Stringova. Base-
Adapter omoguava prikaz elemenata iz objekta, ali i defniranje prilagoenog izgleda svih stav-
ki u ListViewu. Za primjer e se kreirat klasa hotel.
package android.gauss.androidtutorial;
import java.io.Serializable;

public class Hotel implements Serializable{

private String naziv;
private String datum;
private String opis;
public String getNaziv() {
return this.naziv;
}
public void setNaziv(String naziv) {
this.naziv = naziv;
}
public String getDatum() {
return this.datum;
}
public void setDatum(String datum) {
this.datum = datum;
}
public String getOpis() {
return this.opis;
}
public void setOpis(String opis) {
this.opis = opis;
}
}
Primjer 83. Klasa Hotel
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
102
Ova klasa implementra suelje Serializable. Kada klasa nasljeuje neko suelje, ujedno poprima
i taj tp. Dakle, kada se instancira objekt hotel, bit e tpa Hotel, ali i tpa Serializable. Serijaliza-
cija objekta je proces u kojemu se objekt reprezentra kao niz bajtova koji sadre sve podatke
o objektu. Serijalizacija je vrlo korisna ako se koriste razliite platorme u kojoj je jedna pisana
u Javi, a druga npr. u C++. Java i C++ ne mogu meusobno komunicirat ako si alju objekte, a
mogu ako si alju niz bajtova jer bajtove mogu itat sve platorme. Ako se u Javi neki objekt
serijalizira i zapie u neku datoteku, u C++ se moe proitat datoteka i deserijalizirat sadraj u
objekt. Taj objekt e bit ist objekt koji je poslan iz Java platorme.
Intent objekt moe u sebi sadravat Bundle objekt. Bundle objekt se moe opisat kao objekt u
koji se spremaju podatci razliitog tpa: String, int, long i sl. Nezgodno bi rjeenje bilo kada bi se
atribut svakog objekta morao spremat posebno u Bundle objekt.
Hotel hotel = new Hotel();
hotel.setNaziv("Hotel Osijek");
hotel.setDatum("10.3.2009");
hotel.setOpis("Opis hotela Osijek");

Bundle bundle = new Bundle();
bundle.putString("naziv_hotela", hotel.getNaziv());
bundle.putString("datum_hotela", hotel.getDatum());
bundle.putString("opis_hotela", hotel.getOpis());
Primjer 84. Postavljanje vrijednost u Bundle objekt
Ovakvo rjeenje nije pogrjeno, ali je nepraktno ako objekt ima puno atributa. Bundle objekt
nudi rjeenje, metodu putSerializable(). U ovu se metodu alje objekt tpa Serializable, a budui
da objekt Hotel implementra suelje Serializable, znai da je tpa Serializable i da se moe po-
slat u ovu metodu.
Hotel hotel = new Hotel();
hotel.setNaziv("Hotel Osijek");
hotel.setDatum("10.3.2009");
hotel.setOpis("Opis hotela Osijek");

Bundle bundle = new Bundle();
bundle.putSerializable("hotel", hotel);
Primjer 85. Postavljanje serijaliziranog objekta u Bundle objekt
Sljedei je korak instanciranje nekoliko objekata tpa Hotel i smjetanje u listu. Ta se lista alje u
vlastt adapter koji e se kasnije kreirat.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
103
package android.gauss.androidtutorial;

import java.util.ArrayList;
import java.util.List;
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ListView;
import android.widget.Toast;

public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Hotel hotel1 = new Hotel();
hotel1.setNaziv("Hotel Osijek");
hotel1.setDatum("10.3.2009");
hotel1.setOpis("Opis hotela Osijek");

Hotel hotel2 = new Hotel();
hotel2.setNaziv("Hotel Zagreb");
hotel2.setDatum("11.4.2009");
hotel2.setOpis("Opis hotela Zagreb");

Hotel hotel3 = new Hotel();
hotel3.setNaziv("Hotel Vukovar");
hotel3.setDatum("12.5.2010");
hotel3.setOpis("Opis hotela Vukovar");

Hotel hotel4 = new Hotel();
hotel4.setNaziv("Hotel Split");
hotel4.setDatum("15.08.2011");
hotel4.setOpis("Opis hotela Split");

Hotel hotel5 = new Hotel();
hotel5.setNaziv("Hotel Dubrovnik");
hotel5.setDatum("15.08.2011");
hotel5.setOpis("Opis hotela Dubrovnik");

List<Hotel> hoteli = new ArrayList<Hotel>();
hoteli.add(hotel1);
hoteli.add(hotel2);
hoteli.add(hotel3);
hoteli.add(hotel4);
hoteli.add(hotel5);

HotelAdapter hotelAdapter = new HotelAdapter(this, hoteli);
ListView listView = (ListView) findViewById(R.id.mylist);
listView.setAdapter(hotelAdapter);
}
}
Primjer 86.. Popunjavanje liste, instanciranje adaptera i popunjavanje ListViewa
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
104
Zanimljivo je da adapter omoguava kreiranje izgleda svakog elementa u list. To se, kao i sve
ostalo, defnira kroz XML. Npr. ako element u list izgleda ovako:
Slika 101. Primjer izgleda stavke ListViewa
vrlo ga je lako defnirat u XMLu. U res/layout/ direktoriju se kreira nova XML datoteka. Nazvat
emo ju hotel_list_item.xml.
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="50dp" >

<TextView
android:id="@+id/hotelName"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_alignParentLeft="true"/>

<TextView
android:id="@+id/hotelDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>

</RelativeLayout>
Primjer 87. Defniranje XML layouta za izgled stavke ListViewa
Kreira se HotelAdapter koji nasljeuje BaseAdapter klasu.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
105
package android.gauss.androidtutorial;

import java.util.List;

import android.content.Context;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;

public class HotelAdapter extends BaseAdapter{

private List<Hotel> hoteli;
private Context context;
private LayoutInflater inflater;


public HotelAdapter(Context context, List<Hotel> hoteli) {
this.hoteli = hoteli;
this.context = context;
this.inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return hoteli.size();
}
@Override
public Object getItem(int position) {
return hoteli.get(position);
}
@Override
public long getItemId(int position) {
return hoteli.indexOf(hoteli.get(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

if(convertView == null){
convertView = inflater.inflate(R.layout.hotel_list_item, parent,
false);
}
TextView hotelName = (TextView)convertView.findViewById(R.id.hotelName);
TextView hotelDate = (TextView)convertView.findViewById(R.id.hotelDate);

hotelName.setText(hoteli.get(position).getNaziv());
hotelDate.setText(hoteli.get(position).getDatum());

return convertView;
}
}

Primjer 88. Kreiranje vlasttog adaptera
U ovom je primjeru kreiran konstruktor koji kao parametre prima Context i List<Hotel> listu.
Pomou Contexta dohvaa se objekt LayoutInfater koji slui za uitavanje XML layout datoteka.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
106
List<Hotel> je lista hotela koja je instancirana u primjeru iznad. Kada se nasljeuje BaseAdapter,
implementraju se 4 metode:
a) getCount()
b) getItem()
c) getItemId()
d) getView()
U getCount() metodi vraa se broj elemenata u listu kako bi ListView znao koliko stavki postoji. U
getItem() metodi vraa se objekt iz liste po trenutnoj poziciji. Dakle, ako je na poziciji 1 hotel Ho-
tel Zagreb, ovdje se vraa taj objekt. U getItemId() metodi vraa se indeks objekta u list. Najva-
nija je metoda u adapteru getView() metoda. Ova metoda prolazi kroz svaki element ListViewa
i za svaki element uitava layout XML datoteku. U ovom sluaju uitava hotel_list_item.xml
datoteku. ConvertView parametar je element iz ListViewa u koji se uitava XML layout. Ovdje
se provjerava je li element jednak null vrijednost. Ako je element razliit od null, XML layout je
ve uitan i nema potrebe opet ga uitavat. Nakon toga se dohvaaju element iz layout XML-a
i popunjavaju se vrijednost s atributma objekata koji se nalaze u List<Hotel> list. Metoda vraa
prilagoeni convertView objekt.
Slika 102. ListView s vlasttm adapterom
Sada se moe kreirat onClickListener koji e sluat klik na stavku ListViewa. Kada se klikne stav-
ka u ListViewu, dohvatt e se objekt koji se nalazi na tom mjestu, stavit e ga u Intent objekt i
pokrenut e novu aktvnost koja e prikazat detaljan opis hotela.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
107
public class MainActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

Hotel hotel1 = new Hotel();
hotel1.setNaziv("Hotel Osijek");
hotel1.setDatum("10.3.2009");
hotel1.setOpis("Opis hotela Osijek");

Hotel hotel2 = new Hotel();
hotel2.setNaziv("Hotel Zagreb");
hotel2.setDatum("11.4.2009");
hotel2.setOpis("Opis hotela Zagreb");

Hotel hotel3 = new Hotel();
hotel3.setNaziv("Hotel Vukovar");
hotel3.setDatum("12.5.2010");
hotel3.setOpis("Opis hotela Vukovar");

Hotel hotel4 = new Hotel();
hotel4.setNaziv("Hotel Split");
hotel4.setDatum("15.08.2011");
hotel4.setOpis("Opis hotela Split");

Hotel hotel5 = new Hotel();
hotel5.setNaziv("Hotel Dubrovnik");
hotel5.setDatum("15.08.2011");
hotel5.setOpis("Opis hotela Dubrovnik");

List<Hotel> hoteli = new ArrayList<Hotel>();
hoteli.add(hotel1);
hoteli.add(hotel2);
hoteli.add(hotel3);
hoteli.add(hotel4);
hoteli.add(hotel5);

HotelAdapter hotelAdapter = new HotelAdapter(this, hoteli);

ListView listView = (ListView) findViewById(R.id.mylist);
listView.setAdapter(hotelAdapter);
listView.setOnItemClickListener(new OnItemClickListener() {

@Override
public void onItemClick(AdapterView<?> parent, View view, int position,
long id) {
Hotel hotel = (Hotel)parent.getItemAtPosition(position);
Bundle bundle = new Bundle();
bundle.putSerializable("hotel", hotel);
Intent intent = new Intent(MainActivity.this,
HotelDetailsActivity.class);
intent.putExtras(bundle);
startActivity(intent);
}
});
}
}

Primjer 89. Postavljanje OnItemClickListenera na ListView
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
108
Zapisuje se klasa HotelDetailsActivity koja nasljeuje Activity klasu u manifest.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.widget.TextView;

public class HotelDetailsActivity extends Activity{

private Hotel hotel;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_hotel_details);

hotel = (Hotel)getIntent().getSerializableExtra("hotel");

TextView hotelName = (TextView) findViewById(R.id.hotelName);
hotelName.setText(hotel.getNaziv());

TextView hotelDate = (TextView) findViewById(R.id.hotelDate);
hotelDate.setText(hotel.getDatum());

TextView hotelDescription = (TextView) findViewById
(R.id.hotelDescription);
hotelDescription.setText(hotel.getOpis());
}
}
Primjer 90. Kreiranje HotelDetailsActvity klase
Dakle, kada se klikne na stavku u ListViewu, bira se objekt Hotel koji se zapakira u Bundle
objekt, a Bundle objekt se postavlja u Intent objekt. Nova se aktvnost pokree pomou
tog Intent objekta. Kada se aktvnost pokrene, Intent objekt se dohvaa u onCreate()
metodi. U Intent objektu se trai objekt Hotel pomou metode getSerializableExtra() i
alje mu se ID po kojem e trait taj objekt. Nakon toga se vrijednost TextViewa, koje
se nalaze u layoutu aktvnost, postavljaju na vrijednost koje se dobiju iz atributa hotel
objekta. Klikom na stavku u ListViewu, koja u sebi sadri naziv Hotel Osijek i datum
10.3.2009., pokree se aktvnost koja prikazuje detalje o hotelu kao na sljedeoj slici.
Slika 103. HotelDetalsActvity aktvnost
Android framework prua mogunost defniranja ListActvity aktvnost. Koritenjem
ove aktvnost nije potrebno defnirat XML layout datoteku. ListActvity u sebi ve sadri
ListView s IDem android.R.id.list kojemu se moe pristupat u samoj aktvnost.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
109
package android.gauss.androidtutorial;

import android.app.ListActivity;
import android.os.Bundle;
import android.widget.ArrayAdapter;

public class MainActivity extends ListActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

String[] myValues = new String[] {"Osijek", "Zagreb", "Varadin",
"Zadar", "Vukovar", "Dubrovnik", "Pula", "Split", "Virovitica", "Karlovac"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1 , myValues);

setListAdapter(adapter);
}
}
Primjer 91. Kreiranje ListActvity aktvnost
Slino kao i u primjeru iznad, defnira se lista Stringova koja e se prikazivat u ListViewu.
Nije potrebno dohvaat ListView objekt jer ListActvity u sebi ve sadri ListView objekt
pa se adapter moe postavit jednostavnim pozivanjem metode setListAdaper().
ZADATAK 21
Kreiraj klasu Vijest koja sadri atribute: Naslov, Datum i Opis. Zatim kreiraj ListActivity u kojem e
kreirati 6 razliitih objekata Vijest i prikai ih u listi. Kreiraj adapter koji nasljeuje BaseAdapter i
proizvoljan izgled XML layouta za stavke unutar liste. Pritisak na stavku unutar liste pokree novu
aktivnost koja prikazuje detaljan prikaz vijesti s naslovom, datumom i opisom.
5.12. Acton Bar
Android je od Android OS3.0 (API 11) preuzeo Acton Bar. Acton Bar je zamijenio standardni
TitleBar i od tada je postao vrlo vana komponenta svake aplikacije. Acton Bar slui za prikaz
Home ikone (neto slino kao Home kod internetskih stranica), za prikazivanje menija i navigaci-
je. Standardni Optons meni izbaen je i umjesto njega se korist meni Acton Bara.
Slika 104. Acton Bar
Na slici 104. crveno oznaeni dio predstavlja Acton Bar. Acton Bar pokupi Launcher ikonu i
korist ju kao svoju Home sliku. Home ikoni i menu ikoni se pristupa pomou onOptonsItemSe-
lected() metode. Najee se u toj metodi radi switch naredba koja provjerava id element koji je
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
110
pritsnut, a nakon toga izvrava neku naredbu. Kako bi se kreirao menu u Acton Baru, kreira se
menu layout datoteka. Ako ne postoji, u projektu se kreira menu direktorij, a u direktoriju npr.
main.xml datoteka. Menu e za poetak imat jedan gumb koji se naziva Setngs.
<menu xmlns:android="http://schemas.android.com/apk/res/android" >

<item
android:id="@+id/action_settings"
android:showAsAction="ifRoom"
android:title="@string/action_settings"/>

</menu>
Primjer 92. Menu s jednim gumbom
Menu ima jedan gumb, a u layout datoteci se oznaava elementom <item>. Dodaje mu se id
kako bi se mogao identfcirat pritsak na njega i String vrijednost koja je vidljiva korisniku.
Atribut showAsActon i njegova vrijednost ifRoom ukazuju da e Android prikazat ovaj gumb
u Acton Baru ako ima mjesta, a ako mjesta nema, prikazat e ga u klasinom Optons meniju.
Postoji nekoliko vrijednost ovog atributa koje se mogu postavit kao to su never, a znai da
se gumb nee nikada prikazat u Acton Baru i uvijek e bit u klasinom meniju, ili always, a
oznaava da se gumb uvijek prikazuje u Acton Baru. Always nije preporuljiv jer ponekad ne
mogu stat svi element zbog razliith veliina ureaja pa moe doi do neeljenog ponaanja
aplikacije. Postoji jo nekoliko vrijednost koje za sada neemo spominjat.
Slika 105. Prikaz menija s atributom ifRoom
Slika 106. Prikaz menija s atributom never
Sada se u aktvnost uitava meni. Kada se meni prikazuje, aktvnost poziva onCreate-
OptonsMenu() metodu i ukazuje na layout datoteku koju treba prikazat. To se poste
tako da se u metodi dohvat MenuINfater objekt i pomou njegove se metode infater
ukae na layout datoteku menija.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
111
@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);

return super.onCreateOptionsMenu(menu);
}
Primjer 93. Uitavanje menija
Ako se projekt pokrene, trebala bi se prikazat aktvnost kao na slici 107. Klik na ovaj gumb moe
se defnirat na sljedei nain: aktvnost sadri metodu onOptonsItemSelected() koja otkriva koji
se gumb pritsnuo, a nakon toga se moe pokrenut neka odreena metoda ili pokrenut nova
aktvnost i sl.
@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.action_settings:
//Pokretanje nove aktivnosti
break;

default:
break;
}
return super.onOptionsItemSelected(item);
}
Primjer 94. Rukovanje odabira elemenata u meniju
Dakle, metoda u parametrima alje element menija koji se pritsnuo i u metodi se provjerava id
tog elementa. Ako je id acton_setngs, korisnik je pritsnuo tpku Setngs i moe se pokrenuti
odreena akcija kao npr. otvaranje Setngs aktvnost. Dakle, za elemente menija programer
sam defnira id-eve. Za Home element Acton Bara id je uvijek ist i tom se elementu pristupa
preko id-a android.R.id.home. U istoj se switch naredbi u jedan sluaj moe stavit android.R.id.
home vrijednost i tada se pokree odreena akcija. Home element Acton Bara korist se za
navigaciju unazad. To se moe npr. napravit u SetngsActvity aktvnost koja e se pokrenut
preko menija Setngs. Kada se pritsne na meni element Setngs, pokrenut e se nova aktvnost
SetngsActvity koja u svojoj onCreate() metodi postavlja prikaz Home elementa kao navigaciju
unazad. To se poste tako da se dohvat ActonBar i pozove metoda setDisplayHomeAsUpEn-
abled().
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
112
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;
import android.view.MenuItem;

public class SettingsActivity extends Activity {

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

getActionBar().setDisplayHomeAsUpEnabled(true);
}

@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case android.R.id.home:
onBackPressed();
break;
}

return super.onOptionsItemSelected(item);
}
}
Primjer 95. Postavljanje Home elementa kao navigaciju unazad
Nakon to se izgled Home elementa postavio kao navigacija unazad, defnira se to e raditi
pritisak na Home element Acton Bara. Kao i u proloj aktvnost, u metodi se onOptonsItem-
Selected() preko switch naredbe otkriva id pritsnutog elementa. Ako je id jednak id-u Home
elementa, poziva se metoda koja e se vratt u prolu aktvnost onBackPressed(). Acton Bar
slui i za navigaciju kroz aplikaciju. Postoji nekoliko naina navigacije pomou Acton Bara, a
najei je navigacija kroz tabove. Da bi se ostvarila takva navigacija, dohvaa se Acton Bar
objekt i postavlja mu tp navigacije NAVIGATION_MODE_TABS. Zatm se kreiraju tabovi kojima
se prosljeuje listener koji e sluat pritsak na tabove. Listener se najee implementra na
aktvnost. Zatm se tabovi dodaju u ActonBar. Tako je npr. u prvoj aktvnost mogue kreirat
tabove u onCreate() metodi.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
113
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Tab tab1 = actionBar.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);

Tab tab2= actionBar.newTab();
tab2.setText("Tab 2");
tab2.setTabListener(this);

getActionBar().addTab(tab1);
getActionBar().addTab(tab2);
}
Primjer 96. Kreiranje tabova kao tpove navigacije
Aktvnost treba implementrat TabListener suelje. Implementraju se tri metode: onTa-
bReselected(), onTabSelected(), onTabUnselected().
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
114
package android.gauss.androidtutorial;
import android.app.ActionBar;
import android.app.ActionBar.Tab;
import android.app.ActionBar.TabListener;
import android.app.Activity;
import android.app.FragmentTransaction;
import android.content.Intent;
import android.hardware.Camera;
import android.os.Bundle;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;

public class MainActivity extends Activity implements TabListener{

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Tab tab1 = actionBar.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);

Tab tab2= actionBar.newTab();
tab2.setText("Tab 2");
tab2.setTabListener(this);

getActionBar().addTab(tab1);
getActionBar().addTab(tab2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);

return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
default:
break;
}
return super.onOptionsItemSelected(item);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {
// implementacija koda kada se pritisne tab
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
}
}
Primjer 97. Klasa s Tab navigacijom
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
115
Najee se tab navigacija kombinira s fragmentma tako da se kreira poseban fragment za svaki
tab i ovisno o tome koji je tab pritsnut, uitava se njegov fragment.
Slika 107. Acton Bar s tab navigacijom
Sadraj se svakog taba najee sastoji od jednog fragmenta. Na onTabSelected() me-
todi uitava se odreeni fragment u prazan prostor aktvnost. Za svaki se tab kreira po
jedan fragment sa svojom layout datotekom. U onTabSelected() metodi se pomou Fra-
gmentTransacton objekta izmjenjuju fragment na tom praznom prostoru. Fragment
zahtjevaju da im se preko id-a pokae gdje se moraju pojavit. U ovom se sluaju trebaju
pojavit u praznom prostoru ispod tabova iji je id:
android.R.id.content
FragmentTransacton objekt poziva metodu koja e maknut jedan fragment remove(),
a zatm dodat i drugi fragment metodom add(). Moe pozvat metodu replace() koja
obavlja oboje istovremeno.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
116
public class MainActivity extends Activity implements TabListener{

@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ActionBar actionBar = getActionBar();
actionBar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);

Tab tab1 = actionBar.newTab();
tab1.setText("Tab 1");
tab1.setTabListener(this);

Tab tab2= actionBar.newTab();
tab2.setText("Tab 2");
tab2.setTabListener(this);

getActionBar().addTab(tab1);
getActionBar().addTab(tab2);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {

MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);

return super.onCreateOptionsMenu(menu);
}
@Override
public boolean onOptionsItemSelected(MenuItem item) {

switch (item.getItemId()) {
case R.id.action_settings:
Intent intent = new Intent(this, SettingsActivity.class);
startActivity(intent);
break;
default:
break;
}

return super.onOptionsItemSelected(item);
}
@Override
public void onTabReselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub.
}
@Override
public void onTabSelected(Tab tab, FragmentTransaction ft) {

if(tab.getText().equals("Tab 1")){
Tab1Fragment fragment1 = new Tab1Fragment();
ft.replace(android.R.id.content, fragment1);
} else if(tab.getText().equals("Tab 2")){
Tab2Fragment fragment2 = new Tab2Fragment();
ft.replace(android.R.id.content, fragment2);
}
}
@Override
public void onTabUnselected(Tab tab, FragmentTransaction ft) {
// TODO Auto-generated method stub.
}
}
Primjer 98. Main Actvity s izmjenom fragmenata u tabovima
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
117
Pritskom na tab dohvat se text taba i ako je text jednak prvom tabu, instancira se novi Tab1Fra-
gment. FragmentTransacton objekt poziva metodu replace() kojoj se nareuje da na mjesto
android.R.id.contet stavi fragment1. Isto vrijedi i za drugi tab.
Slika 108. Odabrani Tab1
Slika 109. Odabrani Tab2
5.13. Android SQLite baza podataka
U izradi je sloenijih sustava ili aplikacija nuno imat bazu podataka koja se nalazi na samom
ureaju. Android prua nekoliko naina spremanja korisnikih i aplikacijskih podataka, a jedan
od njih je i SQLite. SQLite je osnovna baza podataka s minimalnim funkcionalnostma i jedna je
od najee koritenih baza podataka na mobilnim ureajima. Podrava znaajke standardnih
relacijskih baza kao to su SQL sintaksa, transakcije i pripremljeni iskazi, a zahtjeva vrlo malo
memorije prilikom izvoenja. Podrava TEXT (String), INTEGER (int) i REAL (double) tpove poda-
taka. Ova se baza podataka sprema kao jedna datoteka u Android ureaj. Poznavatelj SQL baze
podataka i sintakse moe s lakoom savladat SQLite sintaksu.
Slijedi kratak osvrt na relacijske baze podataka. Baza podataka je strukturni nain spremanja po-
dataka u tablice. Tablica sadri stupce za razliite tpove podataka i retke za cjelokupni podatak.
U smislu OOP, redak u tablici predstavlja objekt, a svaki stupac atribut objekta. Npr. ako postoji
objekt Osoba s atributma ime(String), prezime(String) i dob(int), moe se kreirat tablica Osoba
sa stupcima ime(TEXT), prezime (TEXT) i dob(INTEGER).
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
118
Slika 110. Odnos atributa objekta i stupaca u tablici
SQLite baza podataka se sastoji od vie tablica. U ovom je sluaju tablica Osoba samo
jedna tablica u bazi podataka pod nazivom Osoba. Za rad s Android bazom podataka
kreira se klasa koja e naslijedit SQLiteOpenHelper klasu. U ovom je sluaju to Android-
SQLiteOpenHelper klasa koja e brinut o kreiranju baze podataka. Kada se instancira
objekt iz te klase, automatski se kreira baza podataka pod defniranim imenom (ako
baza ve ne postoji). Ako baza ve postoji, baza se nee kreirat. Ova e klasa vraat
referencu na tu bazu podataka, pobrinut e se da se kreira baza podataka (ako baza ve
ne postoji) i da se zatvara i otvara konekcija na tu bazu podataka.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
119
package android.gauss.androidtutorial;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;

public class AndroidSQLOpenHelper extends SQLiteOpenHelper{

public static final String TABLE_PERSON = "person";
public static final String COLUMN_ID = "id";
public static final String COLUMN_FIRST_NAME = "first_name";
public static final String COLUMN_LAST_NAME = "last_name";
public static final String COLUMN_AGE = "age";

private static final String DATABASE_NAME = "TutorialDatabase";
private static final int DATABASE_VERSION = 1;

private static final String TABLES_CREATE = "create table " + TABLE_PERSON
+ " (" + COLUMN_ID + " integer primary key autoincrement, " + COLUMN_FIRST_NAME +
" text not null, " + COLUMN_LAST_NAME + " text not null, " + COLUMN_AGE + "
integer not null);";

public AndroidSQLOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLES_CREATE);

}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
Log.w("DATABASE", "Upgrading database from version " + oldVersion + "
to " + newVersion + "which will destroy all data");
db.execSQL("DROP TABLE IF EXISTS " + TABLE_PERSON);
onCreate(db);
}
}
Primjer 99. Android SQLiteOpenHelper klasa
Sljedei je korak kreiranje klase koja e brinut o unosu, itanju i auriranju podataka u bazi.
Ta e se klasa zvat PersonDataSource. U konstruktoru se te klase kreira objekt iz Android-
SQLiteOpenHelpera koji odmah provjerava je li baza kreirana i ako nije, kreira ju. Postoje i druge
metode, tj. metode open() i close() koje od AndroidSQLiteOpenHelper objekta trae konekciju
na bazu, tj. spajanje na bazu i odspajanje s baze. Ova je klasa takoer zaduena za rukovanje
s unosom, itanje i auriranje podataka u tablice. Strukture su ovih dviju klasa takve da kada
se provode izmjene na tablicama, nije potrebno provjeravat dohvaanje konekcije na bazu,
postojanje baza podataka, prekidanje konekcije s bazom, i sl. jer je sve odraeno pozadinski
u AndroidSQLiteOpenHelper klasi. Na taj su nain postavljeni temelji za rad s bazama podata-
ka. U PersonDataSource se kreiraju metode koje e, ovisno o potrebama aplikacije, provodit
odreene manipulacije na tablicama: upisivanje u bazu, itanje iz baze, pretraivanje osobe po
nazivu itd. Baza se kreira u konstruktoru klase, a cijelu zadau kreiranja baze preuzima nadklasa.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
120
Pozivanjem njenog konstruktora pomou super.onCreate() metode vraa se kreirana baza po-
dataka u koju se kreiraju potrebne tablice. Na bazi se zatm mogu pokretat odreene nared-
be, a u ovom se sluaju pokree naredba za kreiranje Person tablice. Moe se implementrat i
onUpgrade() metoda za auriranje baze u kojoj se stara baza brie i kreira nova baza.
public class PersonDataSource {

private SQLiteDatabase database;
private AndroidSQLOpenHelper dbHelper;
private String[] allColumns = {AndroidSQLOpenHelper.COLUMN_ID,
AndroidSQLOpenHelper.COLUMN_FIRST_NAME, AndroidSQLOpenHelper.COLUMN_LAST_NAME,
AndroidSQLOpenHelper.COLUMN_AGE};

public PersonDataSource(Context context) {
dbHelper = new AndroidSQLOpenHelper(context);
}
public void open(){
database = dbHelper.getWritableDatabase();
}
public void close(){
dbHelper.close();
}
public Person insertPerson(Person person){
ContentValues values = new ContentValues();
values.put(AndroidSQLOpenHelper.COLUMN_FIRST_NAME, person.getFirstName());
values.put(AndroidSQLOpenHelper.COLUMN_LAST_NAME, person.getLastName());
values.put(AndroidSQLOpenHelper.COLUMN_AGE, person.getAge());

database.insert(AndroidSQLOpenHelper.TABLE_PERSON, null, values);

return person;
}
public List<Person> readPersons(){
List<Person> persons = new ArrayList<Person>();
Cursor cursor = database.query(AndroidSQLOpenHelper.TABLE_PERSON, allColumns,
null, null, null, null, null);
cursor.moveToFirst();

while(!cursor.isAfterLast()){
Person person = new Person();
person.setFirstName(cursor.getString(1));
person.setLastName(cursor.getString(2));
person.setAge(cursor.getInt(3));

persons.add(person);
}
return persons;
}
}
Person person = new Person();
person.setFirstName(cursor.getString(1));
person.setLastName(cursor.getString(2));
person.setAge(cursor.getInt(3));

persons.add(person);
cursor.moveToNext();
}
cursor.close();
return persons;
}

}

Primjer 100. PersonDataSource klasa
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
121
Unos podataka o objektu tpa Person unosi se tako da se poalje objekt tpa Person u tu metodu
i zatm se svi atribut objekta Person upisuju u tablicu Person. Dakle, atribut frstName(String)
upisuje se u stupac frstName(TEXT), atribut lastName(String) u stupac lastName(TEXT) i atribut
age(String) u stupac age(TEXT). Moe se primijett da se prilikom kreiranja tablice stvorio jo je-
dan stupac naziva id (int primary key autoincrement). Svaki bi redak u tablici trebao imat iden-
tfkator, tj. jedinstveni broj koji je razliit za svaki redak. Identfkatorom se moe jedinstveno
raspoznat svaki redak u tablici. Primary key podrazumijeva da e stupac predstavljat jedinst-
vene identfkator, a autoincrement da e se svakim unosom u tablicu, u stupcu automatski ge-
nerirat broj, tj. prilikom zapisa e inkementrat zadnji broj za 1 i zapisat ga u bazu u tom retku.
Postavlja se pitanje zato bi se id uope koristo? Zamislite da postoje dvije osobe koje imaju isto
ime i 25 godina (Marko Markic, 25 godina). Bez jedinstvenog se identfkatora ne mogu nikako
raspoznat. Npr. ako se Marku Markicu, koji je prvi unesen, ele promijenit godine, bez jedinst-
venog se identfkatora ne moe odredit na kojem se Marku Markicu eli izvrit izmjena. Tada
se izmjena radi po id-u. Dakle, provodi se izmjena na unosu koji ima id npr. 4 i tom se unosu eli
promijenit stupac age.
U konstruktoru klase kreira se i AndroidSQLOpenHelper objekt koji je zaduen kreirat bazu ako
nije kreirana. S open() i close() se otvara i zatvara konekcija na bazu podataka. Ako se eli uni-
jet podatak u tablicu, podatci se stavljaju u ContentValues objekt u koji se ubacuju vrijednost
pomou metode put(). Metoda put u prvi parametar prima naziv stupca, a u drugi vrijednost
kako bi baza podataka znala u koji stupac treba upisat koju vrijednost. Tada se pomou SQLite-
Database objekta i metode insert() ubacuju vrijednost u defniranu tablicu.
Kada se vrijednost iz tablice itaju, upit vraa Cursor objekt. Query() metoda defnira tablicu
koja se eli itat i polje stupaca koji su defnirani u varijabli allColumns. Cursor objekt se moe
shvatt kao pokaziva retka u tablici. Kada baza podataka vrat Cursor objekt, objekt je prvo na
mjestu iznad prvog unosa i treba ga pomaknut na prvi unos pomou metode moveToFirst().
Na slici 3.12.2. prvi redak sadri nazive stupaca koji se ne itaju kao podatak. Nazivi stupaca su
ovdje samo radi primjera. Dakle, Cursor pokazuje na redak iznad prvog retka, pokazuje negdje
iznad retka Pero Peri 23.
Slika 111. Prvotna pozicija Cursor objekta
Nakon toga se ulazi u while petlju koja provjera je li trenutni unos zadnji unos u tablici. U
tjelu se while petlje, nakon proitane tablice i kreiranog objekta Person, ubacuje objekt
u listu objekata te se Cursor objekt pomie za jedan unos prema dolje. Person objekt je
jednostavan objekt koji sadri podatke o nekoj osobi.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
122
package android.gauss.androidtutorial;

public class Person {

private String firstName;
private String lastName;
private int age;

public String getFirstName() {
return firstName;
}

public void setFirstName(String firstName) {
this.firstName = firstName;
}

public String getLastName() {
return lastName;
}

public void setLastName(String lastName) {
this.lastName = lastName;
}

public int getAge() {
return age;
}

public void setAge(int age) {
this.age = age;
}

}
Primjer 101. Person klasa
Za potrebe testranja kreirana je aktvnost koja ima 3 EditText viewa u koja se unosi
ime, prezime i dob osobe. Klikom na gumb Unesi osobu upisuju se podatci u bazu, a
klikom na gumb Pregled osoba itaju se sve osobe iz baze i uitavaju se u listu pomou
vlasttog adaptera.
Slika 112. Aktvnost unosa podataka o osobi
Prvo se izrauje par unosa da bi se neto upisalo u bazu. Upisani se unosi mogu vidjet
u sljedeoj aktvnost. Nakon to se unijelo par osoba, prite se na gumb Pregled
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
123
osoba to pokree novu aktvnost koja ita sve podatke iz baze i prikazuje ih u list.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.content.Intent;
import android.gauss.androidtuorial.R;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;

public class MainActivity extends Activity {

private PersonDataSource dataSource;
private EditText firstName;
private EditText lastName;
private EditText age;
private Button insertPerson;
private Button personOverview;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
dataSource = new PersonDataSource(MainActivity.this);

firstName = (EditText) findViewById(R.id.firstName);
lastName = (EditText) findViewById(R.id.lastName);
age = (EditText) findViewById(R.id.age);

insertPerson = (Button)findViewById(R.id.insertPerson);
insertPerson.setOnClickListener(new OnClickListener() {

@Override
public void onClick(View v) {
Person person = new Person();
person.setFirstName(firstName.getText().toString());
person.setLastName(lastName.getText().toString());
person.setAge(Integer.parseInt(age.getText().toString()));

dataSource.open();
dataSource.insertPerson(person);
dataSource.close();
}
});
personOverview = (Button) findViewById(R.id.readPersons);
personOverview.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
Intent intent = new Intent(MainActivity.this,
ActivityPersonList.class);
startActivity(intent);
}
});
}}
Primjer 102. Aktvnost za unos podataka u bazu
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
124
U onCreate() metodi kreira se novi objekt PersonDataSource kako bi baza uvijek bila spremna
na upise. Pritskom gumba insertPerson otvara se konekcija na bazu, unosi se objekt Person i
zatvara se konekcija na bazu. Postoji i gumb personOverview koji vodi na ListActvity koja ita
sve osobe iz baze, stavlja ih u adapter i prikazuje ih u list.
package android.gauss.androidtutorial;

import java.util.List;

import android.app.ListActivity;
import android.os.Bundle;
import android.util.Log;

public class ActivityPersonList extends ListActivity{

private PersonDataSource datasource;
private List<Person> persons;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

}
@Override
protected void onResume() {
super.onResume();

datasource = new PersonDataSource(this);
datasource.open();
persons = datasource.readPersons();
datasource.close();

PersonsAdapter adapter = new PersonsAdapter(this, persons);
setListAdapter(adapter);
}
}
Primjer 103. itanje podataka iz baze i uitavanje u listu
Slika 113. Popis svih osoba iz baze
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
125
ZADATAK 22
Napravi klasu Vijest koja ima atribute naslov, opis i datum. Napravi aktivnost za unos
vijesti u bazu i aktivnost koja u listi ispisuje sve vijesti.
5.14. Koritenje senzora
Android Framework omoguava koritenje velikog broja senzora koje ureaji imaju. Neki sen-
zori su hardverski, a neki sofverski. Hardverski su senzori fzike komponente koje su ugraene
u ureaj i mjere odreeno stanje u okolini kao to su: akceleracija, magnetsko polje, kut pod
kojim je ureaj okrenut i sl. Sofverski senzori nisu fzike komponente ureaja, a svoje podatke
mjere pomou jednog ili vie hardverskih senzora. To moe bit linearna akceleracija, gravitacija
itd. Nemaju svi ureaji sve senzore tako da je koritenje senzora razliito od ureaja do ureaja.
Kada se radi sa senzorima, od OS-a se trai SensorManager. SensorManager je objekt koji zna
sve senzore kojima ureaj raspolae. Od SensorManager objekta se trai senzor koji se eli koris-
tt (akceleormetar, iroskop, magnet, tlakomjer itd.). Nakon toga se poruuje SensorManageru
da se ele pratt promjene na odabranom senzoru, a poste se metodom registerListener().
Metoda kao prvi parametar prima SensorEventListener klasu. Budui da e SensorEvenetLis-
tener klasa bit trenutna aktvnost, implementra e se SensorEventListener i potrebne metode.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
126
public class MainActivity extends Activity implements SensorEventListener{

private SensorManager sManager;
private Sensor accelerometer;
private TextView xAxis;
private TextView yAxis;
private TextView zAxis;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

sManager = (SensorManager) getSystemService(Context.SENSOR_SERVICE);
accelerometer = sManager.getDefaultSensor(Sensor.TYPE_ACCELEROMETER);

xAxis = (TextView) findViewById(R.id.xAxis);
yAxis = (TextView) findViewById(R.id.yAxis);
zAxis = (TextView) findViewById(R.id.zAxis);
}

@Override
protected void onResume() {
super.onResume();

sManager.registerListener(this, accelerometer,
SensorManager.SENSOR_DELAY_NORMAL);
}

@Override
protected void onPause() {
super.onPause();
sManager.unregisterListener(this);

}

@Override
public void onAccuracyChanged(Sensor sensor, int accuracy) {
// TODO Auto-generated method stub.

}

@Override
public void onSensorChanged(SensorEvent event) {
if(event.sensor.getType() == Sensor.TYPE_ACCELEROMETER){
xAxis.setText("Acelerometar X: " + event.values[0]);
yAxis.setText("Acelerometar Y: " + event.values[1]);
zAxis.setText("Acelerometar Z: " + event.values[2]);

}

}

}

Primjer 104. Koritenje senzora
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
127
Kada klasa implementra neki listener, u ovom sluaju SenzorEventListener, implementraju se
i odreene metode. SenzorEventListener zahtjeva implementaciju onAccuracyChanged() i on-
SensorChanged(). Svaka obrada senzora traje neki odreeni vremenski interval. Tako je npr.
akcelerometru nuno izraunat x, y i z os, lokacijskom se senzoru trebaju dohvatt lokacijski
podatci pomou GPS-a i sl. Kada akcelerometar dohvat podatke za akceleraciju, aktvira meto-
du onSensorChanged() u koju poalje podatke koji se nalaze u objektu SensorEvent. U primjeru
3.13.1. napisana je implementacija onSensorChanged() metode: dohvaaju se podatci koje je
poslao akcelerometar i ispisuju se u TextViewu za svaku os posebno. Veina senzora vraa po
tri vrijednost, svaku za x, y i z os, a neki senzori samo jednu vrijednost kao npr. senzor svijetla
(upaljeno ili ugaeno). Senzor sluanja se zaustavlja kada aktvnost odlazi u onPause() ili on-
Stop() stanje metodom unregisterListener(). U metodu se poalje objekt koji slua senzor, u
ovom sluaju aktvnost. Treba uzet u obzir da e se metoda onSensorChanged() pokretat svaki
put kada akcelerometar dohvat potrebne vrijednost. Taj e se ciklus ponavljat sve dok se ne
zaustavi sluanje akcelerometra.
Slika 114. Prikaz vrijednost akcelerometra
ZADATAK 23
Napravi aktivnost u kojoj se unosi latitude i longitude vrijednosti i pomou lokacijskog
senzora ispii udaljenost od trenutne lokacije do lokacije unesene pomou latitude i
longitude vrijednosti.
5.15. Google mape
Da bi se Google mape mogle koristt, u emulator treba postavit podravanje prikaza Google
mapa. Svaka verzija OS-a ima osnovnu verziju i verziju s Google mapama. Te su dvije verzije
izdvojene kako bi se olakala aplikacija o nepotrebnim datotekama.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
128
Slika 115. Postavljanje Google Maps API-a
Trenutna je verzija Google mapa za Android Google Maps Android API v2. Da bi se mogao
koristt, skida se biblioteka Google Play Services koja je dostupna u Android SDK Manageru.
Slika 116. Google Play Services biblioteka u SDK Manageru
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
129
Biblioteka se zatm ukljuuje u projekt desnim klikom na projekt -> Build Path -> Add
External Archives.
Slika 117. Dodavanje biblioteke u aplikaciju
Google Play Services se moe nai na sljedeoj putanji:
<android-sdk-folder>/extras/google/google_play_services/libproject/go-
ogle-play-services_lib/libs/
Na putanji se oznai google-play-services.jar datoteka i doda se u projekt. Google mape
koriste klju koji je potreban za prikaz mapa na ureaju. Da bi se klju kreirao, pravi se
raun na Google API konzoli:
htps://code.google.com/apis/console/
U Google API konzoli kreira se novi projekt.
Slika 118. Kreiranje projekta na Google konzoli
Nakon to je projekt gotov, u izborniku se odabire Services i oznai se Google Map API v2.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
130
Slika 119. Postavljanje koritenja Google Maps Android API v2 u Google konzoli
U izborniku se zatm ide na API Access i odabire se Create new Android key.
Slika 120. Dijalog za upisivanje SHA1 kljua + package
Potrebno je unijet i SHA1 certfcate fngerprint aplikacije. Fingerprint je jedinstveni kod
aplikacije kojim se moe jednoznano identfcirat aplikacija, a kreira se pomou MD5
ili SHA1 algoritma. U ovom se sluaju trai SHA1 algoritam. Taj se Fingerprint kreira
pomou Java keytoola koji se nalazi u Java direktoriju. JDK verzija 7 keytool kreira SHA1
key, a JDK verzija 6 MD5 key. Dakle, mora se instalirat JDK 7 kako bi se dobio SHA1 key.
Keytool alat, kojim e se dobit SH1 otsak, nalazi se u direktoriju:
C:\Program Files\Java\jdk1.7.0_17\bin
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
131
SHA1 otsak mora kreirat keystore aplikacija. Budui da je rije o testnom okruenju,
svaki put kada se builda projekt u Eclipse alatu, kreira se i debug.keystore u direktoriju:
C:\Users\<korisniko_ime>\.android
Iz tog se keystora mora dobit SHA1 otsak. Sljedei je korak pokretanje procesa preko
CMD-a (command prompt).
Slika 121. Generiranje SHA1 kljua preko CMD
Dobiveni SHA1 klju je:
13:C4:0B:ED:83:4F:24:BA:24:6E:9E:28:75:93:53:C0:33:3B:01:54
Uz klju se na kraju dodaje i osnovni paket (engl. package) aplikacije. Osnovni se paket
moe nai u manifestu
Slika 122. Package koji se treba upisat zajedno sa SHA1 kljuem
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
132
Pakovanje se dodaje na kraj SHA1 kljua, a izmeu mora bit ;. Kod koji se upisuje u Google
konzolu je:
13:C4:0B:ED:83:4F:24:BA:24:6E:9E:28:75:93:53:C0:33:3B:01:54;android.gauss.androidtutorial
Slika 123 Unos SHA1 kljua + package u Google konzolu
Kada se klikne Create, konzola generira API key koji se kopira i upisuje u manifest u meta ele-
ment izmeu applicaton elementa.
Slika 124. Generirani API key u Google konzoli
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyC7-hw_UKKRh5VkUJ420JbtFwhnVtGOQ2c"/>
Primjer 105. Meta data element za manifest
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
133
Nuno je defnirat i dozvolu (eng. permission) za koritenje mapa i naredit aplikaciji da
ju korist.
<permission
android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
android:protectionLevel="signature"/>

<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE"/>
Primjer 106. Permission element za manifest
Ovu verziju Google Maps API-a mogu koristt samo ureaji koji imaju podrku za OpenGL
ES 2.0. i to se takoer defnira u manifestu:
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
Primjer 107. Uses feature element za OpenGL ES 2
Trebaju se prihvatt jo neke dozvole kao npr. pristup Internetu, dohvaanje lokacije korisnika i
sl. Slijedi primjer manifesta.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
134
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="android.gauss.androidtutorial"
android:versionCode="1"
android:versionName="1.0" >

<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />

<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />

<permission
android:name="com.example.mapdemo.permission.MAPS_RECEIVE"
android:protectionLevel="signature" />

<uses-permission android:name="com.example.mapdemo.permission.MAPS_RECEIVE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission
android:name="com.google.android.providers.gsf.permission.READ_GSERVICES" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />

<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<meta-data
android:name="com.google.android.maps.v2.API_KEY"
android:value="AIzaSyC7-hw_UKKRh5VkUJ420JbtFwhnVtGOQ2c"/>

<activity
android:name="android.gauss.androidtutorial.MainActivity"
android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />

<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
Primjer 108. Manifest sa svim potrebnim elementma za koritenje Android Google Maps API v2
U layoutu aktvnost defnira se da e se koristt MapFragment. Fragment se moe ref-
erencirat direktno u layoutu.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
135
<?xml version="1.0" encoding="utf-8"?>
<fragment xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/map"
android:name="com.google.android.gms.maps.MapFragment"
android:layout_width="match_parent"
android:layout_height="match_parent" />
Primjer 109.Referenciranje Map fragmenta u layoutu aktvnost
Jo je preostalo postavit layout u aktvnost.
package android.gauss.androidtutorial;

import android.app.Activity;
import android.os.Bundle;

public class MainActivity extends Activity{

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
}
Primjer 110. Aktvnost koja sadri Google mape
Slika 125. Prikaz Android Google Maps API v2
ZADATAK 24
Napravi prikaz mape pomou Google Maps API-a i na mjestu gdje korisnik klikne,
postaviti marker. Po mogunosti koristi vlastitu ikonu.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
136
5.16. Multtasking
Mobilni ureaji esto imaju problema s multtaskingom jer priroda mobilnih ureaja jednostav-
no onemoguava pravi multtasking. Pravi multtasking podrazumijeva istodobno pokretanje
vie aplikacija na ureaju kao to je npr. otvaranje i koritenje vie programa u Windowsima
istovremeno. Dakle, na ekranu je mogue vidjet vie aplikacija. Kod Androida takav multta-
sking ne postoji, ali postoji neto slino. Android OS u memoriji pamt nedavno otvorene aplika-
cije i dri ih u stogu. Svaki put kada korisnik otvori aplikaciju i izae iz nje, Android OS ju ubacuje
u svoj stog otvorenih aplikacija. Taj se postupak provodi jer se smatra da e korisnik zasigurno
opet otvorit istu aplikaciju. OS ne mora ponovno otvarat aplikaciju i uitavat sve potrebne
datoteke, ve iz stoga uzima spremljenu aplikaciju i prikazuje ju korisniku. Takvo je rjeenje oda-
brano kako bi se smanjilo vrijeme uitavanja i procesiranja aplikacija. Memorija je stoga u koju
OS sprema otvorene aplikacije ograniena i najee moe pamtt do est aplikacija u memoriji.
Aplikacije koje se nalaze u memoriji mogu se vidjet dugim pritskom tpke Home na ureaju.
Slika 126. Pokrenute aplikacije na ureaju
esto Android OS oslobaa dio memorije kako bi spremio neku drugu aplikaciju u stog
ili kada neke stvari zahtjevaju vie memorije. OS iz stoga izbacuje aplikaciju koja najdue
nije bila koritena.
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
137
Slika 127. Ponaanje Android stoga
Kada OS izbacuje aplikaciju iz stoga, na svim se aktvnostma, koje su bile otvorene za vrijeme
koritenja aplikacije, poziva metoda onDestroy(). Stog omoguava da se korisnik prebacuje iz
jedne aplikacije u drugu. Upravo je ovdje razlika izmeu pravog multtaskinga i multtaskinga
koji postoji u Androidu. U Androidu se ne mogu otvorit i koristt istovremeno dvije aplikacije
na ekranu, ve se korisnik mora prebacivat iz jedne aplikacije u drugu. Nedostatak je multta-
skinga u Androidu i taj to aplikacije koje su u stogu i ekaju na izvoenje nisu u aktvnom stanju.
Prema ivotnom ciklusu aktvnost svaka aktvnost koja nije na ekranu, odlazi u onStop() stanje i
aplikacija ne moe u pozadini izvodit svoj posao. Zbog toga se ni ovakav sluaj ne smatra mult-
taskingom. Moe se rei da se u ovom sluaju multtasking samo simulira i korisnik ima osjeaj
da se odvija pravi multtasking. Pravi multtasking omoguava rad svim otvorenim aplikacijama i
onda kada nisu fokusirane na ekranu (isto kao npr. u Windows operacijskom sustavu).
RAZVOJ APLIKACIJA ZA ANDROID PLATFORMU
138
6. IZRADA ANDROID APLIKACIJE
U ovom e poglavlju bit opisan tjek izrade jednostavne aplikacije za Android. U po-
slovnom objektu najee surauju programer i dizajner. Dizajner dizajnira aplikaciju,
izgled aktvnost, izgled izbornika, boje, po potrebi dodaje slike i sl., tj. odreuje kako e
aplikacija izgledat. Kada dizajner odredi izgled aplikacije, programer moe poet kodi-
rat. Veoma esto aplikacije zahtjevaju da se odreeni sadraj skine s Interneta i da se
prikae u aplikaciji. Tad se skida RSS koji se u aplikaciji parsira, a prikaz se tog sadraja
prilagodi mobilnom ureaju. Taj je sadraj lista elemenata koji se prikazuju u ListActvity
aktvnost. Klikom na jedan element otvara se nova aktvnost s detaljnim prikazom te
vijest. Vijest koje e se parsirat nalaze se na sljedeem linku:
http://www.dalmacijanews.com/DesktopModules/DnnForge%20-%20NewsArticles/Rss.
aspx?TabID=77&ModuleID=382&MaxCount=25
Rije je o RSS-u dalmacijanews.hr portala. Ako se detaljnije pogleda RSS, moe se primi-
jett da sadri odreene elemente od kojih se element <item> ponavlja. Taj element
predstavlja vijest koja e bit prikazana u aplikaciji.
IZRADA ANDROID APLIKACIJE
139
<item>
<title>
Jugo s udarima preko 110km/h diglo goleme valove (FOTO, VIDEO)
</title>
<link>
http://www.dalmacijanews.com/Hrvatska/View/tabid/77/ID/114354/Jugo-s-udarima-preko-110kmh-diglo-goleme-
valove-FOTO-VIDEO.aspx
</link>
<guid isPermaLink="false">f1397696-738c-4295-afcd-943feb885714:114354</guid>
<author>Rade Popadi</author>
<pubDate>Mon, 18 Mar 2013 19:03:00 GMT</pubDate>
<description>
Ovogodi&scaron;nji oujak ne prestaje donositi meteorolo&scaron;ka iznenaenja. Mjesec je poeo
natprosjenom toplinom u prvom desetodnevlju, zatim ve...
</description>
<content>
<br /> Ovogodi&scaron;nji oujak ne prestaje donositi meteorolo&scaron;ka iznenaenja. Mjesec je poeo
natprosjenom toplinom u prvom desetodnevlju, zatim velikom hladnoom u drugom. Snijeg je pro&scaron;li
tjedan zabijelio cijelu unutra&scaron;njost zemlje, a uz obalu Dalmacije je bilo i snjenih pahulja.
Proteklog vikenda su ponegdje u unutra&scaron;njosti zemlje temperature dosezale -5&deg;C, a mraza je
bilo i diljem otoka i obale.<br /> <br /> Ponedjeljak je donio novu izraenu ciklonu koje djeluje na
vrijeme u cijeloj zemlji. Radi se o cikloni Otokar. Zadnja 24 sata atmosferski tlak pao je za ak 25
hektopaskala, a svi smo itekako osjetili juinu i osjetno zatopljenje, pi&scaron;e <a
href="http://www.crometeo.hr" target="_blank"><strong>Crometeo.hr.</strong></a><br /> <br /> Ciklona je
na Jadranu donijela vrlo obilne oborine. Na dijelu sjevernog Jadrana palo je preko 100 litara
ki&scaron;e po metru kvadratnome. ak 177 litara do 19 sati palo je u Poljanama na obroncima Uke. Jko
grmljavinsko nevrijeme iza 17 sati zahvatilo je dio Istre, donosei obilne pljuskove praene
intenzivnom grmljavinom i tuom.<br /> <br /> Nevrijeme je osobito jako pogodilo otok Krk i Rijeku.
Zbog jakih udara juga vatrogasci su poslijepodne imali nekoliko intervencija. Ru&scaron;ila su se
stabla u Kostreni, blizu Sportske dvorane na Zametu, a vatrogasci su intervenirali u Osjekoj ulici na
&Scaron;kurinjama gdje je odletjela tenda.<br /> <br /> Obilne ki&scaron;e bilo je i u Dalmaciji, tako
je u Konavlima i dijelu Dalmatinske zagore palo preko 50mm ki&scaron;e. U unutra&scaron;njosti je
ki&scaron;e najmanje bilo u Slavoniji, a znatno vi&scaron;e na zapadu zemlje gdje se sljedeih sati
oekuje glavnina oborina.<br /> <br /> Najvi&scaron;e dnevne temperature bile su na Jadranu od 11 do
16&deg;C, u unutra&scaron;njosti zemlje od 5 na krajnjem zapadu, do 12&deg;C u zapadnoj Slavoniji.<br
/> <br /> Uz ki&scaron;u, glavno obiljeje vremena tijekom ponedjeljka na Jadranu bio je vjetar. Vei
dio dana puhalo je jako jugo koje je mjestimino imalo este olujne udare &scaron;to je izrazio
povealo valovitost mora. Nizak tlak i juni vjetrovi uzrokovali su plimu koja je mjestimino poplavila
najnie dijelove obale.<br /> <br /> Do 17 sati najjae jugo je puhalo na dubrovakom podruju. Tamo su
udari prelazili 110km/h. Na otoku Mljetu takoer. Na otoku Visu, Palagrui i Krku izmjerni su udari
juga premo 100km/h. U Zadru je jugo na udare puhalo do 93km/h, na Rabu 92km/h, Splitu 90, Makarskoj 73,
a &Scaron;ibeniku 72km/h.<br /> <br /> <iframe width="4400" height="315" frameborder="0"
src="http://www.youtube.com/embed/dFXkFwMNpXI"></iframe> <br /> <br /> <iframe width="440" height="315"
frameborder="0" src="http://www.youtube.com/embed/vQ0L1TEctMQ"></iframe> <br /> <br /> Na prolasku
fronte u kasnim popodnevnim satima, jugo je na sjevernom Jadranu okrenulo na umjeren do jak lebi
(garbin).<br /> <div style="text-align: right;"><strong>D.N.<br /> </strong>Foto:<strong> Zvonimir
Bari&scaron;in, Toni Plazibat, Luka Gerlanc / CROPIX<br /> </strong>Video: <strong>Boris Ba&scaron;i
/ CROMETEO</strong></div>
</content>
<comments>
http://www.dalmacijanews.com/Hrvatska/View/tabid/77/ID/114354/Jugo-s-udarima-preko-110kmh-diglo-goleme-
valove-FOTO-VIDEO.aspx#Comments
</comments>
<slash:comments>0</slash:comments>
<enclosure url="http://www.dalmacijanews.com/Portals/0/images/2013/03/2_jugo_kastela.jpg" length="19216
2" type="image/jpeg"/>
<gallery>
<img id="Rss_77114354_10" src="/Portals/0/images/2013/03/2_jugo_kastela.jpg" alt="Jugo s udarima preko
110km/h diglo goleme valove (FOTO, VIDEO)"/>
<img id="Rss_77114354_12" src="/Portals/0/images/2013/03/Clipboard01.jpg" alt="Jugo s udarima preko
110km/h diglo goleme valove (FOTO, VIDEO)"/>
<img id="Rss_77114354_14" src="/Portals/0/images/2013/03/jugo_kastela2-180313.jpg" alt="Jugo s udarima
preko 110km/h diglo goleme valove (FOTO, VIDEO)"/>
<img id="Rss_77114354_16" src="/Portals/0/images/2013/03/jugo_kastela3-180313.jpg" alt="Jugo s udarima
preko 110km/h diglo goleme valove (FOTO, VIDEO)"/>
<img id="Rss_77114354_18" src="/Portals/0/images/2013/03/jugo_kastela4-180313.jpg" alt="Jugo s udarima
preko 110km/h diglo goleme valove (FOTO, VIDEO)"/>
</gallery>
</item>

Slika 128. Item element u RSS-u
IZRADA ANDROID APLIKACIJE
140
Postoji vie <item> elemenata i svaki element predstavlja jednu vijest. Koliko <item>
elemenata ima u RSS-u, bit e i elemenata u list u ListActvity aktvnost. Title, author,
date i slika u url atributu iz enclosure elementa bit e prikazani u elementu liste. U de-
taljima e bit prikazana ista slika koja je uveana i sljedeeg sadraja:
<content> elementa te title.
Prvo se kreira Android projekt. Projekt se radi za 3.0(API 11) do 4.2.2(API 17). Opisuje se
plan opeg izgleda i navigacija aplikacije. Kada korisnik pokrene aplikaciju, pokrenut e
se Splash ekran koji e bit prikazan sve dok se ne skine i ne parsira sadraj RSS-a. Kada
se sadraj parsira, svi e se element prikazat u ListActvity aktvnost. Kada korisnik
klikne na element u list, otvorit e se nova aktvnost s detaljima te vijest.
Prvo e se kreirat aktvnost naziva SplashActvity i klasa DalmacijaTask koja e nasli-
jedit AsyncTask. U DalmacijaTask e se pokrenut proces skidanja i parsiranja sadraja
RSS-a. Za parsiranje se sadraja moe koristt SAX parser ili DOM parser. Ti parseri su dio
Android SDK i zahtjevaju dodatni kod za uspjeno parsiranje. Kako bi se olakalo par-
siranje, u ovom e se primjeru koristt ve gotova biblioteka koja parsira sadraj preko
anotacija. Kako se kod za spajanje i skidanje sadraja s internetskih stranica ne bi morao
runo pisat, koristt e se gotova biblioteka za spajanje i skidanje sadraja s Interneta,
tj. Apache Commons IO koja se moe nai na sljedeem URL-u:
http://commons.apache.org/proper/commons-io//
Ova biblioteka sadri metodu FileUtls.copyUrlToFile() kojom e se RSS skinut i spremit
u datoteku na ureaju. Nakon toga se sadraj mora parsirat. Za parsiranje se korist
biblioteka Simple sa stranice:
http://simple.sourceforge.net/
Simple se upotrebljava tako da se preko anotacija oznai koja varijabla e predstavljat
koji element u RSS-u. Biblioteka e prema tim anotacijama znat kako parsirat sadraj. U
projektu se mora kreirat direktorij libs i u njega kopirat obje .jar datoteke. Nakon toga
se desnim klikom Add To Build Path biblioteke dodaju u projekt. Osim th dviju bibliote-
ka, koristt e se i biblioteka za skidanje slika s Interneta koje e bit prikazane. Skidanje
slika bi se trebalo odraivat u posebnoj dretvi, a za to je potrebna posebna AsyncTask
klasa. Nakon to se slika skine, postavlja se u ImageView. Nije potrebna posebna Async-
Task klasa za skidanje slika s Interneta jer sve obavlja biblioteka Android Universal Im-
age Loader, a moe se nai na sljedeoj stranici:
https://github.com/nostra13/Android-Universal-Image-Loader
Ukratko opisano RSS sadraj izgleda ovako:
IZRADA ANDROID APLIKACIJE
141
<rss>
<channel>
<title>Dalmacija News</title>
<link>http://www.dalmacijanews.com</link>
<description>RSS feeds for Dalmacija News</description>
<item>
...
</item>
<item>
...
</item>

..jo <item> elemenata...

<channel>
</rss>
Slika 129. Opi izgled RSS-a
Prema opem se izgledu RSS-a izrauju klase koje e se kasnije anotrat kako bi parser znao
kako isparsirat dokument. Budui da nisu potrebni svi podatci, neki e se sadraji RSS-a parsi-
rat, a neki izostavit. Izgled klasa bi bio sljedei: RSS klasa ima objekt Channel u sebi, kreirana
Channel klasa ima objekt Item u sebi(prva e se tri channel elementa ignorirat jer nisu potrebni
za aplikaciju).
package android.gauss.dalmacija.rss;

import java.io.Serializable;

import org.simpleframework.xml.Element;
import org.simpleframework.xml.Root;

@Root
public class Rss implements Serializable{

@Element
private Channel channel;

public Channel getChannel() {
return this.channel;
}

public void setChannel(Channel channel) {
this.channel = channel;
}


}
Primjer 111. RSS klasa
Anotacija @Root oznaava da je RSS klasa prvi element tj. korijen RSS-a. @Element oznaava
da RSS u sebi sadrava element tpa Channel. Vano je imenovat varijable i nazive elemenata u
RSS-u da parser moe prepoznat o kojem se elementu radi. Slijedi Channel klasa:
IZRADA ANDROID APLIKACIJE
142
package android.gauss.dalmacija.rss;

import java.io.Serializable;
import java.util.List;

import org.simpleframework.xml.ElementList;

public class Channel implements Serializable{

@ElementList(inline = true)
private List<Item> item;

public List<Item> getItem() {
return this.item;
}

public void setItem(List<Item> item) {
this.item = item;
}
}
Primjer 112. Channel klasa
Channel klasa sadri samo anotaciju @ElementList, tj. listu elemenata tpa Item. Moe
se primijett da je inline postavljeno kao true to znai da element nisu sadrani u
dodatnom elementu npr. <items>. Ako postoji lista elemenata u RSS-u, sadrani su u
dodatnom elementu npr:
<rss>
<channel>
<items>
<item>
...
</item>
<item>
...
</item>

..jo <item> elemenata...
</items>
<channel>
</rss>
Slika 130. Lista elemenata kada je inline = false
S (inline = true) oznauje da dodatan element u ovom sluaju ne postoji, tj. da su element di-
rektna djeca channel elementa. U Item klasi e se parsirat samo oni element koji su potrebni
(kao i u RSS-u).
IZRADA ANDROID APLIKACIJE
143
package android.gauss.dalmacija.rss;
import java.io.Serializable;
import org.simpleframework.xml.Element;

public class Item implements Serializable{
@Element
private String title;
@Element
private String link;
@Element
private String guid;
@Element
private String author;
@Element
private String pubDate;
@Element
private String description;
@Element
private String content;
@Element
private Enclosure enclosure;

public String getTitle() {
return this.title; }
public void setTitle(String title) {
this.title = title; }
public String getLink() {
return this.link; }
public void setLink(String link) {
this.link = link; }
public String getGuid() {
return this.guid; }
public void setGuid(String guid) {
this.guid = guid; }
public String getAuthor() {
return this.author; }
public void setAuthor(String author) {
this.author = author; }
public String getPubDate() {
return this.pubDate; }
public void setPubDate(String pubDate) {
this.pubDate = pubDate; }
public String getDescription() {
return this.description; }
public void setDescription(String description) {
this.description = description; }
public String getContent() {
return this.content; }
public void setContent(String content) {
this.content = content; }
public Enclosure getEnclosure() {
return this.enclosure; }
public void setEnclosure(Enclosure enclosure) {
this.enclosure = enclosure; }
}
Primjer 113. Item klasa
Klasa Enclosure je element <enclosure> u <item> elementu i iz njega treba izvadit atribut url.
IZRADA ANDROID APLIKACIJE
144
package android.gauss.dalmacija.rss;

import java.io.Serializable;

import org.simpleframework.xml.Attribute;

public class Enclosure implements Serializable{

@Attribute
private String url;

public String getUrl() {
return this.url;
}

public void setUrl(String url) {
this.url = url;
}
}
Primjer 114. Enclosure klasa
Anotacija @Atribute oznaava da se eli oitat atribut url <enclosure> elementa. Ovdje
e se ukratko prikazat kako koristt ovaj parser kada su anotacije u pitanju. Postoji
mnogo mogunost s tm parserom, a mnogi su korisni prikazani i na internetskoj strani-
ci. Sada se moe nastavit pisat DalmacijaTask klasa. Kada se sadraj skine i parsira,
pozvat e se nova List Actvity i zatvorit Splash aktvnost. Preostalo je napravit jo jedan
interface koji e implementrat SplashActvity klasa. Taj e interface imat samo jednu
metodu koja e se pokrenut kada sadraj bude skinut i parsiran.
package android.gauss.dalmacija.asynctasks;

import android.gauss.dalmacija.rss.Rss;

public interface DalmacijaNewsListener {

void onNewsAvailable(Rss rss);
}
Primjer 115. DalmacijaNewsLIstener interface
Slijedi prikaz DalmacijaTask klase:
IZRADA ANDROID APLIKACIJE
145
public class DalmacijaTask extends AsyncTask<Void, Void, Rss>{

private static final String FILE_NAME = "dalmacija_news.xml";
private static final String URL =
"http://www.dalmacijanews.com/DesktopModules/DnnForge%20-
%20NewsArticles/Rss.aspx?TabID=77&ModuleID=382&MaxCount=25";

private Context context;
private File file;
private DalmacijaNewsListener listener;

public DalmacijaTask(Context context) {
this.context = context;
}

protected void onPreExecute(){
file = new File(context.getFilesDir(), FILE_NAME);
if(!file.exists()){
try {
file.createNewFile();
} catch (IOException exception) {
// TODO Auto-generated catch-block stub.
exception.printStackTrace();
}
}
};

@Override
protected Rss doInBackground(Void... params) {

try {
FileUtils.copyURLToFile(new URL(URL), file);
Serializer serializer = new Persister();
Rss rss = serializer.read(Rss.class, file, false);

return rss;

} catch (Exception exception) {
// TODO Auto-generated catch-block stub.
exception.printStackTrace();
}
return null;
}

@Override
protected void onPostExecute(Rss rss) {
if(rss != null){
listener.onNewsAvailable(rss);
}
}

public void setDalmacijaNewsListener(DalmacijaNewsListener listener){
this.listener = listener;
}
}
Primjer 116. Asinkrono skidanje i parsiranje RSS-a
IZRADA ANDROID APLIKACIJE
146
U konstruktor se DalmacijaTask klase alje Context koji se pripisuje privatnoj varijabli. Prije nego
to se pokrene proces skidanja sadraja s internetske stranice, pomou nje se u onPreExecute()
provjerava postoji li dalmacija_news.xml datoteka. Ako ne postoji, kreira se. Zatm se u doIn-
Background() metodi pomou FileUtls.copyUrlToFile() kopira sadraj RSS-a u tu datoteku. Zatm
se instancira objekt Serializer koji read metodom parsira sadraj. Prvi je parametar prva klasa
koja se korist u parsiranju, tj. RSS.class, drugi je datoteka s RSS sadrajem, a trei je parametar
postavljen na true to znai da parsiranje ne mora biti striktno, tj. da u klasama ne moraju bit
postavljeni svi element kao u RSS-u. U onPostExeute() metodi se provjerava je li kreiran RSS
objekt. Ako je kreiran, pokree se metoda listenera koji je postavljen metodom setDalmacijaN-
ewsListener(). Listener e bit SplashActvity.
package android.gauss.dalmacija;

import android.app.Activity;
import android.content.Intent;
import android.gauss.dalmacija.asynctasks.DalmacijaNewsListener;
import android.gauss.dalmacija.asynctasks.DalmacijaTask;
import android.gauss.dalmacija.rss.Rss;
import android.gauss.dalmacijanews.R;
import android.os.Bundle;

import com.nostra13.universalimageloader.core.ImageLoader;
import com.nostra13.universalimageloader.core.ImageLoaderConfiguration;

public class SplashActivity extends Activity implements DalmacijaNewsListener{

private DalmacijaTask downloadDalmacija;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);

ImageLoaderConfiguration config = new
ImageLoaderConfiguration.Builder(getApplicationContext()).build();
ImageLoader.getInstance().init(config);

downloadNews();
}

private void downloadNews(){
downloadDalmacija = new DalmacijaTask(this);
downloadDalmacija.setDalmacijaNewsListener(this);
downloadDalmacija.execute();
}

@Override
public void onNewsAvailable(Rss rss) {

Bundle bundle = new Bundle();
bundle.putSerializable("rss",rss);
Intent intent = new Intent(this, NewsListActivity.class);
intent.putExtras(bundle);

startActivity(intent);
this.finish();
}
}
Primjer 117. Splash Actvity klasa
IZRADA ANDROID APLIKACIJE
147
SplashActvity aktvnost ima postavljen ImageView koji predstavlja sliku. To je obina
aktvnost koja u svom layoutu ima samo sliku. Kada se sadraj s Interneta skine i parsira,
pokree se nova aktvnost kojoj se alje dohvaen objekt s podatcima vijest.
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#333"
android:gravity="center"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".SplashActivity" >

<ImageView
android:id="@+id/imageView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_centerHorizontal="true"
android:layout_marginBottom="158dp"
android:src="@drawable/logooo" />

</RelativeLayout>
Primjer 118.. Layout SplashActvity aktvnost
Slika 131. Splash Actvity
Pokretanjem aplikacije izrauje se konfguracija biblioteke za skidanje slika s Interneta.
To je zahtjev biblioteke koji mora bit izvren. Zatm slijedi skidanje sadraja s Interneta
i parsiranje. Sve se odvija u pozadinskoj dretvi. Ova klasa takoer implementra inter-
face DalmacijaNewsListener koji slua kada se sadraj skida i parsira. Prije nego to se
pokrene AsyncTask za dohvaanje sadraja, ova klasa alje sebe kao sluaa u AsyncTask
klasu kako bi mogla aktvirat metodu onNewsAvailable() kada se dohvat sadraj. Dakle,
kada se ta metoda pokrene, poalje se RSS klasa sa svim dohvaenim podatcima i post-
avlja se pomou Bundle objekta u Intent objekt. Pokree se nova aktvnost, a prethodna
se aktvnost zatvara.
IZRADA ANDROID APLIKACIJE
148
package android.gauss.dalmacija;

import android.app.ListActivity;
import android.gauss.dalmacija.adapters.DalmacijaNewsAdapter;
import android.gauss.dalmacija.rss.Rss;
import android.os.Bundle;

public class NewsListActivity extends ListActivity{

private Rss rss;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

rss = (Rss)getIntent().getSerializableExtra("rss");

DalmacijaNewsAdapter adapter = new DalmacijaNewsAdapter(this,
rss.getChannel().getItems());
setListAdapter(adapter);
}
}
Primjer 119. NewsListActvity klasa
Nova aktvnost je ListActvity aktvnost koja adapterom prikazuje listu elemenata. Ge-
tIntent() metodom se iz Intent objekta dohvat RSS objekt koji je poslan u proloj ak-
tvnost, a lista se Item objekata alje u adapter. U layout direktoriju se kreira nova lay-
out XML datoteka koja se naziva list_item_dalmacija_news. Izgled XML-a je sljedei:
IZRADA ANDROID APLIKACIJE
149
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="80dp"
android:background="@drawable/background"
android:orientation="vertical"
android:padding="5dp" >

<ImageView
android:id="@+id/newsImage"
android:layout_width="80dp"
android:layout_height="80dp"
android:layout_alignParentLeft="true"
android:layout_marginRight="10dp"
android:scaleType="centerCrop" />

<TextView
android:id="@+id/newsTitle"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentTop="true"
android:layout_toRightOf="@id/newsImage"/>

<TextView
android:id="@+id/newsDate"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:layout_alignParentRight="true"/>

<TextView
android:id="@+id/newsAuthor"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentRight="true"
android:layout_above="@id/newsDate"/>

</RelativeLayout>
Primjer 120. list_item_dalmacija_news layout datoteka
Kada je layout sloen, treba se posloit i adapter. Kreirana je nova klasa DalmacijaNews-
Adapter koja nasljeuje klasu BaseAdapter. U konstruktor se poalje Context i list Item
objekata. U getView() metodi se uvijek dohvaa sljedei element i postavlja se slika,
naslov, autor i datum. Sadraj slike se u ovom sluaju skida s Interneta pa je potrebno
nekoliko trenutaka da se slika uita kada se aktvnost pokrene. Moe se umjesto slike
dodatno ubacit i Progress Bar ili sl., a kada se slika uita ProgressBar se uklanja. Dakle,
o skidanju se slika s Interneta brine biblioteka koja je prije bila ukljuena u projekt.
IZRADA ANDROID APLIKACIJE
150
public class DalmacijaNewsAdapter extends BaseAdapter{

private List<Item> itemList;
private LayoutInflater inflater;

public DalmacijaNewsAdapter(Context context, List<Item> itemList) {
this.itemList = itemList;
inflater = LayoutInflater.from(context);
}
@Override
public int getCount() {
return itemList.size();
}
@Override
public Object getItem(int position) {
return itemList.get(position);
}
@Override
public long getItemId(int position) {
return itemList.indexOf(itemList.get(position));
}
@Override
public View getView(int position, View convertView, ViewGroup parent) {

if(convertView == null){
convertView = inflater.inflate(R.layout.list_item_dalmacija_news,
parent, false);
}
ImageView image = (ImageView) convertView.findViewById(R.id.newsImage);

ImageLoader.getInstance().displayImage(itemList.get(position).getEnclosure().ge
tUrl(), image);

TextView title = (TextView) convertView.findViewById(R.id.newsTitle);
title.setText(itemList.get(position).getTitle());

TextView author = (TextView) convertView.findViewById(R.id.newsAuthor);
author.setText(itemList.get(position).getAuthor());

TextView date = (TextView) convertView.findViewById(R.id.newsDate);
date.setText(itemList.get(position).getPubDate());

return convertView;
}
}

Primjer 121. DalmacijaNewsAdapter klasa
Ako se sada pokrene projekt, dobije se sljedei rezultat:
IZRADA ANDROID APLIKACIJE
151
Slika 132. Izgled NewsListActvity aktvnost
Pritsak na element treba otvorit novu aktvnost koja e prikazat detaljni prikaz vijest. ListAc-
tvity sama po sebi sadri metodu koja prepoznaje klik na element i potrebno ju je implemen-
trat. Klikom na element dohvatt e se Item objekt koji je sadran na tom mjestu. Objekt e se
preko Intent objekta poslat u sljedeu aktvnost koja e prikazat detalje te vijest, a podatke e
dobit iz Item objekta koji se poslao u Intent objektu.
IZRADA ANDROID APLIKACIJE
152
package android.gauss.dalmacija;

import android.app.ListActivity;
import android.content.Intent;
import android.gauss.dalmacija.adapters.DalmacijaNewsAdapter;
import android.gauss.dalmacija.rss.Item;
import android.gauss.dalmacija.rss.Rss;
import android.os.Bundle;
import android.view.View;
import android.widget.ListView;

public class NewsListActivity extends ListActivity{

private Rss rss;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

rss = (Rss)getIntent().getSerializableExtra("rss");

DalmacijaNewsAdapter adapter = new DalmacijaNewsAdapter(this,
rss.getChannel().getItems());
setListAdapter(adapter);
}

@Override
protected void onListItemClick(ListView l, View v, int position, long id) {
Item item = (Item)l.getItemAtPosition(position);

Bundle bundle = new Bundle();
bundle.putSerializable("rss", item);
Intent intent = new Intent(this, NewsDetailsActivity.class);
intent.putExtras(bundle);
startActivity(intent);

}
}
Primjer 122.NewsListActvity aktvnost s ListItemClick listenerom
Zatm se kreira nova layout XML datoteka koja e defnirat izgled aktvnost koja e
prikazivati detalje vijest. Naziv datoteke je actvity_news_details.xml.
IZRADA ANDROID APLIKACIJE
153
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background"
android:orientation="vertical" >

<LinearLayout
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >

<TextView
android:id="@+id/title"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_margin="5dp"
android:text="test"
android:textColor="#555"
android:textSize="18sp" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/dotted_tile_xml"
android:orientation="vertical" >

</LinearLayout>

<ImageView
android:id="@+id/image"
android:layout_width="match_parent"
android:layout_height="150dp"
android:layout_margin="5dp"
android:scaleType="centerCrop" />

<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginLeft="5dp"
android:layout_marginRight="5dp"
android:background="@drawable/dotted_tile_xml"
android:orientation="vertical" >

</LinearLayout>

<WebView
android:id="@+id/web"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_margin="5dp"
android:background="#ede5dc" />
</LinearLayout>
</RelativeLayout>
Primjer 123. Actvity_news_details layout datoteka
IZRADA ANDROID APLIKACIJE
154
Ovaj layout sadri i WebView koji e sluit za prikaz internetskog sadraja jer je glavni opis vijest
upisan u HTML-u. To se moe vidjet ako se pogleda <content> element u RSS-u. Zatm se kreira
nova klasa NewsDetailsActvity koja nasljeuje klasu Actvity. U onCreate() metodi se dohvat
Item objekt i spremi se u varijablu, dohvate se svi potrebni element i prikazuje se sadraj Item
objekta u njima.
public class NewsDetailsActivity extends Activity{

private Item item;
private TextView title;
private ImageView image;
private WebView content;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_details);

item = (Item) getIntent().getSerializableExtra("rss");
}

@Override
protected void onResume() {
super.onResume();

title = (TextView)findViewById(R.id.title);
title.setText(item.getTitle());

image = (ImageView) findViewById(R.id.image);
ImageLoader.getInstance().displayImage(item.getEnclosure().getUrl(),
image);

content = (WebView) findViewById(R.id.web);
content.loadData(item.getContent(), "text/html; charset=utf-8", "utf-
8");

content.setBackgroundColor(0x00000000);
if (Build.VERSION.SDK_INT >= 11) // Android v3.0+
try {
Method method = View.class.getMethod("setLayerType", int.class,
Paint.class);
method.invoke(content, 1, new Paint()); // 1 =
LAYER_TYPE_SOFTWARE(API11)
} catch (Exception e) {
}

}
}

Primjer 124. NewsDetailsActvity klasa
Sav se potreban sadraj postavlja u elemente koji su defnirani u layoutu. Moe se primijett da
WebView ne uitava internetsku stranicu, nego se u njega metodom loadData() direktno ubacu-
je HTML sadraj. Veoma je vano postavit drugi parametar kao text/html charset=ut-8 zbog
pravilnog dekodiranja slova. WebView ima potekoe s prikazivanjem pozadine u boji zbog ega
IZRADA ANDROID APLIKACIJE
155
je vrijednost njegove pozadine transparentna. Transparentnost se u verzijama Androida, koji su
vei od 3.0, ne moe postavit na klasian nain. Ovisno o tome koja je trenutna verzija Androida
na ureaju, poziva se metoda koja postavlja pozadinu WebViewa kao transparentnu pozadinu.
Napisana bi aktvnost trebala izgledat kao na sljedeoj slici:
Slika 133. Izgled NewsDetailsActvity aktvnost
Na kraju se ubacuju launcher ikone koje se nalaze u direktorijima LDPI, MDPI; HDPI i XHDPI.
Ikone se postavljaju u odgovarajue direktorije ovisno o svojim dimenzijama. Ikone se mogu
zamijenit novim ikonama koje e dobit ist naziv kao i stare. Nove se ikone nazovu ic_launcher i
prekopiraju se preko starih ikona. Iako sve ikone moraju imat ist naziv, postavljaju se u razliite
direktorije. Launcher ikona se takoer moe zamijenit tako da se svim etirima ikonama dodijeli
ist naziv i prebaci ih se u direktorije koji su za njih namijenjeni. U manifest datoteci se tada mora
navest ikonu koja e sluit kao launcher ikona.
IZRADA ANDROID APLIKACIJE
156
Slika 134. Zamjena launcher ikone u manifestu
IZRADA ANDROID APLIKACIJE
Poduzetnitvo
157
Poduzetnitvo
158
7. PODUZETNITVO
7.1. to je to poduzetnitvo?
Rije poduzetnitvo potjee od francuske rijei entreprendre u znaenju poduzimat neto.
Iako se pojam poduzetnitva najee vee uz pokretanje, voenje i razvijanje poslovnog (po-
duzetnikog) poduhvata, obuhvaa mnogo ire podruje. Poduzetnitvo predstavlja nain raz-
miljanja i djelovanja i ne mora nuno bit vezan uz poslovni poduhvat. Najee se poduzetni-
tvo objanjava kao proces u kojem se iz niega stvara neto. U svakom je poduzeu, neovisno
o njegovoj veliini, djelatnost kojom se bavi i sl., poduzetniko razmiljanje svakog zaposlenika
od iznimne vanost. Pri tome se misli na kreatvnost u rjeavanju problema, sposobnost sa-
gledavanja problema u cijelost, inovatvnost i proaktvnost. Poduzetniko ponaanje rezultra
stvaranjem nove ili poveanjem postojee vrijednost organizacije (za vlasnika i sve ostale koji
su ukljueni u njegovo djelovanje).
Najee se spominju tri osnovne vrste poduzetnitva:
Tradicionalno je poduzetnitvo upravljanje malim i srednjim poduzeima i obrtma kojima je cilj
ostvarenje dobit. S pojmom se tradicionalnog poduzetnitva, poduzetnitvo najee poisto-
vjeuje.
a) Socijalno se poduzetnitvo odnosi na rad i upravljanje organizacijama kojima je osnovni
cilj opedrutvena korist, tj. unaprjeenje kvalitete ivljenja, a ne stjecanje dobit.
b) Korporatvno se poduzetnitvo vee uz poduzetniko ponaanje u korporacijama, odno-
si se na sve zaposlene, a ne samo na najvii menadment.
7.2. Procjena poduzetnikih sposobnost
Uspjeh svakog posla, u najveoj mjeri, ovisi o osobnim karakteristkama poduzetnika,
vjetnama i fnancijskoj situaciji. Prije pokretanja nekog posla u obzir se moraju uzet
sve vjetne i osobine koje su potrebne za voenje posla. imbenici koji utjeu na us-
pjeh svakog poslovnog poduhvata dijele se na: osobne imbenike (predanost poslu,
motvacija, preuzimanje rizika, odluivanje) i vjetne (tehnike i upravljake). Uspjeh
takoer ovisi i o okruenju u kojem se osoba koja vodi posao nalazi. Stoga se u vane
imbenike mora uvrstt i podrka okoline, posebno obitelji. Mnogi uspjeni vlasnici
poduzea nisu posjedovali sve neophodne vjetne i prave osobine, nego su ih nauili i
razvili tjekom vremena.
Vjetne i osobine se mogu unaprijedit na vie naina:
a) Razgovarajte o ovim temama sa svojim prijateljima, obitelji, drugim poduzet-
nicima
b) Promatrajte druge poslovne ljude i pratte one korake koji ih vode ka uspjehu c)
c) Obuavajte se kako biste unaprijedili svoje vjetne i znanja. Moete, na primjer,
uit o knjigovodstvu i prodaji.
PODUZETNITVO
159
d) itajte knjige iz kojih moete nauit vie o onome to vas zanima.
Istraivanja su pokazala kako poduzetnici u veoj mjeri imaju i iskazuju odreene os-
obine, vjetne i ponaanje. Te su vjetne i osobine prikazane u tablici koja slijedi.
Poduzetnike vjetne Poduzetnike osobine
uvjeravanje
pregovaranje
prezentranje
rjeavanje konfikata
strateko razmiljanje
donoenje odluka
umreavanje
kreatvnost
ambicioznost
samouvjerenost
upornost
inicijatva
znatelja
predanost poslu
Tablica 4. Poduzetnike vjetne i osobine
Poduzetniko ponaanje podrazumijeva traenje i prepoznavanje prilika u okruenju, preuzima-
nje inicijatva i prihvaanje rizika. Prije ulaska u svijet poduzetnitva, svaki bi poduzetnik trebao
ocijenit one vjetne i osobine koje su kljune za uspjeh njegovog poslovnog poduhvata. Sljede-
i je korak izrada plana za unaprjeenje onih vjetna i osobina koje nisu dobile zadovoljavajuu
ocjena, a nakon toga njegova realizacija.
7.3. Poslovni plan
Poslovni je plan pisani dokument koji sadri detaljno razraen plan o ulaganju u posao, buduim
rezultatma poslovanja i varijantnim rjeenjima u sluaju moguih rizinih situacija. Temeljna je
okosnica planiranja, pokretanja, fnanciranja, organiziranja, voenja, razvijanja i kontrole po-
duzetnikog pothvata tjekom cjelokupnog vijeka trajanja. Ne postoji univerzalna matrica za
sastavljanje poslovnih planova, ali zato postoje standardi i protokoli koji plan ine razumljivim
i jasnim. esto se smatra da je poslovni plan dokument koji slui iskljuivo u svrhu odobra-
vanja kredita od strane fnancijskih insttucija. Meutm, najei je korisnik poslovnog plana
poduzetnik sa svojim tmom ljudi koji e pratt rast i razvoj tvrtke. Poslovni plan usmjerava
poslovanje i olakava donoenje poslovnih odluka. Moe ga izradit poduzetnik ili konzultant
ukoliko poduzetnik nema dovoljno iskustva. Kada poslovni plan izrauje konzultant, poduzetnik
i dalje ima veliku ulogu u njegovoj izradi. Zaduen je prikazat sve podatke koji su nuni za izradu
poslovnog plana. Poduzetnik odgovara za tonost prikazanih podataka, a konzultant za izraun.
POSLOVNI PLAN
160
Slijedi primjer sadraja poslovnog plana:
1. PODATCI O PODUZETNIKU
2. POLAZITE
2.1. Nastanak poduzetnike ideje
2.2. Vizija poduzetnikog pothvata
3. PREDMET POSLOVANJA
4. LOKACIJA
5. TEHNIKO TEHNOLOKI ELEMENTI ULAGANJA
5.1. Opis strukture ulaganja
5.2. Struktura i broj zaposlenika
6. TRINA OPRAVDANOST
6.1. Trite nabave
6.2. Trite prodaje
6.3. Procjena ostvarenja prihoda
7. FINANCIJSKI ELEMENTI PODUHVATA
7.1. Investcije u osnovna sredstva
7.2. Investcije u obrtna sredstva
7.3. Trokovi poslovanja
7.4. Proraun amortzacije
7.5. Izvori fnanciranja
7.6. Projekcija rauna dobit i gubitka
7.7. Financijski tjek
7.8. Ekonomski tjek
8. POKAZATELJI UINKOVITOSTI
9. ZAKLJUNA OCJENA PROJEKTA
U prvom se dijelu poslovnog plana Podatci o poduzetniku zapisuje krai ivotopis po-
duzetnika koji pokree postojee poslovanje ili je njegov nositelj. Ako je rije o part-
nerstvu, zapisuju se ivotopisi oba partnera i biljee se njihovi ulozi. U ivotopis treba
navest poslove koje je poduzetnik do sada obavljao (dokaz o znanjima i vjetnama koje
je poduzetnik stekao) i stupanj njegovog obrazovanja (najvie zavreno obrazovanje
i dodatna usavravanja). Navode se i sljedei podatci: iskustva na slinim poslovima,
bivi poslodavci, priznanja i diplome koje su ostvarene u dosadanjem radu, poznavanje
POSLOVNI PLAN
161
stranih jezika, poznavanje rada na raunalu i sl.
U drugom se dijelu Polazite objanjava kako je poduzetnik doao na ideju bavit se poslom
kojim se bavi. U odabiru ideje za posao veina poduzetnika uzima u obzir znanja i vjetne koje
posjeduje, ali i znanja i vjetne ostalih lanova obitelji. Nakon to su defnirana steena znanja
i vjetne i okolnost koje su dovele do pokretanja odreene poduzetnike ideje, opisuje se plan
razvoja poslovanja, tj. poslovne ideje.
Trei dio poslovnog plana Predmet poslovanja opisuje djelatnost kojom e se obrt ili drutvo s
ogranienom odgovornou bavit. Potrebno je navest: sjedite djelatnost, osnivae, temeljni
kapital (ako je u pitanju d.o.o.), datum osnivanja, rjeenje o registraciji (broj registracije) i dje-
latnost za koje je obrt ili drutvo s ogranienom odgovornou registrirano.
Lokacija je dio poslovnog plana koji podrazumijeva sjedite obrta ili drutva s ogranienom od-
govornou. Ako se djelatnost obavlja izvan sjedita djelatnost, navode se razlozi zato je to
tako. Primjerice, za obavljanje zidarske djelatnost sjedite nije toliko bitno jer se svi poslovi
obavljaju na mjestu koje klijent odredi, ali za trgovaku djelatnost lokacija ima veliku ulogu u
ostvarenju buduih prihoda pa je nuno opisat lokaciju, povezanost s glavnim cestama, osigu-
rana parkiralina mjesta za kupce i sl. Postoje i djelatnost kod kojih je lokacija nebitna, primje-
rice IT sektor.
Tehniko-tehnoloki element ulaganja investtorima daju informacije o samom tjeku poslov-
nog procesa (npr. za djelatnost je kemijskog ienja iznimno vaan detaljan opis procesa ie-
nja kako bi se mogla napravit raunica i shvatt poslovni proces). Sljedei je korak opis ulaganja,
tj. tona specifkacija ulaganja. Dakle, poduzetnik mora odredit koliko je sredstava potrebno
odvojit za osnovna sredstva (strojeve, namjetaj, aparate, raunala i sl.), a koliko za obrtna
sredstva (novac na iro-raunu i zalihe repromaterijala).
Ako se poslovni plan koristt u svrhu dobivanja kredita, treba napomenut da veina programa
za obrtna sredstva ne doputa vie od 30 % ukupne investcije. U dijelu Tehnikotehnolokih
elemenata ulaganja opisuje se i kako e se djelatnost obavljat. Kada poduzetnik sam obavlja
djelatnost, nema potrebe zapoljavat druge djelatnike. Ali ako poduzetnik namjerava zapolja-
vat i druge djelatnike, mora odredit koju strunu spremu djelatnici trebaju imat, koje e po-
slove obavljat, hoe li bit zaposleni na odreeno ili neodreeno vrijeme i koliku e mjesenu
plau imat. Poduzetnik treba bit upuen i u postojee programe sufnanciranja i zapoljavanja
pojedinih skupina nezaposlenih (vie informacija u Centru za poduzetnitvo Osijek ili Hrvatskom
zavodu za zapoljavanje).
U estom se dijelu Poslovnog plana Trina opravdanost naglasak stavlja na trite nabave, pro-
daju i procjenu ostvarenja prihoda. Potrebno je napravit i popis dobavljaa s kojima e podu-
zetnik suraivat. Ukoliko poduzetnik posluje s vie dobavljaa i ako su dobavljai s podruja
Republike Hrvatske, takoer se moraju navest. U planiranju nabave potrebno je odgovorit na
sljedea pitanja: to e se, po kojoj cijeni (cijena sirovine direktno utjee na kvalitetu i cijenu
fnalnog proizvoda) i kod kojeg dobavljaa nabavljat, koji su rokovi isporuke, postoje li dogo-
voreni uvjet plaanja, koliki su trokovi nabave (prijevoz, carina, osiguranje). Mora se vodit
rauna i o sirovinama koje su u zalihama. Trite prodaje je izuzetno vaan dio poslovnog plana
jer odreuje to e se i po kojoj cijeni ili cijenama proizvodit (cijenu treba usporedit s cijenom
koju nudi konkurencija), na kojem tritu (trite opine, mjesta, grada, upanije, Republike
POSLOVNI PLAN
162
Hrvatske ili ire) i tko su ciljni kupci (djeca, mladi, umirovljenici, pojedinci, tvrtke). Analiza se
trita prodaje korist i podatcima Hrvatske gospodarske komore i Hrvatske obrtnike komore,
statstkim podatcima, utm stranicama i razliitm bazama podataka dostupnim u Centru za
poduzetnitvo Osijek. Prema svim se tm podatcima i planu prodaje odreuju proizvodni kapaci-
tet i prihodi koje se mogu ostvarit. U ovom se dijelu navode svi konkurent i sve one prednost
koje poduzetnik ima u odnosu na konkurenciju.
Najzahtjevniji su dio u izradi poslovnog plana Financijski element poduhvata i poduzetnici se
najee oslanjaju na strunu pomo u njegovoj izradi. Potrebno je napravit granicu izmeu
investcije za osnovna (dugotrajna imovina: strojevi, namjetaj, oprema, aparat i sl.) i obrtna
sredstva (sredstva koja su trajno na raspolaganju za kupovinu repromaterijala i plaanje dospje-
lih obveza). Ukupne trokove poslovanja ine svi oni trokovi koji su navedeni u prethodnim
poglavljima poslovnog plana: trokovi osoblja (bruto plae vlasnika i djelatnika), trokovi siro-
vina koje su potrebne za fnalizaciju vlasttog proizvoda ili usluge i svi ostali iznenadni trokovi.
Amortzacija je takoer troak, ali njega poduzetnik ne plaa sa svog iro-rauna. Izraunava se
samo za dugotrajnu imovinu, tj. osnovna sredstva prema Pravilniku o amortzaciji NN 54/01.
Tablica se sa stopama amortzacije nalazi u dodatnim radnim listovima.
U dijelu Izvori fnanciranja pravi se jasna granica izmeu vlastth sredstava koja poduzetnik
unosi u investciju i kreditnih sredstava koja je zatraio od odabrane poslovne banke i programa
kreditranja. Navode se i uvjet kreditranja (kamatna stopa, poek, rok otplate, traeni iznos,
anuitet i interkalarna kamatna stopa), a od banke koja kreditra poduzetnika, trai se plan otpla-
te kredita. Nakon to su prihodi izraunat, a trokovi razraeni, usporeuju se i izvodi se bruto
dobit. Bruto dobit se umanjuje za 20% (koliko iznosi porez na dobit) i dobiva se neto dobit.
Pokazatelji uinkovitost podrazumijevaju izraune odreenih parametara prema unaprijed
odreenim formulama. U formule treba unijet podatke koji su dobiveni u raunu dobit i gubi-
taka te planirani broj djelatnika koje elite zaposlit.
ukupna investcija / broj zaposlenih =
investcija u osnovna sredstva / broj zaposlenih =
bruto dobit x 100 / ukupne investcije =
neto dobit x 100 / ukupne investcije =
bruto plae / broj zaposlenih =
U zakljunoj se ocjeni saimlje sve to je navedeno u poslovnom planu. Iste se broj osoba koje
poduzetnik namjerava zaposlit, prihode koje eli ostvarit i ocjene uinkovitost. Da bi se dobila
cjelovita slika investcije, jo se jednom navodi: banka od koje poduzetnik trai kreditna sred-
stva (ukoliko ih trai), uvjet potraivanja (kamatna stopa, poek, rok otplate) i svrha (osnovna
sredstva, obrtna sredstva).
POSLOVNI PLAN
163
7.4. Marketng i marketng plan
Ameriko marketnko udruenje marketnga marketng defnira kao [17]. aktvnost, niz inst-
tucija i procesa za kreiranje, komuniciranje, isporuku i razmjenu ponuda koje imaju vrijednost za
kupce, klijente, partnere i drutvo u cjelini. Marketnki su ciljevi krajnji ishod koji poduzee eli
ostvarit implementacijom i provoenjem strategije marketnga. Tri su vrste ciljeva:
a) ciljevi koji su orijentrani na prodaju
b) ciljevi koji su orijentrani na proizvod
c) trino orijentrani ciljevi [18].
Koncept marketnkog spleta (marketng mix) marketng promatra kao cjelinu koja se sastoji od
etri elementa:
a) proizvoda (engl. product)
b) cijene (engl. price)
c) distribucije (engl. place) i
d) promocije (engl. promoton).
Prema poetnim slovima elemenata marketnkog spleta, ovaj je koncept poznat kao 4P kon-
cept. Klju je marketnga identfkacija kupaca jer bez kupaca koji kupuje proizvod ili uslugu,
nema ni posla. Proces je segmentacije kupaca podjela trita u grupe potroaa koji imaju odre-
ene zajednike karakteristke. Pet je faza segmentacije:
a) identfcirat postojeu poziciju poduzea na tritu
b) identfcirat varijable za segmentaciju i opisat potencijalne segmente
c) vrednovat potencijale svakog segmenta i izabrat ciljni segment
d) identfcirat i razvit odgovarajuu strategiju pozicioniranja
e) izabrat i primijenit odgovarajuu marketnku strategiju
Marketnki strunjak rijetko moe zadovoljit svakoga na tritu. Ne sviaju se svima iste ita-
rice, hotelske sobe, restorani, automobili, koledi ili flmovi. Stoga marketnki strunjaci trite
dijele na segmente. Pregledom demografskih i bihevioralnih razlika meu kupcima, oni ident-
fciraju i profliraju razliite grupe kupaca koji su skloni ili zahtjevaju sline proizvodne i usluen
spletove. Marketnki strunjak tada odluuje koji segment predstavljaju najveu priliku, odno-
sno, koja su njihova ciljna trita. Za svako ciljno trite tvrtka razvija marketnku ponudu [19].
Marketnki je plan temelj svih marketnkih aktvnost i mora bit u skladu sa strategijom poslo-
vanja, tj. stratekim planom. Marketnki plan ima sljedee elemente i korake:
a) Saetak
b) Prvi korak: Defniranje svrhe (misije) poslovanja
c) Drugi korak: Analiza situacije
d) Trei korak: Utvrivanje marketnkih ciljeva
MARKETING I MARKETING PLAN
164
e) etvrti korak: Selekcija ciljnog trita
f) Pet korak: Oblikovanje marketnkih strategija
g) esti korak: Provedba marketinkih aktvnost
h) Sedmi korak: Kontrola marketnkih aktvnost
Saetak je marketnkog plana kratki prikaz najvanijih informacija koje su prikazane u mar-
ketnkom planu. Pie se tek nakon to je cijeli marketnki plan gotov, ali se u planu nalazi
na prvom mjestu. Svrha je poslovanja, tj. misija defnirana poslovnim, tj. stratekim planom.
Analiza situacije najee se vri za izradu SWOT analize. Nakon to se marketnkim planom
utvrdi svrha poslovanja i analizira situacija u kojoj se poduzee nalazi, slijedi defniranje mar-
ketnkih ciljeva koji proizlaze iz analize situacije. Ciljevi moraju bit defnirani i oblikovani tako
da doprinose ostvarenju ukupnog cilja poduzea. Poduzee istovremeno moe imat vie ciljeva
razliite vanost, ali zajedniki moraju doprinijet ostvarenju ukupnog cilja marketnga, a ukupni
cilj marketnga mora doprinosit ostvarenju ukupnog cilja poduzea. Selekcija je ciljnog trita
sljedea faza u izradi marketnkog plana. Proces je segmentacije temelj za odabir ciljnog trita,
tj. skupine potroaa kojoj e se prilagoavat marketnki splet tvrtke. Nakon to se tvrtka odlu-
ila za svoje ciljno trite i segment kupaca, kreira ponudu i oblikuju se marketnke strategije.
Strategije trebaju odgovorit na sljedee pitanje: kako ostvarit zacrtane marketnke ciljeve uz
postojee resurse? Marketng poznaje brojne strategije, a poduzetnik bira onu koju smatra naj-
boljom za svoju trenutnu situaciju i prilagoava ju u skladu sa specifnostma vlasttog poslova-
nja i okoline u kojoj djeluje. Zadnja dva koraka predstavljaju operatvne aktvnost marketnkog
plana. Za provedbu je marketnkih aktvnost potrebno provest sljedee aktvnost:
a) koordinirat marketnke aktvnost
b) omoguit protok informacija unutar poduzetnikog subjekta
c) dat ovlatenje djelatnicima za donoenje i provedbu odluka
Aktvnost se kontroliraju zbog moguih odstupanja od plana. Ako neka aktvnost odstupa od
plana, mora se korigirat.
MARKETING I MARKETING PLAN
165
7.5. E-marketng
E-marketng ili Internet marketng je oglaavanje proizvoda i usluga putem Interneta. Promovira
internetsko sjedite, internetsku trgovinu, landing page ili blog upotrebom jednog ili vie servi-
sa (sredstava) koji su dostupni na Internetu i/ili privlai posjettelje ciljanom marketnkom po-
rukom. Informatka je era najbri rastui fenomen kojeg drutvo poznaje. Danas se na Googleu
obavlja vie od 30 milijardi pretraivanja mjeseno. Za doseg od 50 milijuna radiju je trebalo
38, televiziji 13, Internetu 4, iPodu 3, a Facebooku 2 godine. Praenje razvoja novih trendova
iznimno je zahtjevan posao i jedan je od kljunih faktora uspjene online kampanje. Internet
oglaavanje ima nekoliko prednost u odnosu na konvencionalne oblike. Kljuna je prednost
njegova niska cijena, ciljane skupine i lako mjerljiv povrat na investciju. Oglaiva moe pratt
sve relevantne statstke o posjetteljima svoje internetske stranice i kupcima pojedinog proi-
zvoda ili usluge. U svakom mu je trenutku poznato isplat li se neka investcija i na vrijeme moe
prekinut one kampanje koje ne ostvaruju zadovoljavajui povrat. Ako je u promociji propalo
50% novca, znai da je promocija promaila ciljanu skupinu ili je odaslana putem krivog medija
u krivo vrijeme. Dakle, uinci se klasine promocije ne mogu izmjerit. Zbog mogunost mjere-
nja rezultata i direktnog utjecaja na tjek kampanje Internet marketng ima veliku popularnost
i iroku primjenu.
Internet marketng poznaje est koraka kojima je cilj poveanje prodaje:
a) izrada marketnke strategije: izrada ciljeva kampanje, identfkacija kupaca itd.
b) izrada internetskog sjedita: dizajn, jednostavna navigacija, podrka za mobilne platorme itd.
c) privlaenje posjettelja: newsleter, blog, Facebook, Twiter, Forsquere,Google
d) privlaenje posjettelja: zanimljiv sadraj, poziv na akciju, privlane ponude itd.
e) konverzija potencijalnog kupca u kupca (prodaja): jednostavna kupovina, isporuka itd.
f) mjerenje rezultata: posjettelji, bounce rate, troak po konverziji itd.
E-mail marketng je alat koji se svakodnevno korist u komunikaciji s tritem. Zakon o elektro-
nikim komunikacijama NN 73/08, lanak 107 navodi kako je uporaba pozivnih sustava, s ljud-
skim posredovanjem ili bez njega, telefaksnih ureaja ili elektronike pote, ukljuujui kratke
tekstovne poruke (SMS) i multmedijske poruke (MMS), u svrhu izravne promidbe i prodaje
doputena samo uz prethodno pribavljenu privolu pretplatnika ili korisnika usluga. Elektro-
nika pota e-marketnga treba bit prilagoena mobilnim ureajima. Optmizacija se elektro-
nike pote za mobilne ureaje poste izbjegavanjem velikih slika, smanjenjem koliine teksta
i izbacivanjem tablica. SEO je postupak optmizacije internetskog sjedita (sadraj i struktura) i
ostvarivanje kvalitetnih linkova prema internetskom sjeditu, a cilj je postzanje bolje organske
pozicije na trailicama. Rezultat istraivanja koje je proveo Google pokazuju da 97% korisnika
trailice ne gleda rezultate iza desetog mjesta. Kako veina kupaca dolazi do internetskih sjedi-
ta putem trailica SEO, proces je kljuan za privlaenje korisnika. Problem je to Google algo-
ritam za odreivanje vanost internetskog sjedita korist preko 200 imbenika, a nemogue je
izvrit optmizaciju svih. Svi ovi imbenici djeluju zajedno i teko je odredit koji od navedenih
imbenika ima veu vanost.
E-MARKETING
166
7.6. Financiranje poslovnog poduhvata
PROCJENA TROKOVA POKRETANJA I POSLOVANJA
Osoba koja pokree poslovni poduhvat mora bit upoznata sa svim trokovima koji se tjekom
poslovanja pojavljuju. Upravo je nerealno sagledavanje i procjena trokova jedna od najveih i
najeih pogreaka u pokretanju poslovanja. Trokovi se defniraju kao novac (vrijednost) koji
se ulae u proizvodnju i prodaju proizvoda/usluga. Trokovi se moraju znat da bi se odredile
cijene proizvoda/usluga, da bi se kontrolirale i reducirale u donoenju boljih poslovnih odluka i
da bi se mogla lake planirat budunost. Visina trokova ovisi o vrst posla kojom se pojedinac
eli bavit i o pravnom obliku poslovanja. Trokovi su:
a) trokovi osoblja: neto plaa zaposlenika uveana za doprinose na i doprinose iz plae te
porez i prirez.
b) materijalni trokovi: svi trokovi vezani uz nabavu sirovina i materijala, sitnog inventara,
rezervnih dijelova, energiju, gorivo. Trokovi se izraunaju tako da se pomnoi koliina sirovina,
materijala, gotovih proizvoda, energije i drugih materijalnih inputa s njihovom nabavnom cije-
nom.
c) trokovi kapitala: svi trokovi vezani uz posueni novac (kamate na kreditna sredstva,
prekoraenje na iro-raunu i amortzacija).
d) ostali trokovi: trokovi vode, struje, telefona, grijanja, uredskog materijala, najamnina,
marketnga, osiguranja, lanarine HOK i HGK, raunovodstvenog servisa, bankovne naknade,
poreza na tvrtku i ostalo.
Trokovi se dijele na fksne i varijabilne. Fiksni se trokovi javljaju neovisno o tome obavlja li se
djelatnost ili ne. To su trokovi najamnine, osiguranja, telefonska pretplata, leasing, kamate itd.
Varijabilni trokovi su direktno vezani uz samu djelatnost i u ovisnost su s koliinom proizvodnje
(sirovine, energija, transportni trokovi itd.).
PRAVNI OBLICI
Pri odabiru se pravnog oblika u obzir treba uzet: djelatnost koju e osoba obavljat, odgovor-
nost, porez, nain voenja poslovnih knjiga i trokova i sloenost registracije.
OBRT
Obrt je samostalno i trajno obavljanje doputenih gospodarskih djelatnost od strane fzike
osobe sa svrhom ostvarivanja dohotka, a koji se ostvaruje proizvodnjom, prometom ili prua-
njem usluga na tritu.
Tri su vrste obrta:
a) Vezani su obrt oni obrt za ije se obavljanje trai odreena struna sprema, ispit o
strunoj osposobljenost ili majstorski ispit (npr. frizer). Svi su vezani obrt navedeni u Pravilniku
o vezanim i povlatenim obrtma i nainu izdavanja povlastca [20].
b) Slobodni su obrt svi obrt koji nisu navedeni u pravilniku i za njihovo obavljanje nije
vana struna sprema nit je potrebno imat ispit o strunoj osposobljenost ili majstorski ispit.
FINANCIRANJE POSLOVNOG PODUHVATA
167
c) Povlateni se obrt smiju obavljat samo na temelju povlastce koju izdaje nadleno mi-
nistarstvo (ribarstvo, rudarstvo, proizvodnja i prodaja oruja).
Trokovi osnivanja
Obrt se osnivaju u Uredima dravne uprave i Slubi za gospodarstvo. Trokovi osnivanja su
obrtnica (200,00 kn) i upravna pristojba (270,00 kn). Djelatnost trgovine i ugostteljstva trebaju
dodatnu potvrdu kojom se dokazuje da su zadovoljeni minimalno-tehniki uvjet za rad (uprav-
na pristojba 420,00 kn).
Troak doprinosa i poreza
Ako osoba nije zaposlena ili osigurana po nekoj drugoj osnovi (npr. kod poslodavca), duna je
obraunavat i uplaivat doprinose za mirovinsko i zdravstveno osiguranje. Osnovica za utvri-
vanje navedenih doprinosa mijenja se svake godine. Za 2013. godinu osnovica iznosi 5.133,55
kn. Prema navedenoj bi osnovici mjesena davanja za doprinose iznosila 1.720,71 kn. Prvu go-
dinu poslovanja obrtnik poetnik ne plaa porez na dohodak, a nakon podnoenja prve pore-
zne prijave, odreuje se iznos poreza i prireza koji obrtnik mora platt za prethodnu godinu.
Odreuje mu se i iznos akontacije poreza i prireza za sljedeu godinu. Obrtnici su obvezni plaat
lanarinu Hrvatskoj obrtnikoj komori. Obrtnici s podruja grada Osijeka plaaju lanarinu u
iznosu od 93,00 kn mjeseno (uplauje se tromjeseno). Obrtnici su obveznici poreza na doho-
dak (stope 12%, 25% i 40 %) i na zahtjev mogu postat obveznici poreza na dobit (20 %).
Sljedee su prednost osnivanja obrta:
a) brzina i niski trokovi osnivanja
b) podizanje novca sa iro rauna bez ikakvog pravdanja (svi novci koji nisu opravdani
porezno priznatm trokovima, smatraju se dohotkom i oporezuju se)
c) jednostavnije i jefinije knjigovodstvo
d) PDV se plaa samo ako je naplaen od kupaca
e) jednostavnije i jefinije mijenjanje podataka (promjena adrese, djelatnost i sl.).
f) brzina i niski trokovi zatvaranja obrta
J.D.O.O.
Izmjenama Zakona o trgovakim drutvima, otvorena je mogunost osnivanja jednostavnog
drutva s ogranienom odgovornou. Jednostavni d.o.o. ima veinu obiljeja d.o.o., ali se razli-
kuje od d.o.o. jer ima smanjeni prag temeljnog kapitala (deset kuna), smanjene trokove osni-
vanja i ubrzani postupak osnivanja. Jednostavni d.o.o. ima zakonske rezerve u koje mora unijet
etvrtinu iznosa dobiti drutva iskazane u godinjim fnancijskim izvjeima umanjene za iznos
gubitka iz prethodne godine.
Trokovi osnivanja j.d.o.o.
Prvi je korak u osnivanju j.d.o.o. odabir imena za tvrtku, a nakon toga odlazak u servis HITRO.HR
ili ured javnog biljenika. Kod javnog se biljenika potpisuje i ovjerava sva potrebna dokumenta-
FINANCIRANJE POSLOVNOG PODUHVATA
168
cija za osnivanje tvrtke (Zapisnik o osnivanju, Prijava za upis drutva u sudski registar i potvrda
o nepostojanju duga). Troak javnog biljenika iznosi 500,00 kn, a ovjera izjave o nepostojanju
dugovanja 47,50 kn. Sa svom se dokumentacijom odlazi u banku, otvara se raun i uplauje se
temeljni kapital u minimalnom iznosu od deset kuna.
Treba se uplatt i sudska pristojba u iznosu od 60,00 kn i naknada za objavu oglasa u Narodnim
novinama u iznosu od 200,00 kn. Ponovno se odlazi u ured javnog biljenika sa svom dokumen-
tacijom i podnosi se zahtjev za osnivanje j.d.o.o. Ako je cjelokupna dokumentacija ispravna,
Registar Trgovakog suda mora u roku od 24 sata dostavit rjeenje o osnivanju. Ukupan troak
osnivanja j.d.o.o. iznosi 807,50 kn.
S rjeenjem o registraciji odlazi se u HITRO.HR i popunjava se obrazac za dobivanje Obavijest
o razvrstavanju poslovnog subjekta prema NKD (Nacionalna klasifkacija djelatnost). HITRO.
HR alje obrazac u Dravni zavod za statstku koji za jedan dan alje Obavijest o razvrstavanju
poslovnog subjekta prema NKD.
D.O.O.
Trgovako drutvo je pravna osoba koja samostalno i trajno obavlja gospodarsku djelatnost kako
bi ostvarila dobit proizvodnjom, prometom robe ili pruanjem usluga na tritu. D.o.o. je trgo-
vako drutvo u koje jedna ili vie pravnih ili fzikih osoba ulau svoje temeljne uloge i sudjeluju
u unaprijed dogovorenom temeljnom kapitalu (glavnici).
Trokovi osnivanja d.o.o.
Drutvo se s ogranienom odgovornou osniva na temelju Izjave o osnivanju (ako drutvo osni-
va samo jedna osoba) ili Drutvenog ugovora (ako postoji vie osnivaa), a oba se sastavljaju kod
javnog biljenika. Prvi je korak u osnivanju d.o.o. prikupljanje osnovnih informacija o osnivanju,
obrazaca i uplatnica na HITRO.HR. Javni biljenik izrauje cjelokupnu dokumentaciju za osniva-
nje, a cjelokupni trokovi iznose oko 2.500,00 kn. Ostali su trokovi: sudska pristojba (400,00
kn), objava oglasa u Narodnim novinama (900,00 kn), potvrda o uplat osnivakog uloga (39,00
kn), obavijest o razvrstavanju (25,00 kn) te online osnivanje (100,00 kn). Za osnivanje d.o.o. po-
trebno je imat 20.000,00 kn osnivakog kapitala koji se polae na raun tvrtke. Osnivaki ulog
moe bit u novcima ili stvarima: ulog u novcu mora iznosit minimalno 10.000,00 kn, a ako su
ulog stvari, nuna je procjena.
Troak doprinosa i poreza
Ako je osoba nezaposlena i otvara d.o.o., nije obvezna bit u radnom odnosu, ali obvezna je
plaat doprinose na poduzetniku plau. Osnovica za obraun doprinosa iznosi 8.653,70 kn, a
doprinosi za mirovinsko i zdravstveno osiguranje 2.911,97 kn. Meutm, osoba se moe prija-
vit i na manju osnovicu, a doprinosi se uplauju ovisno o visini iznosa plae. D.o.o. i j.d.o.o. su
obveznici poreza na dobit koji iznosi 20 %. Sve su tvrtke obvezne plaat i prirez na porez (visina
se odreuje ovisno o mjestu registracije; npr. za Osijek je prirez 13 %). D.o.o. je obvezan plaat
lanarinu HGK-u u iznosu od 55,00 kn (za male poslovne subjekte).
FINANCIRANJE POSLOVNOG PODUHVATA
169
PROCJENA CIJENA PROIZVODA/USLUGA
Kalkulacija je izraunavanje ukupnih trokova proizvodnje i prodaje proizvoda ili pruanja usluga.
IZRAUN TOKE POKRIA
Toka pokria je toka u kojoj su prihodi jednaki rashodima, tj. koliko se proizvoda ili usluga
mora prodat da bi se bilo na nitci.
AMORTIZACIJA
Amortzacija je gubitak vrijednost opreme i strojeva u dugotrajnoj imovini poduzea i kao
takva predstavlja troak. Obraunava se na dugotrajnu imovinu, ija je pojedinana nabavna
vrijednost vea od 2.000,00 kn. Osnovna sredstva amortziraju se prema vijeku trajanja, odno-
sno stopi amortzacije [21].
Financiranje poslovnog poduhvata
Prije pokretanja poslovanja procjenjuje se vrijednost cjelokupne investcije, tj. iznos koji je do-
voljan za neometano poslovanje. Sljedei je korak pronalaenje izvora sredstva za fnanciranje
poslovnog poduhvata, a neki od izvora su:
a) vlastta sredstva
b) posudba od obitelji i prijatelja
c) kreditna sredstva
d) poslovni aneli
e) leasing
f) dravne potpore
FINANCIRANJE POSLOVNOG PODUHVATA
170
8. LITERATURA
[1] Dribbble LLC, www.dribble.com
[2] Android Developers, www.developers.android.com
[3] GIMP (GNU Image Manipulaton Program), www.gimp.org
[4] Color Scheme Designer, www. colorschemedesigner.com
[5] Colors on the Web, Color Wizard, www.colorsontheweb.com/colorwizard.asp
[6] htp://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
[7] htp://www.tutorialspoint.com/java/java_basic_operators.htm
[8] htp://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html
[9] htp://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
[10] htp://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
[11] htp://www.techotopia.com/index.php/Understanding_Android_Views,_View_Gro
ups_and_Layouts
[12] htp://developer.android.com/training/basics/supportng-devices/languages.html
[13] htp://developer.android.com/training/basics/supportng-devices/screens.html
[14] htp://developer.android.com/training/basics/actvity-lifecycle/index.html
[15] htp://developer.android.com/training/basics/actvity-lifecycle/startng.html
[16] htp://developer.android.com/training/basics/actvity-lifecycle/recreatng.html
[17]. American Marketng Associaton (AMA), defnicija marketnga, Listopad 2007,
htp://www.marketngpower.com/AboutAMA/Pages/DefnitonofMarketng.aspx
[18]. Grbac, B., Identtet marketnga, Ekonomski fakultet Rijeka, str 355, 2006.
[19]. Kotler, Ph. i Keller, K.L., Upravljanje marketngom, dvanaesto izdanje, Mate, Zagreb,
str. 24, 2006
[20]. Hrvatska obrtnika komora (HOK), htp://www.hok.hr/cro/o_hok_u/propisi/
pravilnik_o_vezanim_i_povlastenim_obrtma_i_nacinu_izdavanja_povlastca
[21]. Orkis, htp://www.orkis.hr/Stope-amortzacije~1
LITERATURA
171
9. POPIS SLIKA
Slika 1. Newtonov kota boja ............................................................................................................................................................ 2
Slika 2. Alat za izbor boja ..................................................................................................................................................................... 3
Slika 3. Primjeri vintage dizajna kod izrade UI-a i logotpa [1] .............................................................................................................. 3
Slika 4. Primjeri logotpa [1] ................................................................................................................................................................. 4
Slika 5. Primjer smjernica izvedenih iz imena tvrtke ili pojedinca ....................................................................................................... 4
Slika 6. Nekoliko prijedloga logotpa za istu tvrtku [1] .......................................................................................................................... 5
Slika 7. Veze izmeu vizualnog identteta i izgleda aplikacije [1] .......................................................................................................... 6
Slika 8. Razne veliine Android ureaja [2] .......................................................................................................................................... 6
Slika 9. Primjer veliine jedne ikone za razliite gustoe piksela [2] ..................................................................................................... 6
Slika 10. Odnosi veliine ekrana mobilnog telefona i tablet raunala [2] ............................................................................................. 7
Slika 11. Optmalna veliina nekog klikabilnog elementa suelja [2] ................................................................................................ 7
Slika 12. Primjeri izbornika i sadraja [1] .............................................................................................................................................. 8
Slika 13. Primjeri dviju vrsta izbornika [1]............................................................................................................................................. 8
Slika 14. Od skice na papiru do gotovog suelja [1] .............................................................................................................................. 9
Slika 15. Primjer stanja gumba ........................................................................................................................................................... 10
Slika 16. Primjer dizajna koji je prilagoen korisniku [2] .................................................................................................................... 10
Slika 17. Primjeri nekih bezvremenskih inaica dizajna [2] ................................................................................................................ 11
Slika 18: Primjeri digitalnog oblika koncepta, tj. wireframe .............................................................................................................. 12
Slika 19: Primjer postavljanja smjernica ............................................................................................................................................. 12
Slika 20. Koraci u izradi koncepta, tj. wireframea ............................................................................................................................... 12
Slika 21. Animacija od prve do zadnje sliice [1] ................................................................................................................................ 13
Slika 22. Dizajn aplikacije .................................................................................................................................................................... 14
Slika 23. Primjer ikona [2] ................................................................................................................................................................... 14
Slika 24. Primjer dviju standardnih tema Android sustava [2] ............................................................................................................ 15
Slika 25. Primjer efekta nakon dodira prstom [2] ............................................................................................................................... 15
Slika 26. Primjer dimenzionalnih odredbi i raspored elemenata[2] ................................................................................................... 15
Slika 27. Izgled Roboto slubenog fonta [2] ........................................................................................................................................ 16
Slika 28. Predefnirane veliine teksta [2] ........................................................................................................................................... 17
Slika 29. Primjeri raspona boja ........................................................................................................................................................... 17
Slika 30. Primjer ikona, tj. dubine kod poetnog zaslona [2] .............................................................................................................. 17
Slika 31. Ikona za alatnu traku ima propisanu veliinu 32x32dp [2] ................................................................................................... 18
Slika 32. Korisniko suelje GIMP-a: 1. Traka s alatma; 2. Radna povrina; 3. Traka s bojama i slojevima........................................18
Slika 33. Postavljanje novog dokumenta u GIMP-u ............................................................................................................................ 19
Slika 34. Postavljanje alata u GIMP-u: 1. oznaava se Rectangle selecton tool; 2. u postavkama Rectangle selecton tool oznaa-
va se da kvadrat ima zaobljen rub, a nakon toga se zadaje polumjer od 12px; 3. dranjem lijevog klika na miu i povlaenjem mia
preko radne povrine ocrtava se osnovni oblik kvadrata sa zaobljenim rubom .................................................................................20
Slika 35. Postavljanje alata za bojenje u GIMP-u: 1. oznaava se Bucket fll tool i otvara se dijalog za izmjenu boje ispune; 2. u
otvorenom dijalogu odabire se boja za ispunu objekta; 3. klikom unutar granica objekta (iscrtan dio) nanosi se boja ispune ime
zavrava bojanje objekta .................................................................................................................................................................... 20
Slika 36. Kopiranje objekta u GIMP-u: 1. klikom na tpku za kopiranje Layera, odnosno sloja radi se kopija objekta; 2. klikom na
tpku (simbol oka) pored kopiranog sloja skriva se kopija od pogleda ............................................................................................... 21
Slika 37. Blur flter u GIMP-u: 1. u glavnom se izborniku bira Filters; 2. u padajuem se izborniku obiljeava Blur i klika se na Gaussian
Blur ..................................................................................................................................................................................................... 21
Slika 38. Blur flter u GIMP-u: 1. u novootvorenom dijalogu postavljaju se vrijednost blur po horizontalnoj i vertkalnoj osi; 2. prit-
skom na tpku OK dodajemo efekt na na objekt ............................................................................................................................... 22
POPIS SLIKA
172
Slika 39. Izgled jedne gotove ikone sa zaobljenim rubovima i sjenom na Android ureaju s odreenom pozadinskom slikom. .......22
Slika 40. Primjer obavijest dolazne poruke ....................................................................................................................................... 23
Slika 41. Primjer jedne alatne trake koja sadri osnovne alate: pretraga, opcije itd. [2] ....................................................................23
Slika 42. Primjer Swipe View navigacije pokretom u lijevo [2] ........................................................................................................... 24
Slika 43. Confrming & Acknowledging [2] ......................................................................................................................................... 24
Slika 44. Najpopularniji primjeri widgeta [2] ...................................................................................................................................... 24
Slika 45. Primjeri Reusable UI elemenata [1] ...................................................................................................................................... 25
Slika 46. Google Play i Scrollable tabs ................................................................................................................................................. 26
Slika 47. Primjer fksnih kartca (Fixed tabs) ....................................................................................................................................... 26
Slika 48. Liste s jednim i vie redova podataka ................................................................................................................................... 27
Slika 49. Primjer reetke s vertkalnim pomakom ............................................................................................................................... 27
Slika 50. Reetke sa slikom i naslovima .............................................................................................................................................. 28
Slika 51. Primjer spinnera u formi ili alatnoj traci ............................................................................................................................... 28
Slika 52. Primjer malog i velikog gumba ............................................................................................................................................. 29
Slika 53. Primjer gumba bez ruba ....................................................................................................................................................... 29
Slika 54. Primjer tekstualnog unosa ................................................................................................................................................... 30
Slika 55. Primjer klizaa u standardnim Android 4.0 temama ............................................................................................................ 30
Slika 56. Traka napretka sa standardnom temom Android 4.0 sustava .............................................................................................. 31
Slika 57. Traka aktvnost sa standardnom temom Android 4.0 sustava ............................................................................................. 31
Slika 58. Lijevo je prikazan neispravan, a desno ispravan nain prikazivanja krunog indikatora .......................................................31
Slika 59. Unikatni indikator napretka .................................................................................................................................................. 32
Slika 60 Prikaz checkboxa i izgled svih njegovih stanja ....................................................................................................................... 32
Slika 61. Prikaz radio butona i izgled svih njegovih stanja ................................................................................................................. 32
Slika 62. Prikaz on/of gumba i izgled svih njegovih stanja ................................................................................................................. 33
Slika 63. Primjer dijaloga .................................................................................................................................................................... 33
Slika 64. Nekoliko razliith verzija dijaloga......................................................................................................................................... 34
Slika 65. Prikaz standardnog Pickera koji je smjeten u dijalogu ....................................................................................................... 34
Slika 66. Prikaz specijalnog pickera: vrijeme i datum ......................................................................................................................... 34
Slika 67. Back ili tpka za povratak na prijanji sadraj........................................................................................................................ 35
Slika 68. Primjer rada Back tpke kao dijela aplikacije i kao dijela ureaja .........................................................................................35
Slika 69. Primjer navigacije kroz suelje widgeta ................................................................................................................................ 36
Slika 70. Primjer distorzije na gumbu s unikatnom grafkom ............................................................................................................. 38
Slika 71. Izgled datoteka za razliite gustoe zaslona ......................................................................................................................... 38
Slika 72. Izgled poetnog zaslona aplikacije za izradu 9.png grafka ................................................................................................... 39
Slika 73. Izgled zaslona aplikacije za izradu 9.png grafka nakon dodavanja grafke ...........................................................................39
Slika 74. Dodavanje toaka koje kontroliraju irenje slike .................................................................................................................. 40
Slika 75. Raspored elemenata u horizontalnom layoutu .................................................................................................................... 42
Slika 76. Raspored elemenata u Relatve layoutu ............................................................................................................................... 43
Slika 77. Opi oblik jednodimenzionalnog polja ................................................................................................................................. 51
Slika 78. Ispis stanja objekta ormar u konzoli ..................................................................................................................................... 55
Slika 79. Ispis opsega dviju krunica u konzoli .................................................................................................................................... 56
Slika 80. U drugoj klasi nije mogue pozvat private metode ............................................................................................................. 57
Slika 81. Instalacija Android SDK plugina ............................................................................................................................................ 66
Slika 82. Android SDK Manager .......................................................................................................................................................... 67
173
Slika 83. Kreiranje Android emulatora ................................................................................................................................................ 68
Slika 84. Kreiranje Android projekta ................................................................................................................................................... 68
Slika 85.Arhitektura Android projekta ................................................................................................................................................ 70
Slika 86. Hello World aplikacija ........................................................................................................................................................... 71
Primjer 51. XML element podrava vei broja atributa ...................................................................................................................... 73
Slika 87. Odnos strukture objekata i XML strukture ........................................................................................................................... 73
Slika 88. Spajanje XML layouta u aktvnost ........................................................................................................................................ 74
Slika 89. Micanje Title Bar programski ............................................................................................................................................... 75
Slika 89. Pokretanje aktvnost u emulatoru ....................................................................................................................................... 81
Slika 90. ivotni ciklus aktvnost [15] ................................................................................................................................................. 82
Slika 91. Android Log s prikazom ispisanih vrijednost u svakom stanju ivotnog ciklusa ..................................................................84
Slika 92.Spremanje i ponovno kreiranje stanja aktvnost [16] ........................................................................................................... 85
Slika 93. Direktoriji i datoteke za lokalizaciju ..................................................................................................................................... 86
Slika 94. Direktoriji za slike za ureaje razliith gustoa ekrana ........................................................................................................ 88
Slika 95. Aktvnost koja sadri dva fragmenta .................................................................................................................................... 91
Slika 96. Dretve jedne Android aplikacije ........................................................................................................................................... 92
Slika 97 Preference Actvity................................................................................................................................................................. 97
Slika 98. Dohvaanje vrijednost iz Shared Preferences ...................................................................................................................... 98
Slika 99. ListView sa stavkama gradova .............................................................................................................................................. 99
Slika 100. ListView koji reagira na pritsak korisnika ......................................................................................................................... 101
Slika 101. Primjer izgleda stavke ListViewa ...................................................................................................................................... 104
Slika 102. ListView s vlasttm adapterom......................................................................................................................................... 106
Slika 103. HotelDetalsActvity aktvnost ........................................................................................................................................... 108
Slika 104. Acton Bar ......................................................................................................................................................................... 109
Slika 105. Prikaz menija s atributom ifRoom .................................................................................................................................... 110
Slika 106. Prikaz menija s atributom never ....................................................................................................................................... 110
Slika 107. Acton Bar s tab navigacijom ............................................................................................................................................ 115
Slika 108. Odabrani Tab1 .................................................................................................................................................................. 117
Slika 109. Odabrani Tab2 .................................................................................................................................................................. 117
Slika 110. Odnos atributa objekta i stupaca u tablici ........................................................................................................................ 118
Slika 111. Prvotna pozicija Cursor objekta ........................................................................................................................................ 121
Slika 112. Aktvnost unosa podataka o osobi ................................................................................................................................... 122
Slika 113. Popis svih osoba iz baze ................................................................................................................................................... 124
Slika 114. Prikaz vrijednost akcelerometra ...................................................................................................................................... 127
Slika 115. Postavljanje Google Maps API-a ....................................................................................................................................... 128
Slika 116. Google Play Services biblioteka u SDK Manageru ............................................................................................................ 128
Slika 117. Dodavanje biblioteke u aplikaciju ..................................................................................................................................... 129
Slika 118. Kreiranje projekta na Google konzoli ............................................................................................................................... 129
Slika 119. Postavljanje koritenja Google Maps Android API v2 u Google konzoli ...........................................................................130
Slika 120. Dijalog za upisivanje SHA1 kljua + package ..................................................................................................................... 130
Slika 121. Generiranje SHA1 kljua preko CMD ................................................................................................................................ 131
Slika 122. Package koji se treba upisat zajedno sa SHA1 kljuem .................................................................................................... 131
Slika 123 Unos SHA1 kljua + package u Google konzolu ................................................................................................................. 132
Slika 124. Generirani API key u Google konzoli ................................................................................................................................ 132
174
Slika 125. Prikaz Android Google Maps API v2 ................................................................................................................................. 135
Slika 126. Pokrenute aplikacije na ureaju ....................................................................................................................................... 136
Slika 127. Ponaanje Android stoga .................................................................................................................................................. 137
Slika 128. Item element u RSS-u ....................................................................................................................................................... 139
Slika 129. Opi izgled RSS-a .............................................................................................................................................................. 141
Slika 130. Lista elemenata kada je inline = false ............................................................................................................................... 142
Slika 131. Splash Actvity .................................................................................................................................................................. 147
Slika 132. Izgled NewsListActvity aktvnost ..................................................................................................................................... 151
Slika 133. Izgled NewsDetailsActvity aktvnost ............................................................................................................................... 155
Slika 134. Zamjena launcher ikone u manifestu ............................................................................................................................... 156
175
10. POPIS TABLICA
Tablica 1. Aritmetki operatori ......................................................................................................................................................... 47
Tablica 2. Relacijski operatori ............................................................................................................................................................ 47
Tablica 3. Logiki operatori ................................................................................................................................................................ 48
Tablica 4. Poduzetnike vjetne i osobine ....................................................................................................................................... 159
176
11. POPIS PRIMJERA
Primjer 1. Parametri metode ............................................................................................................................................................. 47
Primjer 2. If-then naredba ................................................................................................................................................................. 48
Primjer 3. If-then naredba u jednom retku ....................................................................................................................................... 48
Primjer 4. If-then-else naredba ......................................................................................................................................................... 49
Primjer 5. If-the-else grananje ........................................................................................................................................................... 49
Primjer 6. Switch naredba ................................................................................................................................................................. 49
Primjer 7. While petlja ....................................................................................................................................................................... 50
Primjer 8. Neograniena while petlja ................................................................................................................................................ 50
Primjer 9. Do-while petlja.................................................................................................................................................................. 50
Primjer 10. Opi oblik for petlje ........................................................................................................................................................ 50
Primjer 11. For petlja ......................................................................................................................................................................... 50
Primjer 12. Popunjavanje i indeksiranje polja ................................................................................................................................... 51
Primjer 13. Popunjavanje polja u deklaraciji ..................................................................................................................................... 51
Primjer 14. Polje u polju (dvodimenzionalno polje) .......................................................................................................................... 52
Primjer 15. Opi oblik dvodimenzionalnog polja ............................................................................................................................... 52
Primjer 16. Pretvaranje ulaznih jedinica u izlazne ............................................................................................................................. 52
Primjer 17. Metoda s dva parametra ................................................................................................................................................ 53
Primjer 18. Potpis metode ................................................................................................................................................................. 53
Primjer 19. Primjeri naziva metoda ................................................................................................................................................... 53
Primjer 20. Preoptereivanje metoda ............................................................................................................................................... 53
Primjer 21. Klasa ormar ..................................................................................................................................................................... 54
Primjer 22. Izmjena stanja objekta kroz metode ............................................................................................................................... 54
Primjer 23. Klasa krunica s metodom izraunajOpseg() .................................................................................................................. 55
Primjer 24. Raunanje opsega dviju razliith krunica ...................................................................................................................... 55
Primjer 25. Private i public metode Krunice .................................................................................................................................... 57
Primjer 26. Klasa krunica ................................................................................................................................................................. 58
Primjer 27. Dodjeljivanje jednostavnog tpa podataka ...................................................................................................................... 58
Primjer 28. Dodjeljivanje vlasttog tpa podataka .............................................................................................................................. 58
Primjer 29. Direktni pristup varijabli ................................................................................................................................................. 59
Primjer 30. Enkapsulacija varijabli ..................................................................................................................................................... 59
Primjer 31. Pristup varijabli preko set metode .................................................................................................................................. 59
Primjer 32. Konstruktor krunice s parametrima koordinata i polumjerom ...................................................................................... 60
Primjer 33. Konstruiranje objekta pomou vlasttog konstruktora.................................................................................................... 60
Primjer 34. Klasa s veim brojem konstruktora ................................................................................................................................. 60
Primjer 35. Kreiranje objekta s osnovnim konstruktorom ................................................................................................................. 60
Primjer 36.Klasa Zaposlenik............................................................................................................................................................... 61
Primjer 37. Klasa Inenjer nasljeuje klasu Zaposlenik ..................................................................................................................... 62
Primjer 38. Apstraktna klasa pomakni ............................................................................................................................................... 62
Primjer 39. Apstraktna klasa s apstraktnom metodom ..................................................................................................................... 62
Primjer 40. Klasa Zaposlenik koja e sluit kao nadklasa .................................................................................................................. 62
Primjer 41. Klasa Inenjer mora implementrat apstraktne metode ................................................................................................ 63
Primjer 42. Metoda printDescripton() .............................................................................................................................................. 63
177
Primjer 43.Klasa Inenjer ................................................................................................................................................................... 64
Primjer 44. Klasa Arhitekt .................................................................................................................................................................. 64
Primjer 45. Polimorfzam:sva su tri zaposlenika istog tpa, ali su instancirani kao razliit objekt .................................................... 65
Primjer 46. Metoda kao parametar prima tp Zaposlenik ................................................................................................................. 65
Primjer 47. U metodu se mogu slat sve podklase klase Zaposlenik ................................................................................................. 65
Primjer 48 Najmanja i najvia podrana verzija OS-a u manifestu .................................................................................................... 70
Primjer 49. Defniranje aktvnost u manifestu .................................................................................................................................. 70
Primjer 50. Identfkator actvity_main layouta ................................................................................................................................. 72
Primjer 51. osnovni XML element ..................................................................................................................................................... 72
Primjer 52. XML atribut elementa ..................................................................................................................................................... 72
Primjer 53. XML element koji je istovremeno otvoren i zatvoren ..................................................................................................... 73
Primjer 54. XML prikaz strukture podataka ....................................................................................................................................... 73
Primjer 55. Buton View u Android XML-u ........................................................................................................................................ 74
Primjer 56. Micanje Title Bara u manifestu ....................................................................................................................................... 75
Primjer 57. Defniranje XML layouta .................................................................................................................................................. 76
Primjer 58 Defniranje string resursa u string.xml datoteci ............................................................................................................... 77
Primjer 59. Referenciranje string resursa u TextViewu ...................................................................................................................... 77
Primjer 60. XMl layout datoteka s Butonom .................................................................................................................................... 78
Primjer 61. Pokretanje aktvnost pomoi Intent objekta .................................................................................................................. 79
Primjer 62. XML layout datoteka druge aktvnost ............................................................................................................................ 80
Primjer 63. Aktvnost koja se pokree pomou Intent objekta .......................................................................................................... 80
Primjer 64 Defniranje aktvnost u manifestu ................................................................................................................................... 81
Primjer 65. Ispis stanja ivotnog ciklusa aktvnost u Log .................................................................................................................. 83
Primjer 66. Primjer lokalizacije za engleski jezik ................................................................................................................................ 86
Primjer 67. Primjer lokalizacije za panjolski jezik ............................................................................................................................. 86
Primjer 68. Primjer lokalizacije za francuski jezik .............................................................................................................................. 87
Primjer 69. Defniranje fragmenta u layout XMLu ............................................................................................................................. 89
Primjer 70. Defniranje XML layout datoteke za fragment ................................................................................................................ 89
Primjer 71. Kreiranje FirstFragment klase ......................................................................................................................................... 90
Primjer 72. Defniranje dva fragmenta u layout aktvnost ................................................................................................................ 90
Primjer 73. XML layout prvog fragmenta .......................................................................................................................................... 91
Primjer 74. XML layout drugog fragmenta ........................................................................................................................................ 91
Primjer 75. Kreiranje MyAsyncTask klase .......................................................................................................................................... 93
Primjer 76 Ugnijeena MyAsyncTask klasa ...................................................................................................................................... 94
Primjer 77. Pokretanje asinkronog poziva ......................................................................................................................................... 95
Primjer 78.. XML layout za aktvnost korisnikih postavki ................................................................................................................. 96
Primjer 79. Kreiranje PrefActvity klase ............................................................................................................................................. 97
Primjer 80. XML layout aktvnost koja sadri ListVIew ..................................................................................................................... 98
Primjer 81. Kreiranje adaptera u aktvnost i postavljanje u ListView ................................................................................................ 99
Primjer 82. Postavljanje OnItemClickListener na ListView .............................................................................................................. 100
Primjer 83. Klasa Hotel .................................................................................................................................................................... 101
Primjer 84. Postavljanje vrijednost u Bundle objekt ....................................................................................................................... 102
Primjer 85. Postavljanje serijaliziranog objekta u Bundle objekt .................................................................................................... 102
Primjer 86.. Popunjavanje liste, instanciranje adaptera i popunjavanje ListViewa ......................................................................... 103
178
Primjer 87. Defniranje XML layouta za izgled stavke ListViewa ...................................................................................................... 104
Primjer 88. Kreiranje vlasttog adaptera .......................................................................................................................................... 105
Primjer 89. Postavljanje OnItemClickListenera na ListView ............................................................................................................. 107
Primjer 90. Kreiranje HotelDetailsActvity klase .............................................................................................................................. 108
Primjer 91. Kreiranje ListActvity aktvnost ..................................................................................................................................... 109
Primjer 92. Menu s jednim gumbom ............................................................................................................................................... 110
Primjer 93. Uitavanje menija ......................................................................................................................................................... 111
Primjer 94. Rukovanje odabira elemenata u meniju ....................................................................................................................... 111
Primjer 95. Postavljanje Home elementa kao navigaciju unazad .................................................................................................... 112
Primjer 96. Kreiranje tabova kao tpove navigacije ......................................................................................................................... 113
Primjer 97. Klasa s Tab navigacijom ................................................................................................................................................. 114
Primjer 98. Main Actvity s izmjenom fragmenata u tabovima ....................................................................................................... 116
Primjer 99. Android SQLiteOpenHelper klasa .................................................................................................................................. 119
Primjer 100. PersonDataSource klasa .............................................................................................................................................. 120
Primjer 101. Person klasa ................................................................................................................................................................ 122
Primjer 102. Aktvnost za unos podataka u bazu ............................................................................................................................. 123
Primjer 103. itanje podataka iz baze i uitavanje u listu................................................................................................................ 124
Primjer 104. Koritenje senzora....................................................................................................................................................... 126
Primjer 105. Meta data element za manifest .................................................................................................................................. 132
Primjer 106. Permission element za manifest ................................................................................................................................. 133
Primjer 107. Uses feature element za OpenGL ES 2 ........................................................................................................................ 133
Primjer 108. Manifest sa svim potrebnim elementma za koritenje Android Google Maps API v2 ............................................... 134
Primjer 109.Referenciranje Map fragmenta u layoutu aktvnost ................................................................................................... 135
Primjer 110. Aktvnost koja sadri Google mape ............................................................................................................................. 135
Primjer 111. RSS klasa ..................................................................................................................................................................... 141
Primjer 112. Channel klasa .............................................................................................................................................................. 142
Primjer 113. Item klasa .................................................................................................................................................................... 143
Primjer 114. Enclosure klasa ............................................................................................................................................................ 144
Primjer 115. DalmacijaNewsLIstener interface ............................................................................................................................... 144
Primjer 116. Asinkrono skidanje i parsiranje RSS-a ......................................................................................................................... 145
Primjer 117. Splash Actvity klasa .................................................................................................................................................... 146
Primjer 118.. Layout SplashActvity aktvnost ................................................................................................................................ 147
Primjer 119. NewsListActvity klasa ................................................................................................................................................. 148
Primjer 120. list_item_dalmacija_news layout datoteka ................................................................................................................ 149
Primjer 121. DalmacijaNewsAdapter klasa ..................................................................................................................................... 150
Primjer 122.NewsListActvity aktvnost s ListItemClick listenerom ................................................................................................. 152
Primjer 123. Actvity_news_details layout datoteka ....................................................................................................................... 153
Primjer 124. NewsDetailsActvity klasa ........................................................................................................................................... 154

You might also like