Professional Documents
Culture Documents
Tematyka wykadu
Strona 2
Wprowadzenie
Strona 3
Wprowadzenie
Strona 4
Wprowadzenie
Strona 5
Wprowadzenie
Strona 6
Wprowadzenie
Strona 7
Launcher
AlarmClock
Architektura systemu Android Browser
Mms
Music
Calculator
PackageInstaller
APLIKACJE Calendar
Phone
Camera
Settings
Contacts
SoundRecorder
Email
Stk
RODOWISKO TWORZENIA APLIKACJI GoogleSearch
Sync
HTML Viewer
Updater
IM
VoiceDialer
JDRO LINUX
sterowniki urzdze,
usugi systemu
operacyjnego
Wprowadzenie
Strona 8
instancji
pliki kodu bajtowego klas Java (*.class) przetwarzane na kod bajtowy
w formacie Dalvik Executable (*.dex)
optymalizacja pamici (eliminacja informacji powtarzajcych si w plikach klas,
plik DEX ma mniejszy rozmiar w stosunku do pliku JAR)
generowanie kodu maszynowego oparte na rejestrach, a nie na stosach jak
w JVM (redukcja liczby instrukcji)
wbudowany kompilator JIT (Just In Time) od wersji Android 2.2
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
Wprowadzenie
Strona 9
Wprowadzenie
Strona 10
Wprowadzenie
Strona 11
Wprowadzenie
Strona 12
Wprowadzenie
Strona 13
Wprowadzenie
Strona 14
Wprowadzenie
Strona 15
rodowisko programowania
Gwnym jzykiem programowania na platformie Android jest Java. Moliwe jest
rwnie tworzenie wstawek w kodzie C/C++ przy pomocy narzdzia Android
NDK (Native Development Tools).
Wymagane oprogramowanie (patrz wiczenie 1):
Java SE (JDK, min. 5) http://www.oracle.com/technetwork/java/javase/downloads/
Android SDK http://developer.android.com/sdk/
Programowanie w systemie Android
Koncepcja aplikacji
Struktura projektu aplikacji
Cykl ycia aplikacji
Najprostsza aplikacja kod rdowy
Programowanie w systemie Android
Budowa aplikacji
Strona 17
Koncepcja aplikacji
Aplikacje s uruchamiane w oddzielnych procesach (instancjach Dalvik VM),
czyli w rodowisku chronionej pamici (sandboxing).
Kady proces aplikacji ma przydzielony priorytet oraz identyfikator ID.
Aplikacja skada si z wielu skadnikw posiadajcych swj wasny cykl ycia.
APLIKACJA
AKTYWNOCI WIDOKI
ANDROID (view)
(activity)
Programowanie w systemie Android
startActivity
startActivityForResult
Budowa aplikacji
Strona 18
Koncepcja aplikacji
Aktywno (activity):
reprezentuje ekran lub okienko aplikacji (kady ekran aplikacji jest oddzieln
aktywnoci)
jednostka interfejsu uytkownika aplikacji przeznaczona do wykonywania przez
uytkownika akcji, czynnoci
moe zawiera widoki (view), wywietla interfejs uytkownika zoony
z widokw i reaguje na zdarzenia
uruchamiana przez intencj lub przez inn aktywno
Programowanie w systemie Android
Widok (view):
element interfejsu uytkownika
obiekt rysowany przybierajcy ksztat etykiety, przycisku, pola edycyjnego itp.
skadnikw interfejsu
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
Budowa aplikacji
Strona 19
Koncepcja aplikacji
Odbiornik komunikatw (broadcast receiver):
umoliwia odbieranie komunikatw o zdarzeniach i odpowiadanie na nie (np. niski
stan baterii, pobranie danych, poczenie przychodzce, wykonanie zdjcia itp.)
komunikaty maj form intencji (intent) i s rozgaszane przez system lub przez
inne aplikacje
nie posiada interfejsu moe tworzy powiadomienia w pasku stanu
Intencja (intent):
Programowanie w systemie Android
Budowa aplikacji
Strona 20
Koncepcja aplikacji
Usuga (service):
proces dziaajcy w tle przez duszy czas
nie posiada interfejsu uytkownika
moe by lokalna (w biecej aplikacji) lub zdalna (do czenia si z innymi
aplikacjami)
Programowanie w systemie Android
Budowa aplikacji
Strona 21
kod rdowy
aplikacji
zasoby aplikacji
deskryptor aplikacji
Budowa aplikacji
Strona 22
Budowa aplikacji
Strona 23
Budowa aplikacji
Strona 24
pocztek aktywnoci
Cykl ycia Aktywno jest uruchamiana
aktywnoci
onCreate()
uytkownik ponownie
wywouje aktywno
onStart() onRestart()
Budowa aplikacji
Strona 25
Najprostsza aplikacja
Tworzenie aplikacji (patrz wiczenie 2):
utworzenie emulatora urzdzenia mobilnego
utworzenie projektu aplikacji
uruchomienie aplikacji w emulatorze
instalacja aplikacji na urzdzeniu mobilnym
W rodowisku Eclipse po utworzeniu projektu aplikacji, automatycznie generowany jest
Programowanie w systemie Android
Budowa aplikacji
Strona 26
package org.przyklad.prog1;
aktywno pocztkowa
(aktywno szczytowego poziomu)
import android.app.Activity;
import android.os.Bundle;
metoda wywoywana
automatycznie gdy aktywno
Programowanie w systemie Android
Budowa aplikacji
Strona 27
Plik AndroidManifest.xml
Deskryptor (manifest) aplikacji okrela zawarto i zachowanie aplikacji. Deklaruje
skadniki aplikacji (aktywnoci, usugi i dostawcw treci), uprawnienia konieczne
do dziaania aplikacji i wymagania sprztowe. Plik generowany jest automatycznie.
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.przyklad.prog1" nazwa gwnego pakietu jest kojarzona
android:versionCode="1" z nazw aktywnoci i jej klas:
android:versionName="1.0" > com.example.prog1.Hello
<uses-sdk android:minSdkVersion="8" />
<application wersja API 8 => Android 2.2
Programowanie w systemie Android
Budowa aplikacji
Strona 28
Budowa aplikacji
Strona 29
Budowa aplikacji
Strona 30
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" /> szeroko i wysoko
elementu na ekranie:
fill_parent wypenia ekran
wrap_content dostosowana
napis umieszczony w etykiecie tekstowej TextView do zawartoci elementu
identyfikator napisu to hello,
zawarto napisu jest zdefiniowana w pliku strings.xml
Budowa aplikacji
Strona 31
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
ukad wypenia ekran
Programowanie w systemie Android
android:layout_height="fill_parent"
android:orientation="vertical" >
elementy UI rozkadane
<TextView w poziomie
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/hello" />
</LinearLayout>
Budowa aplikacji
Strona 32
Budowa aplikacji
Strona 33
Budowa aplikacji
Strona 34
klawisz MENU
urzdzenia
ekran
emulowanego
urzdzenia
klawiatura
alfanumeryczna
Budowa aplikacji
Strona 35
aplikacja dziaajca
na ekranie urzdzenia
ikona aplikacji
zainstalowana
w menu
urzdzenia
Budowa aplikacji
Strona 36
Budowa aplikacji
Strona 37
Zasoby aplikacji
Strona 38
Odniesienia do zasobw
Rodzaje zasobw
Zasoby aplikacji
Strona 39
Zasoby aplikacji
Strona 40
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
TextView tv = new TextView(this); utworzenie widoku TextView
tv.setText(Witaj wiecie!); i wywietlenie napisu
setContentView(tv);
} metoda setContentView przypisuje
} tre widoku tv do widoku gwnego
Zasoby aplikacji
Strona 41
plik /res/layout/main.xml
<?xml version="1.0" encoding="utf-8"?>
<TextView
Programowanie w systemie Android
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Witaj wiecie" />
Zasoby aplikacji
Strona 42
Zasoby aplikacji
Strona 43
Zasoby aplikacji
Strona 44
Rodzaje zasobw
Rozrniane s nastpujce rodzaje zasobw:
zasoby string napisy
zasoby layout ukady graficzne
zasoby color kolory
zasoby dimension wymiary
Programowanie w systemie Android
Zasoby aplikacji
Strona 45
</resources>
nazwy waciwoci name staj si
public final class R identyfikatorami zasobw w klasie R plik R.java
{
.....
public static final class string Klasa wewntrzna
{ R.string tworzy
public static final int app_name = 0x7f040001; przestrze nazw dla
public static final int hello = 0x7f020000; identyfikatorw napisw.
} Identyfikatory maj posta
} staych typu int.
Zasoby aplikacji
Strona 46
</resources>
referencja do obiektu aktywnoci
String s1 = activity.getString(R.string.napis1); kod Java
String s4 = activity.getString(R.string.napis4); odnonik do zasobu
String wynik = String.format(s4, James, Bond); w kodzie Java
%1 %2
String s5 = activity.getString(R.string.napis5);
odnonik do zasobu
String wynik = android.text.Html.fromHtml(s5); w kodzie XML
Zasoby aplikacji
Strona 47
<TextView
android:id="@+id/tv1"
android:layout_width="fill_parent"
android:layout_height="wrap_content" identyfikatory elementw UI
android:text="@string/powitanie" />
<Button
ukad LinearLayout posiada
android:id="@+id/przycisk1"
tutaj dwa elementy podrzdne:
android:layout_width="fill_parent"
etykiet tekstow TextView
android:layout_height="wrap_content"
i przycisk Button
android:text="@+string/powitanie" />
</LinearLayout>
Zasoby aplikacji
Strona 48
}
klasa wewntrzna R.layout zawiera
sta main powizan z ukadem
public static final class layout
zdefiniowanym w pliku main.xml
{
public static final int main = 0x7f030000;
}
} odnoniki do zasobw
w kodzie Java
setContentView(R.layout.main); kod Java
TextView tv = (TextView) this.findViewById(R.id.tv1);
Button b1 = (Button) this.findViewById(R.id.przycisk1);
Zasoby aplikacji
Strona 49
<color name="niebieski">#0000ff</color>
<color name="kolor_tla">#ffffff00</color> odnonik do zasobu
</resources> w kodzie Java
referencja do obiektu aktywnoci
int kolor = activity.getResources().getColor(R.color.zielony); kod Java
Zasoby aplikacji
Strona 50
cale (in)
milimetry (mm)
punkty (pt) jeden punkt to 1/72 cala
piksele niezalene od gstoci (dip, dp) odniesieniem jest ekran o
gstoci 160 dpi (pikseli na cal) jest on mapowany na rzeczywisty ekran
piksele niezalene od skali (sp) stosowane dla czcionek, rzeczywisty
rozmiar uwzgldnia rozmiar czcionki i ustawienia uytkownika.
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
Zasoby aplikacji
Strona 51
odnonik do zasobu
float size; w kodzie Java kod Java
Programowanie w systemie Android
size=activity.getResources().getDimension(R.dimen.rozmiar_w_dp);
Zasoby aplikacji
Strona 52
odnonik do zasobu
android:layout_height="wrap_content" w kodzie XML
android:text="@+string/powitanie"
android:background="@drawable/obrazek" />
Zasoby aplikacji
Strona 53
<drawable name="niebieski_prostokat">#0000ff</drawable>
</resources>
ColorDrawable cd; kod Java
cd = (Color Drawable)
activity.getResources().getDrawable(R.drawable.czerwony_prosotkat);
tv.setBackgroud(cd); // to widoku tekstu
<TextView plik main.xml
android:layout_width="fill_parent" odnoniki do zasobu
android:layout_height="wrap_content"
android:textAlign="center"
android:background="@drawable/czerwony_prostokat" />
Zasoby aplikacji
Strona 54
Zasoby aplikacji
Strona 55
Zasoby aplikacji
Strona 56
Pojcie intencji
Wykorzystanie intencji
Intencje predefiniowane
Kategorie i akcje intencji
Adaptery
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
nowsze rozwizanie:
Przykad dostawcy treci ContactContracts
Dostawca treci Contacts, tabela Phones (ksika telefoniczna)
_ID LABEL NUMBER NUMBER_KEY TYPE
5 dom nad morzem (601) 601 601 601 601 601 TYPE_HOME
11 biuro w Koszalinie (602) 602-602 602 602 602 TYPE_WORK
14 subowy 603.603.603 603 603 603 TYPE_MOBILE
21 domowy (94) 123 456 94 123 456 TYPE_HOME
Programowanie w systemie Android
android:authorities="com.google.provider.NotePad" />
Identyfikatory URI
Po zarejestrowaniu dostawcy treci, dostpne s identyfikatory URI podobne do
adresw URL:
content://com.politechnika.NaszDostawca/
content://com.google.provider.NotePad/
Identyfikatory URI dla dostawcw treci wbudowanych w system nie musz posiada
penej struktury w nazwie:
content://media/internal/images
dostawca treci MediaStore URI typu
content://media/external/images
String
content://contacts/people dostawca treci Contacts
MediaStore.Images.Media.INTERNAL_CONTENT_URI
MediaStore.Images.Media.EXTERNAL_CONTENT_URI URI typu Uri
Contacts.People.CONTENT_URI
Kursor treci
Dostawca treci udostpnia dane do odczytu w postaci obiektu nazywanego kursorem
treci. Jest to zbir krotek (rekordw, wierszy) i kolumn.
Charakterystyka kursora treci:
kursor jest wstpnie ustawiony przed pierwsz krotk naley go ustawi na
pierwsz krotk metod moveToFirst
do odczytu danych konieczna jest znajomo nazw i typw kolumn w tabeli
dostawcy treci (odczyt: getString, getInt, getFloat, )
Programowanie w systemie Android
Zapis danych
Kursor treci umoliwia jedynie odczyt danych. Zapis danych moliwy jest poprzez
uycie klas ContentValues i ContentResolver.
Obiekt klasy ContentValues przechowuje pary klucz-warto (nazwa kolumny-
warto kolumny). Obiekt taki jest wstawiany do bazy przy uyciu identyfikatora URI
za pomoc obiektu ContentResolver.
ContentValues wartosc = new ContentValues();
przygotowany obiekt klasy
wartosc.put(People.NAME, Albert Einstein); ContentValues
wartosc.put(People.STARRED, 1); // do ulubionych
Programowanie w systemie Android
ContentResolver cr = activity.getContentResolver();
Pojcie intencji
Intencja to zamiar wykonania pewnej czynnoci, akcja i powizane z t akcj dane.
Intencje s wykorzystywane do wywoywania aplikacji z poziomu innej aplikacji
(wywoywanie aktywnoci, wywoywanie wewntrznych lub zewntrznych
skadnikw aplikacji). Innym zastosowaniem jest generowanie zdarze.
Podczas przydzielania intencji do aktywnoci (okrelania ktra aktywno bdzie
wywoana) brane s pod uwag kolejno:
skadnik aktywnoci (obiekt ComponentName aktywnoci)
Programowanie w systemie Android
Wykorzystanie intencji
Intencje definiowane s w tzw. filtrach intencji dla poszczeglnych skadnikw
aplikacji (patrz plik deskryptora, strony 27-28).
Przykadowy filtr intencji dla aktywnoci:
<activity
android:label="Testowanie aktywnoci"
android:name="Hello" > stay
pakiet fragment nazwa akcji
<intent-filter >
<action android:name="org.przyklad.intent.action.PokazWidok" />
Programowanie w systemie Android
Wykorzystanie intencji
Istniej rwnie inne sposoby wykorzystania intencji do uruchamiania
aktywnoci, nie wymagajce stosowania filtrw intencji (ale wymagajce
rejestracji aktywnoci w pliku manifestu).
Przykad 1: uruchomienie aktywnoci poprzez okrelenie jej obiektu
ComponentName (tzw. obiekt skadnika)
// uruchomienie aktywnoci Contacts
Intent intencja = new Intent();
intencja.setComponent(new ComponentName( obiekt ComponentName czy
Programowanie w systemie Android
Intencje predefiniowane
W zalenoci od wersji platformy Android, dostpny jest zestaw
predefiniowanych intencji umoliwiajcych uruchamianie aplikacji
systemowych.
public static void wywolajAplikacje(Activity activity)
{
nazwa akcji, dziaania
Intent intencja = new Intent(Intent.AKCJA); zwizanego z intencj
intencja.setData(Uri.parse(dane));
activity.startActivity(intencja);
} dane dla intencji
Programowanie w systemie Android
Kategorie intencji
Intencje podzielone s na kategorie, ktre pozwalaj decydowa o uruchamianej
aktywnoci. Podczas uruchamiania aplikacji wyszukiwane s aktywnoci o kategorii
CATEGORY_LAUNCHER (android.intent.category.LAUNCHER).
wybrane kategorie opis aktywnoci
aktywno moliwa do przegldania (nie narusza regu
CATEGORY_BROWSABLE
bezpieczestwa przegldarki)
CATEGORY_DEFUALT aktywno domylna
CATEGORY_GADGET moliwa do osadzenia w aktywnoci nadrzdnej
Programowanie w systemie Android
akcja opis
ACTION_CALL poczenie z numerem telefonu
ACTION_DIAL wywietlenie klawiatury do wpisywania numeru
Programowanie w systemie Android
ACTION_EDIT
ACTION_GET_CONTENT jak ACTION_PICK, ale zwracany jest element okrelonego typu MIME
ACTION_MAIN aktywno pocztkowa (aktywno szczytowego poziomu)
aktywno, ktra zwraca wynik (wywietla list elementw, umoliwia
ACTION_PICK
wybr jednego z nich i zwraca identyfikator URI wybranego elementu)
ACTION_VIEW uruchomienie przegldarki www, wywietlenie mapy itp.
ACTION_WEB_SEARCH uruchomienie wyszukiwania www
Adaptery
Adaptery dziedzicz po klasie android.widget.Adapter.
Su do powizania kontrolek-pojemnikw dziedziczcych po klasie AdapterView
(ListView, GridView, Gallery, Spinner) z danymi umieszczanymi w tych
kontrolkach. Odpowiadaj rwnie za utworzenie widoku dla kadego elementu
danych (za dostarczenie widokw potomnych do pojemnika).
adapter opis
ArrayAdapter<T> najprostszy adapter, stosowany dla pojemnikw ListView
Programowanie w systemie Android
CursorAdapter j.w., dostarcza dane dla listy poprzez tzw. kursor treci
uywany do zapeniania listy danymi statycznymi (take
SimpleAdapter
danymi pochodzcymi z zasobw)
ResourceCursorAdapter dziedziczy po CursorAdapter, tworzy widoki z zasobw
dziedziczy po ResourceCursorAdapter, tworzy widoki
SimpleCursorAdapter TextView i ImageView zdefiniowane w zasobach
z kolumn w kursorze treci
klasa abstrakcyjna, dziedziczc po niej mona tworzy
BaseAdapter
adaptery niestandardowe
Adapter ArrayAdapter
dane kontrolki TextView s
Tworzenie adaptera (przykad 1): reprezentowane przez cigi znakw
String s[] = {"Kowalski", "Nowak"}; kontrolka TextView
ArrayAdapter<String> adapter = zdefiniowana przez Android SDK
new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1,
s);
Adapter SimpleCursorAdapter
Adapter SimpleCursorAdapter przeksztaca krotk w kursorze na widok
podrzdny w kontrolce-pojemniku (np. na list ListView zawierajc
elementy TextView).
Konstruktor adaptera:
SimpleCursorAdapter(Context context, int layout,
Cursor c, String[] from, int[] to)
context kontekst aktywnoci
Programowanie w systemie Android
Adapter SimpleCursorAdapter
Adapter SimpleCursorAdapter przeksztacajcy dane na list ListView
zawierajc elementy TextView.
ListView
Kontrolki tekstu
Kontrolki przyciskw
Kontrolki pl wyboru
Kontrolka listy
Programowanie w systemie Android
Kontrolka siatki
Dodatkowe kontrolki
Toast
MapView
Gallery
Spinner
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
View Toast
Programowanie w systemie Android
ImageButton AdapterView
AbsListView AbsSpinner
EditText DigitalClock Button
ListView Gallery
AutoCompleteTextView CompoundButton
GridView Spinner
CheckBox
MultiAutoCompleteTextView ToggleButton RadioButton
Kontrolki tekstu
kontrolka opis
etykieta tekstowa (nieedytowalna); w zalenoci od rodzaju tekstu
TextView (adres URL, e-mail, nr telefonu) zostaje on podwietlony, a jego
kliknicie wywouje odpowiedni akcj number
numberSigned
pole edycyjne; wybrane waciwoci: numberDecimal
inputType rodzaj wprowadzanego tekstu
autoText poprawianie bdw w trakcie pisania
capitalize autom. due litery na pocztku zda i wyrazw
EditText phoneNumber akceptowanie numeru telefonu
Programowanie w systemie Android
Kontrolki tekstu
// programowe tworzenie kontrolki TextView
TextView tv = new TextView(this);
tv.setText(Witaj wiecie!);
Kontrolki tekstu
// tworzenie podpowiedzi dla kontrolki AutoCompleteTextView
AutoCompleteTextView actv;
actv = (AutoCompleteTextView) this.findViewById(R.id.actv1);
powizanie kontrolki
actv z podpowiedziami
Kontrolki przyciskw
kontrolka opis
Button przycisk podstawowy, zawiera napis
ImageButton przycisk obrazkowy, zawiera obraz
CompoundButton przycisk dwustanowy, przecznik
Programowanie w systemie Android
{ nasuchu
...
Button btn = (Button) this.findViewById(R.id.przycisk1);
btn.setOnClickListener(this);
}
metoda setOnClickListener ustala
public void onClick(View v) obiekt nasuchiwacza: tutaj this
{
// wykonaj czynnoci gdy nacinito przycisk
this.finish(); // zakoczenie aktywnoci
}
} metoda onClick nasuchiwacza
Tworzenie przycisku:
<ToggleButton
android:id="@+id/przycisk3"
android:layout_width="wrap_content" napis
android:layotu_height="wrap_content" niewykorzystywany!
android:text="Przycisk przeczania"
Programowanie w systemie Android
android:textOff="Wyczone"
napisy na przycisku
android:textOn="Wczone" />
metod clearCheck().
Domylnie, adne pole wyboru nie jest zaznaczone. Wybran opcj
mona zaznaczy programowo metod setChecked lub toggle.
Metoda isChecked() zwraca stan pola.
RadioButton rbtn;
rbtn = (RadioButton) this.findViewById(R.id.pole1);
rbtn.setChecked(true); zaznaczenie pola o identyfikatorze
zasobu pole1
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
<CheckBox xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/row_chbox"
android:layout_width="wrap_content"
android:layotu_height="wrap_content" />
lista zawiera elementy
<TextView android:id="@+id/row_tv" CheckBox i TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
</LinearLayout>
android:id="@+id/siatka"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10px"
android:vertical_spacing="10px"
android:horizontal_spacing="10px"
android:numColumns="auto_fit"
android:columnWidth="100px"
android:stretchMode="columnWidth"
android:gravity="center" />
Cursor c = getContentResolver().query(People.CONTENT_URI,
null, null, null, null);
startManagingCursor(c);
Programowanie w systemie Android
SimpleCursorAdapter adapter;
adapter = new SimpleCursorAdapter(this,
android.R.layout.simple_list_item_1, c, cols, names);
gv.setListAdapter(adapter);
} powizanie danych z siatk za pomoc
klasy android.widget.ListAdapter
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
<DatePicker android:id="@+id/datePicker"
android:layout_width="wrap_content" kontrolka daty
android:layout_height="wrap_content" />
<TimePicker android:id="@+id/timePicker"
android:layout_width="wrap_content" kontrolka czasu
android:layout_height="wrap_content" />
</LinearLayout>
Kontrolka Toast
Kontrolka Toast umoliwia wywietlenie na ekranie komunikatu
(klasa android.widget.Toast). kontekst aplikacji
tre komunikatu jako:
Context kontekst = getApplicationContext(); napis CharSequence
CharSequence komunikat = "Nacisne przycisk"; identyfikator zasobu
Toast toast; np. R.string.napis
toast = Toast.makeText(kontekst, komunikat, Toast.LENGTH_SHORT);
toast.show();
Programowanie w systemie Android
kontrolka Toast
Kontrolka MapView
Kontrolka MapView umoliwia wywietlanie mapy
(klasa com.google.android.maps.MapView).
Tworzenie kontrolki:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" >
Programowanie w systemie Android
<com.google.android.maps.MapView
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:enabled="true" interakcja uytkownika z map
android:clickable="true"
android:apiKey="myAPIKey" /> Maps API Key certyfikat dla aplikacji
otrzymywany po bezpatnym zarejestrowaniu
</LinearLayout> si w usudze Google Maps
Kontrolka Gallery
Kontrolka Gallery to lista przewijana w poziomie (skupiona na
rodku listy) zawierajca np. galerie obrazw obsugiwane w trybie
dotykowym.
Tworzenie kontrolki:
<Gallery
android:id="@+id/galeria"
android:layout_width="fill_parent"
Programowanie w systemie Android
android:layout_height="wrap_content" />
Kontrolka Spinner
Kontrolka Spinner to rozwijane menu.
Tworzenie kontrolki:
<Spinner
android:id="@+id/spinner"
android:layout_width="wrap_content"
android:layout_height="wrap_content" />
Programowanie w systemie Android
Ukad FrameLayout
Ukad z zakadkami
Menadery ukadu a orientacja urzdzenia
Narzdzie Hierarchy Viewer
Ukad LinearLayout
Ukad LinearLayout (najprostszy z dostpnych) rozmieszcza elementy
podrzdne liniowo w poziomie lub w pionie. Jest to domylny ukad
ustalany podczas tworzenia interfejsu uytkownika.
Wybrane waciwoci ukadu:
dotyczy ukadu
waciwo kontrolek w pojemniku znaczenie
orientacja (kierunek) rozmieszczania elementw
orientation
w pojemniku: horizontal, vertical
Programowanie w systemie Android
Ukad LinearLayout
Plik XML definiujcy ukad:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent" orientacja pozioma
android:layout_height="wrap_content" >
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
Programowanie w systemie Android
android:text="@string/napis1" />
<TextView
android:layout_width="fill_parent" elementy potomne
android:layout_height="wrap_content" (podrzdne)
android:text="@string/napis2" />
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/napis3" />
</LinearLayout>
Ukad LinearLayout
Plik XML definiujcy ukad:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent > orientacja pionowa
<EditText
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="raz"
android:layout_weight="0.0" elementy potomne
android:gravity="left" />
Programowanie w systemie Android
<EditText
(podrzdne)
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="dwa"
android:layout_weight="1.0"
android:gravity="center" /> raz
<EditText dwa
android:layout_width="fill_parent"
android:layout_height="wrap_content" trzy
android:text="trzy"
android:layout_weight="0.0"
android:gravity="right" />
</LinearLayout>
Ukad LinearLayout
Plik XML definiujcy ukad:
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent" orientacja pionowa
android:layout_height="fill_parent >
<EditText
Programowanie w systemie Android
android:layout_width="wrap_content"
android:layout_height="wrap_content" element potomny
android:text="raz" (podrzdny)
android:layout_gravity="right"
android:gravity="center" /> raz
</LinearLayout>
Ukad RelativeLayout
Ukad RelativeLayout (najczciej stosowany z dostpnych) rozmieszcza
elementy podrzdne wzgldem innych kontrolek lub wzgldem pojemnika
nadrzdnego. Waciwoci ustalajce pozycj elementw w ukadzie:
wyrwnuje element w stosunku do elementu id wyrwnuje element w stosunku do pojemnika
warto: id opis warto: true / false opis
layout_above umieszcza ponad layout_alignParentBottom dolne krawdzie
layout_below umieszcza pod layout_alignParentLeft lewe krawdzie
wyrwnuje rodki layout_alignParentRight prawe krawdzie
layout_alignBaseline
Programowanie w systemie Android
Ukad RelativeLayout
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent" android:layout_height="wrap_content" >
<TextView android:id="@+id/tv_login"
android:layout_width="fill_parent" etykieta tekstowa
android:layout_height="wrap_content" wyrwnana do grnej
android:text="Nazwa uytkownika" krawdzi pojemnika
android:layout_alignParentTop="true" />
<EditText android:id="@+id/et_login"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_login" />
<TextView android:id="@+id/tv_haslo"
android:layout_width="fill_parent"
Programowanie w systemie Android
Ukad TableLayout
Ukad TableLayout rozmieszcza elementy podrzdne w wierszach i kolumnach (jak
w tabeli). Liczba kolumn tabeli jest okrelania na podstawie wiersza zawierajcego
najwiksz liczb elementw. Kolumny numerowane s od zera. Ukad dziedziczy
waciwoci po ukadzie LinearLayout, uzupeniajc je o nowe waciwoci:
waciwo znaczenie
moe przyj tylko warto fill_parent, nie moe
layout_width
przyjmowa wartoci wrap_content
stretchColumns="0,1,2" rozcignicie kolumn o podanych numerach
Programowanie w systemie Android
Ukad TableLayout
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent" > wzy TableRow opisuj
<TableRow> poszczeglne komrki tabeli
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Imi:" />
pierwszy wiersz tabeli
<EditText
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Jan" />
Programowanie w systemie Android
Ukad TableLayout
Plik XML definiujcy ukad:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="0,1,2" >
</TableLayout>
Ukad FrameLayout
Ukad FrameLayout suy do dynamicznego wywietlania (zmieniania)
pojedynczego elementu. Jeeli pojemnik zawiera wiele elementw, to:
jeden element jest widoczny, a pozostae s niewidoczne
elementy tworz stos widoczny jest element z wierzchoka stosu (start).
Pooeniem elementu w kontenerze steruje waciwo android:layout_gravity:
warto waciwoci opis warto waciwoci opis
Programowanie w systemie Android
Ukad FrameLayout
Plik XML definiujcy ukad:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/frmLayout"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
android:layout_width="fill_parent" widoczny
android:layout_height="fill_parent" />
<ImageView
android:id="@+id/obrazek2"
android:src="@drawable/plik2"
android:scaleType="fitCenter"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:visibility="gone" />
element niewidoczny
</FrameLayout>
view.setVisibility(View.GONE);
} obiekty nasuchujce
});
reaguj na kliknicie
img2.setOnClickListener(new OnClickListener() { elementw ImageView
public void onClick(View view) {
ImageView img1 =
(ImageView) FrameLayoutActivity.this.findViewById(R.id.obrazek1);
img1.setVisibility(View.VISIBLE);
view.setVisibility(View.GONE); Jednoczenie widoczny jest tylko jeden z
} elementw ImageView. Kliknicie obrazka
}); (onClick) powoduje jego ukrycie i
} wywietlenie drugiego w tym samym miejscu.
Ukad z zakadkami
Ukad graficzny z zakadkami mona utworzy przy uyciu wzw TabHost
i TabWidget. Wze TabHost powinien zawiera wewntrz wzy
TabWidget i FrameLayout (patrz strona 117).
Dla kadej zakadki wymagane jest przygotowanie dwch ikon,
symbolizujcych stan aktywnej i nieaktywnej zakadki.
Ze wzgldu na elastyczno wykorzystania ukadu, korzystnie jest przyj, e
z kad zakadk bdzie zwizana oddzielna aktywno. Gwna
Programowanie w systemie Android
Ukad z zakadkami
Plik XML definiujcy ukad:
<TabHost xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@android:id/tabhost"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout ukad LinearLayout zawiera
android:orientation="vertical" dwa elementy uoone poziomo:
android:layout_width="fill_parent" element TabWidget
android:layout_height="fill_parent" ukad FrameLayout
android:padding="5dp">
Programowanie w systemie Android
Koncepcja menu
Tworzenie menu
Tworzenie grup menu
Odpowied na wybr elementu menu
Programowanie w systemie Android
Koncepcja menu
Menu s widziane jako zasoby wczytywane z plikw XML. Dla kadego
elementu menu jest tworzony identyfikator zasobw.
Do obsugi menu suy klasa android.view.Menu. Elementy menu s
reprezentowane przez obiekty klasy android.view.MenuItem,
a elementy podmenu android.view.SubMenu.
Rodzaje menu:
Programowanie w systemie Android
menu standardowe
podmenu
menu kontekstowe
menu w postaci ikon
menu drugorzdne (Menu.CATEGORY_SECONDARY) 0x30000
menu alternatywne (Menu.CATEGORY_ALTERNATIVE) 0x40000
menu systemowe (Menu.CATEGORY_SYSTEM) 0x20000 elementy tego menu
s umieszczane automatycznie przez system
menu kontenerowe (Menu.CATEGORY_CONTAINER) 0x10000
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
TextView
onOptionsItemSelected Aktywno
strona 127
SubMenu
OnMenuItemClickListener
strona 128
MenuItem
powizanie z intencj
strona 129
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
Tworzenie menu
Aktywno jest powizana z pojedynczym menu (obiektem klasy Menu).
Menu jest tworzone dla aktywnoci i przekazywane jako argument do
metody onCreateOptionsMenu. Metoda ta wypenia menu zestawem
elementw menu zwrcenie wartoci true oznacza uwidocznienie
menu (false oznacza menu niewidoczne).
Element menu posiada: identyfikator swojej grupy elementw, wasny unikalny
identyfikator, numer pozycji w menu, nazw (tytu).
Programowanie w systemie Android
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// wywoanie metody nadrzdnej systemowe elementy menu
super.onCreateOptionMenu(menu);
id grupy
menu.add(0, 1, 1, Polecenie 1); id elementu opcjonalne (Menu.NONE)
menu.add(0, 2, 2, Polecenie 2); nr pozycji
menu.add(0, 3, 3, Polecenie 3); nazwa - moe pochodzi z zasobw
return true; // powoduje wywietlenie menu
}
@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// wywoanie metody nadrzdnej systemowe elementy menu
super.onCreateOptionMenu(menu);
case ...
return true; // dla kliknitych (przetwarzanych)
// elementw menu
case ...
return true;
default:
// dla nieprzetwarzanych elementw menu
return super.onOptionsItemSelected(item);
}
}
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011
{
// czynnoci zwizane kliknicie elementu menu powoduje
// z poleceniem menu... wywoanie kodu nasuchiwacza: ma
return true; on pierwszestwo przed metod
} onOptionsItemSelected
}
ustalenie nasuchiwacza
MyReponse myResponse = new MyResponse();
menuItem.setOnMenuItemClickListener(myResponse);
menu systemowe
Elementy menu systemowego s doczane do tworzonego menu dziki
wywoaniu metody onCreateOptionsMenu z klasy nadrzdnej.
Menu systemowe moe by zaimplementowane w przyszych wersjach
systemu Android obecnie nie wystpuje.
{
menu.setHeaderTitle(Przykadowe menu kontekstowe);
menu.add(200, 200, 200, element 1);
krok 2: zapenianie menu
}
kontekstowego elementami
@Override
public boolean onContextItemSelected(MenuItem item)
{
// podobnie jak w menu standardowym krok 3: tworzenie odpowiedzi
// patrz strona 127 na kliknicia elementw menu
} kontekstowego
menu alternatywne
Elementy menu alternatywnego mog stanowi cz menu
standardowego, podmenu i menu kontekstowego.
Menu alternatywne to cz systemu komunikacji pomidzy aplikacjami
(np. menu jednej aplikacji moe by umieszczone wewntrz drugiej
aplikacji). Wybranie menu alternatywnego powoduje uruchomienie
docelowej aplikacji lub aktywnoci za porednictwem adresu URL (adres
Programowanie w systemie Android
menu dynamiczne
Zawarto menu dynamicznego moe si zmienia (inne rodzaje menu to
menu statyczne).
Menu dynamiczne tworzone jest metod onPrepareOptionMenu, ktra
jest wywoywana za kadym razem gdy wybierane jest menu dynamiczne.
@Override
Programowanie w systemie Android
switch (item.getItemId())
{
case R.id.menu_clear:
Programowanie w systemie Android
this.emptyText(); break;
case R.id.menu_dial:
this.dial(); break;
case R.id.menu_testPick:
IntentsUtils.invokePick(this); break;
case R.id.menu_testGetContent:
IntentsUtils.invokeGetContent(this); break;
case R.id.menu_show_browser:
IntentsUtils.invokeBrowser(this); break;
}
}
Literatura i rda
Strona 139