Professional Documents
Culture Documents
Prirunik za edukaciju
Osijek, 2013
Ovaj projekt financira
Europska unija
Elektrotehniki
fakultet Osijek
Poduzetniki
inkubator Bios d.o.o.
IPA komponenta IV
Operativni program Razvoj ljudskih potencijala
Projekt
U korak s globalnim trendovima za usklaenost s aktivnom politikom trita rada
http://edumobi.etfos.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 aktivnom politikom trita rada provodi 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 odgovornost 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 povezivati svoja znanja, resurse i sudbine.
Tijekom svog su pedesetogodinjeg razdoblja proirenja izgradile zonu stabilnosti, demokracije
i odrivog razvoja, zadravajui pri tome kulturalnu raznolikost, toleranciju i osobne slobode.
Europska unija dijeli svoja postignua i vrijednosti sa zemljama i narodima izvan svojih granica.
Europska komisija izvrno je tijelo Europske unije.
Obrazovanje je odraslih osoba definirano kao cjelina procesa uenja koji su namijenjeni ostvarivanju prava na slobodan razvoj osobnosti, osposobljavanju za zapoljivanje i osposobljavanju za
aktivno graanstvo. Ljudski je kapital jedan od najvanijih resursa Hrvatske koja nastoji postati
najkonkurentnije drutvo temeljem znanja u regiji. Cjeloivotno obrazovanje ima vanu ulogu u
ovom procesu. Obzirom na ubrzan rast nezaposlenosti posljednjih nekoliko godina i prognoza
da e ona i dalje rasti, potrebno je reagirati i osigurati dodatno obrazovanje kako bi se unaprijedile kompetencije nezaposlenih osoba.
Elektrotehniki fakultet Osijek je javno znanstvena nastavna ustanova koja s projektnim partnerom Poduzetnikim inkubatorom BIOS provodi projekt U korak s globalnim trendovima za
usklaenost s aktivnom politikom trita rada kroz IPA komponentu IV, Operativni program Razvoj 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 visokoobrazovanih osoba u Osjeko-baranjskoj upaniji kroz edukaciju koja je zasnovana na poticanju samozapoljavanja. Uz pomo edukacije Razvoj mobilnih aplikacija polaznici e stei nova znanja
i vjetine, predstaviti svoje aplikacije javnosti, podii svoj poduzetniki duh i saznati sve mogunosti samozapoljavanja.
Cilj je prirunika polaznicima edukacije olakati praenje nastave i pomoi im u usvajanju novih
znanja i vjetina. Prirunik se sastoji iz tri dijela:
1.
2.
3.
Kroz navedene e nastavne cjeline polaznici edukacije nauiti samostalno dizajnirati i programirati mobilne aplikacije, razvijati osnovne poduzetnike vjetine i bit e potaknuti na pokretanje
vlastitog 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 tim:
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 logotipa i identiteta................................................................................................... 4
1.4. Dizajn grafikih elemenata................................................................................................... 5
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
8. LITERATURA............................................................................................................ 170
9. POPIS SLIKA............................................................................................................. 171
10. POPIS TABLICA...................................................................................................... 175
11. POPIS PRIMJERA................................................................................................... 176
Dizajn
1
UVOD U DIZAJN
1. UVOD U DIZAJN
1.1. Teorija boja
Oko je ovjekov najsofisticiraniji alat. Razlikuje i do 7500000 boja i njihovih nijansi. Boje ne
bi postojale bez svjetla jer se boja reflektira 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 vlastitu valnu duinu. Postoje tri primarne
boje: crvena, uta i plava. Iz tih se boja mijeanjem mogu dobiti 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.
UVOD U DIZAJN
b)
c)
Dizajn koji se koristi u izradi mobilnih aplikacija jest digitalni dizajn. Digitalni je dizajn najraireniji 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 tridesetih godina prologa
stoljea pa se zbog toga naziva vintage dizajn (Slika 3.).
UVOD U DIZAJN
Alati koji se najvie koriste za dizajn i obradu fotografija su:
a)
Adobe Photoshop
Jedan je od najkvalitetnijih alata na tritu koji koristi svaki profesionalni i ozbiljni dizajner. Adobe Photoshop primarno je alat za obradu i retuiranje fotografija, no njegovi mu alati i funkcije
daju status jednog od najboljih alata za izradu UI-a za internetske ili mobilne aplikacije. Najnovija inaica ovog alata donosi 3D funkcije kao i timeline.
b)
CorelDraw alat
Vrlo je slian Photoshopu, ali ima kvalitetnije funkcije za pripremu sadraja za tisak. Jednostavan je za koritenje i posjeduje najmonije alate za obradu vektorske grafike (grafike koja ne
mijenja svoju kvalitetu promjenom veliine).
GIMP [5] (engl. GNU Image Manipulation Program)
c)
Besplatan je, brz i malen alat koji posjeduje veinu Photoshopovih funkcija i odlina je alternativa komercijalnim alatima.
UVOD U DIZAJN
Prije samog dizajniranja i crtanja logotipa, 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
logotipa. Svrha je logotipa ponuditi vizualni identitet odreenoj tvrtki. Izabrani se logotip ne
mijenja due vrijeme ili nikada. Ako je logotip kombinacija teksta i slike i ako se iz imena tvrtke
ne moe razaznati ime se tvrtka bavi, dobro bi bilo da to slika vizualno prikae. Klijent e uvijek
traiti vie primjera logotipa za svoje poslovanje. U veini se sluajeva klijenti ne odlue za jedan
osmiljeni logotip, ve kombiniraju elemente razliitih prijedloga i na osnovu njih sastavljaju
idealan logotip.
Svaki bi logotip trebao biti napravljen u vektorskom obliku kako bi se lake tiskao na plakate,
posjetnice, zaglavlja dokumenata, majice, alice, kalendare itd. Stoga je uz svaki logotip nuna
izrada knjige standarda. Knjiga je standarda dokument u kojemu su definirane sve smjernice za
provoenje vizualnog identiteta. Sadri tone ifre boja i dimenzija logotipa, podatke o minimalnoj i maksimalnoj dimenziji logotipa koji se tiska na odreeni medij te podatke o odstupanjima u bojama nakon tiska.
ZADATAK 1
Dizajniraj vlastiti logotip (na papiru) na temelju navedenih principa izrade logotipa.
UVOD U DIZAJN
Zbog raznolikosti se ureaja posebno mora paziti na skalabilnost grafikih elemenata, a da pri
tome ostanu nepromijenjene kvalitete. Taj se proces moderno naziva Responsive Design, tj.
osjetljiv, brz dizajn koji osigurava optimalan doivljaj gledanja sadraja. To su primjerice Facebook, Pinterest, MySpace itd. Platforma kojom se najtee prikazuju grafiki elementi jest Android
platforma. Razlog tomu je veliki broj razliitih 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 prikazivati na svim ureajima i zbog toga ju je nuno izraditi u najmanje etiri veliine
(Slika 9.).
Slika 10. Odnosi veliine ekrana mobilnog telefona i tablet raunala [2]
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 mogunosti koje su se nekada mogle samo
zamiljati. 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 pristup 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, imati
sliicu i tekst kao opis funkcije, ali se u pravilu koriste oba opisa. Pritiskom na odreeno polje
izbornika aplikacija korisnika vodi do detaljnijih informacija koje su zatraene.
Postoje jo mnogi elementi koji omoguuju korisniku unos informacija u aplikaciju, ali i elementi koji daju potvrdu da je uspjeno, tj. neuspjeno obavio neku operaciju. Takvi se elementi
nazivaju dijalozi, a prikazuju da je neka funkcija obavljena, da je u obradi ili da trai potvrdu za
obavljanje neke vanije operacije. Tzv. su obavijesti (engl. Notifications) suprotne dijalozima,
a daju kratku obavijest korisniku to se trenutno dogodilo. Koja je, dakle, razlika izmeu dijaloga
i obavijesti? 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.
Svaki je korisnik u isto vrijeme i kritiar jer svojim kritikama moe pridonijeti, ali i odmoi uspjehu aplikacije. Svaku kritiku, pozitivnu ili negativnu, treba cijeniti. Negativna kritika 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 upitati ljude to misle. Ako veina ljudi shvati koja je funkcija svakog pojedinog
dijela suelja bez prevelikog dodatnog objanjavanja, onda je dizajner napravio jako dobar po-
10
11
12
ZADATAK 2
Kreiraj wireframe, tj. koncept za aplikaciju. Dozvoljeno je koritenje najvie pet boja i pravilnih oblika.
Za takve i sline aplikacije koriste se jednostavne animacije koje se najee sastoje od: postepenog prikazivanja (engl. fade in), postepenog nestajanja (engl. fade out), pomaka sadraja u
lijevo, desno, gore, dolje itd. Takve animacije i efekti 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 tip animacija nisu potrebni dodatni grafiki elementi, ve se animacija izvrava programski, kodom. Kompleksne animacije mogu koristiti niz
grafikih elemenata koji se izmjenjuju u odnosu na vrijeme, ali takve animacije nisu poeljne i
mogu dovesti do velikog pada brzine u izvravanju neke funkcije.
13
Aplikacije za mobilne ureaje moraju biti jednostavne, ali i ugodne za koritenje. Moraju pruati
brz pristup informacijama i olakavati svakodnevne zadatke. Postupak dizajna mobilne aplikacije 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. izvaditi iz dizajna sve elemente
koji tvore korisniko suelje. Dakle, dizajn je samo jedna obina slika koja ne moe tvoriti neto
funkcionalno.
ZADATAK 3
Iz kreiranog wireframea iz prethodnog zadatka isjeci pojedine elemente i spremi ih kao zasebne uz
prilagoeni naziv svakog elementa.
Platformske smjernice opisuju kako i na koji nain pojedini element treba izgledati i kako se
treba ponaati. Platformske smjernice postoje i zbog imida platforme. UI Android sustav je
jednostavan, pregledan i privlaan pa bi i aplikacije trebale biti takve kako ne bi previe vizualno
odstupale od izgleda sustava ili izgledale kao neki drugi operacijski sustav.
14
15
Budite fleksibilni
Optimizirajte suelje
Korisnik e za dizajn za maleni zaslon morati uloiti vie truda da doe do razliitih informacija
jer sav sadraj nije mogue smjestiti na zaslon malih dimenzija. Veliki zasloni (npr. tablet raunala) imaju puno mjesta za raspored elemenata i sadraja. Dakle, ako aplikacija sadri pregrt
informacija, kod malih e zaslona imati jedno suelje, a kod velikih drugo suelje. Ovdje se ne
misli na drugaiji izgled suelja (boja, oblik itd.), nego na suelje koje e prikazivati vie informacija odjednom.
c)
Potrebno je priloiti sve sliice/grafike, tj. elemente suelja u svim ponuenim razluivostima
(ldpi, mdpi, hdpi, xhdpi) kako bi svaki element suelja izgledao lijepo, otro i pravilne veliine na
razliitim dimenzijama zaslona.
2.11.5. Fontovi
Slubeni je font Android operativnog 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 koristi 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 biti niti manji niti vei na razliitim rezolucijama zaslona.
16
2.11.6. Boje
Slubena je boja Android platforme plava pa prema tome i veina elemenata suelja koristi tu
boju nakon korisnikove interakcije. Ne postoje odreena pravila kod odabira boja, bitno je da
boje odgovaraju vizualnom identitetu i da imaju dobar kontrast (Slika 29.). Ne smije se zaboraviti na osobe koje ne razlikuju boje, a posebno zelenu i crvenu. Alati poput ranije navedenog Color
Scheme Designera nude i pregled sheme boja kroz oi osobe koja ne razlikuje boje.
2.11.7. Ikone
Ikone su malene sliice koje uglavnom grafiki opisuju neku funkciju (npr. simbol olovke govori
korisniku da moe promijeniti ili dodati 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 dizajnirati s posebnom panjom, trebaju izgledati lijepo i otro na svim pozadinskim slikama poetnog zaslona Android platforme.
Dimenzija je ovih ikona propisana, a iznosi 48x48dp. Moraju biti lagane dubine ili 3D izgleda s
gornje strane.
Slika 30. Primjer ikona, tj. dubine kod poetnog zaslona [2]
17
Slika 31. Ikona za alatnu traku ima propisanu veliinu 32x32dp [2]
ZADATAK 4
Dizajniraj vlastitu pokretaku ikonu pomou GIMP alata za obradu fotografija.
RJEENJE ZADATKA
Za kreiranje se jednostavne pokretake ikone koristi GIMP, besplatan alat za obradu fotografije.
Najnovija je verziju GIMP-a dostupna na http://www.gimp.org. GIMP je malen i jednostavan
alat za obradu fotografije, crtanje i kreiranje razliitih 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 alatima; 2. Radna povrina; 3. Traka s bojama i slojevima
18
U prostor za unos irine i visine dokumenta unosi se 72px (piksela) (Slika 33.) jer dokument
treba biti kvadratnog oblika. Visina i irina od 72px je standardna veliina ikone za HDPI rezoluciju. 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 ostati 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 nuno biti prozirna jer e biti kreirana pokretaka ikona koja ima sjenu pa je ovaj korak od iznimne
vanosti.
Nakon to je kreiran novi dokument, crta se osnovni oblik ikone koji je kvadratnog oblika sa zaobljenim 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, povlaenjem ocrtava osnovni oblik ikone.
19
Slika 34. Postavljanje alata u GIMP-u: 1. oznaava se Rectangle selection tool; 2. u postavkama
Rectangle selection 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 obojiti. Na slici 35. prikazan je poloaj alata za bojanje i njegove 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 fill 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
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 obojiti (istim postupkom
kao i prvi puta) u crnu boju.
20
Slika 36. Kopiranje objekta u GIMP-u: 1. klikom na tipku za kopiranje Layera, odnosno sloja radi se
kopija objekta; 2. klikom na tipku (simbol oka) pored kopiranog sloja skriva se kopija od pogleda
Kada je originalni objekt obojan, kreira se sjena pomou Gaussian blur filtera. GIMP podrava
mnotvo filtara koji omoguuju razliite efekte i manipulacije objekata i fotografija. Prije primjenjivanja blur efekta potrebno je maknuti oznake s objekta. Ako objekt ostane obiljeen, blur
efekt e se primjenjivati unutar granica objekta (iscrtani dio) pa e se dobiti otar rub unutar
kojeg e objekt biti zamuen. Oznake se uklanjaju istovremenim pritiskom tipaka SHIFT+CTRL+A
na tipkovnici.
Slika 37. Blur filter 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 filter u GIMP-u: 1. u novootvorenom dijalogu postavljaju se vrijednosti blur po horizontalnoj i vertikalnoj osi; 2. pritiskom na tipku OK dodajemo efekt na na objekt
Nakon primijenjenog blur filtra na objekt, kopija objekta koji je skriven od pogleda dobit e se
ponovnim pritiskom na tipku pokraj sloja sa simbolom oka. Ovim se postupkom pravi osnovni
oblik ikone. Daljnjim modificiranjem i dodavanjem sadraja na osnovni oblik moe se dobiti
veliki broj varijanti ikone.
Kada se zavri s kreiranjem ikone i kada se doe do zadovoljavajueg izgleda, ikonu se pohranjuje sa eljenim imenom u *.png format. PNG (engl. Portable Network Graphics) format podrava
prozirnost tako da e se sjena i zaobljeni rubovi vidjeti na Android ureaju. Postupak izrade
ikone odreene gustoe piksela uvijek je isti. 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.
b)
Budite jednostavni. Nije potrebno korisniku postavljati duge upite kao na primjer: Jeste li sigurni da elite obrisati ovu datoteku?. Dovoljni su jednostavni upiti: Obrisati?.
22
e)
f)
Izbjegavajte ponavljanja.
2.13. Uzorci
Uzorci su na Android platformi elementi suelja. Ako za takve elemente nije predvien poseban
dizajn, onda se koriste neke od slubenih Android tema. Uzorci dolaze u velikom broju, a najvaniji su:
a)
Obavijesti
Obavijesti informiraju i obavjetavaju korisnike. To su: nove dolazne poruke, elektronika pota,
proputeni telefonski pozivi itd.
b)
Traka alata
Traka alata slui za brz pristup pojedinim funkcijama aplikacija i ubrzava korisnikov rad s aplikacijom (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 pokretima prsta
po zaslonu. Na taj se nain postie efekt listanja stranica.
23
d)
Potvrivanje (engl. Confirming) je maleni dijalog kojim se potvruju radnje, npr. brisanje i sl.
e)
f)
Widgets
Widgeti predstavljaju produeno suelje neke aplikacije (Slika 44.). Nalaze se na poetnom zaslonu i obavljaju svoje funkcije ak i kada je aplikacija ugaena. Obino widgeti nemaju sve
funkcije normalne aplikacije i pritiskom se na njih otvara normalna aplikacija.
Android aplikacija ima stroga pravila o tome kako elementi suelja i ikone za pojedini dio suelja
trebaju izgledati. Ako se kreira multiplatformska aplikacija, ne bi se trebao koristiti isti stil, tj.
isti skup ikona na svim platformama. Ta pravila ne vrijede ukoliko postoji kompletno dizajnirano
suelje koje ne koristi niti jednu slubenu temu Android platforme.
24
ZADATAK 5
Iz isjeenih elemenata u prethodnom zadatku stiliziraj svaki element i spremi ga pod odgovarajuim
nazivom.
Najpoznatiji je primjer pominih kartica Google Play aplikacija (Slika 46.). Kartice se nalaze pri
samom vrhu aplikacije i reagiraju na dodir i pokret. Ovaj nain navigacije podrava Android
operacijski sustav 3.0. Moe sadravati velik broj naslova (engl. Item), ali uvijek prikazuje samo
tri tako da izmjenjuje naslove tijekom korisnikog kretanja kroz izbornik. Obine, fiksne kartice
to ne mogu.
25
b)
Fiksne se kartice takoer najee nalaze na samom vrhu ekrana i slue za brzu navigaciju kroz
sadraj aplikacije. Za razliku od pominih kartica mogu sadravati samo mali broj naslova. Navigacija se vri dodirom na naslov ili pomicanjem prsta po ekranu. Svaki naslov je jednake irine,
a irina je odreena najveom karticom, odnosno karticom koja ima najdui tekst. U sluaju da
nema dovoljno mjesta, kartice postaju pomine. Iz tog se razloga preporuuje koristiti samo tri
kartice sa to kraim tekstom.
2.15.2. Liste
Liste prikazuju podatke koji su organizirani jedan ispod drugoga to omoguava njihov laki pregled. Navigacija se kroz listu provodi pomicanjem prsta prema gore ili dolje. Svaki je podatak u
listi odvojen od drugog tankom linijom zbog preglednosti, a takav se podatak naziva element
liste. Liste podravaju interakciju korisnika s pojedinim naslovim.
Liste se mogu pojaviti u vie oblika:
a)
Liste s naslovom koji ima samo jedan red podataka jesu primitivne 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 sadravati tekst, slike, gumbe i ostale elemente za
prikazivanje podataka.
Liste sadre i razdjelnik sekcija koji olakava organizaciju podataka i poveava preglednost.
26
Redoslijed sadraja odreuje smjer u kojem se pomie prst (kod obinih lista sadraj je jedan
ispod drugoga) to moe zbuniti korisnika jer su reetke pomine u svim smjerovima. Kako ne
bi dolo do zabune, ograniavaju se ili na vertikalan (Slika 49.) ili na horizontalan smjer. Kod
horizontalnog se smjera pomicanja ne bi trebala koristi pomina kartica jer se kod horizontalne
interakcije prstom mijenja sadraj.
b)
Reetke s naslovima
27
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, kuna 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
kartica.
Standardni gumb
Standardni je gumb osnova svakog suelja. Pojavljuje se s obrubom i pozadinom, a moe biti
veliki i mali. Mali se koristi kako bi se uklopilo u sadraj aplikacije, a veliki u dijalozima. Razlikuju
se veliinom gumba i veliinom teksta u njima.
28
b)
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 obina sliica koja je podlona interakciji korisnika
ZADATAK 6
Gotove stilizirane elemente suelja iz prethodnog zadatka primjeni na jednom gumbu u Eclipse razvojnom okruenju.
29
Slika
54. Primjer
tekstualnog
unosa Sliders)
(engl.
Seek bar)
i klizai (engl.
2.15.8.Traka za pretragu
Klizai Traka
daju brz
jednostavan
odabir
ili vrijednosti.
Sastoje se od trake
tra i gumba
2.15.8.
za ipretragu
(engl.
Seekneke
bar)razine
i klizai
(engl. Sliders)
koji klize po traci. Najmanja je vrijednost na lijevoj strani, a najvea na desnoj. Najee se
Klizai
daju
i jednostavan
odabir
neke razine
ili vrijednosti.
koriste
kodbrz
promjene
ili otrine,
kontrasta,
intenzitetaSastoje
itd. se od trake i gumba koji
glasnoe
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 2.46.Primjer
Primjer klizaa u standardnim Android 4.0 temama
2.15.9.Napredak
Napredak i aktivnost (engl. Progress and Activity)
2.15.9.
Napredak
i aktivnost
(engl.
Progress
Activity)
Napredak
i aktivnost
ukazuju da
se neki
proces and
izvrava
te obavjetavaju korisnika da prieka
dok se aktivnost
u potpunosti
nese
izvri.
Napredak
i aktivnost
ukazuju da
neki proces izvrava te obavjetavaju korisnika da prieka
dok se aktivnost u potpunosti ne izvri.
Traka napretka
a)
Traka napretka
Traka se napretka koristi za one aktivnosti za koje se zna koliko tono traju te obavjetava
Traka se napretka koristi za one aktivnosti za koje se zna koliko tono traju te obavjetava korisnikorisnika koliko je vremena potrebno da se zadatak izvri. Traka se napretka uvijek ispunjava
ka koliko je vremena potrebno da se zadatak izvri. Traka se napretka uvijek ispunjava od 0% do
od 0% do 100% i nikada se ne vraa na niu vrijednost. Ako se u pozadini izvrava vie od
100% i nikada se ne vraa na niu vrijednost. Ako se u pozadini izvrava vie od jedne aktivnosti,
jedne aktivnosti, traka napretka prikazuje ukupno stanje izvrenosti svih aktivnosti.
aktivnosti Kada
traka napretka prikazuje ukupno stanje izvrenosti svih aktivnosti. Kada doe na 100% oznaava
doe na 100% oznaava kraj svih aktivnosti. Na primjer
primjer, ako postoji samo jedan zadatak koji
kraj svih aktivnosti. Na primjer, ako postoji samo jedan zadatak koji se trenutno izvrava, traka
se trenutno izvrava, traka napretka pokazuje proces od 0% do 100% izvrenosti. Ako postoji
napretka pokazuje proces od 0% do 100% izvrenosti. Ako postoji vie procesa u pozadini, oni
vie procesa u pozadini, oni se zbrajaju i njihov se zbroj dijeli sa 100 i tako se dobiva postotak
se zbrajaju i njihov se zbroj dijeli sa 100 i tako se dobiva postotak izvrenja pojedinog procesa:
izvrenja pojedinog procesa:
1 2 3
100
b)
Aktivnost
Indikator aktivnosti obavjetava korisnika da se proces izvrava, ali ne i kada e zavriti. Obino
se koristi za procese za koje se ne zna kada e zavriti i kojima treba due vrijeme da se izvre.
Moe se pojaviti u dva standardna oblika: kao traka ili kao kruni indikator.
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)
Elementi koji su opisani za prikaz napretka nekog procesa obino su dovoljni za svaku aplikaciju,
no ponekad se mora posezati za vlastitim rjeenjima. Unikatni indikatori mogu prikazivati 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 koristi 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
spremiti na svoj mobilni telefon.
31
Ako standardni indikatori korisniku ne pruaju dovoljno informacija, uvijek se moe kreirati vlastiti indikator koji e nastojati to bolje uklopiti se u temu ili UI koji se koristi.
Checkbox
Checkbox se sastoji od okvira i kvaice, a korisniku prua mogunost izbora: hoe li omoguiti
ili onemoguiti vie opcija odjednom. Koritenje se checkboxa izbjegava ako je samo jedan izbor. Tada se prednost daje on/off prekidau. Checkbox ima dva stanja: unchecked ili neoznaeno
i checked ili oznaeno.
b)
Radio button
Radio button ili kruni gumb vrlo je slian checkboxu, a razlikuje se u radu s izbornikom. Kod
checkboxa je mogue odabrati vie ponuenih izbora, a kod radio buttona samo jedan izbor iz
ponuene liste. Od korisnika trai da odabere samo jednu opciju iz liste, a pri tome moe vidjeti
sve ponuene opcije. Ako nije bitno da korisnik vidi sve ponuene opcije, preporua se koritenje spinera jer zauzima manje mjesta.
32
On/Off gumb
Ovaj gumb omoguuje promjenu stanja jedne funkcije. Stanja su: istinito (engl. True) ili neistinito (engl. False).
ZADATAK 7
Gotove stilizirane elemente suelja iz zadatka 4 primijeni na jednom on/off 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
nastaviti s radom. Obino se sastoje od poruke s dva gumba, tj. da ili ne gumba, ali im sadraj
moe biti i kompleksniji, na primjer unos teksta ili postavka neke opcije.
Naslov
Naslov bi trebao u to kraem obliku prenijeti korisniku ono to se od njega trai. Primjerice, ako
je potrebno da korisnik promijeni kontrast zaslona, u naslovu e pisati kontrast zaslona. Treba
biti kratak, jednostavan i govoriti sam za sebe.
b)
Sadraj dijaloga
U sadraj se dijaloga postavljaju svi eljeni elementi teksta, spinera, ili seek bara. Sadraj dijaloga moe biti i prazan ako korisnik treba samo potvrditi neku radnju. U tom sluaju je dovoljno
napisati to se trai u naslovu.
33
Gumbi
Gumbi predstavljaju zadnji dio dijaloga. Obino su prisutni gumbi koji oznaavaju potvrdan i
gumbi koji oznaavaju negativan odgovor i u skladu s njima se izvrava odreena operacija.
2.15.12. Pickers
Picker prua mogunost izbora jedne vrijednosti iz cijelog kompleta. Odabir se vri uz pomo
strelica u smjeru gore/dolje, dodira ili unosa pomou tipkovnice. Picker je najbolje postaviti u
dijalog zbog njegove veliine.
Android operacijski sustav prua specijalne pickere kao to je picker za odabir datuma i vremena. 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.
34
Iako tipka za povratak, koja se nalazi u traci alata, slui za povratak na prijanji sadraj, prvenstveno je namijenjena za navigaciju unutar aplikacije. Fizika se tipka za povratak na ureaju
koristi samo za povratak na prethodni sadraj. Tipkom za povratak moe se i izii iz aplikacije, a
u nekim sluajevima moe posluiti kao navigacija na prijanju aplikaciju ako je ostala u funkciji
u pozadini sustava. Fizika tipka ureaja takoer sakriva ili odbacuje razne dijaloge i upozorenja
koji se prikazuju korisniku, uklanja obiljeeni tekst i skriva virtualnu tipkovnicu.
Slika 68. Primjer rada Back tipke kao dijela aplikacije i kao dijela ureaja
Ako aplikacija posjeduje widget, navigacija se na neki sadraj aplikacije moe izvravati i putem 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. Widgeti uglavnom prikazuju informacije u kratkom obliku, a za izvravanje operacija koriste tipku koja otvara glavnu aplikaciju i nudi korisniku mogunost interakcije.
Te bi se tipke na widgetima mogle nazvati i preacima. Zahvaljujui widgetima nije potrebno
navigirati cijelom aplikacijom kako bi se dolo do odreene funkcije. Funkcija se od njih dobiva
automatski samo jednim dodirom.
35
ZADATAK 8
Dizajniraj jednostavnu, ali unikatnu navigaciju koja se temelji na smjernicama za navigaciju koje su
opisane u ovom poglavlju.
36
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 operativnom sustavu koji ima verziju veu od 3.0, a koristi se za navigaciju kroz sadraj.
Dupli dodir (engl. Double touch) se koristi kod centriranja i brzog pribliavanja slika
ili mapa. Moe se koristiti i na gumbima i ostalim dijelovima suelja.
Rairivanje prstiju (engl. Pinch open) je gesta koja se koristi kod pribliavanja (engl.
zoom in) sadraja (dokumenata, slika i mapa). Ne preporua se koritenje u druge
svrhe.
37
2.17.2. Animacija
Animacija je standard koji je prisutan u gotovo svim elementima 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
pripaziti. Ne smije ih biti previe niti smiju usporavati rad aplikacije. Ako ih ima previe, rad s
aplikacijom bi se oduio, a to bi moglo dovesti do nezadovoljstva korisnika.
Android razvojno okruenje nudi jednostavno rjeenje ovog problema. U razvoju aplikacije
stvorene su etiri 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 najpravilnije prikazivati na korisnikovom zaslonu (Slika 71.). Ova varijanta ima najvei uinak kod
otrine i boja grafike.
38
Otvaranjem aplikacije za izradu .9.png grafike otvara se prozor (Slika 73.) koji trai unos slike od
koje se grafika .9.png eli kreirati. Nakon to je slika ubaena u program, automatski se generira
prikaz izgleda grafika za odreeni element ako na nju nisu primijenjena pravila kontroliranog
rastezanja ili ako .9.png grafika 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 grafika nakon dodavanja grafike
U prostoru za ureivanje, tj. dodavanje toaka irenja nalazi se grafika. Toke koje se zadaju
odreuju granice, tj. mjesta gdje se slika smije rairivati, a gdje ne. Postoji etiri razliita prostora na kojima se toke mogu dodavati. 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 postavljanje toaka koje odreuju granice do kojih se slika smije iriti. Dodavanjem toke na gornju i
lijevu stranu uz sam rub slike pojavljuje se zeleni marker koji pomae u uoavanju zadane toke.
39
Ako se krene od gornje toke, sve to se nalazi lijevo i desno od zelene linije nee se rairivati, a
toka e se, tj. prostor unutar zelene linije, iriti 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
iriti, a prostor e se unutar zelene linije iriti vertikalno. 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 grafike (Slika 74.) vidljiv rezultat: kako bi slika izgledala da se rairi vertikalno, 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 razliitim dimenzijama slike. Taj plavi prostor oznaava podruje do kojeg e biti
smjeten sadraj koji e se nalaziti 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 biti i bez oznaenog prostora za sadraj. Ako je rije o gumbu, aplikacija e postaviti
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 imati nikakvog efekta.
Grafika formata .9.png nezaobilazan je dio svakog suelja i postavlja se u direktorije za razliite
gustoe piksela na isti nain kao i klasina grafika. Pruaju otrinu i istou zavrnog proizvoda
bez obzira na veliinu i orijentaciju mobilnog ureaja, automatski se ire i prilagoavaju zaslonu.
ZADATAK 9
Dizajniraj pet razliitih izgleda gumba i pretvori ih u *.9.png format, a da pri tome niti jedan gumb ne
izgubi na kvaliteti.
40
Ispod je prikazan XML nain deklariranja layouta. XML nain definiranja layouta vrlo je slian
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
KORISNIKOG
SUELJA
Ispod
je prikazan
XML nain
deklariranja
layouta.
XML DIZAJN
nain
definiranja
layouta
vrlo jesvakog
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
Ispod
je
prikazan
XML
nain
deklariranja
layouta.
XML
nain
definiranja
layouta
vrlo
je
slian
definiranju
elemenata
u je
izradi
stranica.
se dobro
poznaje
naziv
svakog
objekta
suelja,
mogue
vrlointernetskih
brzo napisati
vlastitiAko
layout.
Eclipse
razvojno
okruenje
sadri
grafiki
editor
za
kreiranje
layouta
to
jo
vie
ubrzava
rad,
a
ujedno
omoguuje
prikaz
definiranju
elemenata
u je
izradi
stranica.
Ako
se
dobro
poznaje
naziv
svakog
objekta
suelja,
mogue
vrlointernetskih
brzo napisati
vlastiti
layout.
Eclipse
razvojno
okruenje
sadri grafiki
editor
za kreiranje
layouta
to jo
vie
ubrzava
rad,
a ujedno
omoguuje
prikaz
nju
elemenata
u
izradi
internetskih
stranica.
Ako
se
dobro
poznaje
naziv
svakog
objekta
suelja,
rezultata
u
realnom
vremenu.
Bit
e
prikazan
izgled
vrlo
jednostavnog
layouta
koji
posjeduje
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
realnom
vremenu.
Bit layout.
e prikazan
izgled
vrlookruenje
jednostavnog
layouta
koji posjeduje
mogue
je u
vrlo
brzo
napisati
vlastiti
Eclipse
razvojno
sadri
grafiki
editor
za
TextView,
a
koji
je
zapravo
naljepnica
s
nekim
tekstom
i
gumbom.
Ovi
se
elementi
nalaze
u
sadri
grafiki
editor
za
kreiranje
layouta
to
jo
vie
ubrzava
rad,
a
ujedno
omoguuje
prikaz
rezultata uarealnom
vremenu.
Bit e prikazan
izgled
vrlo jednostavnog
koji posjeduje
TextView,
koji to
je zapravo
naljepnica
s nekim
tekstom
iprikaz
gumbom.
Ovilayouta
elementi
nalaze
u
kreiranje
layouta
jo vie
ubrzava
rad,
apojanjen
ujedno
omoguuje
rezultata
userealnom
vreLinearLayoutu
(kasnije
e
detaljno
biti
svaki
tip
layouta).
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 vrlo
detaljno
biti pojanjen
tip layouta).
menu.
Bit e prikazan
izgled
jednostavnog
layoutasvaki
koji posjeduje
TextView, a koji je zapravo
TextView, a skoji
je zapravo
naljepnica
s nekim
tekstom
gumbom.
Ovi se elementi
nalaze u
LinearLayoutu
(kasnije
e detaljno
biti pojanjen
svaki nalaze
tip ilayouta).
naljepnica
nekim
tekstom
i gumbom.
Ovi
se elementi
u LinearLayoutu
(kasnije e
<?xml version="1.0"
encoding="utf-8"?>
LinearLayoutu
(kasnije
e
detaljno
biti
pojanjen
svaki
tip
layouta).
<?xml
version="1.0"
encoding="utf-8"?>
detaljno biti pojanjen svaki tip layouta).
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
<?xml
version="1.0" encoding="utf-8"?>
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
<?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"
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_height="fill_parent"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:orientation="vertical">
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a TextView"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_height="wrap_content"
android:text="Hello,
I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:text="Hello,
I am a TextView"/>
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a Button"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
</LinearLayout>
android:layout_height="wrap_content"
android:text="Hello,
I am a Button"/>
</LinearLayout>
android:text="Hello, I am a Button"/>
</LinearLayout>
Da
bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
</LinearLayout>
Da
bi se tekst (naljepnica) definirao, prvo se navodi ime objekta koji se eli postaviti na
layout,
je TextView.
Imedefinirao,
objekta seprvo
navodi
dodavanjem
XML vora
/>. Unutar
Da bi sea to
tekst
(naljepnica)
se navodi
ime objekta
koji<textview
se eli postaviti
na
layout,
atekst
to je
TextView.definirao,
Ime objekta
navodiime
dodavanjem
XML
vora
<textview
/>. Unutar
Da
bibise
(naljepnica)
prvo se
seprvo
navodi
objekta
se eli
postaviti
na
layout,
toga
vora
naveden
je ID Ime
(identifikacija)
naljepnice,
irina
i koji
visina
naljepnice
i eli
eljeni
tekst
koji
Da
se
tekst
(naljepnica)
definirao,
se
navodi
ime
objekta
koji
se
postaviti
na
layout,
a
to
je
TextView.
objekta
se
navodi
dodavanjem
XML
vora
<textview
/>.
Unutar
vora
naveden
je ID (identifikacija)
naljepnice,
irina
i visina naljepnice
i toga
eljeni
tekst
koji
atoga
to
je
TextView.
Ime
objekta
se
navodi
dodavanjem
XML
vora
<textview
/>.
Unutar
vora
e
se
prikazivati.
ID
naljepnica
mora
biti
unikatna,
tj.
ne
mogu
postojati
dva
ili
vie
elemenata
layout,
a tonaveden
je TextView.
objekta
se naljepnice,
navodi dodavanjem
XML
voradva
<textview
/>.
Unutar
toga
je ID Ime
(identifikacija)
i ivisina
naljepnice
i se
eljeni
tekst
koji
e sevora
prikazivati.
ID naljepnica
mora biti
unikatna,
tj.irina
ne mogu
postojati
vie
elemenata
naveden
je ID (identifikacija)
naljepnice,
irina
i visina naljepnice
eljeni
tekst
koji eili
prikaziseistim
ID-om.
ID
slui
za
identifikaciju
pojedinog
objekta
kroz
kod
aplikacije.
toga
vora
naveden
je
ID
(identifikacija)
naljepnice,
irina
i
visina
naljepnice
i
eljeni
tekst
koji
seIDprikazivati.
ID naljepnica
mora
unikatna,
tj. ne
postojati
dva
ili vie
elemenata
s istim
ID-om. IDmora
slui
za identifikaciju
objekta
kroz
kod
aplikacije.
vati.
naljepnica
biti
unikatna,
tj. biti
nepojedinog
mogu
postojati
dvamogu
ili vie
elemenata
s istim
ID-om.
se prikazivati.
ID naljepnica
mora
biti
unikatna,
tj. ne mogu
postojati
dva ili vie elemenata
seistim
ID-om.
ID slui
za identifikaciju
pojedinog
objekta
kroz kod
aplikacije.
ID
slui
za
identifikaciju
pojedinog
objekta
kroz
kod aplikacije.
<TextViewandroid:id="@+id/text"
s<TextViewandroid:id="@+id/text"
istim ID-om. ID slui za identifikaciju pojedinog objekta kroz kod aplikacije.
android:layout_width="wrap_content"
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<TextViewandroid:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a TextView"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a TextView"/>
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
android:text="Hello,
I amPrvo
a TextView"/>
Za gumb
vrijedi isti postupak.
se dodaje XML vor <button /> unutar kojega su navedeni
osnovni
parametri
kao
to
su:
ID,
visina,
irina
tekst
koji
e/>seunutar
prikazivati
Za
gumb
vrijedi
isti
postupak.
Prvo
se
dodaje
XML ivor
<button
kojegana
sugumbu.
navedeni
Za
gumb
vrijedi
isti
postupak.
Prvo
se dodaje
vor
<button
/> unutar
kojega
su navedeni
osnovni parametri kao to su: ID, visina,
irinaXML
i tekst
koji
e se prikazivati
na
gumbu.
osnovni
parametri
kao
to
su:
ID,
visina,
irina
i
tekst
koji
e
se
prikazivati
na
gumbu.
Za gumbparametri
vrijedi istikao
postupak.
se dodaje
vor
<button
/> unutar na
kojega
su navedeni
osnovni
to su: Prvo
ID, visina,
irinaXML
i tekst
koji
e se prikazivati
gumbu.
<Buttonandroid:id="@+id/button"
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"
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
<Buttonandroid:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a Button"/>
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello,
I am a Button"/>
android:layout_height="wrap_content"
android:text="Hello, I am a Button"/>
Ako seandroid:text="Hello,
bolje pogleda prijanji
kod, moe se uoiti da se spominju dvije stavke za irinu i
I am
a Button"/>
Akosesebolje
bolje
pogleda
prijanji
kod, moe
sedauoiti
da se spominju
stavke
za irinu i
Ako
pogleda
prijanji
kod,
moe
se uoiti
se spominju
dvije stavkedvije
za irinu
i visinu,
visinu,
abolje
one su
opisaneprijanji
nekom kod,
varijablom.
Ako
se
pogleda
moe
se
uoiti
da
se
spominju
dvije
stavke
za irinu i
avisinu,
one suaopisane
varijablom.
one su nekom
opisane
nekom varijablom.
Ako
seabolje
pogleda
moe se uoiti da se spominju dvije stavke za irinu i
visinu,
one su
opisaneprijanji
nekom kod,
varijablom.
android:layout_width="wrap_content"
visinu, a one su opisane nekom varijablom.
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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
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.
irina
i visina
su u ovom
sluaju
opisane varijablom koja odreuje do koje e se pozicije
i do
41
koje mjere
pojedini
element
rairiti.
irina
i
visina
su
u
ovom
sluaju
opisane
varijablom
koja
odreuje
do
koje
e
se
pozicije
i do
koje mjere pojedini element rairiti.
koje mjere pojedini element rairiti.
android:layout_width="wrap_content"
DIZAJNandroid:layout_height="wrap_content"
KORISNIKOG SUELJA
android:text="Hello, I am a Button"/>
Ako se bolje pogleda prijanji kod, moe se uoiti da se spominju dvije stavke za irinu i
irina i visina su u ovom sluaju opisane varijablom koja odreuje do koje e se pozicije i do koje
visinu, a one su opisane nekom varijablom.
mjere pojedini element rairiti.
android:layout_width="wrap_content"
"wrap_content"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
"wrap_content"
android:layout_height="wrap_content"
wrap_content varijabla govori elementu da bude irok ili visok kao i sadraj koji se nalazi u
wrap_content
govori
elementu
da bude
irok ili visok
i sadrajdokoji
se nalazi
nje- i do
irina i visinavarijabla
su u ovom
sluaju
opisane
varijablom
koja kao
odreuje
koje
e se upozicije
njemu.
mu.
koje mjere pojedini element rairiti.
android:layout_width="fill_parent"
"fill_parent"
android:layout_height="fill_parent"
"fill_parent"
fill_parent
govori
elementu
da bude
irok iliirok
visokilikao
i glavni
u kojem
fill_parentvarijabla
varijabla
layoutseuelekojem se
la
govori
elementu
da bude
visok
kao layout
i glavni
ment
nalazi.
element nalazi.
irina i visina objekta ne moraju biti zadani ovim varijablama, ve se mogu koristiti i standardne
irina i visina
objekta
ne mora
zadani ovim varijablama, ve se mogu
moraju
mog koristiti i
numerike
vrijednosti
uz mjernu
jedinicubiti
DP.
U svijetu Android aplikacija postoje dva najpopularnija layouta: Linear layout i Relative layout.
a)
Linear
layout aplikacija postoje dva najpopularnija layouta: Linear layout i Relative
U svijetu
Android
layout.layout je veinom osnova svake aplikacije, a dijeli se na horizontalni i vertikalni. Kod horiLinear
zontalnog su layouta svi elementi smjeteni jedan pored drugog. Ukoliko prelaze irinu zaslona,
automatski
Linear layout
sustav
dodaje pominu traku kako bi se s lakoom moglo doi do onih elemenata
koji se ne vide. Kod vertikalnog su layouta svi elementi smjeteni jedan ispod drugog. Ukoliko
Linear visinu
layoutzaslona,
je veinom
a traku
dijeli za
sepristup
na horizontalni
svake
aplikacije,
ntalni i koji
vertikalni.
prelaze
sustavosnova
automatski
dodaje
pominu
elementima
nisu Kod
horizontalnog su layouta svi elementi smjeteni jedan
edan pored drugog. Ukoliko prelaze irinu
vidljivi.
zaslona, sustav
ustav automatski dodaje pominu traku kako bi sse
e s lakoom moglo doi do onih
elemenata koji se ne vide. Kod vertikalnog su layouta svi elementi smjeteni jedan ispod
drugog. Ukoliko prelaze visinu zaslona
zaslona, sustav automatski dodaje pominu traku za pristup
elementima koji nisu vidljivi.
Relative Layout
b)
Relative layout predstavlja raspored elemenata jedan nasuprot drugome. Primjerice, mogue
Relative Layout
Relative layout predstavlja raspored elemenata jedan nasuprot drugome. Primjerice,
mogue je imati gumb A i gumb B i mogue je narediti gumbu A da bude pored,
pored ispod ili
iznad gumba B.
42
ZADATAK 10
Kreiraj jedan Linear layout i u njega smjesti <TextView /> i dva <button /> te na svaki element primijeni
unikatan izgled pomou *.9.png grafika.
ZADATAK 11
Kreiraj jedan Relative layout i u njega smjesti dva <TextView /> i etiri <button /> te na svaki element
primijeni unikatan izgled pomou *.9.png grafika.
43
44
Programiranje
45
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 javnosti 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 platformu. Dakle, jedna je implementacija JVM za Linux, a
druga za Windows operacijski sustav. Java je kao programski jezik neovisna o platformi
na kojoj se izvodi jer se uvijek izvodi na svom JVM. Java prevoditelji (engl. compiler)
prevode Javu u tzv. bytecode koji interpretira JVM i izvrava Java program. Java se javlja
u dva paketa: Java Runtime 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 instalirati 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 razliitih operacijskih sustava. Kao to je ve spomenuto,
Java se programi izvravaju na JVM. Zbog toga Java ne mora pristupati direktno operacijskom sustavu, tj. neovisna je o operacijskom sustavu na kojem se izvrava. Programsko
rjeenje koje je napisano jednom moe se bez ikakvih izmjena odvijati na Linuxu, Windowsima i sl.
Java je objektno orijentiran programski jezik (engl. ObjectOriented Programming language: OOP) to znai da se kod predstavlja kao stvarni objekt u svijetu. Svi su elementi
u Javi objekti, a izuzetak su primitivni tipovi (int, long, float, boolean itd.). Java je vrlo
striktan programski jezik. Svaki tip varijable mora biti predefiniran, tj. varijabli se ne
moe dodijeliti tip koji nije prethodno definiran, koji nema pripadajuu klasu. Java ima
automatski menadment memorije to znai da programer ne mora voditi brigu o alokaciji 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 instancirani objekti nemaju aktivne pokazivae na memoriju.
3.2. Varijable, operatori [6]
Java programski jezik razlikuje sljedee vrste varijabli:
a)
Varijable objekata (instanci) se definiraju izvan svih metoda i izvan konstruktora klase.
Sve one varijable koje ispred sebe nemaju kljunu rije static jesu varijable objekta. Izmjenom
se tih 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 nemaju kljunu rije static. Dakle, svaki objekt sadrava svoj skup nestatinih varijabli.
46
OSNOVE PROGRAMIRANJA
b)
Varijable klasa su sve varijable koje ispred sebe sadravaju kljunu rije static. Za kompajler to znai da postoji samo jedna kopija te varijable neovisno o tome koliko se objekata iz te
klase stvorilo. U primjeru automobil statina bi varijabla mogla biti:
static brojKotaca = 4;
Ta vrijednost vrijedi za sve automobile i stoga se ne bi trebala mijenjati za niti jedan automobil.
c)
Lokalne varijable su varijable koje se nalaze u metodama objekata. Te su varijable uglavc)
varijable
varijable
koje
metodama
objekata.
Te
uglavnom
nom pomone
i koriste
se su
prilikom
sl. Ne postoji
posebna
kljuna
rije kojom
c) Lokalne
Lokalne
varijable
su
varijableizraunavanja
koje se
se nalaze
nalaze u
u ili
metodama
objekata.
Te su
su varijable
varijable
uglavnom
pomone
i
koriste
se
prilikom
izraunavanja
ili
sl.
Ne
postoji
posebna
kljuna
rije
se
i koristelokalna,
se prilikom
izraunavanja
ili sl.izNelokacije
postoji posebna
kljuna
rije kojom
kojom
se
se oznaavapomone
je li varijabla
nego
se zakljuuje
u kojoj je
varijabla
deklarirana,
oznaava
je
li
varijabla
lokalna,
nego
se
zakljuuje
iz
lokacije
u
kojoj
je
varijabla
deklarirana,
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
tj.
tj. izmeu
izmeu vitiastih
vitiastih zagrada
zagrada koje
koje oznaavaju
oznaavaju metodu.
metodu. Lokalne
Lokalne su
su varijable
varijable vidljive
vidljive samo
samo
koja ju sadrava,
ali
ne
i
ostatku
klase.
metodi
koja
ju
sadrava,
ali
ne
i
ostatku
klase.
metodi koja ju sadrava, ali ne i ostatku klase.
d)
Parametri
su varijable
koje se
se koristeu deklaraciji
u deklaraciji metode.
Metodazahtijevati
moe zahtijevati
d)
d) Parametri
Parametri su
su varijable
varijable koje
koje se koriste
koriste u deklaraciji metode.
metode. Metoda
Metoda moe
moe zahtijevati neki
neki odreeni
parametar
kao
ulaz
tako
da
obradom
ulaznog
parametra,
moe
kreiratineki
izlaznu
odreeni
odreeni parametar
parametar kao
kao ulaz
ulaz tako
tako da
da obradom
obradom ulaznog
ulaznog parametra,
parametra, moe
moe kreirati
kreirati izlaznu
izlaznu
vrijednost. vrijednost.
vrijednost.
private
int int
zbrajanje
(int
a,a,int
b){
private
zbrajanje
int
private int
zbrajanje (int
(int a,
int b){
b){
c
=
a
+
b;
int int
c
=
a
+
b;
int c = a + b;
return
return
c; c;
return
c;
}
}
}
Primjer
Primjer 1.2.1.Parametri
1.2.1.Parametri metode
metode
Metoda
zbrajanje
sadri
dva
parametra
tipa
int.
Varijabla
cc je
varijabla.
U
Metoda
zbrajanje
sadri
kojisu
tipa
Varijabla
c je lokalna
varijabla.
Metoda
zbrajanje
sadridva
dvaparametra
parametra a
aaii ib
bbkoji
koji
susu
tipa
int.int.
Varijabla
je lokalna
lokalna
varijabla.
U Javi
Javi se
seU Javi
razlikuju
sljedee
vrste
operatora:
razlikujusljedee
sljedee vrste
se razlikuju
vrsteoperatora:
operatora:
e)
operatori
[2]
e)
Aritmetiki
operatori
e) Aritmetiki
Aritmetiki
operatori [2]
[2]
Pretpostavimo
10,
Pretpostavimo
sljedee: sljedee:
a = 10, baa ===20.
Pretpostavimo
sljedee:
10, b
b =20.
=20.
Operator
Operator
++
-**
//
%
%
++
++
---
Opis
Opis
Zbrajanje
Zbrajanje
Oduzimanje
Oduzimanje
Mnoenje
Mnoenje
Dijeljenje
Dijeljenje
Modul
Modul vraa
vraa ostatak
ostatak cjelobrojnog
cjelobrojnog dijeljenja
dijeljenja
Increment
poveava
vrijednost
Increment poveava vrijednost za
za 1
1
Decrement
Decrement smanjuje
smanjuje vrijednost
vrijednost za
za 1
1
Tablica
Tablica 1.2.1.
1.2.1. Aritmetiki
Aritmetiki operatori
operatori
f)
f) Relacijski
Relacijski operatori
operatori
Primjer
Primjer
aa ++ b
=
b = 30
30
aa b
b == -10
-10
aa ** b
b == 200
200
b
/
a
b / a == 2
2
b
b%
% aa == 0
0
a++
a++ == 11
11
a-a-- == 9
9
f)
Relacijski operatori
Pretpostavimo
sljedee: a
= 10, b
= 20.
Pretpostavimo
Pretpostavimo
sljedee: sljedee:
a = 10, ba == 10,
20.b = 20.
Operator
Operator
==
==
!=
!=
>>
<<
>=
>=
<=
<=
Opis
Opis
Provjerava
da
li
su
2
vrijednosti
Provjerava da li su 2 vrijednosti jednake
jednake
Provjerava
Provjerava da
da lili su
su 2
2 vrijednosti
vrijednosti razliite
razliite
Provjerava
Provjerava da
da lili je
je lijevi
lijevi operand
operand vei
vei od
od desnog
desnog
Provjerava
da
li
je
lijevi
operand
manji
Provjerava da li je lijevi operand manji od
od desnog
desnog
Provjerava
Provjerava da
da lili je
je lijevi
lijevi operand
operand vei
vei ili
ili jednak
jednak desnom
desnom
Provjerava
Provjerava da
da lili je
je lijevi
lijevi operand
operand manji
manji ili
ili jednak
jednak desnom
desnom
Tablica
Tablica 1.2.2.
1.2.2. Relacijski
Relacijski operatori
operatori
g)
g) Logiki
Logiki operatori
operatori
Primjer
Primjer
aa ==
b
== b false
false
aa !=
!= b
b true
true
aa >> b
b false
false
aa << b
b true
true
aa >=
>= b
b false
false
aa <=
<= b
b true
true
Pretpostavimo
Pretpostavimo sljedee
sljedee a
a == true,
true, b
b == false.
false.
47
OSNOVE PROGRAMIRANJA
g)
Logiki operatori
Opis
Logiki AND operator. Ako oba operanda
vraaju true onda je rezultat true
Logiki OR operator. Ako bar jedan
operand vraa vrijednost true onda je
rezultat true
Logiki NOT operand. Slui za
dodjeljivanje suprotne vrijednosti
operandu.
Tablica 1.2.3. Logiki operatori
Primjer
a && b false
a || b true
!a false
!b true
Izvoenje programa tee od smjera gore prema dolje, tj. redoslijedom kako je kod napisan. Taj se niz
Izvoenje
programa
tee
odprekinuti
smjera primjenom
gore prema
dolje, tj.
redoslijedom
kako je kod
napisan. Taj
izvoenja
programa
moe
odreenih
kontrola
toka: if naredbama,
for petljama,
se nizgrananjem,
izvoenjaizvoenjem
programadijela
moe
prekinuti
primjenom
odreenih
kontrola
toka:
if
naredbama,
koda ovisno o odreenom stanju i sl.
for petljama, grananjem, izvoenjem dijela koda ovisno o odreenom stanju i sl.
Zadatak 1.2.1
ZADATAK
12
Unesi realni broj i pohrani unesenu vrijednost u varijablu. Ispii poruku na ekran ovisno o tome je li
3.3.1. Grananja
1.3.1. Grananja
Java
razlikuje
sljedee
vrstegrananja
grananja koje
koriste
ovisno
o situaciji:
Java razlikuje
sljedee
vrste
kojesese
koriste
ovisno
o situaciji:
a) If-then
kontrolaje
je najosnovnija
najosnovnija kontrola
toka programa.
Govori programu
izvri odreeni
a)
If-then
kontrola
kontrola
toka programa.
Govori da
programu
da izvri
dio koda ovisno o tome je li odreeni uvjetni izraz istinit. Npr. automobil bi mogao koiti
odreeni diosamo
koda
ovisno o tome je li odreeni uvjetni izraz istinit. Npr. automobil bi mogao
ako je ve u pokretu. Jedna je od moguih implementacija ovog algoritma:
koiti samo ako je ve u pokretu. Jedna je od moguih implementacija ovog algoritma:
private void koci (){
private void
koci (){
if(jeUPokretu){
if(jeUPokretu){
brzina--;
} brzina--;
} }
}
Primjer
If-then
naredba
Ako varijabla jeUPokretu ima vrijednost
false,2.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
varijabla jeUPokretu ima vrijednost false, brzina se nee
smanjivati
tovitiastih
znai da i sam
zagrada. Dakle:
Ako
automobil stoji. Ako postoji samo jedan redak koda, ova se if-then naredba moe napisati i bez
private
void Dakle:
koci (){
vitiastih
zagrada.
if(jeUPokretu)
b) If-then-else kontrola omoguuje izvravanje drugih dijelova koda u sluaju da je if izraz false.
If-then-else
kontrola
omoguuje
izvravanje
drugih
u sluaju da je if izraz
Npr. ako je
automobil
u stanju mirovanja,
moe se
izvritidijelova
neki drugikoda
dio koda.
b)
false. Npr. ako je automobil u stanju mirovanja, moe se izvriti neki drugi dio koda.
48
OSNOVE PROGRAMIRANJA
If-then-else naredbom mogu se raditi i viestruke provjere nekog uvjeta. To se moe vidjeti 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. pokazuje da ako uenik ima rezultat vei od 90, svi su izrazi ispunjeni. Meutim, naredba radi tako da im se jedan uvjet zadovolji, ostali se uvjeti zanemaruju.
c)
Switch kontrola je slina if-then-else naredbi. Podrava byte, short, char i int primitivne
tipove podataka, ali i enumerirane i String tipove 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;
}
49
OSNOVE PROGRAMIRANJA
Hoe li se koristiti if-then-else ili switch naredba ovisi o itljivosti koda, ali i o izrazu koji treba
provjeravati. If-then-else naredba testira izraze koji se temelje na udaljenosti nekih vrijednosti
ili za provjeru nekog stanja, a switch naredba provjerava izraz koji se temelji na jednoj int, enum
vrijednosti ili String objektu. Izvoenje se kod switch naredbe ne prekida iako je uvjet i prvi put
ispunjen. Zbog toga je nakon svakog izraza nuno staviti 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 istinit.
int i = 1;
while(i < 10){
System.out.println(Petlja se izvrila + i puta);
i ++;
}
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 izvesti niti jednom.
do{
// kod
} while(izraz);
c)
For petlja omoguuje kompaktan nain iteracije kroz skup vrijednosti. Opi se oblik for
petlje moe zapisati na sljedei nain:
for(inicijalizacija; uvjetni izraz; inkrement){
// kod
}
Inicijalizacija inicijalizira petlju. Izvrava se samo jednom, tj. kada petlja zapoinje. Petlja se izvrava sve dok je uvjetni izraz istinit. Kada uvjetni izraz poprimi vrijednost false, petlja se prekida.
Inkrement je izraz koji se izvrava prilikom svake iteracije petlje. Najee je to inkrement (uveanje) ili dekrement (umanjenje) neke vrijednosti.
for(int i = 0; i < 10; i++){
System.out.println(Broj iteracije: + i);
}
50
OSNOVE PROGRAMIRANJA
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 fiksni broj vrijednosti istog tipa. Veliina se polja odreuje
kada se kreira polje.
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
Polja se deklariraju slino kao i varijable, a poslije tipa slijedi uglata zagrada. Polje se moe inicijalizirati i skraenom sintaksom.
int polje[] = {100, 200, 300, 400, 500, 600, 700, 800, 900, 1000}
Veliina se polja u primjeru 11. odreuje brojem elemenata izmeu vitiastih zagrada. Mogue je
definirati i polje polja, tj. viedimenzionalno polje koritenjem dva ili vie skupova vitiastih zagrada.
U Javi je viedimenzionalno polje jednostavno polje koje u sebi sadrava polja, a ne tip podataka.
51
OSNOVE PROGRAMIRANJA
String[][] imena = {
{Pero, Marko, Ivan},
{Peri, Markovi, Ivi}
};
System.out.println(imena[0][0] + +
System.out.println(imena[0][2] + +
imena[1][0]);
imena[1][2]);
OUTPUT:
Pero Peri
Ivan Ivi
ZADATAK 14
Napii program koji e uitati 5 realnih brojeva u polje i ispisati najmanji element u polju.
Neophodni dijelovi deklaracije metode su: tip koji metoda vraa, naziv, zagrade i tijelo izmeu
vitiastih zagrada. Deklaracija se metode sastoji od 6 komponenti:
1.
2.
Vrijednost koju metoda vraa: tip varijable koju metoda vraa (ako metoda ne vraa
vrijednost, onda je void)
3.
4.
Lista parametara: lista parametara je u zagradama i metoda ih prima kao ulazne podatke. Mora se navesti tip i naziv parametra. Ako parametri nisu potrebni, koristi se prazna zagrada ().
52
OSNOVE PROGRAMIRANJA
5.
List iznimaka: ponekad odreeni kod baca iznimke, a iznimke se mogu vezati na deklaraciju metode tako da se navede lista svih moguih iznimaka koje se mogu dogoditi prilikom
izvoenja metode.
6.
Tijelo metode: sadri sav potreban kod za metodu zajedno s deklaracijom lokalnih varijabli.
Svaka metoda ima svoj potpis (engl. signature) koji metodu ini jedinstvenom. Potpis je gore
napisane metode sljedei:
public double zbroji(double a, double b);
Preporua se da se metode imenuju s glagolom koji je napisan malim slovima, a ako se sastoji
od vie rijei, prva rije treba biti glagol, a druga imenica, pridjev i sl.
tri
triBrzo
koi
dohvatiPodatkeIzBaze
Java omoguava preoptereivanje (engl. overloading) metoda. Moe razlikovati metode s razliitim potpisom. To znai da metode u istoj klasi mogu imati 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){};
}
Dakle, java razlikuje sve tri gore navedene metode. Preoptereene metode razlikuje po broju i
tipu argumenata u listi parametara.
NAPOMENA: Ne smije se zamijeniti 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 opisati ponaanje koje se razlikuje od ponaanja klase roditelja kojeg je naslijedila. U svakodnevnom ivotu
objekti imaju odreene atribute kao to npr. ormar ima visinu, irinu i duinu. Ormaru se mogu
mijenjati stanja pomou akcija kao to su otvaranje i zatvaranje ormara. Kao to s varijablama
definiramo atribute objekta, tako s metodama definiramo akcije koje se mogu raditi na objektu.
Dakle, metode omoguuju promjenu stanja objekta. U ovom se sluaju moe mijenjati stanje
ormara iz zatvorenog u otvoreno i obrnuto.
53
OSNOVE PROGRAMIRANJA
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;
}
}
Primjeri metoda ve zahvaaju granicu objektno orijentiranog programiranja, ali je lake razumjeti 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 definirana kao false:
private boolean otvoren = false
Ako se na tom objektu pokrene metoda otvoriOrmar(), vrijednost otvoren e se promijeniti u
true to znai da je tom objektu promijenjeno stanje. Stanje se ormara moe provjeriti s metodom jeOtvoren(). Isto tako, ako se pokrene metoda zatvoriOrmar(), varijabla otvoren e se
promijeniti 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());
}
}
Program u primjeru 20. kreira objekt tipa 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:
54
OSNOVE PROGRAMIRANJA
Pomou metoda mogu se raditi i neki sloeniji postupci kao npr. raunanje opsega krunice.
Takva metoda ne mijenja stanje objekta, ali vraa informacije o objektu koje se mogu dobiti iz
njegovih svojstava. Ako je zadan polumjer krunice, iz tog se svojstva moe dobiti informacija o
opsegu krunice. Prvo se kreira objekt Krunica u kojem se definira metoda izraunajOpseg(). Ta
metoda e vraati broj tipa 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;
}
}
U primjeru 1.4.8. kreiraju se dvije razliite krunice. Prva krunica ima centar u toki (5, 5) i polumjer 10, a druga u toki (10, 10) i polumjer 20. U konzolu se ispisuje sljedee:
55
OSNOVE PROGRAMIRANJA
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
private
b)
package
c)
protected
d)
public
Najee se u programiranju koriste samo private i public razine pristupa. Razina pristupa opisuje kojim e klasama metode biti vidljive. Ako je razina pristupa private, samo klasa u kojoj se
nalazi ta metoda ima pristup toj metodi i samo ju ona moe koristiti. Package razina pristupa
oznaava da metodi moe pristupati klasa u kojoj se nalazi, ali i sve klase koje se nalaze u istom
pakovanju (engl. package). Ako je razina pristupa protected, metodi moe pristupiti 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 pristupiti bilo koja klasa. Malom se izmjenom klase Krunica moe
pokazati primjer utjecaja razine pristupa na pozivanje metoda.
56
OSNOVE PROGRAMIRANJA
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;
}
}
Ako se instancira objekt Krunica, moe se pozvati samo metoda izraunajOpseg(), ali ne i metoda izraunajPovrinu() jer je metoda izraunajOpseg() razina pristupa public to znai da metodu moe pozvati bilo koja klasa. To se moe primijetit i prilikom pisanja samog koda gdje Eclipse
alat ne doputa pozivanje metode izraunajPovrinu() jer je ona private, tj. ne moe se pozvati
u nekoj drugoj klasi.
57
Kada je napravljena klasa za krunicu, neto se eli i raditi s njom. Ali sa samom se klasom ne
moe raditi nita. Prvo se mora stvoriti objekt iz te klase kako bi se s njim moglo manipulirati.
Definiranjem klase stvorio se vlastiti tip podatka. Dakle, kao to postoji int, float, double, String,
sada postoji i tip podataka Krunica koji je neto sloeniji od tih osnovnih tipova podataka. On
se sastoji od vie jednostavnih tipova podataka. Kao to se nekoj varijabli dodijelio neki tip podataka, i nekoj se varijabli moe dodijeliti tip Krunica.
int broj;
float drugiBroj;
String tekst;
Na ovaj se nain varijablama dodjeljuje jednostavan tip podataka. Ako se varijabli eli dodijeliti
tip Krunica, mora se koristiti kljuna rije new.
Krunica mojaKrunica = new Krunica();
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 raunati opseg i povrina krunice postavljanjem polumjera krunice. Polumjer se krunice moe postaviti
direktnim pristupom varijabli u objektu ili pomou metoda enkapsulacije.
U pisanju klasa preporua se postaviti sve varijable na to niu razinu pristupa (engl. access level).
To se odnosi na private, public i protected kljune rijei ispred varijable:
58
b)
c)
Metoda kojom se moe postaviti polumjer krunice jest postavljanje varijable r kao public i direktno pristupanje varijabli.
Krunica mojaKrunica = new Krunica();
mojaKrunica.r = 5;
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
}
}
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 biti isti kao i naziv klase i ne vraa nikakav tip podataka (ak ni void). Konstruktori se koriste kada je potrebno postaviti stanje objekta (inicijalizirati objekt) prilikom njegovog stvaranja (instanciranja). Na primjeru klase Krunica
mogu se postavljati varijable nakon inicijalizacije pozivanjem set metoda ili prilikom inicijalizacije slanjem koordinata i polumjera u konstruktor.
59
Tako kreiran objekt imat e centar u koordinatama (0, 0) s polumjerom 5. Klasa moe imati proizvoljan 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;
}
Svaka klasa sadri osnovni konstruktor bez parametara koji se ne mora definirati.
Krunica mojaKrunica = new Krunica();
60
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 naslijediti drugu klasu i tada se naziva podklasa (engl. subclass, derived class, extended class, child class). Klasa koja je naslijeena naziva se nadklasa (engl. superclass, base class,
parent class). Svaka klasa moe naslijediti samo jednu nadklasu (u sluaju potrebe za viestrukim nasljeivanjem koriste se suelja (engl. interface). Kada se kreira nova klasa, a ve postoji
klasa koja sadri dio koda koji je potreban, moe se naslijediti tu klasu i iskoristiti ve gotove
dijelove koda, tj. nije potrebno pisati 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
pozvati 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;
}
61
Inenjer klasa nasljeuje sve varijable i metode od klase Zaposlenik i dodaje jo polje brojNadziranihObjekata i metodu nadziriNoviObjekt. Dakle, kao da je napisana klasa Zaposlenik ispoetka
s etiri 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.
Zaposlenik je klasa koja se moe naslijediti 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 odrediti apstraktna nadklasa Zaposlenik.
public abstract Zaposlenik{
abstract void obavljajRad();
abstract void uzmiGodinji();
}
62
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 (0100). 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. Polimorfizam
Polimorfizam je u rjeniku definiran kao princip u biologiji prema kojemu organizam ili vrsta
moe imati vie razliitih oblika ili razina razvoja. Taj se princip moe primijeniti i u Java programskom jeziku. Podklase neke klase sadre vlastito ponaanje, ali i dio ponaanja koji dijeli sa
svojom nadklasom. Polimorfizam se moe demonstrirati manjom izmjenom klase Zaposlenik.
Moe se dodati metoda ispiiOpis koja e ispisivati sve trenutne podatke o zaposleniku.
public void printDescription(){
System.out.println("Zaposlenik " + this.ime + " " + this.prezime +
adresi " + this.adresa);
}
" ivi na
63
"
64
zaposlenik01.printDescription();
zaposlenik02.printDescription();
zaposlenik03.printDescription();
Primjer 45. Polimorfizam:sva su tri zaposlenika istog tipa, ali su instancirani kao razliiti objekti
U testnom se programu moe vidjeti da se varijablama zaposlenik01, zaposlenik02 i zaposlenik03 dodijelio tip varijable Zaposlenik, ali se svaka varijabla instancirala kao drugaiji tip objekta. To je mogue zbog polimorfizma. Dakle, zaposlenik01 je instanciran kao new Zaposlenik(), a
zaposlenik02 kao new Inenjer(). Budui da je klasa Inenjer naslijedila klasu Zaposlenik, a zaposlenik02 je zapravo i Zaposlenik i Inenjer, moe mu se dodijeliti tip 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 biti samo tipa Zaposlenik, ali ne i Inenjer ili Arhitekt jer je
taj objekt samo Zaposlenik, ali nije Inenjer ili Arhitekt. Slina situacija moe postojati i kod parametara metoda u kojima se moe definirati parametar tipa Zaposlenik to znai da e metoda
primati parametre tipa Zaposlenik, ali i Inenjer i Arhitekt.
public void metoda(Zaposlenik zaposlenik){
//kod
}
Ova se metoda moe pozivati na sljedee naine i sva su tri naina ispravna.
metoda(zaposlenik01);
metoda(zaposlenik02);
metoda(zaposlenik03);
65
https://dl-ssl.google.com/android/eclipse/
Nakon toga se oznai Developer Tools, prihvaaju se licence, klikne se na Finish i eka se izvrenje instalacija. Nakon instalacije restartira se Eclipse i pokree se u Eclipse menu Window -> Android SDK Manager. Ako se koristi verzija Juno, prvo se dodaje AndroidSDK manager u izbornik
Window tako da se pokrene Window -> Customize Perspective... 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 platforme Androida eli razvijati. Trenutno se podrava od verzije 1.5 (API 3), tj. Cupcake do verzije 4.2 (API 17), tj. Jelly Bean. Novije verzije Androida imaju vee i bolje mogunosti i programer bira verziju platforme kojom eli razvijati aplikaciju. Ovdje su trenutno dostupne sve verzije SDK-ova te Tools folder. Za SDK-ove se odabire samo
SDK platform, a ako se ele razvijati aplikacije s Google mapama, oznauje se i Google APIs.
Ostalo je proizvoljno. Odabiru se i System Image datoteke za kreiranje i pokretanje emulatora.
66
Zatim se izrauje emulator u kojem e se testirati izraene aplikacije. Emulatori se ureuju klikom na meni Window -> AVD Manager u kojem se bira New i postavljaju se sljedei parametri:
a)
b)
Devic AVD manager sadri ve gotove konfiguracije ureaja. Moe se odabrati jedna
od ve postojeih konfiguracija. Ne mora se postavljati ukoliko se eli napraviti vlastita konfiguracija.
c)
Target programer odabire za koju verziju Androida eli raditi aplikaciju i koju minimalnu verziju eli podravati. Sve novije verzije Androida podravaju i starije verzije tako da je
najbolje postaviti najnoviju verziju Androida.
d)
CPU/ABI Android ureaji koriste razliite arhitekture procesora. Bira se arhitektura
koju e emulator koristiti. Postoje razliite prednosti i nedostatci ovakvog izbora. Npr. Intelova
arhitektura podrava GPU akceleraciju to znai da e emulator koristiti grafiku karticu raunala kako bi se ubrzao rad emulatora.
e)
Memory Option emulator za svoj rad koristi RAM memoriju raunala. Postavlja se
koliko e RAM memorije emulator imati 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 ubaciti SD kartica s dodatnom memorijom
kako bi se poveao njegov kapacitet. Moe se odrediti koliko e vanjske memorije emulator imati.
67
68
b)
c)
Package Name namespace paket u kojem se nalaze Java klase (pravila su ista kao i u
Javi). Naziv paketa mora biti unikatan u cijelom Android sustavu. Postoje razne preporuke kako
imenovati paket.
d)
Minimum Required SDK najmanja verzija Android OS-a na kojoj e se pokretati aplikacija. Ako je minimalna verzija 2.2., aplikaciju nee podravati ureaji s 2.1. OS-om
e)
Target SDK ciljani Android OS za koji se eli razvijati aplikacija. Ako je ciljani SDK 4.1.,
aplikaciju nee podravati 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)
cije.
Theme odreuje se Android tema koja odreuje izgled odreenih komponenti aplika-
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 izraditi.
Zatim se moe kreirati:
a)
Blank Activity
Blank Activity je prazna aktivnost koja sadri samo osnovne komponente prozora. To je najee
Title bar traka na vrhu na kojoj pie naziv aplikacije ili sl.
b)
Fullscreen Activity
Fullscreen Activity je takoer prazna aktivnost, ali su osnovne komponente skrivene. Dakle, ova
je aktivnost u potpunosti prazna.
c)
Master Detail Flow Activity je aktivnost koja se najee koristi u tabletima. Zahtijeva da najmanja verzija OS-a bude 3.0. jer koristi fragmente koji su podrani od te verzije. Sastoji se od liste
stavki s lijeve strane i detaljnog opisa stavki s desne strane.
Najbolje je odabrati Blank Activity. Sljedei je korak odabir naziva aktivnosti, naziv Java klase i
naziv layouta to je XML datoteka u kojoj se kreira UI, tj. izgled aktivnosti. Tip se navigacije moe
ostaviti na None.
69
AndroidManifest.xml
Manifest datoteka opisuje osnovne karakteristike aplikacije i definira njene komponente. Jedan
je od najvanijih elemenata manifesta <uses-sdk> element kojim se deklarira kompatibilnost
aplikacije za razliite verzije Android operacijskog sustava. Kada se Android projekt kreira, odabire se najmanja i najvia podrana verzija OS-a koja je zabiljeena ovim elementom:
<uses-sdk
android:minSdkVersion="8"
android:targetSdkVersion="17" />
U Activity se elementu pomou Name atributa definira putanja do Activity klase. Label atribu-
70
src
U src se direktoriju nalaze glavne Java klase. Kreiraju se nove klase potrebne za razvoj razliitih
komponenti aplikacije.
c)
res
U res se direktoriju nalaze razne dodatne komponente za razvoj aplikacije kao to su slike, XML
datoteke za definiranje UI-a, datoteke za definirane nekih vrijednosti, 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
Values
Values je direktorij za ostale XML datoteke koje sadre skup resursa kao to su string vrijednosti,
definicije boja i sl.
Kreiranjem projekta SDK je ve stvorio testnu Hello world! aplikaciju. Aplikacija se moe testirati
tako da se napravi desni klik na projekt -> Run As -> Android Application. Nakon to se emulator
uitao, pokree se Android Tutorial aplikacija.
Nakon uspjeno prevedenog Android projekta, u gen se direktoriju moe nai R.java
71
<krunica> se na engleskom jo naziva opening tag ili otvarajua oznaka, a </krunica> closing
tag ili zatvarajua oznaka. Razlika je u kosoj crti kada se element zatvara. U primjeru ispred
nalazi se element iji je naziv (engl. name) krunica, a vrijednost (engl. value) je Moja krunica. Vano je da svaki element bude otvoren, a na kraju zatvoren. Svaki element osim naziva i
vrijednosti moe sadravati i atribute. Atributi su vrijednosti koje se nalaze u otvorenom dijelu
elementa u stilu klju vrijednost. Npr.
<krunica polumjer = "10">Moja Krunica</krunica>
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.
72
Ako element nema vrijednost, a ima npr. samo atribute, moe se odmah zatvoriti tako da se
definira 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 koristi za prikaz strukture podataka. Tako se moe prikazati struktura 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>
Kua sadri nekoliko elemenata: adresu, kuni broj i vlasnik. Za vlasnika se takoer mogu definirati i njegovi elementi, tj. ime, prezime, dob, spol. Moe se ii jo dublje u strukturu pa se tako za
vlasnika koji ima ivotinju definiraju elementi za ivotinju. Postoji uska poveznica i s objektima
u OOP. Ako postoji klasa Kua, ima varijable: adresa tipa String, kuniBroj tipa int, vlasnik tipa
Vlasnik. Tada bi se kreirala jo jedna klasa Vlasnik koja ima varijable: ime tipa String, prezime
tipa String, dob tipa int i spol tipa String.
U definiranju se korisnikog suelja za Android ne koriste vrijednosti elemenata nego samo atri-
73
android:id="@+id/myButton"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="OK" />
74
Programski se Title Bar odstranjuje tako da se u onCreate() metodi napie sljedei kod:
requestWindowFeature(Window.FEATURE_NO_TITLE);
Layout definira vizualnu strukturu korisnikog suelja kao to je UI za aktivnost. Layouti se mogu
definirati na dva naina: deklaracijom UI elemenata u XML-u ili instanciranjem layout elemenata 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 aktivnosti kreirati i slagati View i VewGroup objekte. Prednost
je deklariranja UI-a u XML-u to se postie razdvajanje koda od prezentacijskog dijela aplikacije.
Tako je UI neovisan o programskom kodu to znai da se svojstva elemenata mogu mijenjati
bez utjecaja na programski kod. Deklariranje UI elemenata strukturno vrlo blisko prati nazive
njihovih klasa i metoda: nazivi su elemenata vrlo slini nazivima klasa, a nazivi atributa nazivima metoda. Npr. Button element u XML-u se odnosi na Button klasu, a njegov atribut text na
metodu Button.setText().
Kao to je ve reeno, UI aktivnost se definira u layout XML datoteci. U takvoj se datoteci koriste dvije vrste objekata: View i ViewGroup. ViewGroup u sebi moe sadravati vie Viewova i
ViewGroupa, a View ne moe sadravati niti jedan element. Dakle, ViewGroup je kontejner za
Viewove koji se u njemu hijerarhijski razliito slau to ovisi o tipu 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 elemenata, slau se jedan na drugi po zamiljenoj Z osi.
d)
75
Prvom TextViewu se dodjeljuje ID preko kojeg se u kodu moe dohvatiti. S @+id/textView1 je reeno da u R.java klasu zapie ovaj ID kako bi se kasnije mogao koristiti. AlignParentTop i AlignParentLeft govore TextViewu da se smjesti na vrh i lijevo u odnosu na
roditelja, tj. ViewGrupu u kojoj se nalazi, a u ovom sluaju RelativeLayout. Width i Height
su atributi koji odreuju irinu i duinu za ovaj TextView, tj. koliko e prostora zauzimati. Text oznaava koji e tekst biti prikazan. Moe se uoiti da se editor buni kod napisanog
teksta. Razlog tomu je to bi svi stringovi trebali biti zapisani u posebnu datoteku i referencirani u atributu text. Dakle, treba otvoriti datoteku strings.xml i upisati sljedei kod:
76
ZADATAK 18
Kreiraj aktivnost i dodijeli joj XML layout datoteku kao na slici:
77
78
});
79
Nova se aktivnost mora registrirati u manifestu jer inae aplikacija nee raditi, tj. javljat e greku da ne moe nai aktivnost.
80
<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>
Klikom na OK gumb trebala bi se pokrenuti druga aktivnost u kojoj pie vrijednost koja
je napisana u prvoj aktivnost u EditTextu.
5.6. ivotni ciklus Android aktivnosti [14]
Od pokretanja, rada s aplikacijom pa sve do izlaska instance aktivnosti u aplikaciji prelaze u
razliita stanja svog ivotnog ciklusa. Npr. kada se aktivnost pokree prvi put, dolazi u prednji
plan sustava i dobiva fokus. Kroz taj proces Android sustav poziva niz metoda ivotnog ciklusa
aktivnosti. Ako korisnik pokree akciju koja zapoinje neku drugu aktivnost ili pokree neku
drugu aplikaciju, sustav opet poziva niz metoda u aktivnosti dok ju stavlja u pozadinu. Ponaanje
se aktivnosti unutar tih metoda ivotnog ciklusa moe odrediti kada korisnik ulazi i izlazi iz aktivnosti. Npr. ako se izvodi streaming nekog videa, pauzira se streaming ako korisnik izlazi iz
aplikacije. Kada se korisnik vrati u aplikaciju, klikom na Play nastavlja streaming video na onom
mjestu gdje je stao.
Temeljne programske paradigme pokreu aplikacije iz neke main aktivnosti, a Android pokree
kod u Activity instanci pokretanjem odreene callback metode koja odgovara stanjima ivotnog
ciklusa aktivnosti.
Postoji slijed callback metoda koje se izvode kada se aktivnost pokree i slijed callback metoda
kada se aktivnost zaustavlja. Tijekom ivota aktivnosti 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 aktivnosti u kojem
je aktivnost prikazana na ekranu, a korisnik je u interakciji s aktivnou. Kako korisnik izlazi iz
aktivnosti, sustav poziva drugi niz metoda, tj. kree se niz piramidu kako bi se rastavio i pravilno
iziao iz aktivnosti. U nekim se sluajevima stanje aktivnosti u izlazu nee obaviti do kraja, tj. stat
81
Nije potrebno implementirati sva stanja ivotnog ciklusa. Meutim, potrebno je razumjeti svaki
od njih i implementirati ih tako da se aplikacija ponaa onako kako korisnik to oekuje. Pravilna
implementacija metoda ivotnog ciklusa aktivnosti osigurava da se aplikacija pravilno ponaa i
da:
se aplikacija ne rui ako korisnik primi poziv ili pokrene neku drugu aplikaciju
se aplikacija ne srui ili izgubi stanje prilikom tranzicije ekrana iz Portrait i Landscape
Od est moguih stanja, samo su tri stanja statina, tj. aplikacija moe ivjeti samo u tri stanja:
a) Resumed
U ovom je stanju aktivnost vidljiva na ekranu i korisnik moe biti u interakciji s njom. U ovom je
stanju aktivnost najee.
b) Paused
U ovom je stanju aktivnost pomraena, djelomino vidljiva zbog druge aktivnosti. Kada npr.
neka druga aktivnost ne prikriva cijeli ekran, prva se aktivnost samo djelomino vidi. Pauzirana
aktivnosti ne moe prihvatiti unos korisnika ili pokretati neki kod.
c) Stopped
U ovom je stanju aktivnost u potpunosti skrivena iza neke druge aktivnosti i nije vidljiva korisniku. Smatra se da je aktivnost u pozadini. Instanca aktivnosti i njeno stanje (npr. varijable) su
ouvani, ali se ne moe izvravati nikakav kod.
Druga stanja (Created i Started) su stanja tranzicije u kojima se aktivnost ne zadrava, nego se
brzo kree iz jednog stanja u sljedee pozivanjem sljedee callback metode. Kada sustav pozove
82
@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");
}
Ispis se moe vidjeti u alatu LogCat koji se skida zajedno s Android SDK. Ako nije prikazan u Eclipseu, moe se nai u Window -> ShowView -> LogCat.
83
Slika 91. Android Log s prikazom ispisanih vrijednosti u svakom stanju ivotnog ciklusa
84
85
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>
86
String resursi se mogu referencirati u kodu i XML datotekama koritenjem naziva u atributu name koji je definiran u elementu <string>. U kodu se string referencira sa sljedeom sintaksom:
R.string.<naziv_stringa>
Android kategorizira veliine ekrana dvama osnovnim svojstvima: veliina i gustoa [7]. Programer mora imati u vidu da e njegova aplikacija biti pokrenuta na ekranima razliitih veliina
i gustoa. Stoga bi trebao ukljuiti alternativne resurse kako bi optimizirao izgled aplikacije na
razliitim ekranima:
postoje 4 ope veliine: small, normal, large, xlarge
postoje 4 ope gustoe: low (ldpi), medium (mdpi), high (hdpi) i extra high (xhdpi)
87
Svaki put kada se referencira slika u Android sustav, isto kao i kod razliitih veliina ekrana, odreuje se i koje e slike uitati to ovisi o gustoi ekrana samog ureaja.
5.8. Fragmenti
Android UI se gradi do skupa View i VewGroupa, a takva se hijerarhija Viewova uitava iz resursa
nakon pokretanja aktivnosti. Aktivnost se inicijalizira i prikazuje na ekranu ureaja. Za manje je
ekrane ovakvo ponaanje prihvatljivo. Korisnik se kree iz jedne aktivnosti u drugu, podravan
je brz i intuitivni prelazak izmeu aktivnosti. No, ako je UI rairen na nekom veem ekranu (npr.
ekranu tableta), neki e dijelovi ekrana ostati statini i nee se uope mijenjati. Dakle, veliki e
dio ekrana ostati neiskoriten, a kretanje iz aktivnosti u aktivnost nema nekog smisla. Implementacija je UI-a u potpunosti podrana i u njoj se dijelovi ekrana izmjenjuju jednostavnim
sakrivanjem i prikazivanjem elemenata ekrana, tj. Viewova. Trebalo bi mijenjati 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 aktivnosti, u Android OS uvedena je Fragment klasa. Fragmenti su podrani od verzije 3.0 (API 11, Honeycomb). Fragment se opisuje kao
neto izmeu Viewa i aktivnosti. Kao i View, moe biti dodan u ViewGroup ili biti dio layouta.
Nije podklasa od Viewa, ali moe biti dodan u ViewGroup koritenjem FragmentTransaction objekta. Kao i aktivnost, fragment ima svoj ivotni ciklus, ali za razliku od aktivnosti, fragment nije
Context i njegov je ivotni ciklus ovisan o aktivnosti u kojoj se nalazi. Kao i svaki View, moe se
dodati u layout XML ili programski.
88
<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>
Ovaj layout koristi aktivnost normalno kao i svaki drugi. Layout koristi <fragment> element u ijem se class atributu definira putanja do klase koja e predstavljati fragment.
Dakle, na ovoj se putanji mora kreirati klasa koja e biti podklasa Fragment klase. Android Framework automatski kreira instancu tog fragmenta kada se layout uita. Kao
i Activity, i fragment moe uitati svoj layout i za svaki se fragment definira 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>
Nakon toga se kreira fragment klasa koja uita svoj layout i koristi elemente isto kao i aktivnost.
89
package android.gauss.androidtutorial;
import
import
import
import
import
android.app.Fragment;
android.os.Bundle;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;
90
za prvi fragment:
b)
za drugi fragment:
91
ZADATAK 19
Kreiraj aktivnost koja dijeli ekran na 3 fragmenta kao na slici:
92
Zasluna je za izvoenje i odravanje aplikacije. Ako bi ova dretva zastala ili bila neaktivna neko vrijeme, aplikacija ne bi reagirala na korisnikove interakcije. Ako Android sustav
primijeti da aplikacija ne reagira na korisnikove interakcije, rui aplikaciju jer smatra da
nije valjana. Na taj nain oslobaa memoriju. Sustav smatra da je aplikacija neaktivna,
tj. da je zaglavila ukoliko se u roku od pet sekundi glavna dretva ne vrati na odravanje
aplikacije. Upravo se iz tog razlog uvode asinkroni pozivi. Ako glavna dretva skida neki
sadraj s Interneta, mora napustiti svoj zadatak odravanja aplikacije i poeti se spajati
na internetsku stranicu, skidati sadraj, spremati sadraj u datoteku, parsirati sadraj i
sl. Za to bi vrijeme sustav primijetio da je aplikacija neaktivna i sruio bi aplikaciju. Kako
bi se to izbjeglo, uvode se asinkroni pozivi, tj. koristi se AsyncTask klasa. AsyncTask klasa
je naslijeena i potrebno je napraviti svoju klasu koja e raditi 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);
}
93
}
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);
}
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 procesiranje. Ako se aktivnost prekine zato to korisnik izlazi iz aplikacije jer ju ne eli koristiti, zaustavljaju se asinkroni pozivi kako se ne bi odvijala pozadinska radnja.
94
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);
}
95
b)
c)
d)
XML datoteke za preference spremaju se u XML direktorij koji se kreira unutar glavnog direktorija 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 finish. Sve se to moe i runo napisati. Eclipse e kreirati novu datoteku koju je najbolje otvoriti u XML pogledu. Sada se mogu
dodavati elementi koji e predstavljati korisnike postavke. U elementima koji se rade, nemaju
svi atributi istu vanost . Najvaniji su sljedei atributi:
a)
Key
Jedinstveni je identifikator za svaku preference stavku. Pomou njega se kasnije dohvaa spremljena postavka.
b)
Title
Predstavlja naziv postavke koji e korisnik vidjeti. Trebao bi biti kratki naziv koji stane u jednu
liniju ekrana.
c)
Summary
Kratki je opis postavke. Iako je koritenje ovog atributa stvar izbora, preporua se.
Preference Activity 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>
96
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);
}
Ova se aktivnost pokree kontrolom, tj. ubacuje se npr. button u glavnu aktivnost. Isto
tako treba definirati PrefsActivity u manifestu. Isti je sluaj kao i kod definiranja obine
Activity. Kada korisnik ue u PrefsActivity, moe postavljati te vrijednosti.
Ove se vrijednosti automatski pamte u ureaju i ne moraju se runo odraivati. Vrijednosti se pamte u tzv. shared preferences. To se moe provjeriti postavljanjem buttona u MainActivity koji e korisnika odvesti u PrefActivity aktivnost. U MainActivity
postoje dva TextViewa koja predstavljaju vrijednosti koje je korisnik unio u preference.
Te se vrijednosti dohvaaju na nekoliko naina. Prvo se dohvati SharedPreference objekt
pomou PreferenceManager klase i njene metode getDefaultSharedPreferences(). Na
taj se nain dobije Shared Preference objekt koji sadri sve vrijednosti koje je korisnik
unio u preference. Svaku je preferencu sada mogue dohvatiti 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 koristi vrijednost definirana u deValue. U sluaju prvog TextViewa,
ako korisnik nije unio nita u preferencu, Moj String e koristiti defaultna vrijednost, a u
TextViewu e pisati Korisnik nije unio. U preferencama su trenutno unesene vrijednosti:
Moj String android
97
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.
Lista se u XML-u mora dohvatiti u kodu i adapter joj mora biti proslijeen.
98
package android.gauss.androidtutorial;
import
import
import
import
android.app.Activity;
android.os.Bundle;
android.widget.ArrayAdapter;
android.widget.ListView;
listView.setAdapter(adapter);
Kreirana je lista gradova koja se poalje u konstruktor adaptera. U konstruktoru se moe primijetiti resurs simple_list_item_1. Taj se resurs preuzima iz android.R.layout resursa. Ako se koriste resursi koji poinju s android, koriste se ve gotovi resursi koji se nalaze u Android SDK. Dakle, 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 dobiti sljedee:
99
android.app.Activity;
android.os.Bundle;
android.view.View;
android.widget.AdapterView;
android.widget.AdapterView.OnItemClickListener;
android.widget.ArrayAdapter;
android.widget.ListView;
android.widget.Toast;
100
U izradi aplikacije pritisak na ListItem stavku obrauje se (engl. handle) tako da se poziva neka
aktivnost koja e detaljno prikazati tu stavku. Dakle, instancira se Intent objekt, u njega se stavljaju svi potrebni podatci o stavci te se poziva nova aktivnosti koja dalje obrauje i prikladno
prikazuje te podatke. No najee programer mora kreirati vlastiti 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 objekti, a ne samo lista Stringova. BaseAdapter omoguava prikaz elemenata iz objekta, ali i definiranje prilagoenog izgleda svih stavki u ListViewu. Za primjer e se kreirati klasa hotel.
package android.gauss.androidtutorial;
import java.io.Serializable;
public class Hotel implements Serializable{
101
Ovakvo rjeenje nije pogrjeno, ali je nepraktino ako objekt ima puno atributa. Bundle objekt
nudi rjeenje, metodu putSerializable(). U ovu se metodu alje objekt tipa Serializable, a budui
da objekt Hotel implementira suelje Serializable, znai da je tipa Serializable i da se moe poslati 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);
Sljedei je korak instanciranje nekoliko objekata tipa Hotel i smjetanje u listu. Ta se lista alje u
vlastiti adapter koji e se kasnije kreirati.
102
package android.gauss.androidtutorial;
import
import
import
import
import
import
import
import
import
java.util.ArrayList;
java.util.List;
android.app.Activity;
android.os.Bundle;
android.view.View;
android.widget.AdapterView;
android.widget.AdapterView.OnItemClickListener;
android.widget.ListView;
android.widget.Toast;
103
vrlo ga je lako definirati 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>
104
package android.gauss.androidtutorial;
import java.util.List;
import
import
import
import
import
import
android.content.Context;
android.view.LayoutInflater;
android.view.View;
android.view.ViewGroup;
android.widget.BaseAdapter;
android.widget.TextView;
return convertView;
U ovom je primjeru kreiran konstruktor koji kao parametre prima Context i List<Hotel> listu.
Pomou Contexta dohvaa se objekt LayoutInflater koji slui za uitavanje XML layout datoteka.
105
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 Hotel Zagreb, ovdje se vraa taj objekt. U getItemId() metodi vraa se indeks objekta u listi. Najvanija 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 vrijednosti. Ako je element razliit od null, XML layout je
ve uitan i nema potrebe opet ga uitavati. Nakon toga se dohvaaju elementi iz layout XML-a
i popunjavaju se vrijednosti s atributima objekata koji se nalaze u List<Hotel> listi. Metoda vraa
prilagoeni convertView objekt.
Sada se moe kreirati onClickListener koji e sluati klik na stavku ListViewa. Kada se klikne stavka u ListViewu, dohvatit e se objekt koji se nalazi na tom mjestu, stavit e ga u Intent objekt i
pokrenut e novu aktivnost koja e prikazati detaljan opis hotela.
106
});
@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);
}
107
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 aktivnost pokree pomou
tog Intent objekta. Kada se aktivnost 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 traiti taj objekt. Nakon toga se vrijednosti TextViewa, koje
se nalaze u layoutu aktivnost, postavljaju na vrijednosti 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 aktivnost koja prikazuje detalje o hotelu kao na sljedeoj slici.
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);
Slino kao i u primjeru iznad, definira se lista Stringova koja e se prikazivati u ListViewu.
Nije potrebno dohvaati ListView objekt jer ListActivity u sebi ve sadri ListView objekt
pa se adapter moe postaviti 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.
Na slici 104. crveno oznaeni dio predstavlja Action Bar. Action Bar pokupi Launcher ikonu i
koristi ju kao svoju Home sliku. Home ikoni i menu ikoni se pristupa pomou onOptionsItemSelected() metode. Najee se u toj metodi radi switch naredba koja provjerava id element koji je
109
Menu ima jedan gumb, a u layout datoteci se oznaava elementom <item>. Dodaje mu se id
kako bi se mogao identificirati pritisak na njega i String vrijednost koja je vidljiva korisniku.
Atribut showAsAction i njegova vrijednost ifRoom ukazuju da e Android prikazati ovaj gumb
u Action Baru ako ima mjesta, a ako mjesta nema, prikazat e ga u klasinom Options meniju.
Postoji nekoliko vrijednosti ovog atributa koje se mogu postaviti kao to su never, a znai da
se gumb nee nikada prikazati u Action Baru i uvijek e biti u klasinom meniju, ili always, a
oznaava da se gumb uvijek prikazuje u Action Baru. Always nije preporuljiv jer ponekad ne
mogu stati svi elementi zbog razliitih veliina ureaja pa moe doi do neeljenog ponaanja
aplikacije. Postoji jo nekoliko vrijednosti koje za sada neemo spominjati.
Sada se u aktivnosti uitava meni. Kada se meni prikazuje, aktivnost poziva onCreateOptionsMenu() metodu i ukazuje na layout datoteku koju treba prikazati. To se postie
tako da se u metodi dohvati MenuINflater objekt i pomou njegove se metode inflater
ukae na layout datoteku menija.
110
@Override
public boolean onCreateOptionsMenu(Menu menu) {
MenuInflater inflater = getMenuInflater();
inflater.inflate(R.menu.main, menu);
}
return super.onCreateOptionsMenu(menu);
Ako se projekt pokrene, trebala bi se prikazati aktivnost kao na slici 107. Klik na ovaj gumb moe
se definirati na sljedei nain: aktivnost sadri metodu onOptionsItemSelected() koja otkriva koji
se gumb pritisnuo, a nakon toga se moe pokrenuti neka odreena metoda ili pokrenuti nova
aktivnost 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);
Dakle, metoda u parametrima alje element menija koji se pritisnuo i u metodi se provjerava id
tog elementa. Ako je id action_settings, korisnik je pritisnuo tipku Settings i moe se pokrenuti
odreena akcija kao npr. otvaranje Settings aktivnosti. Dakle, za elemente menija programer
sam definira id-eve. Za Home element Action Bara id je uvijek isti i tom se elementu pristupa
preko id-a android.R.id.home. U istoj se switch naredbi u jedan sluaj moe staviti android.R.id.
home vrijednost i tada se pokree odreena akcija. Home element Action Bara koristi se za
navigaciju unazad. To se moe npr. napraviti u SettingsActivity aktivnosti koja e se pokrenuti
preko menija Settings. Kada se pritisne na meni element Settings, pokrenut e se nova aktivnost
SettingsActivity koja u svojoj onCreate() metodi postavlja prikaz Home elementa kao navigaciju
unazad. To se postie tako da se dohvati ActionBar i pozove metoda setDisplayHomeAsUpEnabled().
111
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);
Nakon to se izgled Home elementa postavio kao navigacija unazad, definira se to e raditi
pritisak na Home element Action Bara. Kao i u proloj aktivnosti, u metodi se onOptionsItemSelected() preko switch naredbe otkriva id pritisnutog elementa. Ako je id jednak id-u Home
elementa, poziva se metoda koja e se vratiti u prolu aktivnost onBackPressed(). Action Bar
slui i za navigaciju kroz aplikaciju. Postoji nekoliko naina navigacije pomou Action Bara, a
najei je navigacija kroz tabove. Da bi se ostvarila takva navigacija, dohvaa se Action Bar
objekt i postavlja mu tip navigacije NAVIGATION_MODE_TABS. Zatim se kreiraju tabovi kojima
se prosljeuje listener koji e sluati pritisak na tabove. Listener se najee implementira na
aktivnost. Zatim se tabovi dodaju u ActionBar. Tako je npr. u prvoj aktivnosti mogue kreirati
tabove u onCreate() metodi.
112
@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);
Aktivnost treba implementirati TabListener suelje. Implementiraju se tri metode: onTabReselected(), onTabSelected(), onTabUnselected().
113
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) {
}
114
Sadraj se svakog taba najee sastoji od jednog fragmenta. Na onTabSelected() metodi uitava se odreeni fragment u prazan prostor aktivnosti. Za svaki se tab kreira po
jedan fragment sa svojom layout datotekom. U onTabSelected() metodi se pomou FragmentTransaction objekta izmjenjuju fragmenti na tom praznom prostoru. Fragmenti
zahtijevaju da im se preko id-a pokae gdje se moraju pojaviti. U ovom se sluaju trebaju
pojaviti u praznom prostoru ispod tabova iji je id:
android.R.id.content
115
}
@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.
}
116
117
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 naslijediti SQLiteOpenHelper klasu. U ovom je sluaju to AndroidSQLiteOpenHelper klasa koja e brinuti o kreiranju baze podataka. Kada se instancira
objekt iz te klase, automatski se kreira baza podataka pod definiranim imenom (ako
baza ve ne postoji). Ako baza ve postoji, baza se nee kreirati. Ova e klasa vraati
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.
118
package android.gauss.androidtutorial;
import
import
import
import
android.content.Context;
android.database.sqlite.SQLiteDatabase;
android.database.sqlite.SQLiteOpenHelper;
android.util.Log;
static
static
static
static
static
final
final
final
final
final
String
String
String
String
String
TABLE_PERSON = "person";
COLUMN_ID = "id";
COLUMN_FIRST_NAME = "first_name";
COLUMN_LAST_NAME = "last_name";
COLUMN_AGE = "age";
Sljedei je korak kreiranje klase koja e brinuti o unosu, itanju i auriranju podataka u bazi.
Ta e se klasa zvati PersonDataSource. U konstruktoru se te klase kreira objekt iz AndroidSQLiteOpenHelpera 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 provjeravati 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 podataka. U PersonDataSource se kreiraju metode koje e, ovisno o potrebama aplikacije, provoditi
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.
119
}
}
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;
120
Nakon toga se ulazi u while petlju koja provjera je li trenutni unos zadnji unos u tablici. U
tijelu 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.
121
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;
}
}
Za potrebe testiranja kreirana je aktivnost 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
vlastitog adaptera.
Prvo se izrauje par unosa da bi se neto upisalo u bazu. Upisani se unosi mogu vidjeti
u sljedeoj aktivnosti. Nakon to se unijelo par osoba, pritie se na gumb Pregled
122
android.app.Activity;
android.content.Intent;
android.gauss.androidtuorial.R;
android.os.Bundle;
android.view.View;
android.view.View.OnClickListener;
android.widget.Button;
android.widget.EditText;
PersonDataSource dataSource;
EditText firstName;
EditText lastName;
EditText age;
Button insertPerson;
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);
}
});
123
124
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.
125
SensorManager sManager;
Sensor accelerometer;
TextView xAxis;
TextView yAxis;
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);
@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]);
}
}
}
126
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.
127
Trenutna je verzija Google mapa za Android Google Maps Android API v2. Da bi se mogao
koristiti, skida se biblioteka Google Play Services koja je dostupna u Android SDK Manageru.
128
Nakon to je projekt gotov, u izborniku se odabire Services i oznai se Google Map API v2.
129
Slika 119. Postavljanje koritenja Google Maps Android API v2 u Google konzoli
U izborniku se zatim ide na API Access i odabire se Create new Android key.
130
Iz tog se keystora mora dobiti SHA1 otisak. Sljedei je korak pokretanje procesa preko
CMD-a (command prompt).
Uz klju se na kraju dodaje i osnovni paket (engl. package) aplikacije. Osnovni se paket
moe nai u manifestu
131
Kada se klikne Create, konzola generira API key koji se kopira i upisuje u manifest u meta element izmeu application elementa.
132
Ovu verziju Google Maps API-a mogu koristiti samo ureaji koji imaju podrku za OpenGL
ES 2.0. i to se takoer definira u manifestu:
<uses-feature
android:glEsVersion="0x00020000"
android:required="true"/>
Trebaju se prihvatiti jo neke dozvole kao npr. pristup Internetu, dohvaanje lokacije korisnika i
sl. Slijedi primjer manifesta.
133
Primjer 108. Manifest sa svim potrebnim elementima za koritenje Android Google Maps API v2
U layoutu aktivnosti definira se da e se koristiti MapFragment. Fragment se moe referencirati direktno u layoutu.
134
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
ZADATAK 24
Napravi prikaz mape pomou Google Maps API-a i na mjestu gdje korisnik klikne,
postaviti marker. Po mogunosti koristi vlastitu ikonu.
135
esto Android OS oslobaa dio memorije kako bi spremio neku drugu aplikaciju u stog
ili kada neke stvari zahtijevaju vie memorije. OS iz stoga izbacuje aplikaciju koja najdue
nije bila koritena.
136
Kada OS izbacuje aplikaciju iz stoga, na svim se aktivnostima, 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 multitaskinga i multitaskinga
koji postoji u Androidu. U Androidu se ne mogu otvoriti i koristiti istovremeno dvije aplikacije
na ekranu, ve se korisnik mora prebacivati iz jedne aplikacije u drugu. Nedostatak je multitaskinga u Androidu i taj to aplikacije koje su u stogu i ekaju na izvoenje nisu u aktivnom stanju.
Prema ivotnom ciklusu aktivnosti svaka aktivnost koja nije na ekranu, odlazi u onStop() stanje i
aplikacija ne moe u pozadini izvoditi svoj posao. Zbog toga se ni ovakav sluaj ne smatra multitaskingom. Moe se rei da se u ovom sluaju multitasking samo simulira i korisnik ima osjeaj
da se odvija pravi multitasking. Pravi multitasking omoguava rad svim otvorenim aplikacijama i
onda kada nisu fokusirane na ekranu (isto kao npr. u Windows operacijskom sustavu).
137
Rije je o RSS-u dalmacijanews.hr portala. Ako se detaljnije pogleda RSS, moe se primijetiti da sadri odreene elemente od kojih se element <item> ponavlja. Taj element
predstavlja vijest koja e biti prikazana u aplikaciji.
138
<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-golemevalove-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šnji oujak ne prestaje donositi meteorološka iznenaenja. Mjesec je poeo
natprosjenom toplinom u prvom desetodnevlju, zatim ve...
</description>
<content>
<br /> Ovogodišnji oujak ne prestaje donositi meteorološka iznenaenja. Mjesec je poeo
natprosjenom toplinom u prvom desetodnevlju, zatim velikom hladnoom u drugom. Snijeg je prošli
tjedan zabijelio cijelu unutrašnjost zemlje, a uz obalu Dalmacije je bilo i snjenih pahulja.
Proteklog vikenda su ponegdje u unutrašnjosti zemlje temperature dosezale -5°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š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š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šila su se
stabla u Kostreni, blizu Sportske dvorane na Zametu, a vatrogasci su intervenirali u Osjekoj ulici na
Škurinjama gdje je odletjela tenda.<br /> <br /> Obilne kiše bilo je i u Dalmaciji, tako
je u Konavlima i dijelu Dalmatinske zagore palo preko 50mm kiše. U unutrašnjosti je
kiše najmanje bilo u Slavoniji, a znatno više na zapadu zemlje gdje se sljedeih sati
oekuje glavnina oborina.<br /> <br /> Najviše dnevne temperature bile su na Jadranu od 11 do
16°C, u unutrašnjosti zemlje od 5 na krajnjem zapadu, do 12°C u zapadnoj Slavoniji.<br
/> <br /> Uz kiš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 š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 Š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šin, Toni Plazibat, Luka Gerlanc / CROPIX<br /> </strong>Video: <strong>Boris Baši
/ CROMETEO</strong></div>
</content>
<comments>
http://www.dalmacijanews.com/Hrvatska/View/tabid/77/ID/114354/Jugo-s-udarima-preko-110kmh-diglo-golemevalove-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>
139
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 biti prikazan sve dok se ne skine i ne parsira sadraj RSS-a. Kada
se sadraj parsira, svi e se elementi prikazati u ListActivity aktivnosti. Kada korisnik
klikne na element u listi, otvorit e se nova aktivnost s detaljima te vijesti.
Prvo e se kreirati aktivnost naziva SplashActivity i klasa DalmacijaTask koja e naslijediti AsyncTask. U DalmacijaTask e se pokrenuti proces skidanja i parsiranja sadraja
RSS-a. Za parsiranje se sadraja moe koristiti SAX parser ili DOM parser. Ti parseri su dio
Android SDK i zahtijevaju dodatni kod za uspjeno parsiranje. Kako bi se olakalo parsiranje, u ovom e se primjeru koristiti ve gotova biblioteka koja parsira sadraj preko
anotacija. Kako se kod za spajanje i skidanje sadraja s internetskih stranica ne bi morao
runo pisati, koristit 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//
140
<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>
Prema opem se izgledu RSS-a izrauju klase koje e se kasnije anotirati kako bi parser znao
kako isparsirati dokument. Budui da nisu potrebni svi podatci, neki e se sadraji RSS-a parsirati, a neki izostaviti. 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 ignorirati 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;
}
}
Anotacija @Root oznaava da je RSS klasa prvi element tj. korijen RSS-a. @Element oznaava
da RSS u sebi sadrava element tipa Channel. Vano je imenovati varijable i nazive elemenata u
RSS-u da parser moe prepoznati o kojem se elementu radi. Slijedi Channel klasa:
141
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;
}
Channel klasa sadri samo anotaciju @ElementList, tj. listu elemenata tipa Item. Moe
se primijetiti da je inline postavljeno kao true to znai da elementi 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>
S (inline = true) oznauje da dodatan element u ovom sluaju ne postoji, tj. da su elementi direktna djeca channel elementa. U Item klasi e se parsirati samo oni elementi koji su potrebni
(kao i u RSS-u).
142
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;
Klasa Enclosure je element <enclosure> u <item> elementu i iz njega treba izvaditi atribut url.
143
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;
}
Anotacija @Atribute oznaava da se eli oitati atribut url <enclosure> elementa. Ovdje
e se ukratko prikazati kako koristiti ovaj parser kada su anotacije u pitanju. Postoji
mnogo mogunosti s tim parserom, a mnogi su korisni prikazani i na internetskoj stranici. Sada se moe nastaviti pisati DalmacijaTask klasa. Kada se sadraj skine i parsira,
pozvat e se nova List Activity i zatvoriti Splash aktivnost. Preostalo je napraviti jo jedan
interface koji e implementirati SplashActivity klasa. Taj e interface imati samo jednu
metodu koja e se pokrenuti kada sadraj bude skinut i parsiran.
package android.gauss.dalmacija.asynctasks;
import android.gauss.dalmacija.rss.Rss;
public interface DalmacijaNewsListener {
}
144
@Override
protected void onPostExecute(Rss rss) {
if(rss != null){
listener.onNewsAvailable(rss);
}
}
145
android.app.Activity;
android.content.Intent;
android.gauss.dalmacija.asynctasks.DalmacijaNewsListener;
android.gauss.dalmacija.asynctasks.DalmacijaTask;
android.gauss.dalmacija.rss.Rss;
android.gauss.dalmacijanews.R;
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();
startActivity(intent);
this.finish();
146
package android.gauss.dalmacija;
import
import
import
import
android.app.ListActivity;
android.gauss.dalmacija.adapters.DalmacijaNewsAdapter;
android.gauss.dalmacija.rss.Rss;
android.os.Bundle;
Nova aktivnost je ListActivity aktivnost koja adapterom prikazuje listu elemenata. GetIntent() metodom se iz Intent objekta dohvati RSS objekt koji je poslan u proloj aktivnosti, a lista se Item objekata alje u adapter. U layout direktoriju se kreira nova layout XML datoteka koja se naziva list_item_dalmacija_news. Izgled XML-a je sljedei:
148
Kada je layout sloen, treba se posloiti i adapter. Kreirana je nova klasa DalmacijaNewsAdapter 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 aktivnost pokrene. Moe se umjesto slike
dodatno ubaciti 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.
149
return convertView;
150
Pritisak na element treba otvoriti novu aktivnost koja e prikazati detaljni prikaz vijesti. ListActivity sama po sebi sadri metodu koja prepoznaje klik na element i potrebno ju je implementirati. Klikom na element dohvatit e se Item objekt koji je sadran na tom mjestu. Objekt e se
preko Intent objekta poslati u sljedeu aktivnost koja e prikazati detalje te vijesti, a podatke e
dobiti iz Item objekta koji se poslao u Intent objektu.
151
package android.gauss.dalmacija;
import
import
import
import
import
import
import
import
android.app.ListActivity;
android.content.Intent;
android.gauss.dalmacija.adapters.DalmacijaNewsAdapter;
android.gauss.dalmacija.rss.Item;
android.gauss.dalmacija.rss.Rss;
android.os.Bundle;
android.view.View;
android.widget.ListView;
Zatim se kreira nova layout XML datoteka koja e definirati izgled aktivnosti koja e
prikazivati detalje vijesti. Naziv datoteke je activity_news_details.xml.
152
153
Item item;
TextView title;
ImageView image;
WebView content;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_news_details);
}
@Override
protected void onResume() {
super.onResume();
title = (TextView)findViewById(R.id.title);
title.setText(item.getTitle());
image);
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) {
}
}
Sav se potreban sadraj postavlja u elemente koji su definirani u layoutu. Moe se primijetiti da
WebView ne uitava internetsku stranicu, nego se u njega metodom loadData() direktno ubacuje HTML sadraj. Veoma je vano postaviti drugi parametar kao text/html charset=utf-8 zbog
pravilnog dekodiranja slova. WebView ima potekoe s prikazivanjem pozadine u boji zbog ega
154
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
zamijeniti novim ikonama koje e dobiti isti naziv kao i stare. Nove se ikone nazovu ic_launcher i
prekopiraju se preko starih ikona. Iako sve ikone moraju imati isti naziv, postavljaju se u razliite
direktorije. Launcher ikona se takoer moe zamijeniti tako da se svim etirima ikonama dodijeli
isti naziv i prebaci ih se u direktorije koji su za njih namijenjeni. U manifest datoteci se tada mora
navesti ikonu koja e sluiti kao launcher ikona.
155
156
Poduzetnitvo
157
PODUZETNITVO
7. PODUZETNITVO
7.1. to je to poduzetnitvo?
Rije poduzetnitvo potjee od francuske rijei entreprendre u znaenju poduzimati neto.
Iako se pojam poduzetnitva najee vee uz pokretanje, voenje i razvijanje poslovnog (poduzetnikog) poduhvata, obuhvaa mnogo ire podruje. Poduzetnitvo predstavlja nain razmiljanja i djelovanja i ne mora nuno biti vezan uz poslovni poduhvat. Najee se poduzetnitvo objanjava kao proces u kojem se iz niega stvara neto. U svakom je poduzeu, neovisno
o njegovoj veliini, djelatnosti kojom se bavi i sl., poduzetniko razmiljanje svakog zaposlenika
od iznimne vanosti. Pri tome se misli na kreativnost u rjeavanju problema, sposobnost sagledavanja problema u cijelosti, inovativnost i proaktivnost. Poduzetniko ponaanje rezultira
stvaranjem nove ili poveanjem postojee vrijednosti 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 obrtima kojima je cilj
ostvarenje dobiti. S pojmom se tradicionalnog poduzetnitva, poduzetnitvo najee poistovjeuje.
a)
Socijalno se poduzetnitvo odnosi na rad i upravljanje organizacijama kojima je osnovni
cilj opedrutvena korist, tj. unaprjeenje kvalitete ivljenja, a ne stjecanje dobiti.
b)
Korporativno se poduzetnitvo vee uz poduzetniko ponaanje u korporacijama, odnosi se na sve zaposlene, a ne samo na najvii menadment.
POSLOVNI PLAN
d)
Istraivanja su pokazala kako poduzetnici u veoj mjeri imaju i iskazuju odreene osobine, vjetine i ponaanje. Te su vjetine i osobine prikazane u tablici koja slijedi.
Poduzetnike vjetine
uvjeravanje
Poduzetnike osobine
kreativnost
pregovaranje
ambicioznost
prezentiranje
samouvjerenost
rjeavanje konflikata
upornost
strateko razmiljanje
inicijativa
donoenje odluka
znatielja
umreavanje
predanost poslu
Poduzetniko ponaanje podrazumijeva traenje i prepoznavanje prilika u okruenju, preuzimanje inicijativa i prihvaanje rizika. Prije ulaska u svijet poduzetnitva, svaki bi poduzetnik trebao
ocijeniti one vjetine i osobine koje su kljune za uspjeh njegovog poslovnog poduhvata. Sljedei je korak izrada plana za unaprjeenje onih vjetina i osobina koje nisu dobile zadovoljavajuu
ocjena, a nakon toga njegova realizacija.
159
POSLOVNI PLAN
3. PREDMET POSLOVANJA
4. LOKACIJA
5. TEHNIKO TEHNOLOKI ELEMENTI ULAGANJA
6. TRINA OPRAVDANOST
8. POKAZATELJI UINKOVITOSTI
9. ZAKLJUNA OCJENA PROJEKTA
U prvom se dijelu poslovnog plana Podatci o poduzetniku zapisuje krai ivotopis poduzetnika koji pokree postojee poslovanje ili je njegov nositelj. Ako je rije o partnerstvu, zapisuju se ivotopisi oba partnera i biljee se njihovi ulozi. U ivotopis treba
navesti poslove koje je poduzetnik do sada obavljao (dokaz o znanjima i vjetinama 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
160
POSLOVNI PLAN
stranih jezika, poznavanje rada na raunalu i sl.
U drugom se dijelu Polazite objanjava kako je poduzetnik doao na ideju baviti se poslom
kojim se bavi. U odabiru ideje za posao veina poduzetnika uzima u obzir znanja i vjetine koje
posjeduje, ali i znanja i vjetine ostalih lanova obitelji. Nakon to su definirana steena znanja
i vjetine i okolnosti 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 baviti. Potrebno je navesti: sjedite djelatnosti, osnivae, temeljni
kapital (ako je u pitanju d.o.o.), datum osnivanja, rjeenje o registraciji (broj registracije) i djelatnosti za koje je obrt ili drutvo s ogranienom odgovornou registrirano.
Lokacija je dio poslovnog plana koji podrazumijeva sjedite obrta ili drutva s ogranienom odgovornou. Ako se djelatnost obavlja izvan sjedita djelatnosti, navode se razlozi zato je to
tako. Primjerice, za obavljanje zidarske djelatnosti 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 opisati lokaciju, povezanost s glavnim cestama, osigurana parkiralina mjesta za kupce i sl. Postoje i djelatnosti kod kojih je lokacija nebitna, primjerice IT sektor.
Tehniko-tehnoloki elementi ulaganja investitorima daju informacije o samom tijeku poslovnog procesa (npr. za djelatnost je kemijskog ienja iznimno vaan detaljan opis procesa ienja kako bi se mogla napraviti raunica i shvatiti poslovni proces). Sljedei je korak opis ulaganja,
tj. tona specifikacija ulaganja. Dakle, poduzetnik mora odrediti koliko je sredstava potrebno
odvojiti 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 koristiti u svrhu dobivanja kredita, treba napomenuti da veina programa
za obrtna sredstva ne doputa vie od 30 % ukupne investicije. U dijelu Tehnikotehnolokih
elemenata ulaganja opisuje se i kako e se djelatnost obavljati. Kada poduzetnik sam obavlja
djelatnost, nema potrebe zapoljavati druge djelatnike. Ali ako poduzetnik namjerava zapoljavati i druge djelatnike, mora odrediti koju strunu spremu djelatnici trebaju imati, koje e poslove obavljati, hoe li biti zaposleni na odreeno ili neodreeno vrijeme i koliku e mjesenu
plau imati. Poduzetnik treba biti upuen i u postojee programe sufinanciranja 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, prodaju i procjenu ostvarenja prihoda. Potrebno je napraviti i popis dobavljaa s kojima e poduzetnik suraivati. Ukoliko poduzetnik posluje s vie dobavljaa i ako su dobavljai s podruja
Republike Hrvatske, takoer se moraju navesti. U planiranju nabave potrebno je odgovoriti na
sljedea pitanja: to e se, po kojoj cijeni (cijena sirovine direktno utjee na kvalitetu i cijenu
finalnog proizvoda) i kod kojeg dobavljaa nabavljati, koji su rokovi isporuke, postoje li dogovoreni uvjeti plaanja, koliki su trokovi nabave (prijevoz, carina, osiguranje). Mora se voditi
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 proizvoditi (cijenu treba usporediti s cijenom
koju nudi konkurencija), na kojem tritu (trite opine, mjesta, grada, upanije, Republike
161
POSLOVNI PLAN
Hrvatske ili ire) i tko su ciljni kupci (djeca, mladi, umirovljenici, pojedinci, tvrtke). Analiza se
trita prodaje koristi i podatcima Hrvatske gospodarske komore i Hrvatske obrtnike komore,
statistikim podatcima, utim stranicama i razliitim bazama podataka dostupnim u Centru za
poduzetnitvo Osijek. Prema svim se tim podatcima i planu prodaje odreuju proizvodni kapaciteti i prihodi koje se mogu ostvariti. U ovom se dijelu navode svi konkurenti i sve one prednosti
koje poduzetnik ima u odnosu na konkurenciju.
Najzahtjevniji su dio u izradi poslovnog plana Financijski elementi poduhvata i poduzetnici se
najee oslanjaju na strunu pomo u njegovoj izradi. Potrebno je napraviti granicu izmeu
investicije za osnovna (dugotrajna imovina: strojevi, namjetaj, oprema, aparati i sl.) i obrtna
sredstva (sredstva koja su trajno na raspolaganju za kupovinu repromaterijala i plaanje dospjelih obveza). Ukupne trokove poslovanja ine svi oni trokovi koji su navedeni u prethodnim
poglavljima poslovnog plana: trokovi osoblja (bruto plae vlasnika i djelatnika), trokovi sirovina koje su potrebne za finalizaciju vlastitog proizvoda ili usluge i svi ostali iznenadni trokovi.
Amortizacija je takoer troak, ali njega poduzetnik ne plaa sa svog iro-rauna. Izraunava se
samo za dugotrajnu imovinu, tj. osnovna sredstva prema Pravilniku o amortizaciji NN 54/01.
Tablica se sa stopama amortizacije nalazi u dodatnim radnim listovima.
U dijelu Izvori financiranja pravi se jasna granica izmeu vlastitih sredstava koja poduzetnik
unosi u investiciju i kreditnih sredstava koja je zatraio od odabrane poslovne banke i programa
kreditiranja. Navode se i uvjeti kreditiranja (kamatna stopa, poek, rok otplate, traeni iznos,
anuitet i interkalarna kamatna stopa), a od banke koja kreditira poduzetnika, trai se plan otplate kredita. Nakon to su prihodi izraunati, 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 uinkovitosti podrazumijevaju izraune odreenih parametara prema unaprijed
odreenim formulama. U formule treba unijeti podatke koji su dobiveni u raunu dobiti i gubitaka te planirani broj djelatnika koje elite zaposliti.
U zakljunoj se ocjeni saimlje sve to je navedeno u poslovnom planu. Istie se broj osoba koje
poduzetnik namjerava zaposliti, prihode koje eli ostvariti i ocjene uinkovitosti. Da bi se dobila
cjelovita slika investicije, jo se jednom navodi: banka od koje poduzetnik trai kreditna sredstva (ukoliko ih trai), uvjeti potraivanja (kamatna stopa, poek, rok otplate) i svrha (osnovna
sredstva, obrtna sredstva).
162
b)
c)
Koncept marketinkog spleta (marketing mix) marketing promatra kao cjelinu koja se sastoji od
etiri elementa:
a)
b)
c)
d)
Prema poetnim slovima elemenata marketinkog spleta, ovaj je koncept poznat kao 4P koncept. Klju je marketinga identifikacija kupaca jer bez kupaca koji kupuje proizvod ili uslugu,
nema ni posla. Proces je segmentacije kupaca podjela trita u grupe potroaa koji imaju odreene zajednike karakteristike. Pet je faza segmentacije:
a)
b)
c)
d)
e)
Marketinki strunjak rijetko moe zadovoljiti svakoga na tritu. Ne sviaju se svima iste itarice, hotelske sobe, restorani, automobili, koledi ili filmovi. Stoga marketinki strunjaci trite
dijele na segmente. Pregledom demografskih i bihevioralnih razlika meu kupcima, oni identificiraju i profiliraju razliite grupe kupaca koji su skloni ili zahtijevaju sline proizvodne i usluen
spletove. Marketinki strunjak tada odluuje koji segmenti predstavljaju najveu priliku, odnosno, koja su njihova ciljna trita. Za svako ciljno trite tvrtka razvija marketinku ponudu [19].
Marketinki je plan temelj svih marketinkih aktivnosti i mora biti u skladu sa strategijom poslovanja, tj. stratekim planom. Marketinki plan ima sljedee elemente i korake:
a)
Saetak
b)
c)
d)
163
f)
g)
h)
Saetak je marketinkog plana kratki prikaz najvanijih informacija koje su prikazane u marketinkom planu. Pie se tek nakon to je cijeli marketinki plan gotov, ali se u planu nalazi
na prvom mjestu. Svrha je poslovanja, tj. misija definirana poslovnim, tj. stratekim planom.
Analiza situacije najee se vri za izradu SWOT analize. Nakon to se marketinkim planom
utvrdi svrha poslovanja i analizira situacija u kojoj se poduzee nalazi, slijedi definiranje marketinkih ciljeva koji proizlaze iz analize situacije. Ciljevi moraju biti definirani i oblikovani tako
da doprinose ostvarenju ukupnog cilja poduzea. Poduzee istovremeno moe imati vie ciljeva
razliite vanosti, ali zajedniki moraju doprinijeti ostvarenju ukupnog cilja marketinga, a ukupni
cilj marketinga mora doprinositi ostvarenju ukupnog cilja poduzea. Selekcija je ciljnog trita
sljedea faza u izradi marketinkog plana. Proces je segmentacije temelj za odabir ciljnog trita,
tj. skupine potroaa kojoj e se prilagoavati marketinki splet tvrtke. Nakon to se tvrtka odluila za svoje ciljno trite i segment kupaca, kreira ponudu i oblikuju se marketinke strategije.
Strategije trebaju odgovoriti na sljedee pitanje: kako ostvariti zacrtane marketinke ciljeve uz
postojee resurse? Marketing poznaje brojne strategije, a poduzetnik bira onu koju smatra najboljom za svoju trenutnu situaciju i prilagoava ju u skladu sa specifinostima vlastitog poslovanja i okoline u kojoj djeluje. Zadnja dva koraka predstavljaju operativne aktivnosti marketinkog
plana. Za provedbu je marketinkih aktivnosti potrebno provesti sljedee aktivnosti:
a)
b)
c)
Aktivnosti se kontroliraju zbog moguih odstupanja od plana. Ako neka aktivnost odstupa od
plana, mora se korigirati.
164
E-MARKETING
7.5. E-marketing
E-marketing ili Internet marketing je oglaavanje proizvoda i usluga putem Interneta. Promovira
internetsko sjedite, internetsku trgovinu, landing page ili blog upotrebom jednog ili vie servisa (sredstava) koji su dostupni na Internetu i/ili privlai posjetitelje ciljanom marketinkom porukom. Informatika 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 prednosti u odnosu na konvencionalne oblike. Kljuna je prednost
njegova niska cijena, ciljane skupine i lako mjerljiv povrat na investiciju. Oglaiva moe pratiti
sve relevantne statistike o posjetiteljima svoje internetske stranice i kupcima pojedinog proizvoda ili usluge. U svakom mu je trenutku poznato isplati li se neka investicija i na vrijeme moe
prekinuti 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 izmjeriti. Zbog mogunosti mjerenja rezultata i direktnog utjecaja na tijek kampanje Internet marketing ima veliku popularnosti
i iroku primjenu.
Internet marketing poznaje est koraka kojima je cilj poveanje prodaje:
a)
b)
izrada internetskog sjedita: dizajn, jednostavna navigacija, podrka za mobilne platforme itd.
c)
d)
e)
f)
E-mail marketing je alat koji se svakodnevno koristi u komunikaciji s tritem. Zakon o elektronikim komunikacijama NN 73/08, lanak 107 navodi kako je uporaba pozivnih sustava, s ljudskim posredovanjem ili bez njega, telefaksnih ureaja ili elektronike pote, ukljuujui kratke
tekstovne poruke (SMS) i multimedijske poruke (MMS), u svrhu izravne promidbe i prodaje
doputena samo uz prethodno pribavljenu privolu pretplatnika ili korisnika usluga. Elektronika pota e-marketinga treba biti prilagoena mobilnim ureajima. Optimizacija se elektronike pote za mobilne ureaje postie izbjegavanjem velikih slika, smanjenjem koliine teksta
i izbacivanjem tablica. SEO je postupak optimizacije internetskog sjedita (sadraj i struktura) i
ostvarivanje kvalitetnih linkova prema internetskom sjeditu, a cilj je postizanje bolje organske
pozicije na trailicama. Rezultati istraivanja koje je proveo Google pokazuju da 97% korisnika
trailice ne gleda rezultate iza desetog mjesta. Kako veina kupaca dolazi do internetskih sjedita putem trailica SEO, proces je kljuan za privlaenje korisnika. Problem je to Google algoritam za odreivanje vanosti internetskog sjedita koristi preko 200 imbenika, a nemogue je
izvriti optimizaciju svih. Svi ovi imbenici djeluju zajedno i teko je odrediti koji od navedenih
imbenika ima veu vanost.
165
166
b)
podizanje novca sa iro rauna bez ikakvog pravdanja (svi novci koji nisu opravdani
porezno priznatim trokovima, smatraju se dohotkom i oporezuju se)
c)
d)
e)
f)
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 razlikuje od d.o.o. jer ima smanjeni prag temeljnog kapitala (deset kuna), smanjene trokove osnivanja i ubrzani postupak osnivanja. Jednostavni d.o.o. ima zakonske rezerve u koje mora unijeti
etvrtinu iznosa dobiti drutva iskazane u godinjim financijskim 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-
167
168
vlastita sredstva
b)
c)
kreditna sredstva
d)
poslovni aneli
e) leasing
f)
dravne potpore
169
LITERATURA
8. LITERATURA
[1]
[2]
[3]
[4]
[5]
[6]
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/variables.html
[7]
http://www.tutorialspoint.com/java/java_basic_operators.htm
[8]
http://docs.oracle.com/javase/tutorial/java/nutsandbolts/if.html
[9]
http://docs.oracle.com/javase/tutorial/java/javaOO/methods.html
[10]
http://docs.oracle.com/javase/tutorial/java/IandI/abstract.html
[11]
http://www.techotopia.com/index.php/Understanding_Android_Views,_View_Gro
ups_and_Layouts
[12]
http://developer.android.com/training/basics/supporting-devices/languages.html
[13]
http://developer.android.com/training/basics/supporting-devices/screens.html
[14]
http://developer.android.com/training/basics/activity-lifecycle/index.html
[15]
http://developer.android.com/training/basics/activity-lifecycle/starting.html
[16]
http://developer.android.com/training/basics/activity-lifecycle/recreating.html
[17].
[18].
Grbac, B., Identitet marketinga, Ekonomski fakultet Rijeka, str 355, 2006.
[19].
Kotler, Ph. i Keller, K.L., Upravljanje marketingom, dvanaesto izdanje, Mate, Zagreb,
str. 24, 2006
[20].
[21].
Orkis, http://www.orkis.hr/Stope-amortizacije~1
170
POPIS SLIKA
9. POPIS SLIKA
Slika 1. Newtonov kota boja 2
Slika 2. Alati za izbor boja 3
Slika 3. Primjeri vintage dizajna kod izrade UI-a i logotipa [1]3
Slika 4. Primjeri logotipa [1] 4
Slika 5. Primjer smjernica izvedenih iz imena tvrtke ili pojedinca4
Slika 6. Nekoliko prijedloga logotipa za istu tvrtku [1]5
Slika 7. Veze izmeu vizualnog identiteta 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. Optimalna 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 smjernica12
Slika 20. Koraci u izradi koncepta, tj. wireframea12
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. Predefinirane 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 alatima; 2. Radna povrina; 3. Traka s bojama i slojevima18
Slika 33. Postavljanje novog dokumenta u GIMP-u19
Slika 34. Postavljanje alata u GIMP-u: 1. oznaava se Rectangle selection tool; 2. u postavkama Rectangle selection 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 rubom20
Slika 35. Postavljanje alata za bojenje u GIMP-u: 1. oznaava se Bucket fill 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 tipku za kopiranje Layera, odnosno sloja radi se kopija objekta; 2. klikom na
tipku (simbol oka) pored kopiranog sloja skriva se kopija od pogleda21
Slika 37. Blur filter 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 filter u GIMP-u: 1. u novootvorenom dijalogu postavljaju se vrijednosti blur po horizontalnoj i vertikalnoj osi; 2. pritiskom na tipku OK dodajemo efekt na na objekt22
171
Slika 39. Izgled jedne gotove ikone sa zaobljenim rubovima i sjenom na Android ureaju s odreenom pozadinskom slikom.22
Slika 40. Primjer obavijesti 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. Confirming & Acknowledging [2]24
Slika 44. Najpopularniji primjeri widgeta [2]24
Slika 45. Primjeri Reusable UI elemenata [1]25
Slika 46. Google Play i Scrollable tabs26
Slika 47. Primjer fiksnih kartica (Fixed tabs)26
Slika 48. Liste s jednim i vie redova podataka27
Slika 49. Primjer reetke s vertikalnim pomakom27
Slika 50. Reetke sa slikom i naslovima28
Slika 51. Primjer spinnera u formi ili alatnoj traci28
Slika 52. Primjer malog i velikog gumba29
Slika 53. Primjer gumba bez ruba 29
Slika 54. Primjer tekstualnog unosa 30
Slika 55. Primjer klizaa u standardnim Android 4.0 temama30
Slika 56. Traka napretka sa standardnom temom Android 4.0 sustava31
Slika 57. Traka aktivnosti sa standardnom temom Android 4.0 sustava31
Slika 58. Lijevo je prikazan neispravan, a desno ispravan nain prikazivanja krunog indikatora31
Slika 59. Unikatni indikator napretka32
Slika 60 Prikaz checkboxa i izgled svih njegovih stanja32
Slika 61. Prikaz radio buttona i izgled svih njegovih stanja32
Slika 62. Prikaz on/off gumba i izgled svih njegovih stanja33
Slika 63. Primjer dijaloga 33
Slika 64. Nekoliko razliitih verzija dijaloga34
Slika 65. Prikaz standardnog Pickera koji je smjeten u dijalogu34
Slika 66. Prikaz specijalnog pickera: vrijeme i datum34
Slika 67. Back ili tipka za povratak na prijanji sadraj35
Slika 68. Primjer rada Back tipke kao dijela aplikacije i kao dijela ureaja35
Slika 69. Primjer navigacije kroz suelje widgeta36
Slika 70. Primjer distorzije na gumbu s unikatnom grafikom38
Slika 71. Izgled datoteka za razliite gustoe zaslona38
Slika 72. Izgled poetnog zaslona aplikacije za izradu 9.png grafika39
Slika 73. Izgled zaslona aplikacije za izradu 9.png grafika nakon dodavanja grafike39
Slika 74. Dodavanje toaka koje kontroliraju irenje slike40
Slika 75. Raspored elemenata u horizontalnom layoutu42
Slika 76. Raspored elemenata u Relative layoutu43
Slika 77. Opi oblik jednodimenzionalnog polja51
Slika 78. Ispis stanja objekta ormar u konzoli55
Slika 79. Ispis opsega dviju krunica u konzoli56
Slika 80. U drugoj klasi nije mogue pozvati private metode57
Slika 81. Instalacija Android SDK plugina66
Slika 82. Android SDK Manager 67
172
173
174
175
176
177
178