Professional Documents
Culture Documents
Upoznavanje Android Korisničkog Interfejsa
Upoznavanje Android Korisničkog Interfejsa
U drugom poglavlju ste nauili neto vie o Activity klasi i njenom ivotnom
ciklusu.
Nauili ste i da aktivnost predstavlja sredstvo za omoguavanje interakcije
izmeu korisnika i aplikacije.
Meutim, ona, sama po sebi, nema svoju reprezentaciju na ekranu.
Umjesto toga, neophodno je da prikaete sadraj ekrana koritenjem pogleda i
grupa pogleda.
U ovom poglavlju ete nauiti neto vie o nainu kako se kreira korisniki
interfejs u Android aplikacijama i kako korisnici mogu da interaguju sa
Vaim aplikacijama.
Pored toga, nauit ete i kako da upravljate promjenama u orijentaciji
ekrana na Android ureajima.
LinearLayout
LinearLayout ureuje poglede u jednu kolonu ili jednu vrstu.
Izvedeni pogledi se mogu ureivai ili vertikalno ili horizontalno.
Da biste vidjeli kako funkcionie LinearLayout, razmotrite sljedee elemente,
koji se obino nalaze u main.xml datoteci:
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:layout_width=fill_parent
android:layout_height=fill_parent
android:orientation=vertical >
<TextView
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=@string/hello />
</LinearLayout>
U mail.xml datoteci primjetit ete da je korijeni element <LinearLayout> i da se
u njemu nalazi <TextView< element.
Element <LinearLayout> definie redosljed u kome se navode pogledi.
Svaki pogled i grupa pogleda imaju odreeni skup zajednikih atributa, neki od
njih su prikazani u tabeli 3-1.
ATRIBUT
layout_width
layout_height
layout_marginTop
layout_marginBottom
layout_marginLeft
layout_marginRight
layout_gravity
layout_weight
layout_x
layout_y
OPIS
definie irinu za View ili ViewGroup
definie visinu za View ili ViewGruop
sprecifira dodatni prostor iznad View ili ViewGroup elementa
sprecifira dodatni prostor ispod View ili ViewGroup elementa
sprecifira dodatni prostor sa lijeve strane View ili ViewGroup elementa
sprecifira dodatni prostor sa desne strane View ili ViewGroup elementa
sprecifira kako se pozicioniraju izvedeni pogledi
specifira koliko dodatnog prostora u rasporedu treba da se alocira na pogled
sprecifira x kordinatu View ili ViewGroup elemenata
sprecifira y kordinatu View ili ViewGroup elemenata
JEDINICE MJERE
Prilikom definisanja veliine elementa u Android korisnikom interfejsu, treba da vodite rauna
da se koriste sljedee jedinice mjere:
dp piksel nezavistan od gustine ( eng. density-independent pixel ) ; jedan dp je
ekvivalentan jednom pikselu na ekranu rezolucije 160 dpi ( taka po inu ).
Ovo je preporuena jedinica mjere prilikom specifikacije dimenzije pogleda za
odgovarajui raspored elemenata.
Ekran rezolucije 160 dpi definie osnovnu gustinu ( rezoluciju ) koja se koristi u Android
operativnom sistemu.
Moete se koristiti oznake dp ili dip prilikom navoenja piksela koji su nezavisni od
gustine.
sp piksel nezavisan od rezolucije ( eng. scale-independent pixel ).
To je identino sa dp, a preporuuje se za definisanje veliine fontova.
pt taka, point ( eng. point ).Definisana je kao 1/72 ina, na osnovu fizike veliine
ekrana.
px piksel ( eng. pixel ). Odgovara aktuelnoj veliini piksela na ekranu. Koritenje ove
jedinice nije preporuljivo, jer korisniki interfejs nee biti ispravno prikazan na
ureajima koji imaju razliite rezolucije.
Slika 3-1
Slika 3-2
Slika 3-3
Na slici 3-4 prikazani su pogledi prilikom emulacije na ekranu gustine 235 dpi.
Na slici 3-5 prikazani su pogledi prilikom emulacije na ekranu gustine 180 dpi.
Slika 3-4
Slika 3-5
NAIN KONVERTOVANJA DP U PX
Formula za konvertovanje dp jedinica u px jedinice (piksele) je sljedeeg oblika:
Trenutni pikseli = dp*(dpi/160), gdje dpi ima vrijednost 120, 160, 240 ili 320.
Zbog toga, kada je rije o Button elementu i 235 dpi ekranu, njegova prava irina je 160.
*(240/160) = 240 px. Prilikom prikazivanja na 180 dpi emulator (koji e tretira kao 160 dpi
ureaj), njegova prava veliina u pikselima iznosi 160* (160/160) = 160 px.
U ovom primjeru jedan dp je ekvivalentan jednom pikselu.
Da biste potvrdili da je ovo zaista tano, moete da iskoristite getWidth() metod View objekta i
da odredite irinu u pikselima:
public void onClick(View view) {
Toast.makeText(this,
String.valueOf(view.getWidth()),
Toast.LENGTH_LONG).show();
}
ta bi se dogodilo da, umjesto dp, definiete veliinu koritenjem piksela ( px ) ?
<TextView
android:layout_width=100px
android:layout_height=wrap_content
android:text=@string/hello />
<Button
android:layout_width=160px
android:layout_height=wrap_content
android:text=Button
android:onClick=onClick/>
Na slici 3-6 prikazano je kako Label i Button elementi izgledaju na 235 dpi
ekranu.
Na slici 3-7 vide se isti elementi, ali na 180 dpi ekranu.
U ovom primjeru Android operativni sistem ne izvrava nikakvu konverziju,
poto su sve veliine izraene u pikselima.
Uopteno ( kada je rije o ekranima jednake veliine), ukoliko za definisanje
pogleda primjenjujete piksele, prikaz e biti manje na ureaju sa veom
vrijednou dpi ekrana, u odnosu na ureaje sa manjoj vrijednou dpi ekrana.
U prethodnom primjeru navedeno je i da je orijentacija ekrana vertikalna:
<LinearLayout xmlns:android=http://schemas.android.com/apk/res/android
android:layout_width=fill_parent
android:layout_height=fill_parent
android:orientation=vertical >
Slika 3-6
Slika 3-7
Slika 3-8
Slika 3-9
Apsolute Layout
ApsoluteLayout omoguava da specificirate tanu lokaciju izvedenih elemenata.
Razmotrimo sljedei korisniki interfejs, koji je definisan u main.xml datoteci:
<AbsoluteLayout
android:layout_width=fill_parent
android:layout_height=fill_parent
xmlns:android=http://schemas.android.com/apk/res/android >
<Button
android:layout_width=188dp
android:layout_height=wrap_content
android:text=Button
android:layout_x=126px
android:layout_y=361px />
<Button
android:layout_width=113dp
android:layout_height=wrap_content
android:text=Button
android:layout_x=12px
android:layout_y=361px />
</AbsoluteLayout>
Na slici 3-11 prikazana su dva Button pogleda ( testirana na 180 dpi AVD
ureaju), koja su locirana na navedenim pozicijama koritenjem
android_layout_x i android_layout_y atributa.
Meutim, postoji odreeni problem kada se primjenjuje AbsoluteLayout, a
odnosi se na aktivnost koja se prikazuje na ekranu sa visokom rezolucijom
( slika 3-12).
Zbog toga se AbsoluteLayout vie ne koristi od Android 1.5 verzije operativnog
sistema ( iako postoji podrka i u najnovijoj verziji).
Treba da izbjegavate da ga primjenjujete u svom korisnikom interfejsu, jer
nema garancije da e postojati podrka u buduim verzijama Android
operativnog sistema.
Umjesto toga, neophodno je da primjenjujete drugaije rasporede elemenata,
koji su prikazani u ovom poglavlju.
Slika 3-11
Slika 3-12
TableLayout
TableLayout grupie elemente u vrste i kolone.
Moete da koristite <TableRow> element da biste oznaili vrstu u posmatranoj
tabeli.
Svaka vrsta moe da sadri jedan ili vie pogleda.
Svaki pogled koji definiete u odreenoj vrsti formira eliju.
irina svake kolone odreena je najveom irinom svake eliji u posmatranoj
koloni.
Razmotrimo sadraj sljedee main.xml datoreke:
<TableLayout
xmlns:android=http://schemas.android.com/apk/res/android
android:layout_height=fill_parent
android:layout_width=fill_parent >
<TableRow>
<TextView
android:text=User Name:
android:width =120dp
/>
<EditText
android:id=@+id/txtUserName
android:width=200dp />
</TableRow>
<TableRow>
<TextView
android:text=Password:
/>
<EditText
android:id=@+id/txtPassword
android:password=true
/>
</TableRow>
<TableRow>
<TextView />
<CheckBox android:id=@+id/chkRememberPassword
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Remember Password
/>
</TableRow>
<TableRow>
<Button
android:id=@+id/buttonSignIn
android:text=Log In />
</TableRow>
</TableLayout>
Na slici 3-13 moete vidjeti kako izgleda prethodno definisan korisniki
interfejs u Android emulatoru.
Obratite panju da u prethodnom primjeru postoje dvije kolone i etiri vrste
TableLayout rasporedu elemenata.
elija koja se nalazi neposredno ispod Password TextView elementa sadi
prazan <TextView/> element.
Da niste ovako definisali korisniki interfejs, Remember Password polje za
potvrdu bi bilo prikazano ispod Password TextView elementa, kao to je
prikazano na slici 3-14.
Slika 3-13
Slika 3-14
RelativeLayout
RelativeLayout raspored omoguava da specificirate nain na koji se izvedeni
elementi prikazuju u odnosu na osnovne elemente.
Razmotrimo sljedeu main.xml datoteku:
<?xml version=1.0 encoding=utf-8?>
<RelativeLayout
android:id=@+id/RLayout
android:layout_width=fill_parent
android:layout_height=fill_parent
xmlns:android=http://schemas.android.com/apk/res/android >
<TextView
android:id=@+id/lblComments
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Comments
android:layout_alignParentTop=true
android:layout_alignParentLeft=true />
<EditText
android:id=@+id/txtComments
android:layout_width=fill_parent
android:layout_height=170px
android:textSize=18sp
android:layout_alignLeft=@+id/lblComments
android:layout_below=@+id/lblComments
android:layout_centerHorizontal=true />
<Button
android:id=@+id/btnSave
android:layout_width=125px
android:layout_height=wrap_content
android:text=Save
android:layout_below=@+id/txtComments
android:layout_alignRight=@+id/txtComments />
<Button
android:id=@+id/btnCancel
android:layout_width=124px
android:layout_height=wrap_content
android:text=Cancel
android:layout_below=@+id/txtComments
android:layout_alignLeft=@+id/txtComments />
</RelativeLayout>
Slika 3-15
FrameLayout
FrameLayout raspored elemenata moete da koristite za prikazivanje jednog
pogleda.
Pogledi koje dodajete u FrameLayout se uvijek postavljaju u odnosu na gornji
lijevi ugao rasporeda.
Razmotrimo sadraj sljedee main.xml datoteke:
<?xml version=1.0 encoding=utf-8?>
<RelativeLayout
android:id=@+id/RLayout
android:layout_width=fill_parent
android:layout_height=fill_parent
xmlns:android=http://schemas.android.com/apk/res/android >
<TextView
android:id=@+id/lblComments
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Hello, Android!
android:layout_alignParentTop=true
android:layout_alignParentLeft=true />
<FrameLayout
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_alignLeft=@+id/lblComments
android:layout_below=@+id/lblComments
android:layout_centerHorizontal=true >
<ImageView
android:src = @drawable/droid
android:layout_width=wrap_content
android:layout_height=wrap_content />
</FrameLayout>
</RelativeLayout>
Slika 3-16
Slika 3-17
ScrollView
ScrollView je specijalni tip FrameLayout prikaza.
On omoguava korisnicima da pristupaju razliitim pogledima u listi pogleda,
koji zauzmimaju vie prostora, nego to to omoguava fiziki displej.
ScrollView moe da sadri samo jedan izvedeni pogled ili ViewGroup, koji je
obino, LinearLayout tipa.
Sadraj sljedee main.xml datoteke prikazuje ScrollView koji sadri
LinearLayout , u kome se prikazuju Button i EditText:
<ScrollView
android:layout_width=fill_parent
android:layout_height=fill_parent
xmlns:android=http://schemas.android.com/apk/res/android >
<LinearLayout
android:layout_width=fill_parent
android:layout_height=wrap_content
android:orientation=vertical >
<Button
android:id=@+id/button1
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Button 1 />
<Button
android:id=@+id/button2
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Button 2 />
<Button
android:id=@+id/button3
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Button 3 />
<EditText
android:id=@+id/txt
android:layout_width=fill_parent
android:layout_height=600dp />
<Button
android:id=@+id/button4
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Button 4 />
<Button
android:id=@+id/button5
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Button 5 />
</LinearLayout>
</ScrollView>
Ukoliko uitate prethodni kod u Androdi emulatoru, bit e prikazan korisniki
interfejs sa slike 3-18.
Slika 3-18
Sada ete moi da vidite tastere i da skrolujete kroz listu pogleda ( slika 3-19).
Slika 3-19
Slika 3-20
Uvrivanje prikaza
Uvrivanje prikaza moe se jednostavno postii koritenjem RelativeLayout
rasporeda.
Razmotrite sljedeu main.xml datoteku, koja sadri pet Button pogleda
ugraenih u <RelativeLayout> element:
<RelativeLayout
android:layout_width=fill_parent
android:layout_height=fill_parent
xmlns:android=http://schemas.android.com/apk/res/android>
<Button
android:id=@+id/button1
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Top Left
android:layout_alignParentLeft=true
android:layout_alignParentTop=true />
<Button
android:id=@+id/button2
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Top Right
android:layout_alignParentTop=true
android:layout_alignParentRight=true />
<Button
android:id=@+id/button3
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Bottom Left
android:layout_alignParentLeft=true
android:layout_alignParentBottom=true />
<Button
android:id=@+id/button4
android:layout_width=wrap_content
android:layout_height=wrap_content
android:text=Bottom Right
android:layout_alignParentRight=true
android:layout_alignParentBottom=true />
<Button
android:id=@+id/button5
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=Middle
android:layout_centerVertical=true
android:layout_centerHorizontal=true />
</RelativeLayout>
Obratite panju na sljedee atribute koji se nalaze u razliitim Button
pogledima:
layout_alignParentLeft ureuje pogled u odnosu na lijevu stranu
osnovnog pogleda
layout_alignParentRight ureuje pogled u odnosu na desnu stranu
osnovnog pogleda
layout_alignParentTop ureuje pogled u odnosu na gornji dio osnovnog
pogleda
layout_alignParentBottom ureuje pogled u odnosu na donji dio
osnovnog pogleda
layout_centerVertical centrira se pogled po vertikali u odnosu na
osnovni pogled
layout_centerHorizontal centrira s pogled po horizontali u odnosu na
osnovni pogled
Slika 3-21
Slika 3-22
Slika 3-23
android:layout_centerVertical=true
android:layout_centerHorizontal=true />
</RelativeLayout>
android:layout_height=wrap_content
android:text=Middle
android:layout_centerVertical=true
android:layout_centerHorizontal=true />
<Button
android:id=@+id/button6
android:layout_width=180px
android:layout_height=wrap_content
android:text=Top Middle
android:layout_centerVertical=true
android:layout_centerHorizontal=true
android:layout_alignParentTop=true />
<Button
android:id=@+id/button7
android:layout_width=180px
android:layout_height=wrap_content
android:text=Bottom Middle
android:layout_centerVertical=true
android:layout_centerHorizontal=true
android:layout_alignParentBottom=true />
</RelativeLayout>
Slika 3-24
Slika 3-25
super.onDestroy();
}
@Override
public void onRestart() {
Log.d(StateInfo, onRestart);
super.onRestart();
}
4. Pritisnite F11 tipku da biste debagovali aplikaciju u Android emulatoru.
5. Unesite odreeni tekst u dva EditText pogleda ( slika 3-26).
Slika 3-26
Slika 3-27
7. Pratite ono to se prikazuje prilikom izvravanja u LogCat prozoru
( neophodno je da preete u Debug nain prikaza u eclipse integrisanom
razvojnom okruenju).
Trebalo bi da vidite sljedei tekst:
12-15 12:27:20.747: D/StateInfo(557): onCreate
12-15 12:27:20.747: D/StateInfo(557): onStart
12-15 12:27:20.747: D/StateInfo(557): onResume
...
12-15 12:39:37.846: D/StateInfo(557): onPause
12-15 12:39:37.846: D/StateInfo(557): onStop
12-15 12:39:37.866: D/StateInfo(557): onDestroy
12-15 12:39:38.206: D/StateInfo(557): onCreate
12-15 12:39:38.216: D/StateInfo(557): onStart
12-15 12:39:38.257: D/StateInfo(557): onResume
Nain funkcionisanja
Na osnovu rezultata koji su prikazani u LogCat prozoru, oigledno je da se
aktivnost uklanja kada ureaj mijenja orijentaciju:
12-15 12:39:37.846: D/StateInfo(557): onPause
12-15 12:39:37.846: D/StateInfo(557): onStop
12-15 12:39:37.866: D/StateInfo(557): onDestroy
Aktivnost se nakon toga, ponovo kreira:
12-15 12:39:38.206: D/StateInfo(557): onCreate
12-15 12:39:38.216: D/StateInfo(557): onStart
12-15 12:39:38.257: D/StateInfo(557): onResume
Veoma je znaajno da razumijete ovo funkcionisanje, zato to je neophodno da
izvrite dodatne korake da biste sauvali stanje Vae aktivnosti prije nego to se
promijeni orijentacija ureaja.
Vaa aktivnost moe da ima odreene promjenjive koje sadre vrijednost
neophodne za dodatna izraunavanja u toj aktivnosti.
Treba da sauvate stanje svake aktivnosti pomou onPause () metoda, koje se
izvrava uvijek kada se u toku izvravanja odreene aktivnosti mijenja
orijentacija ureaja.
U sljedeem dijelu predstavljena su dva naina za snimanje ovih informacija o
stanju.
Jo jedno znaajno ponaanje aplikacije koje treba da razumijete je da su samo
pogledi kojima su definisani nazivi (pomou android:id atributa) u odreenoj
aktivnosti sa perzistentnim stanjem nakon uklanjanja aktivnosti.
Korisnik moe da promijeni orijentaciju prilikom unosa odgovarajueg teksta u
EditText polje.
Kada se to dogodi, bilo koji tekst koji je unijet u EditText polje bit e
perzistentan i automatski e se restaurirati nakon ponovnog iniciranja ove
aktivnosti.
Obratno: ukoliko ne definiete naziv EditText pogleda navoenjem android:id
atributa, aktivnost nee moi da sauva tekst koji je korisnik prije promjene
orijentacije ureaja unio u odgovarajue polje.
Obratite panju da ovaj metod vraa Object tip, koji omoguava da snimite
skoro svaki drugi tip podataka.
Snimljeni tip podataka moete da ekstrahujete u onCreate () metodu, koristei
getLastNonConfigurationInstance () metod:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.d(StateInfo, onCreate);
String str = (String) getLastNonConfigurationInstance();
}
Metodi onRetainNonConfigurationInstance () i getLastNonConfiguratioInstance
() se koriste kada je neophodno momentalno sauvati odreene podatke, kao
naprimjer, prilikom preuzimanja odreenih podataka sa web servisa i promjene
orijentacije ekrana.
U ovom scenariju snimanje podataka koritenjem dva prethodno navedena
metoda je mnogo efikasnija, nego ponovo preuzimanje podataka.
Slika 3-28
Slika 3-29
3. Da biste sakrili Action Bar, neophodno je da u AndroidManifest.xml
datoteku dodate sljedee linije koje su prikazane podebljanim slovima:
<?xml version=1.0 encoding=utf-8?>
<manifest xmlns:android=http://schemas.android.com/apk/res/android
package=net.learn2develop.MyActionBar
android:versionCode=1
android:versionName=1.0 >
<uses-sdk android:minSdkVersion=14 />
<application
android:icon=@drawable/ic_launcher
android:label=@string/app_name >
<activity
android:label=@string/app_name
android:name=.MyActionBarActivity
android:theme=@android:style/Theme.Holo.NoActionBar >
<intent-filter >
<action android:name=android.intent.action.MAIN />
<category
android:name=android.intent.category.LAUNCHER />
</intent-filter>
</activity>
</application>
</manifest>
4. Oznaite naziv projekta u Eclipse integrisanom razvojnom okruenju, a
zato, pritisnite F11 taster, da biste ponovo debagovali aplikaciju u
Android emulatoru. Ovog puta se Action Bar ne prikazuje (slika 3-30).
Slika 3-30
5. Moete i programski ukloniti Action Bar, koristei ActionBar klasu. Da
biste to uradili, neophodno je da prvo uklonite android:theme atribut koji
ste dodali u jednom od prethodnih koraka. To je vano, jer e u
suprotnom, sljedei korak dovesti do pojave izuzetka prilikom izvravanja
aplikacije.
6. Modifikujte MyActionBarActivity.java datoteku na sljedei nain:
package net.learn2develop.MyActionBar;
import android.app.ActionBar;
import android.app.Activity;
import android.os.Bundle;
public class MyActionBarActivity extends Activity {
/** izvrava se prilikom prvog definisanja aktivnosti. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getActionBar();
actionBar.hide();
//actionBar.show(); //---ponovo se prikazuje--}
}
7. Pritisnite F11 da biste ponovo debagovali aplikaciju u emulatoru.
Action Bar ostaje i dalje skriven.
Nain funkcionisanja
Atribut android:theme omoguava da prekinete prikzazivanje linija akcija u
Vaoj aktivnosti.
Ukoliko postavite da ovaj atribut ima vrijednost
@android:style/Theme.Holo.NoActionBar, nee biti prikazivan Action Bar.
Alternativno, moete programski da dobijete referencu na Action Bar u toku
izvravanja koritenjem getActionBar () metoda.
Izvravanje hide () metoda omoguavanje skrivanje linija akcija, dok
izvravanje show() metoda omoguava njeno ponovno prikazivanje.
Obratite panju da, prilikom koritenja android:theme atributa za sklanjanje
linija akcija, izvravanje getActionBar () metoda daje null u toku izvravanja
aplikacije.
Zbog toga je uvijek bolje da se Action Bar postavlja/ uklanja programski
koritenjem Action Bar klase.
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
return MenuChoice(item);
}
private void CreateMenu(Menu menu)
{
MenuItem mnu1 = menu.add(0, 0, 0, Item 1);
{
mnu1.setIcon(R.drawable.ic_launcher);
mnu1.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_RO
OM);
}
MenuItem mnu2 = menu.add(0, 1, 1, Item 2);
{
mnu2.setIcon(R.drawable.ic_launcher);
mnu2.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_RO
OM);
}
MenuItem mnu3 = menu.add(0, 2, 2, Item 3);
{
mnu3.setIcon(R.drawable.ic_launcher);
mnu3.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_RO
OM);
}
MenuItem mnu4 = menu.add(0, 3, 3, Item 4);
{
mnu4.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_RO
OM);
}
MenuItem mnu5 = menu.add(0, 4, 4, Item 5);
{
mnu5.setShowAsAction(MenuItem.SHOW_AS_ACTION_IF_RO
OM);
}
}
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) {
case 0:
Toast.makeText(this, You clicked on Item 1,
Toast.LENGTH_LONG).show();
return true;
case 1:
Toast.makeText(this, You clicked on Item 2,
Toast.LENGTH_LONG).show();
return true;
case 2:
Toast.makeText(this, You clicked on Item 3,
Toast.LENGTH_LONG).show();
return true;
case 3:
Toast.makeText(this, You clicked on Item 4,
Toast.LENGTH_LONG).show();
return true;
case 4:
Toast.makeText(this, You clicked on Item 5,
Toast.LENGTH_LONG).show();
return true;
}
return false;
}
}
2. Pritisnite F11 taster da biste debagovali aplikaciju u Android emulatoru.
Pratite ikone koje se prikazuju u desnom dijelu linija akcija ( slika 3-31).
Ukoliko kliknete MENU taster u emulatoru, bit e prikazane preostale
stavke menija ( slika 3-32).
To je poznato kao overflow meni.
Na ureajima koji nemaju MENU taster overflow meni je prikazan u
obliku ikone sa strelicom.
Na slici 3-33 prikazana je ista aplikacija, koja se izvrava na Asus Eee
Pad Transformer raunaru ( operativni sistem Android 3.2.1).
Nakon to kliknete overflow meni, prikazuju se ostale stavke menija.
3. Ukoliko kliknete stavku menija, Toast klasa prikazuje naziv oznaene
stavke menija ( slika 3-34).
Slika 3-31
Slika 3-32
Slika 3-33
Slika 3.34
Slika 3-35
Nain funkcionisanja
U liniji akcija se prikazuju stavke akcija izravanjem onCreateOptionsMenu ()
metoda aktivnosti:
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
CreateMenu(menu);
return true;
}
Toast.LENGTH_LONG).show();
return true;
}
return false;
}
Slika 3-36
Korisnici mogu da kliknu akcione stavke, ali i ikonu aplikacije u liniji akcija.
Kada korisnik klikne ikonu aplikacije, izvrava se onOptionsItemSelected ()
metod.
Da biste identifikovali ikonu aplikacije koja se poziva, neophodno je da
provjerite identifikacioni broj stavke u odnosu na android.R.id.home konstantu:
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) {
case android.R.id.home:
Toast.makeText(this,
You clicked on the Application icon,
Toast.LENGTH_LONG).show();
return true;
case 0:
Toast.makeText(this, You clicked on Item 1,
Toast.LENGTH_LONG).show();
return true;
case 1:
//...
}
return false;
}
Da biste omoguili da ikoan alikacije moe da se klikne, neophodno je da
izvrite setDisplayHomeAsUpEnabled ():
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
ActionBar actionBar = getActionBar();
actionBar.setDisplayHomeAsUpEnabled(true);
//actionBar.hide();
//actionBar.show(); //---ponovo se prikazuje--}
Slika 3-37
Slika 3-38
Nain funkcionisanja
U ovom primjeru prvo se postavlja u komentar setContentView () naredba, tako
da se ne uitava korisniki interfejs koji je definisan u main.xml datoteci.
Nakon toga se kreira LayoutParams objekat, u cilju specificiranja layout
parametra, koji e koristiti drugi pogledi ( njih ete kasnije definisati):
//---parametri pogleda--LayoutParams params =
new LinearLayout.LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT);
Takoer ste kreirali LinearLayout objekat, koji sadri sve poglede u Vaoj
aktivnosti:
//---definisanje rasporeda elemenata--LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
Nakon toga, definisali ste TextView i Button pogled:
//---kreiranje textview prikaza--TextView tv = new TextView(this);
tv.setText(This is a TextView);
tv.setLayoutParams(params);
//---kreiranje tastera--Button btn = new Button(this);
btn.setText(This is a Button);
btn.setLayoutParams(params);
Zatim ste ih dodali u LinearLayout objekat:
//---dodavanje textview prikaza--layout.addView(tv);
//---dodavanje tastera--layout.addView(btn);
</LinearLayout>
3. U UIActivity. Java datoteku dodajte sljedee naredbe, koje su prikazane
podebljanim slovima:
package net.learn2develop.UIActivity;
import android.app.Activity;
import android.view.KeyEvent;
import android.os.Bundle;
import android.widget.Toast;
public class UIActivityActivity extends Activity {
/** izvrava se prilikom prvog definisanja aktivnosti. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
Toast.makeText(getBaseContext(),
Center was clicked,
Toast.LENGTH_LONG).show();
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
Toast.makeText(getBaseContext(),
Left arrow was clicked,
Toast.LENGTH_LONG).show();
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
Toast.makeText(getBaseContext(),
Right arrow was clicked,
Toast.LENGTH_LONG).show();
break;
case KeyEvent.KEYCODE_DPAD_UP:
Toast.makeText(getBaseContext(),
Up arrow was clicked,
Toast.LENGTH_LONG).show();
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
Toast.makeText(getBaseContext(),
Down arrow was clicked,
Toast.LENGTH_LONG).show();
break;
}
return false;
}
4. Pritisnite F11 taster da biste debagovali aplikaciju u Android emulatoru.
5. Kada se zavri uitavanje aktivnosti, unesite odreeni tekst u EditText.
Nakon toga, kliknite streliicu nanie na direkcionom pedu.
Posmatrajte poruku koja se prikazuje na ekranu, kao to je prikazano na
slici 3- 39.
Slika 3-39
Nain funkcionisanja
Nakon iniciranja aktivnosti, pokaziva e zasvijetliti u EditText polju, jer se
nalazi u fokusu .
U MainActivity klasi predeinisali ste onKeyDown () metod bazne Activity
klase:
@Override
public boolean onKeyDown(int keyCode, KeyEvent event)
{
switch (keyCode)
{
case KeyEvent.KEYCODE_DPAD_CENTER:
//...
break;
case KeyEvent.KEYCODE_DPAD_LEFT:
//...
break;
case KeyEvent.KEYCODE_DPAD_RIGHT:
//...
break;
case KeyEvent.KEYCODE_DPAD_UP:
//...
break;
case KeyEvent.KEYCODE_DPAD_DOWN:
//...
break;
}
return false;
}
return false;
}
Ukoliko isprobate ovaj kod, utvrdit ete da ne moete da obavljate navigaciju
izmeu pogleda koritenja tastera sa strelicama.
Slika 3-40
Kao to je prikazano na slici 3-41, kada EditText pogled dobije fokus, prikazuje
se odgovarajua poruka na ekranu.
Slika 3-41