You are on page 1of 139

Materiay dydaktyczne

w ramach projektu Inynier pilnie poszukiwany

Programowanie urzdze mobilnych


w systemie Android
Zagadnienia podstawowe

dr in. Robert Arsoba Koszalin 2011


Robert.Arsoba@ie.tu.koszalin.pl Wersja 1.0
KIK 2011

Tematyka wykadu
Strona 2

1. Wprowadzenie do systemu Android


2. Budowa aplikacji w systemie Android
3. Zasoby aplikacji
4. Dostawcy treci, intencje i adaptery
Programowanie w systemie Android

5. Interfejs uytkownika elementy


6. Interfejs uytkownika ukady
7. Tworzenie i obsuga menu
8. Literatura i dodatkowe rda

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 3

Czym jest system Android?


Cechy systemu Android
Architektura systemu Android
Wirtualna maszyna Dalvik VM
Programowanie w systemie Android

Pakiety Java w systemie Android


Wersje systemu Android
Rynek wersji systemu Android
rodowisko programowania

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 4

Android to system operacyjny firmy Google dla urzdze mobilnych typu


handheld, wspierany przez zrzeszenie OHA (Open Handset Alliance).
Programowanie w systemie Android

pierwszy smartfon z systemem Android tablet


HTC T-Moble G1 Samsung Galaxy Tab 10.1
2008 rok 2011 rok
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 5

Rynek aplikacji dla urzdze mobilnych


Programowanie w systemie Android

Prognoza rynku aplikacji mobilnych na 2011 rok

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 6

Cechy systemu Android:


jawny, otwarty kod rdowy, brak opat licencyjnych
jdro Linux 2.6
pena wielozadaniowo
moliwo wykorzystania modelu przetwarzania w chmurze (cloud computing)
otwarte rodowisko aplikacji: wielokrotne uycie i wzajemna wymiana
komponentw
wirtualna maszyna Dalvik (DVM), zoptymalizowana dla urzdze mobilnych
zintegrowana przegldarka oparta na silniku WebKit, obsuga HTML 5
Programowanie w systemie Android

zoptymalizowana grafika (2D: Google Skia, 3D: Open GL ES), wspomaganie


sprztowe
relacyjna baza danych SQLite
obsuga multimediw (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)
telefonia GSM
wsparcie uzalenione
Bluetooth, EDGE, 3G, Wi-Fi
od sprztu
aparat fotograficzny, GPS, akcelerometr, kompas

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

BIBLIOTEKI NATYWNE C/C++ RODOWISKO URUCHOMIENIOWE


Programowanie w systemie Android

JDRO LINUX
sterowniki urzdze,
usugi systemu
operacyjnego

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 8

Wirtualna maszyna Dalvik VM


W systemie Android kod bajtowy aplikacji jest uruchamiany
w wirtualnej maszynie Dalvik.
Cechy Dalvik VM:
zoptymalizowana do dziaania na urzdzeniach o ograniczonych zasobach
(pami, moc obliczeniowa, brak pliku wymiany)
zoptymalizowana do jednoczesnego, wydajnego uruchamiania wielu swoich
Programowanie w systemie Android

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

Pakiety Java w systemie Android cz 1


rodowisko Android SDK zawiera ponad 40 pakietw i 700 klas.
Najwaniejsze z nich znajduj si w przestrzeni nazw android.*.
nazwa pakietu zawarto i przeznaczenie pakietu
android.app model aplikacji, aktywnoci, kontrolki, okna dialogowe
android.bluetooth obsuga cznoci, urzdze i funkcji Bluetooth
android.content dostawcy treci, dostp do magazynu danych, intencje
android.content.pm manager pakietw
Programowanie w systemie Android

android.content.res dostp do plikw zasobw


android.database koncepcje abstrakcyjnej bazy danych
android.database.sqlite koncepcje fizycznej bazy danych SQLite
android.gesture obsuga gestw na ekranie dotykowym
android.graphics klasy podstawowych obiektw graficznych
android.graphics.drawable protokoy rysowania, rysunki ta, animacje
android.graphics.drawable.shapes klasy ksztatw do rysowania

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 10

Pakiety Java w systemie Android cz 2

nazwa pakietu zawarto i przeznaczenie pakietu


android.hardware obsuga aparatu fotograficznego
android.location obsuga geolokalizacji
android.media obsuga multimediw (odtwarzanie, nagrywanie), rozpoznawanie twarzy
android.net sieciowe interfejsy API dla gniazd
android.net.wifi obsuga pocze Wi-Fi
Programowanie w systemie Android

android.opengl klasy grafiki trjwymiarowej OpenGL ES


android.os usugi systemowe (m.in. komunikacja midzyprocesowa, obsuga baterii)
android.preference ujednolicone zarzdzanie ustawieniami aplikacji przez uytkownikw
android.provider predefiniowani dostawcy treci
android.sax analityczne klasy SAX (interfejs API dla jzyka XML)
android.speech definicje staych wykorzystywanych w rozpoznawaniu mowy
android.speech.tts konwersja tekstu na mow (text-to-speech, Pico TTS)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 11

Pakiety Java w systemie Android cz 3


nazwa pakietu zawarto pakietu
android.telephony klasy do obsugi telefonii
android.telephony.gsm lokalizacja GSM, obsuga wiadomoci SMS
android.telephony.cdma obsuga telefonii CDMA
android.text klasy do przetwarzania tekstu
android.text.method klasy do wprowadzania tekstu w celu kontroli zmian
android.text.style style tekstu
Programowanie w systemie Android

android.utils klasy Log, DebugUtils, TimeUtils, Xml


android.view klasy Menu,View,ViewGroup, nasuchiwacze, wywoania zwrotne
android.view.animation obsuga animacji metod przej, interpolatory
android.view.inputmethod szkielet metody wprowadzania danych
android.webkit klasy obsugujce przegldark internetow
android.widget klasy kontrolek interfejsu uytkownika
com.google.android.maps klasy obsugujce mapy Google Maps

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 12

Wersje systemu Android


wersja nazwa kodowa wersja API
Android 4.0 Ice Cream Sandwich 14
Android 3.2 Honeycomb MR2 13
Android 3.1.x Honeycomb MR1 12
Android 3.0.x Honeycomb 11
Android 2.3.3 - 2.3.7 Gingerbread MR1 10
Android 2.3.0 - 2.3.2 Gingerbread 9
Programowanie w systemie Android

Android 2.2.x Froyo 8


Android 2.1.x Eclair MR1 7
Android 2.0.1 Eclair 0.1 6
Android 2.0 Eclair 5
Android 1.6 Donut 4
Android 1.5 Cupcake 3
Android 1.1 Base 1.1 2
Android 1.0 Base 1

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 13

Rynek wersji systemu Android

wersja nazwa kodowa API %


Android 2.3.3 - 2.3.7 Gingerbread MR1 10 43,9
Android 2.2.x Froyo 8 40,7
Android 2.1.x Eclair MR1 7 10,7
Android 1.6 Donut 4 1,4
Programowanie w systemie Android

Android 3.2 Honeycomb MR2 13 0,9


Android 3.1.x Honeycomb MR1 12 0,9
Android 1.5 Cupcake 3 0,9
Android 2.3.0 - 2.3.2 Gingerbread 9 0,5
Android 3.0.x Honeycomb 11 0,1

Stan na listopad 2011, wg odwiedzin strony Android Market

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Wprowadzenie
Strona 14

Rynek wersji systemu Android


Programowanie w systemie Android

Stan na listopad 2011, wg odwiedzin strony Android Market

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

Eclipse IDE for Java Developers (min. 3.3) http://www.eclipse.org/downloads/


ADT (Android Development Tools ) wtyczka do Eclipse obsugujca Android SDK

Alternatywne do Eclipse rodowiska to:


narzdzia wiersza polece Android SDK
MOTODEV Studio for Android (Motorola)
http://developer.motorola.com/docstools/motodevstudio/download/
IntelliJ IDEA (JetBrains) http://www.jetbrains.com/idea/download/
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji w systemie Android


Strona 16

Koncepcja aplikacji
Struktura projektu aplikacji
Cykl ycia aplikacji
Najprostsza aplikacja kod rdowy
Programowanie w systemie Android

Najprostsza aplikacja zasoby XML


Emulator systemu Android
Instalacja aplikacji w urzdzeniu mobilnym

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

ODBIORNIKI KOMUNIKATW sendBroadcast INTENCJE


(broadcast receiver) sendOrderedBroadcast (intent)
sendStickyBroadcast aktywuj
startService
bindService
USUGI
(service) query
DOSTAWCY TRECI content resolver
(content provider)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

aktywnoci s grupowane i przechowywane na stosie


w danym momencie uytkownik moe by w interakcji z jedn aktywnoci
w aplikacji moliwe jest uruchamianie aktywnoci z innych aplikacji

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

abstrakcyjny opis operacji, ktra ma by wykonana


definiuje zamiar wykonania czynnoci takiej jak np. rozpoczynanie (uruchamianie)
aktywnoci, uruchamianie usugi, nadawanie komunikatu itp.
moe by jawna lub niejawna
wykorzystywana przez aplikacje lub przez system do powiadamiana rnych
skadnikw aplikacji o zdarzeniach
dla aktywnoci i usug intencja definiuje akcj do wykonania (MAIN, VIEW, PICK,
EDIT) i dane do przetworzenia (identyfikator URI danych), dla odbiornikw
komunikatw definiuje rozgaszany komunikat
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

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

Dostawca treci (content provider):


abstrakcyjne rdo danych (dostawca lub adresat usug REST)
zapewnia dostp do skadowanych danych (system plikw, baza SQLite,
sie), umoliwia odczyt i zapis danych
umoliwia wspdzielenie danych midzy aplikacjami

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 21

Struktura katalogw projektu aplikacji

kod rdowy
aplikacji

klasa R (identyfikatory zasobw)

dane aplikacji (nie-zasoby)


Programowanie w systemie Android

kod bajtowy dla Dalvik VM

archiwum APK aplikacji


(wersja dystrybucyjna)

zasoby aplikacji

deskryptor aplikacji

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 22

Struktura katalogw projektu aplikacji elementy skadowe aplikacji


dowolne dane (nieskompresowane) dostpne przez AssetManager
/assets
metod getAssets(), nie traktowane jak zasoby, moliwe podkatalogi
/bin pliki binarne *.class, *.dex, *.apk
/gen pliki generowane (plik R.java) posegregowane na pakiety
/res zasoby aplikacji
/res/anim opisy animacji (np. plik animation1.xml)
/res/drawable-xxx pliki obrazw, map bitowych dla aplikacji (np. plik ikony icon.png)
/res/layout opis ekranw (widokw) i rozkadu UI (plik main.xml)
Programowanie w systemie Android

/res/menu pliki opisujce listy menu


/res/raw dodatkowe pliki danych, nieskompresowane (niekompilowane)
opis napisw, kolorw, wymiarw, stylw (pliki strings.xml,
/res/values
colors.xml, dimens.xml, styles.xml, values.xml)
/res/xml dodatkowe, wasne pliki XML (kompilowane)
/src pliki rdowe *.java posegregowane na pakiety
plik deskryptora aplikacji, definiuje wszystkie wystpujce w aplikacji
AndroidManifest.xml aktywnoci, usugi, dostawcw treci, adresatw intencji, odbiorniki
komunikatw, uprawnienia dla aplikacji
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 23

Cykl ycia aplikacji


Cykl ycia aplikacji zwizany jest z cyklem ycia jego aktywnoci.
W zalenoci od dziaa podejmowanych przez uytkownika (ukrywanie, przywracanie,
zatrzymywanie, zamykanie okien aktywnoci), aktywno zmienia stan
i automatycznie uruchamiana jest przez system odpowiednia metoda cyklu ycia
aktywnoci (cyklem zarzdza system Android).
metoda przeznaczenie
onCreate() pierwsze utworzenie aktywnoci: inicjalizacja, tworzenie interfejsu uytkownika
Programowanie w systemie Android

onStart() uruchomienie aktywnoci


onResume() na pierwszym planie, przejcie ze stanu PAUSED do stanu dziaania RESUMED
wstrzymanie aktywnoci (stan PAUSED), gdy inna aktywno przechodzi na
onPause() pierwszy plan (bieca aktywno jest widoczna, ale czciowo zasonita).
Ostatnia bezpieczna metoda wywoywana przed zamkniciem aplikacji.
ponowne uruchomienie aktywnoci (przywrcenie na pierwszy plan),
onRestart()
przejcie ze stanu STOPPED do stanu dziaania
onStop() aktywno na drugim planie (stan STOPPED, wicej ju niewidoczna)
onDestroy() usuwanie i zakoczenie dziaania aktywnoci

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 24

pocztek aktywnoci
Cykl ycia Aktywno jest uruchamiana

aktywnoci
onCreate()
uytkownik ponownie
wywouje aktywno
onStart() onRestart()

Proces aplikacji aktywno przechodzi


onResume() na pierwszy plan
zostaje zabity

Aktywno dziaa (jest widoczna) aktywno


Programowanie w systemie Android

inna aktywno przechodzi przechodzi


na pierwszy plan na pierwszy
inna aplikacja onPause() plan
da pamici aktywno nie jest ju
W pierwszej kolejnoci usuwane wicej widoczna
s aplikacje o niskim priorytecie, onStop()
np. usuga dziaajca w tle ma Aktywnoci obsugiwane s na stosie:
wyszy priorytet ni aktywno ostatnio uruchomiona aktywno jest
znajdujca si na dnie stosu. na wierzchoku stosu, wstrzymane i
onDestroy() zatrzymane s na stosie niej.

Aktywno jest zakoczona koniec aktywnoci

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

szablon aplikacji, skadajcy si m.in. z nastpujcych plikw:


plik Hello.java (kod rdowy gwnej klasy) kod rdowy aplikacji
plik AndroidManifest.xml (deskryptor aplikacji) deskryptor aplikacji
plik R.java (kod klasy R, identyfikatory zasobw)
pliki main.xml (gwny plik zasobw, opis i definicja UI) pliki zasobw
plik strings.xml (dodatkowe zasoby: napisy)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 26

Kod rdowy gwnej klasy aplikacji (plik Hello.java)


Najprostsza, przykadowa aplikacja wywietla napis na ekranie urzdzenia. Dziaanie
aplikacji rozpoczyna si od tzw. aktywnoci pocztkowej.

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

public class Hello extends Activity


rozpoczyna dziaanie
{
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); identyfikator main
setContentView(R.layout.main); zasobw
}
} wywietlenie ukadu zdefiniowanego identyfikatorem
main jako interfejsu w aktywnoci Hello

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

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

android:icon="@drawable/ic_launcher" ikona aplikacji


android:label="@string/app_name" > nazwa aplikacji
<activity
android:label="@string/app_name"
android:name=".Hello" >
deklaracja <intent-filter > filtr intencji dla aktywnoci
aktywnoci <action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity> Okrelenie aktywnoci pocztkowej: po uruchomieniu aplikacji
</application> odczytywany jest plik manifestu, wyszukiwane s i uruchamiane
</manifest> aktywnoci o akcji MAIN i kategorii LAUNCHER.
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 28

Plik AndroidManifest.xml wzy


<manifest> gwny wze pliku: musi zawiera wze <application> i pola
xlmns:android (przestrze nazw Android) i package (nazwa pakietu aplikacji)
<supports-screens> okrela wymagane rozmiary ekranu (small, normal,
large, extra large) i rozdzielczo (low, medium, high, extra high)
<uses-permission> okrela uprawnienia, ktre musz by udzielone aplikacji
w czasie instalacji, konieczne do prawidowego dziaania
<uses-sdk> okrela kompatybilno aplikacji z wersjami Android
Programowanie w systemie Android

(minimalna wymagana wersja API)


<uses-feature> okrela wymagania sprztowe (aparat, Bluetooth itp.)
<application> deklaruje aplikacj, opisuje jej waciwoci, zawiera wzy:
<activity> deklaruje aktywno mog posiada wasne
<service> deklaruje usug filtry intencji
<intent-filter>
<receiver> deklaruje odbiornik komunikatw okrelajce, ktre intencje
<provider> deklaruje dostawc treci bd obsugiwane
<uses-library> deklaruje uycie dodatkowych bibliotek
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 29

Plik AndroidManifest.xml uprawnienia aplikacji


W zalenoci od specyfiki dziaania aplikacji, konieczne moe by przydzielenie dla
niej odpowiednich uprawnie w pliku deskryptora aplikacji.
Okrelanie uprawnie w rodowisku Eclipse: w drzewie projektu wybr pliku
AndroidManifest.xml zakadka Permissions przycisk Add... wybr z listy
polecenia Uses Permission i kliknicie przycisku OK z listy rozwijanej Name
wybr uprawnienia android.permission.NAZWA_UPRAWNIENIA.
Wybrane, przykadowe uprawnienia:
Programowanie w systemie Android

READ_CONTACTS, WRITE_CONTACTS uprawnienia do odczytu/zapisu listy kontaktw


READ_CALENDAR, WRITE_CALENDAR uprawnienia do odczytu/zapisu danych
uytkownika z kalendarza
READ_SMS, WRITE_SMS uprawnienia do odczytu/zapisu wiadomoci SMS
RECEIVE_SMS, SEND_SMS uprawnienia do odbioru i wysyania wiadomoci SMS
INTERNET uprawnienie do tworzenia pocze sieciowych na bazie gniazdek
BLUETOOTH uprawnienie do czenia si z urzdzeniami Bluetooth
CAMERA uprawnienie do obsugi aparatu fotograficznego
BATTERY_STATS uprawnienie do zbierania statystyk dotyczcych baterii

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 30

Gwny plik zasobw main.xml


Wze TextView opisuje waciwoci elementu interfejsu uytkownika
(etykieta tekstowa).
Ukad graficzny interfejsu zdefiniowany w pliku XML jest adowany do
okna aktywnoci Hello.
standardowy nagwek rozpoczynajcy plik XML

<?xml version="1.0" encoding="utf-8"?> przestrze nazw XML


Programowanie w systemie Android

<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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 31

Gwny plik zasobw main.xml


Dodany wze LinearLayout opisuje liniowy ukad interfejsu
uytkownika.

<?xml version="1.0" encoding="utf-8"?>

<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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 32

Plik zasobw strings.xml

Dodatkowy plik zasobw przechowuje napisy w wzach <string>.


Waciwo name to identyfikator napisu.

<?xml version="1.0" encoding="utf-8"?>


Programowanie w systemie Android

<resources> napis o identyfikatorze hello

<string name="hello">Hello World, Prog1Activity!</string>


<string name="app_name">Prog1</string>

</resources> napis o identyfikatorze app_name

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 33

Kod rdowy klasy R (plik R.java)


package org.przyklad.prog1; Generowana automatycznie klasa R zawiera
identyfikatory zasobw aplikacji z katalogu /res.
public final class R
Dla kadego rodzaju zasobw tworzona jest klasa
{ wewntrzna: drawable, layout, string itd.
public static final class attr
{ } Identyfikatory zasobw maj posta staych
typu int. Odpowiadaj zasobom, elementom
public static final class drawable zdefiniowanym w plikach XML lub plikom.
{
public static final int ic_launcher = 0x7f020000;
}
Programowanie w systemie Android

public static final class layout


{
public static final int main = 0x7f030000;
}
identyfikator pliku
public static final class string main.xml
{
public static final int app_name = 0x7f040001;
public static final int hello = 0x7f040000;
}
} identyfikatory zasobw z pliku strings.xml

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 34

Najprostsza aplikacja uruchomiona w emulatorze


nazwa
aplikacji
klawisze
funkcyjne
napis urzdzenia
wywietlany
w etykiecie klawisz BACK
TextView (powrt,
zamknicie
aplikacji)
Programowanie w systemie Android

klawisz MENU
urzdzenia
ekran
emulowanego
urzdzenia

klawiatura
alfanumeryczna

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 35

Najprostsza aplikacja uruchomiona w emulatorze


Programowanie w systemie Android

aplikacja dziaajca
na ekranie urzdzenia

ikona aplikacji
zainstalowana
w menu
urzdzenia

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 36

Emulator systemu Android


Emulator to wirtualne urzdzenie AVD (Android Virtual Device)
pozwalajce na uruchomienie aplikacji bez koniecznoci
instalowania jej w urzdzeniu mobilnym.
W rodowisku IDE moliwe jest tworzenie wielu emulatorw o rnych
parametrach, dla rnych wersji sytemu Android (patrz wiczenie 1).
Charakterystyka emulatora:
Programowanie w systemie Android

naladuje wikszo funkcji urzdzenia dziki technologii emulacji


procesora (QEMU) na poziomie jednostki centralnej
symulowany jest 32-bitowy tryb ARM (Advanced RISC Machine) na tak
symulowanym procesorze uruchamiany jest Linux i platforma Android
ograniczenia emulatora: poczenia USB i Bluetooth, wykonywanie zdj
aparatem fotograficznym, nagrywanie wideo, obsuga suchawek,
symulacja baterii.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Budowa aplikacji
Strona 37

Instalacja aplikacji w urzdzeniu mobilnym


W celu instalacji i uruchomienia aplikacji, do urzdzenia naley przenie plik
*.apk (Android Package) dostpny w katalogu bin projektu. Plik ten
zawiera kod wykonywalny aplikacji oraz jej zasoby.
W trakcie instalacji aplikacji nadawane s uprawnienia wymagane do jej
prawidowego dziaania (patrz strona 29).
Aplikacj mona zainstalowa kilkoma metodami:
metoda 1 (najwygodniejsza dla programistw): uycie rodowiska Eclipse
Programowanie w systemie Android

metoda 2 (najprostsza): uycie karty pamici i menadera plikw


dostpnego w urzdzeniu
metoda 3: instalacja przy uyciu Android SDK
metoda 4: instalacja przy uyciu aplikacji AndroidCommander dla PC
metoda 5: uycie przegldarki internetowej w urzdzeniu
Wszystkie metody instalacji opisane s w wiczeniu 5.
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 38

Koncepcja zasobw w systemie Android


Interfejs uytkownika w kodzie Java
Interfejs uytkownika w kodzie XML
Programowanie w systemie Android

Odniesienia do zasobw
Rodzaje zasobw

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 39

Koncepcja zasobw w systemie Android


W systemie Android zasoby s deklaracyjne, tzn. definiowane przy uyciu
plikw XML.
Kod aplikacji (warstwa logiki) jest odseparowany od zasobw (warstwa
prezentacji). Separacja umoliwia modyfikacj zasobw bez koniecznoci
wprowadzania zmian w kodzie rdowym aplikacji lub ponownej
kompilacji. Uycie alternatywnych zestaww zasobw uatwia rwnie
obsug ekranw o rnych rozdzielczociach i lokalizacj aplikacji
(tworzenie wersji jzykowych).
Programowanie w systemie Android

Dla kadego zasobu automatycznie generowany jest identyfikator.


Identyfikatory tworzone s przez kompilator zasobw AAPT (Android Asset
Packaging Tool) i przechowywane w automatycznie generowanej klasie R
(patrz strona 33).
Jakiekolwiek modyfikacje zasobw w plikach XML (katalog /res projektu)
powoduj automatycznie odpowiednie zmiany i aktualizacje w klasie R
(plik R.java).
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 40

Interfejs uytkownika w kodzie Java


Interfejs UI aplikacji mona tworzy metod programow w kodzie Java.
package org.przyklad.prog1; plik Hello.java
import android.app.Activity;
import android.os.Bundle; Metoda niezalecana
import android.widget.TextView;

public class Hello extends Activity


Programowanie w systemie Android

{
@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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 41

Interfejs uytkownika w kodzie XML


Moliwe jest rwnie tworzenie interfejsu UI metod deklaracyjn, przy
uyciu zasobw w plikach XML.

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" />

napis wywietlany w kontrolce


TextView

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 42

Interfejs uytkownika Metoda zalecana


Zalecane jest stosowanie metody hybrydowej: deklaracyjne tworzenie interfejsu
w plikach XML i stosowanie odnonikw w kodzie Java. Naley zatem utworzy
odnoniki do elementu TextView i do jego napisu, wykorzystujc identyfikatory
tych elementw.
<?xml version="1.0" encoding="utf-8"?> plik /res/layout/main.xml
<TextView
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/tv1" kontrolka TextView ma
android:layout_width="fill_parent" identyfikator tv1 poprzez
Programowanie w systemie Android

android:layout_height="wrap_content" ktry odwoujemy sie do


android:text="@+string/powitanie" /> niej w kodzie

public void onCreate(Bundle savedInstanceState) plik Hello.java


{
super.onCreate(savedInstanceState); wczytanie zasobw przed
setContentView(R.layout.main); uyciem findViewById
TextView tv = (TextView) findViewById(R.id.tv1);
}
napis ustalony w pliku strings.xml odwoanie sie do kontrolki zdefiniowanej
jako identyfikator powitanie w XML (metoda findViewById)
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 43

Skadnia odnonika do zasobu


Odnonik do zasobu wie zasb zdefiniowany w pliku XML z jego
identyfikatorem.
Oglnie: @[pakiet:][+]typ/identyfikator
Przykad: @android:+string/napis
@+string/napis
@string/napis
Programowanie w systemie Android

pakiet nazwa pakietu (brak oznacza pakiet lokalny)


+ opcjonalny, oznacza, e identyfikator zostanie utworzony
jeeli jeszcze nie istnieje
typ rodzaj zasobu, okrelany przez przestrze nazw R.string ,
R.layout, R.id, R.drawable lub R.attr (klasy wewn. R)
identyfikator identyfikator (nazwa) zasobu (bdzie sta typu int
w pliku R.java)
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

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 image obrazy graficzne


zasoby color-drawable kolorowe obiekty do narysowania
wasne pliki XML (xml)
wasne pliki nieskompresowane (raw)
Pliki dodatkowe (assests) nie s traktowane jako zasoby.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 45

Zasoby string napisy


Napisy definiowane s w pliku /res/values/strings.xml (nazwa pliku
dowolna). W gwnym wle <resources> umieszczane s elementy
podrzdne <string> definiujce napisy.
Identyfikatory napisw s dostpne w przestrzeni nazw R.string.*
<?xml version="1.0" encoding="utf-8"?> plik strings.xml
<resources>
<string name="hello">Hello World, Prog1Activity!</string>
<string name="app_name">Prog1</string>
Programowanie w systemie Android

</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.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 46

Zasoby string napisy


Napisy definiowane w zasobach mog wykorzystywa mechanizmy
formatowania cigw znakw Java oraz wybrane znaczniki HTML.
<?xml version="1.0" encoding="utf-8"?> identyfikatory plik strings.xml
<resources> napisw
<string name="napis1">Prosty cig znakw</string>
<string name="napis2">Cytat w cudzysowie</string>
<string name="napis3">\Inny przykad cytatu\</string>
<string name="napis4">My name is %2$s. %1$s %2$s</string>
<string name="napis5">To jest <b><i>gruby ukonik<i><b></string>
Programowanie w systemie Android

</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

<TextView android:text="@string/napis5"/> plik main.xml

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 47

Zasoby layout ukady graficzne


Ukady graficzne (wygldy ekranw) definiowane s w pliku
/res/layout/main.xml. Dla kadego ekranu aplikacji naley
zdefiniowa oddzielny plik ukadu graficznego (nazwy plikw dowolne).
<?xml version="1.0" encoding="utf-8"?> plik main.xml
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
UWAGA: od wersji API 8 (Android 2.2)
android:layout_height="fill_parent"
zamiast staej fill_parent mona
android:orientation="vertical" >
stosowa sta match_parent
Programowanie w systemie Android

<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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 48

Zasoby layout ukady graficzne


Dla identyfikatorw elementw interfejsu tworzona jest w klasie R wewntrzna
klasa id.
public final class R plik R.java
{
.....
public static final class id
{
public static final int tv1 = 0x7f050000;
public static final int przycisk1 = 0x7f050001;
Programowanie w systemie Android

}
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);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 49

Zasoby color kolory


Kolory definiowane s w pliku /res/values/colors.xml (nazwa
dowolna) w wzach <color>. Identyfikatory kolorw s dostpne
w przestrzeni nazw R.color.*. Podstawowy zestaw kolorw jest
zdefiniowany domylnie w przestrzeni nazw android.R.color.
<?xml version="1.0" encoding="utf-8"?> plik colors.xml
<resources>
<color name="czerwony">#ff0000</color>
<color name="zielony">#00ff00</color>
Programowanie w systemie Android

<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

<TextView plik main.xml


android:layout_width="fill_parent"
android:layout_height="wrap_content"
odnonik do zasobu
android:textColor="@color/czerwony"
w kodzie XML
android:text="@string/powitanie" />

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 50

Zasoby dimension wymiary


Wymiary stosowane s do rozmieszczania elementw interfejsu uytkownika
i do tworzenia stylw. Definiowane s w wzach <dimen> w pliku
/res/values/dimens.xml (nazwa pliku dowolna).
Identyfikatory wymiarw s dostpne w przestrzeni nazw R.dimen.*
Rodzaje wymiarw:
piksele (px) fizyczne piksele ekranu
Programowanie w systemie Android

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

Zasoby dimension wymiary


<?xml version="1.0" encoding="utf-8"?> plik dimens.xml
<resources>
<dimen name="rozmiar_w_pikselach">20px</dimen>
<dimen name="rozmiar_w_dp">5dp</dimen>
<dimen name="rozmiar_sredni">100sp</dimen>
</resources>

odnonik do zasobu
float size; w kodzie Java kod Java
Programowanie w systemie Android

size=activity.getResources().getDimension(R.dimen.rozmiar_w_dp);

<TextView plik main.xml


android:layout_width="fill_parent"
android:layout_height="wrap_content" odnonik do zasobu
android:textSize="@dimen/rozmiar_w_pikselach" w kodzie XML
android:text="@string/powitanie" /> waciwoci rozmiarw
akceptuj wymiary podawane
w rnych jednostkach
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 52

Zasoby image obrazy


Obsugiwane s formaty obrazw GIF, JPG, PNG.
Kady obraz umieszczony w katalogu /res/drawable otrzymuje identyfikator
tworzony na podstawie nazwy pliku (np. plik o nazwie obrazek.jpg otrzyma
identyfikator zasobu R.drawable.obrazek).
Identyfikatory obrazw s dostpne w przestrzeni nazw R.drawable.*
<Button plik main.xml
android:id="@+id/przycisk1"
android:layout_width="fill_parent"
Programowanie w systemie Android

odnonik do zasobu
android:layout_height="wrap_content" w kodzie XML
android:text="@+string/powitanie"
android:background="@drawable/obrazek" />

BitmapDrawable bd; kod Java


bd = activity.getResources().getDrawable(R.drawable.obrazek);
// to przycisku pobrane z obiektu bitmapy: odnonik do zasobu
przycisk.setBackgroudDrawable(bd); w kodzie Java
// to przycisku pobrane bezporednio z zasobu:
przycisk.setBackgroudResource(R.drawable.obrazek);
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 53

Zasoby color-drawable kolorowy obiekt


Kolorowy obiekt rysowany (color-drawable) to prostokt wypeniony kolorem.
Uywany jest jako to widokw lub zwyky element do narysowania. Moe
by zdefiniowany w dowolnym pliku XML w katalogu /res/values lub
/res/drawable, przy uyciu wza <drawable>. Identyfikatory obiektw
s dostpne w przestrzeni nazw R.drawable.*
<?xml version="1.0" encoding="utf-8"?> dowolny plik xml
<resources>
<drawable name="czerwony_prostokat">#ff0000</drawable>
<drawable name="zielony_prostokat">#00ff00</drawable>
Programowanie w systemie Android

<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" />

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 54

Zasoby wasne pliki XML


Pliki umieszczone w katalogu /res/xml mog zawiera dodatkowe zasoby.
Pliki te s kompilowane do postaci binarnej przez kompilator AAPT.
Identyfikatory zasobw s dostpne w przestrzeni nazw R.xml.*
<rootlelem1> plik test.xml
<subelem1>
Napis Witaj z podelementu XML
</subelem1>
</rootlelem1>
Resources res = activity.getResources(); dostp do pliku poprzez
Programowanie w systemie Android

XmlResourceParser xpp = res.getXml(R.xml.test); jego identyfikator zasobu


xpp.next();
int ev = xpp.getEventType();
while (ev != XmlPullParser.END_DOCUMENT) Zarys metody odczytu pliku XML
{
switch (ev) // typy zdarze z klasy XmlPullParser
{
// ... uycie dla obiektu xpp metod getName(), getText()
// ... zapis do obiektu klasy StringBuffer metod append
}
ev = xpp.next();
}
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 55

Zasoby wasne pliki nieskompresowane (raw)


Pliki binarne lub tekstowe (nieskompresowane) umieszczone w katalogu
/res/raw mog zawiera dodatkowe zasoby (audio, video, tekstowe itp.).
Kady plik otrzymuje identyfikator zasobu. Pliki nie s kompilowane s
umieszczane w pakiecie APK w niezmienionej postaci.
Identyfikatory zasobw s dostpne w przestrzeni nazw R.raw.*
Metoda odczytu danych z tych plikw zaley od ich zawartoci.
// przykad odczytu pliku tekstowego dostp do pliku
Programowanie w systemie Android

Resources res = activity.getResources(); poprzez jego


InputStream is = res.openRawResource(R.raw.test); identyfikator
String s = convertStreamToString(is); zasobu
is.close();
String convertStreamToString(InputStream is)
{
ByteArrayOutputStream baos = new ByteArrayOutputStream();
int i = is.read();
while (i != -1) { baos.write(i); i = is.read(); }
return baos.toString();
}
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Zasoby aplikacji
Strona 56

Pliki dodatkowe (assets)


Pliki nieskompresowane umieszczone w katalogu /assets mog zawiera
dodatkowe dane. Pliki te nie s traktowane jak zasoby, dlatego nie s dla
nich generowane identyfikatory zasobw.
Moliwe jest tworzenie struktury podkatalogw w katalogu /assets
(w przeciwiestwie do podkatalogw katalogu /res).
Dostp do plikw naley uzyska podajc ciek relatywn wzgldem
katalogu /assets.
Programowanie w systemie Android

Odczyt plikw realizowany jest przy pomocy klasy AssetManager i metody


getAssets().

// przykad odczytu pliku tekstowego


AssetManager am = activity.getAssets(); dostp do pliku poprzez nazw
InputStream is = am.open(test.txt);
String s = convertStreamToString(is); // patrz poprzedni slajd
is.close();

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 57

Koncepcja dostawcy treci


Rejestrowanie dostawcy treci
Identyfikatory URI
Kursor treci
Odczyt danych
Zapis danych
Programowanie w systemie Android

Pojcie intencji
Wykorzystanie intencji
Intencje predefiniowane
Kategorie i akcje intencji
Adaptery
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 58

Koncepcja dostawcy treci


Dostawca treci to obiekt udostpniajcy rdo danych. Przykadem rda
danych umieszczonego w dostawcy treci jest baza danych SQLite
(dostawca treci opakowuje baz).
Dostawcw treci uywa sie do udostpniania danych na zewntrz aplikacji
lub do wymiany (wspdzielenia) danych pomidzy aplikacjami.
Przykady dostawcw treci (bazy danych SQLite *.db) w systemie Android:
Browser (przegldarka)
Programowanie w systemie Android

CallLog (dziennik pocze)


Contacts (kontakty) tabele People, Phones, Photos, Groups,
Settings (ustawienia)
MediaStore (multimedia): Audio: tabele Albums, Artists, Genres, Playlists
Images
Video
Calendar (kalendarz) od wersji 4.0
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 59

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

unikalne id w tabeli, suy take do czenia danych z rnych tabel

Dostawca treci Contacts, tabela People (dane osobiste) wybrane kolumny


_ID NAME NOTES STARRED TIMES_CONTACTED
5 Jan Kowalski szwagier true 10
11 Jan Nowak kierownik biura true 0
14 Jan Malinowski agent ubezpieczeniowy false 2
21 Jan Jankowski znajomy z pracy false 5

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 60

Rejestrowanie dostawcy treci


Dostawca treci jest rejestrowany w aplikacji przy pomocy unikalnej nazwy
(tzw. upowanienia), podobnej do adresu strony www.
Rejestracja dostawcy treci odbywa si w pliku AndroidManifest.xml
w wle <provider>:
upowanienie
<provider android:name="NaszDostawca"
android:authorities="com.politechnika.NaszDostawca" />
<provider android:name="NotePadProvider"
Programowanie w systemie Android

android:authorities="com.google.provider.NotePad" />

Dostp do danych udostpnianych przez dostawc treci uzyskuje si


poprzez identyfikator URI (patrz strona 61).
Dostawca treci zwraca typ i podtyp MIME dla identyfikatora URI:
dla pojedynczego rekordu
vnd.android.cursor.item/vnd.google.note
vnd.android.cursor.dir/vnd.google.note
dla zbioru rekordw

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 61

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 pozwalaj odwoa si do caej tabeli lub do wybranego rekordu:


content://com.google.provider.NotePad/Notes identyfikator zbioru notatek
content://com.google.provider.NotePad/Notes/5
identyfikator notatki nr 5
Programowanie w systemie Android

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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 62

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

metody przesuwania/ustawiania kursora wykorzystuj indeksy kolumn przed


odczytem danych naley przeksztaci nazw kolumny w numer kolumny metod
getColumnIndex (metoda odwrotna: getColumnName)
kursor mona przesuwa do przodu, do tyu lub ustawia na dowoln krotk
(moveToNext, moveToPrevious, moveToFirst, moveToLast,
moveToPosition, move)
odczyt pozycji kursora: isFirst, isLast, isBeforeFirst, isAfterLast,
isClosed
odczyt liczby krotek: getCount

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 63

Odczyt danych (kwerenda)


odczyt rekordu nr 5
Odczyt pojedynczego wiersza nr 5 (wszystkie kolumny):
Uri ludzieUri = Contacts.People.CONTENT_URI;
Uri osobaUri = ludzieUri.withAppendedId(Contacts.People.CONTENT_URI, 5);
// lub: = ContentUris.withAppendedId(Contacts.People.CONTENT_URI, 5);
// lub: String osobaUri = content://contacts/people/5;
// kwerenda dla rekordu (metoda 1, zalecana):
Cursor c = activity.managedQuery(osobaUri, null, null, null, null);
// kwerenda dla rekordu (metoda 2):
ContentResolver cr = activity.getContentResolver();
Cursor c = cr.query(osobaUri, null, null, null, null);
Programowanie w systemie Android

moliwe czenie tabel


Odczyt wszystkich wierszy (tylko wybrane kolumny) :
String[] kol = new String[] { People._ID, People.NAME, People.NUMBER };
Uri ludzieUri = Contacts.People.CONTENT_URI;
identyfikator URI dostawcy treci
Cursor c = activity.managedQuery(ludzieUri, nazwy zwracanych kolumn
kol, (null to zwracanie wszystkich)
argumenty selekcji null,
null, klauzula where opisuje ktre zwraca
kolejno sortowania wierszy wiersze (null to wszystkie)
(ASC to rosnca) Contacts.People.NAME + ASC);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 64

Obsuga kursora treci


Do obsugi kursora treci najwygodniej jest wykorzysta ptl do-while:
Cursor c = activity.managedQuery(People.CONTENT_URI, wynik, null, null,
People.NAME + ASC);
utworzenie kursora treci
if (c.moveToFirst() == true) // kursor zawiera dane
{
sprawdzenie, czy kursor jest niepusty
String nazwa, nrtel;
int nazwakol = c.getColumnIndex(People.NAME); indeksy kolumn na
int nrtelkol = c.getColumnIndex(People.NUMBER); podstawie ich nazw
Programowanie w systemie Android

do moliwe czenie tabel!


{
nazwa = c.getString(nazwakol);
nrtel = c.getString(nrtelkol); odczyt danych
// przetwarzanie odczytanych danych...
} while (c.moveToNext());
} przesuwanie kursora na kolejne rekordy
else
// kursor jest pusty, brak danych

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 65

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();

// dodanie nowego wiersza, uri to identyfikator nowego rekordu


Uri uri = cr.insert(People.CONTENT_URI, wartosc);

// aktualizacja rekordw, n to liczba zaktualizowanych rekordw


int n = cr.update(People.CONTENT_URI, wartosc, null, null);
klauzula where:
// usuwanie rekordw, n - liczba usunitych rekordw null wszystkie krotki
n = cr.delete(People.CONTENT_URI, null, null); new String[]{5,11}
Uri uri = Uri.withAppendedPath(People.CONTENT_URI, 5); // rekord nr 5
n = cr.delete(uri, null, null);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 66

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

nazwa akcji intencji


dane dla intencji (identyfikator URI danych)
kategoria intencji
w przypadku braku decyzji system wywietla list aktywnoci i umoliwia wybr
Do uruchamiania aktywnoci su metody:
startActivity uruchomienie aktywnoci w oddzielnym wtku, w postaci
modalnego okna (wywoanie asynchroniczne, bez wywoa zwrotnych)
startActivityForResult j.w. ale z wywoaniem zwrotnym (onActivityResult)
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 67

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

<category android:name="android.intent.category.DEFAULT" />


</intent-filter>
</activity> android.intent.action.MAIN
android.intent.category.LAUNCHER
Uycie intencji do wywoania aktywnoci:
public static void wywolajAplikacje(Activity parentActivity)
{
String akcja = org.przyklad.intent.action.PokazWidok;
Intent intencja = new Intent(akcja);
parentActivity.startActivity(intencja); uruchomienie aktywnoci
}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 68

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

com.android.contacts, nazw pakietu z nazw klasy


com.android.contacts.DialContactsEntryActivity);
startActivity(intencja);

Przykad 2: uruchomienie aktywnoci za pomoc nazwy klasy aktywnoci


// tzw. intencja bezporednia:
Intent intencja = new Intent(activity, Hello.class);
activity.startActivity(intencja);
aktywno bieca, np. this
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 69

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

AKCJA dane (identyfikator URI) opis


ACTION_VIEW http://www.google.com uruchomienie przegldarki www
ACTION_WEB_SEARCH http://www.google.com uruchomienie wyszukiwania www
ACTION_DIAL brak danych i metody setData klawiatura do wpisywania numeru
ACTION_CALL tel:601-601-601 poczenie z numerem telefonu
ACTION_VIEW geo:lat,long?z=zoom wywietlenie mapy dla wsp. lat, long

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 70

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

CATEGORY_HOME aktywno jest ekranem pocztkowym


CATEGORY_LAUNCHER wywietlana na ekranie pocztkowym systemu
aktywno odpowiedzialna za ustawienia, wywietlana
CATEGORY_PREFERENCE
na ekranie ustawie
aktywno alternatywna, do wyboru z listy dostpnych
CATEGORY_SELECTED_ALTERNATIVE
aktywnoci (np. wybr edytora, przegldarki itp.)
CATEGORY_TAB moliwa do osadzenia w okrelonej aktyw. nadrzdnej
CATEGORY_TEST aktywno testowa (dawniej CATEGORY_EMBED)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 71

Akcje dla intencji


Intencje podzielone s rwnie ze wzgldu na akcje.
Podczas uruchamiania aplikacji wyszukiwane s aktywnoci o akcji
ACTION_MAIN (android.intent.action.MAIN).

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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 72

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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 73

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);

Tworzenie adaptera (przykad 2): identyfikator zasobw


Spinner sp = (Spinner) findViewById(R.id.spinner1);
Programowanie w systemie Android

adapter = ArrayAdapter.createFromResource(this, R.array.planety,


android.R.layout.simple_spinner_item);
adapter.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_item);
sp.setAdapter(adapter); <string-array name="planety">
<item>Merkury</item>
<item>Wenus</item>
<item>Ziemia</item>
<item>Mars</item>
<item>Jowisz</item> dane kontrolki Spinner pochodz
<item>Saturn</item> z zasobw string-array
<item>Uran</item>
<item>Neptun</item>
</string-array>
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 74

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

layout identyfikator zasobu widoku potomnego (XML)


c kursor treci
from tablica zawierajca nazwy kolumn, ktre maj zosta wczytane
(kada kolumna jest mapowana do kontrolki TextView)
to tablica zawierajca identyfikatory zasobw kontrolek TextView

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Dostawcy treci, intencje i adaptery


Strona 75

Adapter SimpleCursorAdapter
Adapter SimpleCursorAdapter przeksztacajcy dane na list ListView
zawierajc elementy TextView.

ListView

TextView Dane dla kontrolki-pojemnika


Dane dla wiersza 0
TextView
Programowanie w systemie Android

Dane dla wiersza 1


TextView SimpleCursorAdapter Dane dla wiersza 2
Dane dla wiersza 3
TextView
R.layout.widok_potomny Dane dla wiersza 4
TextView

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 76

Koncepcja interfejsu uytkownika

Hierarchia klas kontrolek

Kontrolki tekstu

Kontrolki przyciskw

Kontrolki pl wyboru

Kontrolka listy
Programowanie w systemie Android

Kontrolka siatki

Kontrolki daty i czasu

Dodatkowe kontrolki

Toast
MapView
Gallery
Spinner
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 77

Koncepcja interfejsu uytkownika

Podstawowe skadniki budulcowe interfejsu uytkownika:


widok (view) = widget = kontrolka
podstawowy element interfejsu uytkownika
niewielki zestaw predefiniowanych kontrolek
pojemnik = kontener
Programowanie w systemie Android

widok sucy do przechowywania innych widokw


ukad graficzny (layout)
plik XML opisujcy widok
ukad graficzny zarzdza rozmieszczeniem kontrolek wewntrz
pojemnika

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 78

Koncepcja interfejsu uytkownika


Interfejs uytkownika (UI) moe by tworzony dwoma metodami:
metoda programowa (niezalecana)
UI definiowany bezporednio w kodzie rdowym Java
mae zmiany w UI mog pociga za sob konieczno duych
zmian w kodzie rdowym
trudnoci w wizaniu i kojarzeniu ze sob elementw UI
metoda deklaracyjna (deklaratywna) (zalecana)
Programowanie w systemie Android

UI definiowany w oparciu o pliki XML zapisywane w urzdzeniu


w postaci binarnej (kompilowane narzdziem AAPT Android Asset
Packaging Tool)
struktura pliku XML ma posta drzewa elementw, w ktrym kady
wze opisuje waciwo elementu UI
metoda inspirowana modelem tworzenia aplikacji MVC
separacja warstwy prezentacji (widoku) od warstwy logiki (kodu): mona
zmienia wygld i zachowanie aplikacji poprzez edycj plikw XML

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 79

Hierarchia klas kontrolek


Podstaw kontrolek stanowi:
klasa android.view.View (widok oglnego przeznaczenia)
klasa android.widget.ViewGroup (klasa bazowa ukadw graficznych)
pakiet android.widget.*
Object

View Toast
Programowanie w systemie Android

AnalogClock TextView ImageView ViewGroup

ImageButton AdapterView

AbsListView AbsSpinner
EditText DigitalClock Button
ListView Gallery
AutoCompleteTextView CompoundButton
GridView Spinner
CheckBox
MultiAutoCompleteTextView ToggleButton RadioButton

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 80

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

password akceptowanie hasa


CharSequence getText() singleLine tekst wprowadzany w jednym wierszu
setText(CharSequence) style treci HTML: znaczniki <b> <i> <u> w zasobach kontrolki
style treci programowe: j.w. + przekrelenie, indeksy, to
pole edycyjne z podpowiedziami (uzupenianie caego tekstu);
AutoCompleteTextView do kontrolki przypisana jest lista sugestii (metoda setAdapter)
i sposb ich wywietlania
pole edycyjne z podpowiedziami (uzupenianie poszczeglnych
MultiAutoCompleteTextView wyrazw wprowadzanego tekstu); dodatkowo okrela si miejsce
wywietlania sugestii (metoda setTokenizer)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 81

Kontrolki tekstu
// programowe tworzenie kontrolki TextView
TextView tv = new TextView(this);
tv.setText(Witaj wiecie!);

// pobranie opisu kontrolki z zasobw


TextView tv = (TextView) this.findViewById(R.id.tv1);

// uycie klasy Linkify - tworzenie cza do treci kontrolki


// kliknicie cza wywouje odpowiedni intencj
TextView tv = (TextView) this.findViewById(R.id.tv1);
tv.setText(Odwied stron http://onet.pl); // uruchom. przegldarki
Programowanie w systemie Android

tv.setText(Zadzwo pod 112); // wybieranie numeru


Linkify.addLinks(tv, Linkify.ALL);

// pobranie opisu kontrolki EditText z zasobw i utworzenie stylu


EditText et = (EditText) this.findViewById(R.id.et1);
et.setText(Michael \Air\ Jordan); dla znakw 1012
czerwone to
Spannable span = et.getText();
span.setSpan(new BackgroundColorSpan(Color.RED, 10, 12, pogrubienie
Spannable.SPAN_EXCLUSIVE_EXCLUSIVE); i kursywa
span.setSpan(new StyleSpan(android.graphics.Typeface.BOLD_ITALIC),
10, 12, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 82

Kontrolki tekstu
// tworzenie podpowiedzi dla kontrolki AutoCompleteTextView
AutoCompleteTextView actv;
actv = (AutoCompleteTextView) this.findViewById(R.id.actv1);

ArrayAdapter<String> aa = new ArrayAdapter<String>(this,


android.R.layout.simple_dropdown_item_1line,
new String[] { Audi, Mercedes, Opel, Volkswagen });
lista podpowiedzi
actv.setAdapter(aa); umieszczona w adapterze
Programowanie w systemie Android

powizanie kontrolki
actv z podpowiedziami

Tworzenie podpowiedzi dla kontrolki MultiAutoCompleteTextView jest


analogiczne. Naley dodatkowo okreli miejsce wywietlania sugestii:
// tworzenie podpowiedzi dla kontrolki MultiAutoCompleteTextView
mactv.setTokenizer(new MultiAutoCompleteTextView.CommaTokenizer());
podpowiedzi wywietlane po wpisaniu przecinka

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 83

Kontrolki przyciskw

kontrolka opis
Button przycisk podstawowy, zawiera napis
ImageButton przycisk obrazkowy, zawiera obraz
CompoundButton przycisk dwustanowy, przecznik
Programowanie w systemie Android

przycisk dwustanowy, przecznik z dodatkow sygnalizacj:


ToggleButton wczony przycisk zawiera zielony pasek i napis "On
wyczony przycisk zawiera szary pasek i napis "Off

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 84

Kontrolka przycisku Button obsuga kliknicia (metoda 1)


<Button
android:id="@+id/przycisk1"
android:text="@+string/napis_przycisku"
android:typeface="serif"
android:textstyle="bold"
android:layout_width="fill_parent"
android:layotu_height="wrap_content" />
public class Test extends Activity implements OnClickListener
{
protected void onCreate(Bundle savedValues) interfejs
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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 85

Kontrolka przycisku Button obsuga kliknicia (metoda 2)


<Button
android:id="@+id/przycisk1"
android:text="@+string/napis_przycisku"
android:typeface="serif"
android:textstyle="bold"
android:layout_width="fill_parent" anonimowy obiekt
android:layotu_height="wrap_content" /> nasuchiwacza
Programowanie w systemie Android

Button btn = (Button) this.findViewById(R.id.przycisk1);


btn.setOnClickListener(new OnClickListener()
{ metoda setOnClickListener
public void onClick(View v) ustala obiekt nasuchiwacza: tutaj
{ tworzony dynamicznie
// wykonaj czynnoci gdy nacinito przycisk
// switch (v.getId()) .....
this.finish();
metoda onClick nasuchiwacza
}
});

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 86

Kontrolka przycisku Button obsuga kliknicia (metoda 3)


<Button
android:id="@+id/przycisk1"
android:text="@+string/napis_przycisku"
android:typeface="serif"
android:textstyle="bold"
android:layout_width="fill_parent" nazwa metody obsugi
android:layotu_height="wrap_content" kliknicia (od Android 1.6)
android:onClick="naszClickHandler" />
Programowanie w systemie Android

Button btn = (Button) this.findViewById(R.id.przycisk1);

public void naszClickHandler(View v)


{
switch(v.getId())
{
case R.id.przycisk1: ..... ; break;
case .....
} metoda naszClickHandler moe
rwnie obsugiwa inne kontrolki
}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 87

Kontrolka przycisku ImageButton wstawianie obrazka

Umieszczanie obrazka na przycisku w zasobach (waciwo src):


<ImageButton
android:id="@+id/przycisk2"
android:layout_width="wrap_content"
identyfikator zasobu
android:layotu_height="wrap_content" obrazka
android:src="@drawable/obrazek" />
Programowanie w systemie Android

Umieszczanie obrazka na przycisku dynamicznie (metod


setImageResource):
ImageButton btn;
btn = (ImageButton) this.findViewById(R.id.przycisk2);
btn.setImageResource(R.drawable.obrazek);
identyfikator zasobu
obrazka

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 88

Kontrolka przycisku ToggleButton zmiana stanu przycisku

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" />

Zmiana stanu przycisku po jego klikniciu sygnalizowana jest na przycisku


odpowiednim napisem i zielonym lub szarym paskiem.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 89

Kontrolka pl wyboru CheckBox


Kontrolka CheckBox to dwustanowe pole wyboru.
Tworzenie pl wyboru:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical" > pola wyboru bd
<CheckBox android:text="niadanie" ukadane liniowo w pionie
android:layout_width="wrap_content"
android:layotu_height="wrap_content" />
<CheckBox android:text="Obiad"
Programowanie w systemie Android

android:layout_width="wrap_content" opis pl wyboru


android:layotu_height="wrap_content" />
<CheckBox android:text="Kolacja"
android:layout_width="wrap_content" Obsuga w metodzie
android:layotu_height="wrap_content" /> onClick jak przycisk
</LinearLayout> Button (strona 84)

Stanem pola wyboru zarzdzaj metody setChecked() i toggle().


Metoda isChecked() zwraca stan pola.
Zdarzenie zwizane z zaznaczeniem lub odznaczeniem pola rejestruje si metod
setOnCheckedChangeListener() oraz implementujc interfejs
OnCheckedChangeListener i metod onCheckedChange().
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 90

Kontrolka pl wyboru RadioButton


Kontrolka RadioButton to pole jednokrotnego wyboru
(klasa android.widget.RadioButton).
Pola jednokrotnego wyboru s grupowane przy pomocy elementu
RadioGroup (klasa android.widget.RadioGroup) .
Element ten moe rwnie grupowa inne kontrolki.
Uwaga: zaznaczenia nie mona usun przez ponowne kliknicie pola
wyboru mona jedynie usun zaznaczenie wszystkich pl wyboru
Programowanie w systemie Android

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

Interfejs uytkownika elementy


Strona 91

Kontrolka pl wyboru RadioButton Obsuga w metodzie


onClick jak przycisk
Button (strona 84)
Tworzenie pl jednokrotnego wyboru:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
pola jednokrotnego
android:orientation="vertical" >
wyboru bd ukadane
<RadioGroup android:id="@+id/grupa_wzrost" liniowo w pionie
android:layout_width="wrap_content"
android:layotu_height="wrap_content"
android:orientation="vertical" >
Programowanie w systemie Android

<RadioButton android:id="@+id/pole1" android:text="Niski"


android:layout_width="wrap_content"
android:layotu_height="wrap_content" />

<RadioButton android:id="@+id/pole2" android:text="redni"


android:layout_width="wrap_content"
android:layotu_height="wrap_content" />

<RadioButton android:id="@+id/pole3" android:text="Wysoki" opis pl


android:layout_width="wrap_content" wyboru
android:layotu_height="wrap_content" />
</RadioGroup>
</LinearLayout>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 92

Kontrolka listy ListView


Kontrolka ListView to pionowa lista elementw.
Tworzenie listy polega na utworzeniu pliku
/res/layout/list_item.xml o przykadowej zawartoci:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal" >
Programowanie w systemie Android

<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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 93

Kontrolka listy ListView


klasa aktywnoci dziedziczca po ListActivity
Wypenianie listy kontaktami: (jej obiekt zawiera kontrolk ListView)
public class ListViewActivity extends ListActivity
{ lista kontaktw
private SimpleCursorAdapter adapter; pobrana z urzdzenia
@Override
protected void onCreate(Bundle savedInstaceState) wybr kolumny
{ NAME
super.onCreate(savedInstanceState);
Cursor c = getContentResolver().query(People.CONTENT_URI,
Programowanie w systemie Android

null, null, null, null);


startManagingCursor(c); mapowanie nazw
String[] cols = new String[] { People.NAME }; kontaktw na
int[] names = new int[] { R.id.row_tv }; elementy TextView
adapter = new SimpleCursorAdapter(this, R.layout.list_item,
c, cols, names); tworzenie adaptera dla kursora treci c
this.setListAdapter();
} metoda setListAdapter umieszcza dane na licie
} (kady wiersz listy ma zdefiniowany ukad graficzny XML)
Aplikacja wymaga nadania w deskryptorze uprawnienia
READ_CONTACTS (dostp do listy kontaktw urzdzenia).
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 94

Kontrolka siatki GridView


Kontrolka GridView umoliwia wywietlanie danych (tekst, rysunki itp.)
w siatce. Siatk definiuje si w pliku XML ukadu graficznego.
Tworzenie siatki polega na utworzeniu pliku /res/layout/gridview.xml
o przykadowej zawartoci:

<?xml version="1.0" encoding="utf-8"?>


<GridView xmlns:android="http://schemas.android.com/apk/res/android"
Programowanie w systemie Android

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" />

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 95

Kontrolka siatki GridView


Wypenianie siatki nazwami kontaktw (analogicznie do strony 93):
protected void onCreate(Bundle savedInstaceState)
{ wczytanie siatki do
super.onCreate(savedInstanceState); widoku aktywnoci
setContentView(R.layout.gridview);
GridView gv = (GridView) this.findViewById(R.id.siatka);

Cursor c = getContentResolver().query(People.CONTENT_URI,
null, null, null, null);
startManagingCursor(c);
Programowanie w systemie Android

String[] cols = new String[] { People.NAME };


int[] names = new int[] { android.R.id.text1 };

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

Aplikacja wymaga nadania w deskryptorze uprawnienia


READ_CONTACTS (dostp do listy kontaktw urzdzenia).
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 96

Kontrolki daty i czasu


kontrolka opis
DatePicker ustawienie lub wybr daty
TimePicker ustawienie lub wybr czasu
DatePickerDialog odpowiednik kontrolki daty w postaci okna dialogowego
TimePickerDialog odpowiednik kontrolki czasu w postaci okna dialogowego
AnalogClock zegar analogowy (wskazwka godzin i minut) tylko wywietlanie
DigitalClock zegar cyfrowy (godziny, minuty, sekundy) tylko wywietlanie
Programowanie w systemie Android

<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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 97

Kontrolki daty i czasu


Brak inicjalizacji kontrolek w kodzie powoduje ustawienie w nich biecej daty
i biecego czasu.
Programowa inicjalizacja kontrolek na wymagane wartoci:
protected void onCreate(Bundle savedInstaceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.dateTime);
Programowanie w systemie Android

DatePicker dp = (DatePicker) this.findViewById(R.id.datePicker);


// data 2011-12-01
int getDayOfMonth()
dp.init(2011, 12, 1, null);
int getMonth()
int getYear()
setCalendarViewShown(boolean)

TimePicker tp = (TimePicker) this.findViewById(R.id.timePicker);


// godzina 9:15
tp.setIs24HourView(true);
Integer getCurrentHour()
tp.setCurrentHour(new Integer(9)); Integer getCurrentMinute()
tp.setCurrentMinute(new Integer(15));
}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 98

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

utworzenie kontrolki czas wywietlania kontrolki:


LENGTH_SHORT krtki
LENGTH_LONG dugi
wywietlenie kontrolki

kontrolka Toast

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 99

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

Aktywno korzystajca z kontrolki musi dziedziczy po klasie MapActivity


(przetwarzanie wielowtkowych da adowania mapy, buforowanie itp.).
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 100

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" />

Obsuga kontrolki jest podobna do obsugi kontrolki listy (strona 93):


uzyskujemy odniesienie do galerii,
wywoujemy metod setAdapter() aby umieci dane w galerii,
rejestrujemy zdarzenia zwizane z wybieraniem elementw galerii.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika elementy


Strona 101

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

Obsuga kontrolki jest podobna do obsugi kontrolki listy (strona 93).

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 102

Menadery ukadu interfejsu uytkownika


Ukad LinearLayout
Ukad RelativeLayout
Ukad TableLayout
Programowanie w systemie Android

Ukad FrameLayout
Ukad z zakadkami
Menadery ukadu a orientacja urzdzenia
Narzdzie Hierarchy Viewer

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 103

Menadery ukadu interfejsu uytkownika


Menadery ukadu graficznego (layout manager) lub inaczej ukady graficzne
(layout) to kontenerowe klasy widoku, penice rol pojemnikw na widoki.
Zarzdzaj rozmiarami, rozmieszczeniem i pozycjonowaniem elementw
podrzdnych (kontrolek lub innych ukadw). Idea podobna jak w Swing.
Klasy ukadw graficznych dziedzicz po klasie android.view.ViewGroup.
View Pozwala umieszcza elementy podrzdne w
miejscach o podanych wsprzdnych (x, y).
Jest mao elastyczny w uyciu i kopotliwy
Programowanie w systemie Android

ViewGroup biorc pod uwag rne rozdzielczoci


ekranw. Wychodzi z uycia. Niezalecany.

LinearLayout RelativeLayout FrameLayout GridLayout AbsoluteLayout


od Android 4.0 (API 14)

TableLayout DatePicker ScrollView


TimePicker HorizontalScrollView
RadioGroup
Zawieraj tylko jeden element (ukad graficzny),
ktry mona przewija w pionie / poziomie ekranu.
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 104

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

ciar; okrela stopie wanoci kontrolki w odniesieniu do


innych kontrolek w pojemniku, maks. warto to 1, dom. 0;
layout_weight
kontrolka o ciarze 1 zajmuje ca niezajt przestrze
dotyczy widoku pojemnika, 0 => zajmuje domylny obszar
kontrolek grawitacja; okrela pozycjonowanie w obrbie widoku
gravity kontrolki: center, left (dom.), right, top, bottom,
fill, center_horizontal, clip_horizontal itd.
layout_gravity j.w. ale dotyczy pozycji kontrolki w pojemniku

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 105

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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 106

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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 107

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>

wyrodkowanie tekstu umieszczenie kontrolki w


w kontrolce EditText pojemniku z prawej strony

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 108

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

w poziomie layout_alignParentTop grne krawdzie


wyrwnuje dolne
layout_alignBottom gdy brak lewego
krawdzie layout_alignWithParentIfMissing lub prawego el.
layout_alignLeft
wyrwnuje lewe (patrz *) to przyjmowany
krawdzie jest nadrzdny
wyrwnuje prawe layout_centerHorizontal wyrod. poziomo
layout_alignRight
krawdzie layout_centerInParent wyrodkowuje
wyrwnuje grne
layout_alighTop layout_centerVertical wyrod. pionowo
krawdzie
layout_toLeftOf umieszcza na lewo*
wymagaj uycia waciwoci align
layout_toRightOf umieszcza na prawo*
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 109

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

android:layout_height="wrap_content" poniej poprzedniego


android:text="Haso" elementu
android:layout_below="@id/et_login" />
<EditText android:id="@+id/et_haslo"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/tv_haslo" /> etykieta tekstowa
<TextView android:id="@+id/tv_uwaga" wyrwnana do dolnej
android:layout_width="fill_parent" krawdzi pojemnika
android:layout_height="wrap_content"
android:layout_alignParentBottom="true"
android:text="Uzyskanie dostpu wymaga podania loginu i hasa..." />
</RelativeLayout>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 110

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

zwenie kolumn o podanych numerach, gdy inne kolumny


shrinkColumns="0,1,2"
wymagaj wicej miejsca
collapseColumns="1,2" wybrane kolumny staj si niewidoczne
layout_span rozcignicie komrki na wiele kolumn
dotyczy widoku, okrela odstp wewntrz zawartoci
komrki lub kontrolki (kontrola przestrzeni pomidzy zewn.
padding="40px"
granicami widoku, a jego treci) (leftPadding,
rightPadding, topPadding, bottomPadding)
layout_margin j.w. ale dotyczy pojemnika

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 111

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

</TableRow> Imi: Jan


<TableRow> Nazwisko: Kowalski
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nazwisko:" />
<EditText drugi wiersz tabeli
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kowalski" />
</TableRow>
</TableLayout>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 112

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" >

<EditText android:text="Imi i nazwisko:" />

<TableRow> Jako element podrzdny tabeli,


Programowanie w systemie Android

<TextView zamiast elementu TableRow


android:layout_width="wrap_content" mona umieci dowolny
android:layout_height="wrap_content" element View, np. EditText
android:text="Jan" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Kowalski" />
</TableRow>

</TableLayout>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 113

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

top na grze fill wypenia cay kontener


bottom na dole fill_vertical wypenia kontener w poziomie
left z lewej strony fill_horizontal wypenia kontener w pionie
right z prawej strony
center_vertical na rodku w poziomie
center_horizontal na rodku w pionie
center na rodku w pionie i poziomie
start na wierzchoku stosu
end na dnie stosu

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 114

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" >

<ImageView identyfikator pliku plik1.png


android:id="@+id/obrazek1"
android:src="@drawable/plik1"
android:scaleType="fitCenter" element domylnie
Programowanie w systemie Android

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>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 115

Przykad wykorzystania ukadu FrameLayout


protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState); zaadowanie ukadu ze strony 114
setContentView(R.layout.main);
ImageView img1 = (ImageView) this.findViewById(R.id.obrazek1);
ImageView img2 = (ImageView) this.findViewById(R.id.obrazek2);

img1.setOnClickListener(new OnClickListener() { tutaj nie uywa przestrzeni


public void onClick(View view) { nazw R.drawable
ImageView img2 =
(ImageView) FrameLayoutActivity.this.findViewById(R.id.obrazek2);
img2.setVisibility(View.VISIBLE);
Programowanie w systemie Android

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.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 116

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

aktywno aplikacji dziedziczy po klasie TabActivity.

Muzycy Pyty Piosenki


Wygld przykadowego
ukadu zdefiniowanego
na stronach 117 i 118.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 117

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

<TabWidget wymagane nazwy


android:id="@android:id/tabs" identyfikatorw!
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
<FrameLayout
android:id="@android:id/tabcontent"
android:layout_width="fill_parent"
android:layout_height="fill_parent" w ukadzie FrameLayout
android:padding="5dp" /> wywietlana jest
</LinearLayout> dynamicznie zawarto
</TabHost> poszczeglnych zakadek

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 118

Zarys obsugi ukadu z zakadkami


public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

Resources res = getResources(); // obiekt zasobw


TabHost tabHost = getTabHost(); // TabHost dla aktywnoci
TabHost.TabSpec spec; // TabSpec uywany dla kadej zakadki
Intent intencja; // intencja uywana dla kadej zakadki

// utworzenie intencji do uruchamiania aktywnoci zakadki


Programowanie w systemie Android

intencja = new Intent().setClass(this, Aktywnosc1.class);

// inicjalizacja TabSpec dla zakadki


spec = tabHost.newTabSpec("muzycy").setIndicator("Muzycy",
res.getDrawable(R.drawable.ic_tab_nazwiska))
.setContent(intencja); // id, tekst na zakadce, ikona, intencja
tabHost.addTab(spec); // dodanie TabSpec do TabHost i zw. z TabWidget
kod powtarzany
// .....
dla kadej zakadki
tabHost.setCurrentTab(0); // domylnie wywietlana pierwsza zakadka
} // (numeracja od 0)
Materiay przygotowano w ramach projektu
Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 119

Menadery ukadu graficznego a orientacja urzdzenia


Poprawne wywietlanie ukadw graficznych we wszystkich konfiguracjach wymaga,
aby utworzy dla nich oddzielne katalogi przechowujce dostosowane definicje
ukadu. System automatycznie wykrywa orientacj urzdzenia i wczytuje ukad z
odpowiedniego folderu. Ta sama regua dotyczy zawartoci katalogu drawable.
Urzdzenie moe znajdowa si w jednej z trzech konfiguracji:
pionowa (portrait) zasoby w katalogu /res/layout-port
pozioma (landscape) zasoby w katalogu /res/layout-land
Programowanie w systemie Android

wywietlanie kwadratowego obrazu (square) zasoby w katalogu


/res/layout-square
Zawsze powinien by dostpny domylny katalog zasobw /res/layout.
Programowe wymuszenie dziaania aplikacji w wybranej orientacji:

// kod dla metody onCreate aktywnoci


import android.content.pm.ActivityInfo;
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Interfejs uytkownika ukady


Strona 120

Narzdzie Hierarchy Viewer

Narzdzie Hierarchy Viewer suy do optymalizacji ukadw


graficznych i usuwania bdw w interfejsie uytkownika z poziomu
ukadu graficznego.
Narzdzie to wczytuje ukad graficzny i pokazuje hierarchi
zdefiniowanych widokw w postaci drzewa.
Programowanie w systemie Android

Ukad graficzny jest analizowany pod wzgldem okrelenia moliwych


problemw oraz jest optymalizowany pod ktem zmniejszenia liczby
widokw (poprawienie wydajnoci dziaania aplikacji).
Narzdzie Hierarchy Viewer jest dostpne w katalogu
/tools/hierarchyviewer.bat.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 121

Koncepcja menu
Tworzenie menu
Tworzenie grup menu
Odpowied na wybr elementu menu
Programowanie w systemie Android

Inne rodzaje menu


Menu kontekstowe
Tworzenie menu w XML

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 122

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

Tworzenie i obsuga menu


Strona 123

Schemat obsugi menu


Powizania pomidzy klasami i funkcjami dotyczcymi menu
Menu aplikacji
onCreateOptionsMenu
pojedynczne menu, strona 124
Menu
onCreateOptionsMenu
grupy menu, strona 125
MenuItem
Programowanie w systemie Android

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 i obsuga menu


Strona 124

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
}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 125

Tworzenie grup menu


Przykad utworzenia dwch grup menu:

@Override
public boolean onCreateOptionsMenu(Menu menu)
{
// wywoanie metody nadrzdnej systemowe elementy menu
super.onCreateOptionMenu(menu);

int grupa1 = 1; // grupa 1


menu.add(grupa1, 1, 1, Polecenie 1.1);
Programowanie w systemie Android

menu.add(grupa1, 2, 2, Polecenie 1.2);


menu.add(grupa1, 3, 3, Polecenie 1.3);
Numeracja id elementu
i nr pozycji s niezalene
int grupa2 = 2; // grupa 2
i zachowuj cigo.
menu.add(grupa2, 4, 4, Polecenie 2.1);
menu.add(grupa2, 5, 5, Polecenie 2.2);
menu.add(grupa2, 6, 6, Polecenie 2.3);

return true; // powoduje wywietlenie menu


}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 126

Obsuga grup menu


Grupowanie elementw menu pozwala wykorzystywa metody odwoujce si
do identyfikatorw grup i kontrolowa elementy menu w grupie:
removeGroup(int id) usuwa wszystkie elementy z grupy id
setGroupEnabled(int id, boolean enabled) wcza lub
wycza dostpno wszystkich elementw menu z grupy id
setGroupVisible(int id, boolean visible) ustala
widoczno wszystkich elementw menu z grupy id
Programowanie w systemie Android

setGroupCheckable(int id, boolean checkable,


boolean exclusive) wstawia znak zaznaczenia obok wszystkich
elementw menu z grupy id (jeeli flaga exclusive jest ustawiona na
true to flag checkable bdzie mona ustawia dla tylko jednego
elementu z grupy metod setCheckable z klasy MenuItem)
Zarzdzanie poszczeglnymi elementami MenuItem:
setCheckable(boolean checkable)
setChecked(boolean checked)
setEnabled(boolean enabled)
setVisible(boolean visible)

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 127

Odpowied na wybr elementu menu metoda 1


Zalecanym sposobem odpowiedzi na wybr (kliknicie) elementu menu jest
przesonicie metody onOptionsItemSelected w klasie aktywnoci.
Wybr elementu menu powoduje wywoanie tej metody i przekazanie do
niej identyfikatora wybranego elementu menu.
Metoda zalecana
@Override
public boolean onOptionsItemSelected(MenuItem item)
{
switch (item.getItemID()) // identyfikacja wybranego elementu
{
Programowanie w systemie Android

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

Tworzenie i obsuga menu


Strona 128

Odpowied na wybr elementu menu metoda 2


Innym sposobem odpowiedzi na wybr elementu menu jest odpowied za pomoc
obiektu nasuchujcego (nasuchiwacza). Zarejestrowanie nasuchiwacza peni rol
tzw. wywoania zwrotnego. Po wybraniu elementu menu wywoana zostaje metoda
onMenuItemClick interfejsu OnMenuItemClickListener.

public class MyResponse implements OnMenuItemClickListener


{
@Override implementacja interfejsu
boolean onMenuItemClick(MenuItem item) OnMenuClickListener
Programowanie w systemie Android

{
// 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);

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 129

Odpowied na wybr elementu menu metoda 3


Kolejnym sposobem odpowiedzi na wybr elementu menu jest uycie intencji.
Element menu naley powiza z intencj za pomoc metody
setIntent(intent) klasy MenuItem.
Jeeli element menu nie jest obsugiwany adn dwch omwionych
wczeniej metod (strona 127 i 128), to domylnie nastpi przywoanie
intencji i wywoanie metody startActivity(intent).
Warunkiem zadziaania tej metody odpowiedzi jest:
Programowanie w systemie Android

nieprzesanianie metody onOptionsItemSelected


jeeli metoda onOptionsItemSelected zostaa przesonita,
konieczne jest umieszczenie w jej kodzie instrukcji
return super.onOptionsItemSelected(item);
dla nieprzetwarzanych elementw menu

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 130

Inne rodzaje menu


menu rozszerzone
Element menu zatytuowany "Wicej" / "More" - pojawia si
automatycznie, jeeli menu zawiera wicej elementw ni mieci si na
ekranie. Ukryte pod nim menu rozszerzone nie moe zawiera ikon (jeli
zawiera, to ikony nie s wywietlane).
menu w postaci ikon
Elementy menu zawierajce ikony nie obsuguj funkcji ich zaznaczania
(checkable). Przypisanie ikony do elementu menu:
Programowanie w systemie Android

// utworzenie standardowego elementu menu


Menu menu = null;
MenuItem item = menu.add(0, 2, 2, "Uruchom");

// ustalenie ikony dla elementu menu


item.setIcon(R.drawable.balony); // id zasobu pliku balony.png

metoda setIcon klasy MenuItem ustala jako ikon obrazek


o podanym identyfikatorze zasobu z katalogu /res/drawable

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 131

Inne rodzaje menu


podmenu
W obiekcie klasy Menu moe znajdowa si wiele obiektw klasy
SubMenu dodawanych metod Menu.addSubMenu (podobnie jak w
menu standardowym). Podmenu nie moe zawiera kolejnego podmenu.
Ikony przypisane do elementw podmenu s ignorowane.
Menu menu = null;
SubMenu sm = menu.addSubMenu(100, 101, Menu.NONE, podmenu);
sm.add(100, 102, 102, podelement 1);
Programowanie w systemie Android

sm.add(100, 103, 103, podelement 2);


sm.add(100, 104, 104, podelement 3);

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.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 132

Inne rodzaje menu


menu kontekstowe
Menu kontekstowe jest uruchamiane poprzez tzw. dugie kliknicie
(przytrzymanie przycisku). Nie obsuguje ono ikon, podmenu ani skrtw
reprezentowane przez klas ContextMenu. Elementy dodawane s
takimi samymi metodami jak w klasie Menu (metody add).
Rnica w stosunku do klasy Menu to obiekt-waciciel: menu standardowe
naley do aktywnoci, a menu kontekstowe naley do widoku.
Programowanie w systemie Android

Implementacja menu kontekstowego:


1. Zarejestrowanie widoku dla menu kontekstowego w metodzie onCreate
aktywnoci.
2. Wypenienie menu poleceniami w metodzie onCreateContextMenu.
3. Zdefiniowanie odpowiedzi na kliknicia poszczeglnych elementw menu
kontekstowego.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 133

Implementacja menu kontekstowego


@Override krok 1: rejestrowanie widoku dla
public void onCreate(Bundle savedInstanceState) menu kontekstowego
{ (rejestrowanie widoku TextView
super.onCreate(savedInstanceState); jako waciciela menu)
setContentView(R.layout.main);
TextViev tv = (TextView) this.findViewById(R.id.tv1);
registerForContextMenu(this.getTextView());
}
domylnie tworzony obiekt menu i widok
ktry wygenerowa wywoanie zwrotne
@Override
public void onCreateContextMenu(ContextMenu menu, View v, ContextMenuInfo mi)
Programowanie w systemie Android

{
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

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 134

Inne rodzaje menu

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

ten przekazuje dane). Aktywno wykorzysta adres URL uywajc do tego


intencji.

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.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 135

Tworzenie menu za pomoc plikw XML

Menu traktowane s jako zasoby dlatego mona je definiowa w plikach


XML. Metoda taka ma zalety w stosunku do tworzenia menu w kodzie
Java: moliwo nadania nazwy menu, automatyczne tworzenie kolejnoci
menu, automatyczne przyznawanie identyfikatorw menu, lokalizacja
tekstu menu (wersje jzykowe).

Tworzenie menu w oparciu o plik XML:


Programowanie w systemie Android

1. Zdefiniowanie w katalogu /res/menu pliku XML ze znacznikami menu


(nazwa pliku dowolna). Automatycznie zostanie wygenerowany
identyfikator zasobu dla tego pliku.
2. Wczytanie pliku do menu za pomoc identyfikatora zasobu pliku.
3. Zdefiniowanie odpowiedzi na kliknicia poszczeglnych elementw menu
za pomoc identyfikatorw zasobw wygenerowanych dla poszczeglnych
elementw menu.

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 136

Plik XML z zasobami menu krok 1


<menu xmlns:android="http://schemas.android.com/apk/res/android"
<group android:id="@+id/menuGroup_Main" >
<item android:id="@+id/menu_testPick" plik
android:orderInCategory="5" /res/menu/moje_menu.xml
android:title="Czc testowa" />
<item android:id="@+id/menu_testGetContent"
android:orderInCategory="5"
android:title="Test pobierania treci" />
<item android:id="@+id/menu_clear"
android:orderInCategory="10" Plik rozpoczyna si od znacznika
android:title="Wyczy" /> <menu>, po ktrym wystpuje seria
Programowanie w systemie Android

<item android:id="@+id/menu_dial" znacznikw <group> opisujcych


android:orderInCategory="7" grupy elementw menu.
android:title="Dzwo" /> Jeeli wystpuje tylko jedna grupa,
<item android:id="@+id/menu_test" to otrzyma ona identyfikator
android:orderInCategory="4" menuGroup_main.
android:title="@+string/test" />
<item android:id="@+id/menu_show_browser"
android:orderInCategory="5"
android:title="Wywietl przegldark" />
</group>
</menu>

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 137

Wczytanie plikw XML zasobw menu krok 2


Dla pliku o nazwie /res/menu/moje_menu.xml zostanie wygenerowany
identyfikator zasobu pliku R.menu.moje_menu oraz identyfikatory
elementw menu.
Klasa android.view.MenuInflater suy do umieszczania obiektw
klasy Menu z plikw XML.

@Override
Programowanie w systemie Android

public boolean onCreateOptionsMenu(Menu menu)


{
// pobranie obiektu MenuInflater z aktywnoci
MenuInflater inflater = getMenuInflater();

// przesanie zawarto pliku XML do menu


inflater.inflate(R.menu.moje_menu, menu);

return true; // powoduje e menu jest widoczne


}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Tworzenie i obsuga menu


Strona 138

Tworzenie odpowiedzi dla elementw menu XML krok 3


Nazwy elementw menu z pliku XML spowodoway wygenerowanie
identyfikatorw elementw menu w przestrzeni nazw R.id.
public void onOptionsItemSelected(MenuItem item)
{
this.appendMenuItemText(item);

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;
}
}

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany
KIK 2011

Literatura i rda
Strona 139

1. S. Hashimi, S. Komatineni, D. MacLean: Android 2. Tworzenie


aplikacji, Helion, Gliwice 2010.
2. E. Burnette: Hello Android. Programowanie na platform Google
dla urzdze mobilnych. Wydanie III, Helion, Gliwice 2011.
3. S. Conder, L. Darcey: Android. Programowanie aplikacji na
urzdzenia przenone. Wydanie II, Helion, Gliwice 2011.
4. W.F. Ableson, R. Sen, C. King: Android w akcji. Wydanie II,
Helion, Gliwice 2011.
Programowanie w systemie Android

5. dokumentacja SDK on-line http://developer.android.com


6. strona internetowa Android.com http://www.android.com
7. strona internetowa Eclipse http://www.eclipse.org
8. strona internetowa Oracle Java http://www.oracle.com/java
9. strona internetowa Android Market https://market.android.com
10. kod rdowy systemu Android http://source.android.com
http://android.git.kernel.org

Materiay przygotowano w ramach projektu


Inynier pilnie poszukiwany

You might also like