Programiranje za Android - Predavanje 2


Preuzimanje projekta sa predavanja

##Sadržaj

O projektu

Android resursi

Activity

Debugger

Import projekta

Zadaci za vježbu

Dodatni materijali

##O projektu

Kako je već bilo spomenuto, na drugoj radionici krećemo s izradom projekta. Smisao projekta je da ono što naučimo na radionicama pokušamo primijeniti na neki stvarni projekt. Dogovorili smo se što će ta aplikacija raditi, a na radionicama dizajna je napravljen i dizajn aplikacije. Ideja aplikacije je da nam odgovori s DA ili NE na određeno naše pitanje, dakle nešto poput bacanja novčića. Na slici se vidi kako bi početni ekran trebao izgledati a pored slike su resursi potrebni za izradu prvog dijela projekta:

Ikone
Naslov
Pingvin
Pingvin YES
Pingvin NO
Pingvin WTF

Boje:

Pozadina - #21C4DF

Puca - #128496

Text - #81C1CA

##Android resursi

Na prvoj radionici smo pogledali osnovnu strukturu Eclipse projekta. Spomenuli smo res folder u koji se spremaju resursi koji su nam potrebni za projekt. Tu smo vidjeli i koristili layout folder u kojem se nalazi xml datoteka u kojoj je definiran izgled određenog ekrana. U res folderu se nalazi i strings.xml datoteka u kojoj su pohranjeni svi nizovi znakova koje koristimo u layout datotekama. Tu možemo vidjeti i 5 foldera za drawable resurse. No, da bi razumjeli njihovo značenje moramo prvo naučiti neke mjerne jedinice koje se koriste.

###Mjerne jedinice

mm - milimetar. Ovisno o fizičkoj veličini ekrana.

in - inch. Ovisno o fizičkoj veličini ekrana.

px - Jedan pixel na ekranu

dp(dip) - density-independent pixel - Jedinica koja je ovisna o gustoći pixela na fizičkom ekranu.

sp - scale-independent pixel - Isto kao dp samo se još uzima u obzir postavke veličine fonta koje je korisnik postavio na uređaju

###Folderi za slike

Sada možemo pogledati prije spomenute foldere:

Jako je bitno da ozbiljno pristupimo pravilnoj uporabi resursa na Androidu jer će u suprotnom naša aplikacija loše izgledati na nekim rezolucijama.

Nama će za sada biti dovoljno da drawable resurse shvaćamo kao slike, međutim taj koncept ima širi smisao. Ako Vas zanima, više o tome možete pronaći u dodatnim materijalima. Također u zadacima za vježbu imate priliku primijeniti razne vrste drawable resursa.

###ImageView

ImageView je klasa koja nam služi za prikazivanje slika. Ima razne opcije koje služe za podešavanje veličine i pozicioniranja slike. ImageView možemo zamisliti kao kontejner u koji dodamo sliku. ImageView se također nalazi i u izborniku komponenti koje možemo dodati u layout datoteku. Pošto neće uvijek biti moguće prikazati sliku u punoj veličini, ImageView mora znati kako će skalirati tu sliku. Postoje sljedeće opcije za skaliranje i pozicioniranje slike:

##Manipulacija elementima definiranim u layout datoteci kroz kod

Da bi mogli dinamički mijenjati izgled ekrana potrebno je da elemente iz layout datoteke nekako možemo referencirati u kodu. Svaki element koji želimo koristiti u kodu, a definiran je u xml datoteci mora imati id. Da bi elementu dodijelili(promijenili) id kliknemo desnim klikom na element i odaberemo Add(Edit) ID. Kada smo elementu dodijelili id, možemo ga dohvatiti u kodu. Dohvaćamo ga na sljedeći način:

TextView textView = (TextView)findViewById(R.id.textView);

Button button = (Button)findViewById(R.id.button);

ImageView imageView = (ImageView)findViewById(R.id.imageView);

</hr>

Na ovaj bi način dohvatili element tipa TextView koji ima id = textView. Sada možemo ovisno o korisnikovom ponašanju promijeniti tekst na ovom elementu. Primjer koda koji bi promijenio tekst na ovom TextView elementu je sljedeći:

textView.setText("Novi tekst");

button.setText("Novi tekst");

</hr>

##Activity

Pojam Activity možemo zamisliti kao jedan ekran u našoj aplikaciji. Uobičajeno svaki Activity će imati i svoj odgovarajuću layout datoteku u kojoj ćemo definirati izgled određenog ekrana. Kad pritisnemo na ikonu aplikacije na našem telefonu Android će pokrenuti glavni Activity. Da bi Android znao koji Activity treba pokrenuti moramo ga definirati u AndroidManifest.xml datoteci. Međutim, ako prilikom kreiranja projekta označimo da nam Eclipse generira Activity, onda taj activity postaje glavni Activity. To je moguće promijeniti, ali o tome malo kasnije kada naučimo što je to Intent. Sada ćemo pogledati životni ciklus Activity-ja.

###Activity lifecycle Životni ciklus Activity-ja je slijed poziva metoda za vrijeme životnog vijeka Activity-ja. U tim metodama mi imamo priliku dodati naš kod koji će u određenom trenutku raditi određeni posao. Na slici je grafički prikazan životni vijek Activity-ja. ###Intent

Intent je opis neke operacije koja se može obaviti. Može se koristiti za razne vrste operacija, ali nas će zanimati u kontekstu pokretanja novog Activity-ja. Bitne informacije koje intent sadržava su:

U nastavku su dani primjeri nekih klasičnih akcija koje se mogu obaviti:

Primjer pokretanja novog Activity-ja:

Intent intent = new Intent(this, NewActivity.class);
startActivity(intent);

</hr> Primjer otvaranja web stranice

String url = "http://www.google.com";
Intent intent = new Intent(Intent.ACTION_VIEW);
intent.setData(Uri.parse(url));
startActivity(intent);

</hr> Primjer pokretanja novog Activity-ja s predajom podataka:

Intent intent = new Intent(this, NewActivity.class);
intent.putExtra("naziv_parametar", vrijednost_parametra);
startActivity(intent);

</hr>
Primjer čitanja predanih podataka:

@Override
protected void onCreate(Bundle savedInstanceState) {

	super.onCreate(savedInstanceState);
	setContentView(R.layout.activity_new);

	Bundle extras = getIntent().getExtras();
	if (extras != null) {
	    int parametar = extras.getInt("naziv_parametar");
	}
}

</hr> Sada možemo pogledati kako promijeniti Activity koji želimo da se pokreće kad se klikne na ikonu. Ta informacija je definirana u AndroidMainfest.xml datoteci:

<activity
    android:name="com.hr.futura.radionica2.MainActivity"
    android:label="@string/app_name" >
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>

</hr> ##Debugger

##Import projekta

Raspakirajte arhivu koju ste poslali sebi na mail ili usb na željeno mjesto. U Eclipse-u odaberite File > Import > Existing Android Code Into Workspace > Pod root directory odaberite direktorij vašeg projekta.

##Zadaci za vježbu

  1. Napraviti novi projekt i imenujte ga “home2”. Paket neka se zove com.hr.futura.home2. Pokrenite i vidite jeli sve uredu.
  2. Dodajte jedan ImageView na ekran i postavite sliku koju želite. Pronađite i pokušajte se igrati sa ScaleType parametrom. Promatrajte kako se ponaša slika i pokušajte si objasniti što koji parametar radi.
  3. Dodajte i Button na ekran. Dodajte mu metodu koja se poziva kad se klikne na njega. Klikom na metodu promijenite tekst na buttonu.
  4. Izmijenite metodu tako da klikom na button promijenite sliku u ImageView-u koji ste prethodno dodali.
  5. Izmijenite metodu tako da se pri svakom kliku izmijenjuju slike. Dakle ako imamo slika1.png i slika2.png. Pri prvom kliku će se pokazati slika2.png, pri drugom slika1.png, pri trećem opet slika2.png i tako u krug.
  6. U pingvin projektu napravite metodu za button. Metoda treba izbrisati sadržaj tekstualnog polja poviše button-a. Upute za import projekta su poviše zadataka za vježbu
  7. Pokušajte zaobliti button na pingvin projektu. Pogledati dodatne materijale Drawable resursi i potražiti Shape Drawable.
  8. Napravite aplikaciju prema slici. Prvi element je EditText u koje korisnik može upisati nešto. Pritiskom na button Ispiši taj tekst se ispišite u TextView elemntu na dnu. Pritiskom na Obriši tekst se briše iz TextView elementa. Za pronalazak boja koristite neki program koji ima mogućnost pronalaska boje. Ako nemate nikoji potražite na internetu (upišite color picker).

##Dodatni materijali

Drawable resursi - Android dokumentacija koja objašnjava što su to drawable resursi i razlike između raznih vrsta drawable resursa.

Podržavanje više ekrana - Android dokumentacija detaljnije o problemu više rezolucija i načinima rješavanja

Google I/O - Inside Android Application Framework - Dio o Activity lifecycle