2009.05_Android, czyli Linux na komórki_[Programowanie].pdf

(690 KB) Pobierz
439033572 UNPDF
Programowanie
Android, czyli Linux na komórki
czyli Linux na komórki
Marek Sawerwain
Od kilku lat system Linux nieustannie zyskuje na popularności. Przyszłe lata także rysują się bardzo
obiecująco, ponieważ system ten może znaleźć uznanie wśród użytkowników netbook'ów, gdyż względem
konkurencyjnego system Windows Linux oferuje lepszą wydajność na mniej zaawansowanych platformach
sprzętowych. Również na komputerach normalnych użytkowników Linux gości coraz częściej. Jest jednakże
jeszcze jeden typ urządzeń, gdzie Linux również zyskuje dużą popularność – są to telefony komórkowe.
ne rozwiązania dla telefonów komórkowych.
Pierwszym systemem, obecnym już od pew-
nego czasu, jest OpenMoko oraz telefon Neo
FreeRunner. Natomiast drugi system, wspierany przez Go-
ogle, to Android wraz z telefonem G1. Jednakże warto od
razu zaznaczyć, że Android to system operacyjny i można
go uruchomić również na telefonie Neo FreeRunner.
Godne uwagi są obydwa systemy. Ponieważ jednak ra-
my artykułu są ograniczone, dlatego też postaramy się poka-
zać zalety tylko systemu Android. Skupimy się na podstawo-
wych zagadnieniach, które należy opanować, aby rozpocząć
tworzenie własnych aplikacji, w ramach tego systemu.
datkowych narzędzi, jednak na początku przygody z Andro-
idem ułatwienia są jak najbardziej na miejscu. Dlatego naj-
lepiej korzystać ze środowiska Eclipse. Pakiet SDK dla sys-
temu Android znakomicie integruje się z tym bardzo popu-
larnym środowiskiem do tworzenia aplikacji.
Instalacja SDK w środowisku Eclipse
Pierwsza czynność to uzyskanie pakietu dla programistów,
czyli tzw. Software Development Kit (w skrócie SDK). Pa-
kiet ten dla systemu Linux ściągamy ze strony systemu An-
droid, naturalnie w wersji dla Linux'a. Aktualnie dostępna
wersja w momencie tworzenia tego artykułu to „ 1.1_r1 ”,
a pełna nazwa pliku to: android-sdk-linux_x86-1.1_
r1.zip . Można oczywiście stosować SDK bez żadnych do-
Rysunek 1. Nowy projekt dla systemu Android
68
maj 2009
Android,
N a obecną chwilę mamy dwa ogólnie dostęp-
439033572.036.png 439033572.037.png 439033572.038.png 439033572.039.png 439033572.001.png
 
Programowanie
Android, czyli Linux na komórki
Najpopularniejsze dystrybucje, takie jak
Ubuntu czy Fedora Core, oferują pakiety z Ec-
lipsem, więc instalacja środowiska Eclipse jest
bardzo łatwa. Samo SDK trzeba zainstalować
samodzielnie, co nie jest jednak zbyt trudne.
Przed rozpoczęciem instalacji środowiska Ec-
lipse w przypadku sześćdziesięcioczterobito-
wego środowiska należy się upewnić, czy ma-
my zainstalowane biblioteki do obsługi pro-
gramów trzydziestodwubitowych. W przypad-
ku Ubuntu, aby spełnić ten warunek, wystarczy
wydać polecenie:
Coś łatwego na początek
Najkrótszy program z gatunku „Witaj Świe-
cie!” w przypadku SDK dla systemu Android
napiszemy nie dotykając klawiatury. Po utwo-
rzeniu projektu w Eclipse, podstawowy wyge-
nerowany kod aplikacji realizuje dokładnie to
zadanie. Listing 1, a dokładniej pierwszy frag-
ment, to kod źródłowy aplikacji, jaka powsta-
je samodzielnie w momencie utworzenia no-
wego projektu.
Mamy jedną klasę dziedziczącą z klasy
Activity (podstawowa klasa dla aplikacji w
systemie Android) oraz metodę o nazwie on-
Create , która zgodnie z nazwą jest wywoły-
wana po załadowaniu aplikacji i jest odpowie-
dzialna za utworzenie potrzebnych obiektów.
W metodzie tej wywołujemy ponownie me-
todę onCreate , jednak jest to metoda z dzie-
dziczonej klasy.
Jak widać w pierwszej części Listingu 1
nie tworzymy nowych obiektów, gdyż korzy-
stamy z wygenerowanych zasobów. Plik z za-
sobami posiada nazwę main.xml , znajdziemy
go w katalogu res , a następnie w katalogu lay-
out . Natomiast komunikat, który wyświetla-
my, znajduje się w innym pliku string.html ,
plik ten znajduje się w katalogu values . Je-
śli chcemy zmienić ten komunikat, to trze-
ba zmienić wartość zasobu o nazwie Hel-
loMessage . Nie możemy zmienić wartości
ciągu znaków na poziomie edycji pliku ma-
in.xml , gdyż w tym pliku opisujemy tylko za-
apt-get install ia32-libs
Koniecznie trzeba także zainstalować Javę, w
następujący sposób:
apt-get install sun-java6-bin
Do wygodnej pracy w Eclipse potrzebna jest
wtyczka o nazwie ADT. Wtyczka ta współpra-
cuje z wersją 3.3 albo 3.4. Wybieramy nową
wersję 3.4 o kodowej nazwie Ganymede. In-
stalacja wtyczki wymaga dodania nowego re-
pozytorium, a nowe repozytorium dodamy po-
przez menu Help . Następnie trzeba wybrać
Software Updates...” . W oknie, które się po-
jawi, wybieramy zakładkę Available Software ,
a następnie przycisk „ Add Site...” . W nowym
oknie dialogowym wpisujemy adres potrzeb-
nego repozytorium: http://dl-ssl.google.com/
android/eclipse/
Można też skorzystać z protokołu https ,
jeśli zależy nam na szyfrowanym połącze-
niu. Po dołączeniu nowego repozytorium, w
zakładce Available Software pojawi się no-
we repozytorium powiązane z wtyczką ADT,
a w nim nowy element Developer Tools i dwie
nowe opcje: Android Development Tools oraz
Android Editors , które trzeba zainstalować w
środowisku Eclipse. Po kilku chwilach odpo-
wiednie wtyczki oraz potrzebne zależności zo-
staną samodzielnie zainstalowane. Nie wolno
zapomnieć o ponownym uruchomieniu środo-
wiska Eclipse.
Wtyczka ADT nie zastępuje SDK, a tyl-
ko ułatwia współpracę z pakietem SDK, dla-
tego po ściągnięciu archiwum SDK należy je
rozpakować. Archiwum jest w formacie ZIP.
W środowisku Eclipse należy naturalnie po-
dać ścieżkę do katalogu, w którym rozpako-
wane zostało archiwum. Należy przejść do
menu Windows , a następnie do opcji Preferen-
ces. W oknie, które się pokazało, powinna być
widoczna opcja Android. Po jej wskazaniu zo-
baczymy pole edycyjne o nazwie SDK Loca-
tion . Do tego pola należy wpisać ścieżkę do-
stępu do SDK.
Rysunek 2. Program z listą miast w środowisku Eclipse oraz uruchomiony na emulatorze telefonu
Listing 1. Najkrótszy program w Androidzie wyświetlający komunikat
package com.example.AndT1;
import android.app.Activity;
import android.os.Bundle;
public class AndST1 extends Activity {
public void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState ) ;
setContentView ( R . layout . main ) ;
}
}
Nieco zmieniona metoda onCreate :
public void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState ) ;
TextView tv = new TextView ( this ) ;
tv . setText ( "Witaj Świecie !!!!" ) ;
setContentView ( tv ) ;
}
www.lpmagazine.org
69
439033572.002.png 439033572.003.png 439033572.004.png 439033572.005.png 439033572.006.png 439033572.007.png 439033572.008.png 439033572.009.png 439033572.010.png 439033572.011.png 439033572.012.png 439033572.013.png 439033572.014.png
 
Programowanie
Android, czyli Linux na komórki
wartość interfejsu. Tego typu rozdział na po-
czątku wydaje się utrudnieniem, jednakże z
drugiej strony wymusza, aby dokładnie roz-
ważyć elementy interfejsu użytkownika i po-
prawnie określić niezbędne zasoby, co w przy-
padku systemu, który ma ograniczone zasoby,
jest bardzo ważnym aspektem.
Istotnym jest fakt, iż wymienione pliki są
plikami w formacie XML, które możemy edy-
tować na dwa sposoby. Pierwszy to skorzy-
stać z możliwości środowiska Eclipse, oferu-
jącego dostęp do edytorów wizualnych. Drugi
sposób to bezpośrednia edycja plików XML.
Zwróćmy uwagę na to, iż gdy tworzymy in-
terfejs użytkownika bądź dowolne inne zaso-
by, np.: rysunki, to dostęp do poszczególnych
zasobów jest możliwy dzięki identyikatorom
tworzonym samodzielnie przez Eclipsa. Dei-
nicje tych identyikatorów znajdują się w pli-
ku R.java . Dostępne są trzy podstawowe typy
zasobów: rysunki, kontrolki albo ogólnie wid-
gety do budowy interfejsu użytkownika oraz
wartość, np.: liczby, ciągi znaków.
Jeśli jednak z pewnych powodów chce-
my samodzielnie utworzyć interfejs, to może-
my w metodzie onCreate utworzyć odpowied-
ni obiekt, np.: TextView , odpowiedzialny za
wyświetlanie tekstu. To zadanie realizuje dru-
gi fragment znajdujący się na Listingu 1. W ty-
powy sposób dla Javy tworzymy nowy obiekt, a
za pomocą metody setText ustalamy zawartość
kontrolki. Następnie, jak w oryginalnym przy-
kładzie, za pomocą metody setContentView
określamy podstawowy widget aplikacji.
Drugie słowo o interfejsie
Android został wyposażony w dość bogatą
bibliotekę kontrolek (widgetów) do tworze-
nia aplikacji. Mamy naturalnie przyciski, po-
la edycyjne, a także różnego rodzaju widge-
ty do pozycjonowania innych widgetów, np.:
LinearLayout . Ten typ kontrolki rozmiesz-
cza poszczególne widgety w sposób linio-
wy, jeden za drugim. Innym dostępnym spo-
sobem rozmieszczania kontrolek jest tabela:
TableLayout . Widgety tym razem będą roz-
mieszczane w tabeli, w poszczególnych wier-
szach. Do dyspozycji są jeszcze trzy inne wid-
gety: AbsoluteLayout , FrameLayout , Rela-
tiveLayout .
Istnieją także dodatkowe kontrolki, np.:
DigitalClock , czyli zegar cyfrowy, i podob-
nie AnalogClock . Autorzy systemu zadbali o
kontrolki ułatwiające, np.: wprowadzenie daty
DatePicker , czasu TimePicker czy kontrol-
kę odpowiedzialną za utworzenie galerii, np.:
zdjęć – Gallery .
Wielką zasługą autorów Androida jest rów-
nież uproszczenie API. Stało się to możliwe
również dzięki Javie. Android oferuje spory za-
sób widgetów, a autorzy systemu zadbali o ła-
twość użytkowania poszczególnych klas. Do-
brym przykładem będzie zademonstrowanie np.:
listy wyboru. Utworzymy pole edycyjne, gdzie
użytkownik może podać nazwę miasta. Wpro-
wadzimy także przykładową listę miast; po wpi-
saniu początkowych liter nazwy miasta z listy
system będzie samodzielnie podpowiadał na-
zwę pasującego miasta bądź też pasujące nazwy
miast do pierwszych podanych liter.
Listing 2 zawiera najważniejsze dla nas
fragmenty kodu źródłowego, jednakże w
pierwszej kolejności trzeba zadbać o inter-
fejs użytkownika. Możliwości są dwie: może-
my zbudować interfejs za pomocą edytora do-
stępnego w Eclipse. Używamy widgetu Line-
arLayout do poziomowania trzech widgetów.
Pierwszy to TextView . Będzie on pełnić funk-
cję etykiety, dlatego we własności Text wpi-
sujemy słowo „Miasto”. Następny widget to
AutocompleteTextView , w przypadku tego
widgetu zmieniamy także identyikator (wła-
sność Id) na „ @+id/CityEdit ”, przy czym
właściwa nazwa widgetu to CityEdit . Ostatni
widget to DigitalClock . Korzystając z edy-
Listing 2. Tworzenie uzupełnienia dla pola edycyjnego
static inal String [] CITIES = new String [] {
"Skwierzyna" , "Skwierzynka" ,
"Zielona Góra" , "Warszawa" ,
"Gorzów Wlkp." , "Gorzów Wielkopolski" ,
"Gorzów Śląski" , "Gdańsk" } ;
public void onCreate ( Bundle savedInstanceState ) {
super . onCreate ( savedInstanceState ) ;
setContentView ( R . layout . main ) ;
ArrayAdapter < String > adapter = new ArrayAdapter < String > ( this ,
android . R . layout . simple_dropdown_item_1line , CITIES ) ;
AutoCompleteTextView textView = ( AutoCompleteTextView ) indViewById ( R
. id . CityEdit ) ;
textView . setAdapter ( adapter ) ;
} ;
Listing 3. Plik XML opisujący interfejs przykładu z listą miast
< ?xml version= "1.0" encoding= "utf-8" ? >
< LinearLayout xmlns:android= "http://schemas.android.com/apk/res/android"
android:orientation= "vertical"
android:layout_width= "ill_parent"
android:layout_height= "ill_parent" >
< TextView
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:text= "Miasto" / >
< AutoCompleteTextView android:id= "@+id/CityEdit"
android:layout_width= "ill_parent"
android:layout_height= "wrap_content" / >
< DigitalClock android:id= "@+id/DigitalClock"
android:layout_width= "wrap_content"
android:layout_height= "wrap_content"
android:layout_gravity= "center_horizontal" >
< /DigitalClock >
< /LinearLayout >
70
maj 2009
439033572.015.png 439033572.016.png 439033572.017.png 439033572.018.png
 
Programowanie
Android, czyli Linux na komórki
tora możemy go wypośrodkować na ekranie,
zmieniając własność Layout gravity na
center_horizontal .
Edycję interfejsu można również wyko-
nać edytując plik XML. Listing 3 zawiera
kompletny opis interfejsu z naszego przykła-
du. Tworzenie interfejsu poprzez edycję pli-
ku XML jest wbrew pozorom równie wygod-
ne, co znajdzie potwierdzenie w następnym
przykładzie, gdzie będziemy tworzyć kalkula-
tor. Tworzenie opisu XML interfejsu jest nie-
wątpliwie podobne do edycji plików HTML.
Znacznik LinearLayout w naszym przykła-
dzie zawiera trzy pozostałe znaczniki, repre-
zentujące potrzebne nam widgety.
Po przygotowaniu interfejsu musimy wpro-
wadzić kilka zmian w kodzie źródłowym. Li-
sting 2 zawiera najważniejsze fragmenty kodu.
Pierwszy element to lista miast. Tworzymy zwy-
kłą tablicę o nazwie CITIES, dodajmy w typo-
wy dla Javy sposób. Tablica ta staje się argumen-
tem obiektu adaptera, który wykorzystuje wybu-
dowany zasób reprezentujący rozwijaną listę:
Nowy projekt oraz uruchamianie aplikacji
Po naciśnięciu kombinacji klawiszy CTRL-N pokaże się okno, gdzie wybieramy typ pro-
jektu. Po prawidłowej instalacji wtyczki ADT oraz wcześniejszym wskazaniu położenia
pakietu SDK, zobaczymy, iż mamy do dyspozycji folder Android . Folder ten zawiera tyl-
ko jedną opcję – Android Project , więc to ten typ projektu wybierzemy. Pokaże się no-
we okno, gdzie należy uzupełnić cztery pola. Pierwsze pole to: Project Name , czyli na-
zwa całego projektu. Następne pole to Package name , czyli nazwa pakietu. W przypad-
ku naszego pierwszego przykładu wpisujemy: com.example.AndT1 . Trzecie istotne po-
le to nazwa klasy naszej aplikacji Activity name , w naszym projekcie podaliśmy AndT1 .
Czwarte pole natomiast to nazwa aplikacji ( Application Name ), i w przeciwieństwie do
poprzednich pól nazwa powinna być opisowa, gdyż wartość tego pola będzie widocz-
na dla użytkownika.
Jeśli chcemy uruchomić projekt, to należy skorzystać z emulatora telefonu, który jest do-
stępny w pakiecie SDK. Skorzystanie z emulatora to również znakomita okazja, aby zo-
rientować się, co oferuje telefon Google. Jednak my, jak na razie, chcemy uruchomić na-
szą aplikację, dlatego z menu Run wybieramy opcję Run conigurations.... Pokaże się okno
dialogowe, gdzie trzeba wybrać opcję Android Application , a w polu Project wybrać pro-
jekt z aplikacją do uruchomienia. Istotna jest również zakładka Target , gdzie możemy okre-
ślić wielkość ekranu, a także szybkość dostępu do sieci. Wbrew pozorom jest to ważne,
gdy chcemy testować np.: aplikacje sieciowe i ich zachowanie w bardziej naturalnych wa-
runkach, np.: w sieci GPRS czy EDGE. Istotny jest jeszcze sposób uruchomienia aplikacji.
Po uruchomieniu emulatora należy na wirtualnym telefonie wybrać ikonę Home (domek),
co uruchomi aplikację. Aby uruchomić nową wersję tworzonej aplikacji nie trzeba zamykać
emulatora, tylko używaną przez nas aplikację, a w Eclipse ponownie uruchomić projekto-
waną aplikację.
ArrayAdapter<String> adapter = new
ArrayAdapter<String>(this,
android.R.layout.simple_dropdown_
item_1line,
CITIES);
Następna linia kodu demonstruje, w jaki spo-
sób uzyskać wskazanie na obiekt interfejsu.
Korzystamy z metody indViewById , której
podajemy za argument stałą wygenerowaną
samodzielnie przez środowisko Eclipse.
Możliwości telefonów G1 oraz Neo Freerunner
Wymiary G1 telefonu to 55,7x117,7x17,1 mm, a waga to 158g. Trzeba pamiętać, iż te-
lefon Google'a posiada klawiaturę. Wymiary telefonu Freerunner są bardzo podobne:
120,7 x 62 x 18,5 mm, ale sam telefon jest lżejszy, bo waży 133g.
Podobne różnice dotyczą ekranu, telefon Neo Freerunner posiada wyświetlacz o roz-
dzielczości 480x640 o wielkości 2.8 cala. Wyświetlacz telefonu Google'a oferuje niższą
rozdzielczość 480x320, ale sam wyświetlacz jest większy, 3.2 cala.
Naturalnie obydwa telefony współpracują z podstawowymi typami sieci jak: GSM, GPRS,
EDGE, przy czym trzeba przyznać, że G1 oferuje w tym zakresie większe możliwości.
Telefon G1 posiada także aparat, którego pozbawiony jest telefon Neo Freerunner. Waż-
nym aspektem jest też dostępna pamięć. Freerunner posiada 128MB pamięci RAM oraz
256MB NAND Flash, czyli tzw. pamięci ROM. Procesor to Samsung 2442B o częstotli-
wości pracy 400Mhz bądź 500Mhz.
Telefon Google posiada więcej pamięci RAM, bo 192 MB RAM, ale wielkość pamięci
ROM jest taka sama. Procesor jest nieco inny, bo Qualcomm MSM7201A o wyższej czę-
stotliwości pracy 528 Mhz. Jednakże obydwa procesory posługują się tym samym pod-
zbiorem instrukcji zgodnej z architekturą ARM.
Obydwa telefony posiadają odbiornik GPS, przy czym trzeba koniecznie wspomnieć, że
telefon Google'a oferuje dostęp do usług Google'a, min. do mapy, co w połączeniu z GPS
daje bardzo interesujące narzędzie.
Obydwa telefony oferują dostęp do kart pamięci, jednak ostatecznie to Neo Freerun-
ner oferuje większą elastyczność. W tym telefonie bez kłopotu można zainstalować
dowolne oprogramowanie, zarówno system OpenMoko albo Android, a nawet wyspe-
cjalizowaną dystrybucję Debiana. Obydwa telefony mają też zasadniczą wadę: dłu-
gość pracy baterii. Jeśli używamy intensywnie aplikacji czy np. odbiornika GPS, to
może się okazać, że telefony na baterii będą pracować tylko od pięciu do sześciu go-
dzin.
AutoCompleteTextView textView =
(AutoCompleteTextView) indViewById(R.
id.CityEdit);
Podłączenie adaptera to zadanie bardzo łatwe;
wykorzystujemy tylko metodę setAdapter :
textView.setAdapter(adapter);
Jak widać, uzyskanie takiego zachowania,
które jest niewątpliwie bardzo przydatne dla
użytkownika, jest bardzo łatwe. Wystarczą do-
słownie trzy linie kodu.
Lepszy, choć
nieco brzydszy kalkulator
Opracowanie bardziej przydatnej aplikacji,
np.: kalkulatora z funkcjami niedostępnymi we
wbudowanym kalkulatorze, wbrew pozorom
nie zabierze nam wiele czasu. Rozpoczniemy
od utworzenia interfejsu użytkownika.
Dane do obliczeń będą wprowadzane przez
trzy pola edycyjne. W odróżnieniu od innych
www.lpmagazine.org
71
439033572.019.png 439033572.020.png 439033572.021.png 439033572.022.png 439033572.023.png 439033572.024.png 439033572.025.png 439033572.026.png 439033572.027.png 439033572.028.png 439033572.029.png 439033572.030.png
 
Programowanie
Android, czyli Linux na komórki
kalkulatorów, będziemy dane wprowadzać
do oddzielnych pól, np.: podczas dodawania
w pierwszym argumencie znajdzie się pierw-
sza wartość, natomiast drugi argument natu-
ralnie zostanie umieszczony w drugim polu.
W przypadku dodawania trzecie pole nie bę-
dzie wykorzystywane, jednakże wynik zosta-
nie umieszczony w czwartym polu, ponieważ
trzy pierwsze pola to pola argumentów dla po-
zostałych funkcji oferowanych przez nasz kal-
kulator. Funkcja, która w pełni wykorzysta trzy
pola argumentów, to funkcja PowerMod, czyli
tzw. potęgowanie modularne.
Listing 4 przedstawia fragmenty pliku
XML, który opisuje interfejs kalkulatora. Ko-
rzystamy z dwóch kontrolek rozmieszczają-
cych inne widgety. Pierwszy widget to Liner-
Layout , zawierający inny widget, a mianowi-
cie TableLayout . Poszczególne kontrolki znaj-
dują się w tej drugiej kontrolce. Naturalnie są
to wymienione wcześniej pola edycyjne oraz
przyciski odpowiedzialne za obliczenia. Jed-
nak pola edycyjne podane są bezpośrednio, bez
żadnych dodatkowych znaczników.
Inaczej postępujemy w przypadku przy-
cisków; stosujemy dodatkowy znacznik: Ta-
bleRow . To powoduje, że poszczególne przy-
ciski ułożą się w postacie tabelki tak jak jest to
widoczne na Rysunku 3.
W przypadku kontrolek typu TextView
zmieniamy wartość własności layout_width
z wrap_content na ill_parent . Spowoduje
to, że kontrolki będą rozciągnięte na całą sze-
rokość ekranu telefonu.
Po przygotowaniu interfejsu użytkownika
możemy przystąpić do pisania kodu. W pierw-
szej kolejności należy zadeklarować obiekty re-
prezentujące przyciski czy pola edycyjne, np.:
Listing 4. Fragmenty opisu interfejsu naszego kalkulatora
< LinearLayout android:layout_height= "wrap_content" xmlns:android= "http:
//schemas.android.com/apk/res/android" android:layout_width= "ill_parent"
android:id= "@+id/LinearLayout" >
< TableLayout android:id= "@+id/TableLayout01" android:layout_height= "wrap_
content" android:layout_width= "ill_parent" >
< EditText android:id= "@+id/DigitText_F1" android:singleLine= "true"
android:layout_height= "wrap_content" android:layout_width= "ill_parent" >< /
EditText >
< EditText android:id= "@+id/DigitText_F2" android:layout_height= "wrap_
content" android:layout_width= "ill_parent" >< /EditText >
protected Button PlusBTN;
protected EditText DigitEdit_F1;
< EditText android:id= "@+id/DigitText_F3" android:layout_height= "wrap_
content" android:layout_width= "ill_parent" >< /EditText >
Uzyskanie odniesienia do konkretnego widge-
tu uzyskamy za pomocą indViewById . Musi-
my także pamiętać o wykonaniu konwersji na
potrzebny typ:
< TableRow android:id= "@+id/TableRow04" android:layout_width= "wrap_content"
android:layout_height= "wrap_content" >
PlusBTN = (Button) indViewById(R.id.
PlusBTN);
< Button android:id= "@+id/PlusBTN" android:layout_height= "wrap_content"
android:text= "+" android:layout_width= "ill_parent" >< /Button >
...
< /TableRow >
DigitEdit_F1 = (EditText) indViewById
(R.id.DigitText_F1);
< TableRow android:id= "@+id/TableRow05" android:layout_width= "wrap_content"
android:layout_height= "wrap_content" >
Następny etap to podłączenie obsługi zdarzeń.
Nas będzie interesować zdarzenie onClick dla
przycisków, np.:
< Button android:id= "@+id/SinBTN" android:layout_height= "wrap_content"
android:text= "Sin" android:layout_width= "ill_parent" >< /Button >
< /TableRow >
< TableRow android:id= "@+id/TableRow05" android:layout_width= "wrap_content"
android:layout_height= "wrap_content" >
< Button android:id= "@+id/ModBTN" android:layout_height= "wrap_content"
android:text= "Mod" android:layout_width= "ill_parent" >< /Button >
< /TableRow >
PlusBTN.setOnClickListener( PlusBTN_
OnClick );
Listing 5 zawiera obsługę zdarzenia OnClick dla
przycisku sumy oraz potęgowania modularnego.
W obydwu przypadkach w pierwszej kolejności
sprawdzamy, czy pola edycyjne nie są puste. Je-
śli ten warunek jest spełniony, to przechodzimy
do obliczeń. Odczytujemy ciągi znaków i doko-
nujemy konwersji na odpowiednie typy danych
oraz sumujemy liczby. W przypadku potęgowa-
nia modularnego korzystamy z metody modPow
klasy BigInterger . Jednakże każdy, kto two-
< EditText android:id= "@+id/DigitText_F_OUT" android:layout_height= "wrap_
content" android:layout_width= "ill_parent" >< /EditText >
< TextView android:id= "@+id/PrgTitle" android:layout_height= "wrap_content"
android:layout_width= "ill_parent" android:layout_gravity= "center_vertical"
android:text= "Nieco inny kalkulator V.0.5a" >< /TextView >< /TableLayout >
Na płycie DVD
Na płycie DVD znajdują się wykorzystywa-
ne biblioteki, kod źródłowy programu oraz
wszystkie listingi z artykułu.
< /LinearLayout >
72
maj 2009
439033572.031.png 439033572.032.png 439033572.033.png 439033572.034.png 439033572.035.png
 
Zgłoś jeśli naruszono regulamin