You are on page 1of 286

TRNG I HC KHOA HC T NHIN

KHOA CNG NGH THNG TIN

V THNH NHT PHAN THNH TRUNG

TM HIU H IU HNH ANDROID V


XY DNG NG DNG MINH HA
- PH LC -

KHA LUN TT NGHIP C NHN CNTT

TP.HCM, 2010

LI GII THIU
Android l mt h iu hnh m ngun m c pht trin da trn nhn
Linux. Trong mt hai nm tr li y, s pht trin ca Android c nhng bc
pht trin mnh m v dn chim cm tnh ca ngi dng. Do c li th l c
xy dng theo tiu ch m nn vic pht trin ng dng trn Android c cho l
kh d dng. Tuy nhin, ngun ti liu lp trnh c ng dng chy trn
Android kh l ri rc v cha c s sp xp v t chc tt. Chnh v th m cun
Ph lc ny c vit ngoi mc ch h tr cho Kha lun Tm hiu H iu
hnh Android v xy dng ng dng minh ha cn c mc ch cao hn l
cung cp nhng ci nhn c bn nht, chung nht gip cho ngi c c th d dng
nm bt, hc hi cch thc vn hnh cng nh pht trin ng dng trn h iu
hnh nhiu tim nng ny.
Do thi gian thc hin ti kh ngn cho nn vic thiu st trong khi vit
phn Ph lc ny l mt iu khng th trnh khi. Nhm chng em rt mong c
s gp t Thy C v cc Bn. Nhm chng em xin chn thnh cm n.

Tp. H Ch Minh, thng 03 nm 2010


Nhm sinh vin thc hin

V Thnh Nht Phan Thnh Trung

MC LC
MC LC.............................................................................................................. 3
DANH MC CC HNH ...................................................................................... 9
Ph lc A

Cuc thm d h iu hnh Android khuy ng th trng

smart phone 19
Ph lc B

Nhng thng k th v v Google Android trong nhng nm gn

y (theo iTech.vn ngy 25/01/2010)....................................................................24


B.1

Nhng thng k t Google ...................................................................... 24

B.2

Nhng thng tin ng ch .................................................................... 26

B.3

Bo co ca Admob ................................................................................ 26

B.4

Bo co ca Myxer ................................................................................. 28

Ph lc C

Danh sch cc cng ty trong Hip hi cc thit b cm tay m .....29

Ph lc D

Cc smart phone dng h iu hnh Android ...............................32

Ph lc E

So snh cc h iu hnh hin c trn smart phone ......................35

Ph lc F

Hai HH smartphone Android v iPhone tng trng nhanh

nht

39

Ph lc G

Lp trnh trn Android ...................................................................41

G.1

Tng quan Android ................................................................................. 41

G.1.1

nh ngha Android ......................................................................... 41

G.1.2

Tnh nng v kin trc Android ........................................................ 41

G.2

Gii thiu Java SE JDK, Android SDK , ADT, Eclipse v cc bc ci t


44

G.2.1

Gii thiu Java SE JDK, Android SDK, ADT, DDMS, Eclipse v mi

lin h gia chng .......................................................................................... 44


G.2.2

Cc bc ci t lp trnh Android .............................................. 50

G.2.3

Cc iu lu sau khi ci t ........................................................... 64

G.3

Bc u lm quen vi Android qua project HelloNhatTrungApp .......... 67


3

G.3.1

Cc bc to project HelloNhatTrungApp ...................................... 67

G.3.2

Cu trc ca mt project Android .................................................... 85

G.4

Lm quen vi cc khung nhn trn Eclipse qua ci nhn trn Android

project ................................................................................................................ 87
G.4.1

Khung nhn Java .............................................................................. 87

G.4.2

Khung nhn DDMS .......................................................................... 99

G.4.3

Tm hiu Debug ............................................................................. 104

G.5

Lm quen vi nn tng ng dng Android ............................................ 108

G.5.1

Cc thnh phn ng dng ............................................................... 109

G.5.2

Activities v Tasks ......................................................................... 114

G.5.3

Tin trnh v lung ......................................................................... 115

G.5.4

Vng i cc thnh phn ng dng Android .................................. 115

G.6

Lm quen vi cc cng c h tr sn c ca Android SDK ................... 125

G.6.1

Android Development Tools Plugin (ADT) ................................... 125

G.6.2

Dalvik Debug Monitor Service (DDMS) ........................................ 126

G.6.3

Hierarchy Viewer ........................................................................... 128

G.6.4

Draw 9-patch ................................................................................. 130

G.6.5

Android Debug Bridge (ADB) ....................................................... 134

G.6.6

Cc cng c h tr khc ................................................................. 136

Ph lc H

Cc vn c bn trong lp trnh Android .................................137

H.1

Cc vn v khi nim c bn trong lp trnh giao din ...................... 137

H.1.1

Gii thiu lp trnh giao din trn Android v cc tnh nng ca n 137

H.1.2

Cc t kha thng gp trong lp trnh giao din ........................... 141

H.1.3

Cc n v tnh trn giao din ........................................................ 142

H.1.4

Cc thuc tnh thng gp trn cc View ....................................... 143

H.1.5

Tng qut cc View di ci nhn hng i tng ....................... 144

H.1.6

Cch thc xy dng v thit k giao din ....................................... 149

H.1.7

Cch thao tc control trn Java code .............................................. 152

H.2

Lp trnh vi giao din c bn ............................................................... 153


4

H.2.1

Cc iu khin cha iu khin khc (layout) ................................ 153

H.2.2

Cc iu khin thng dng ............................................................. 164

H.3

Cc ch khi lp trnh giao din ........................................................... 166

Ph lc I
I.1

Lp trnh theo tng ch ........................................................... 167

Lp trnh giao din ty bin vi Adapter ............................................... 167

I.1.1 Gii thiu s lc BaseAdapter v cc lp con ca n....................... 167


I.1.2 Dng Adapter trn Spinner ................................................................ 168
I.1.3 Dng Adapter trn Gallery................................................................. 170
I.1.4 Dng Adapter trn ListView c bn .................................................. 173
I.1.5 Dng Adapter trn ListView nng cao ............................................... 175
I.1.6 Dng Adapter trn GridView c bn ................................................. 177
I.1.7 Dng Adapter trn GridView nng cao .............................................. 179
I.1.8 Kinh nghim lp trnh vi Adapter .................................................... 182
I.2

Lp trnh vi hot cnh chuyn ng (Animation)................................. 183

I.2.1 Gii thiu lp trnh vi Animation ..................................................... 183


I.2.2 Lp trnh vi TweenAnimation .......................................................... 184
I.2.3 Lp trnh vi FrameByFrameAnimation ............................................ 189
I.3

Lp trnh vi Media............................................................................... 191

I.3.1 Gii thiu .......................................................................................... 191


I.3.2 Lp trnh pht m thanh trn Android ................................................ 193
I.3.3 Lp trnh pht Video trn Android ..................................................... 193
I.3.4 Nhn xt ............................................................................................ 194
I.4

Lp trnh vi thao tc Telephony ........................................................... 195

I.4.1 Gii thiu .......................................................................................... 195


I.4.2 Thc hin gi in thoi ti mt s cho trc .................................... 195
I.4.3 Thc hin gi tin nhn SMS .............................................................. 197
I.4.4 Thc hin chc nng rung in thoi ................................................. 198
I.5

Lp trnh vi lung (Thread) ................................................................. 198

I.5.1 Gii thiu lung................................................................................. 198


5

I.5.2 Cc c tnh v cch thc vn hnh lung ......................................... 199


I.5.3 Lp trnh lung .................................................................................. 200
I.6

Lp trnh vi thc n (Menu) .............................................................. 202

I.6.1 Gii thiu thc n ............................................................................ 202


I.6.2 Cch thc lp trnh ............................................................................ 203
I.6.3 Nhn xt ............................................................................................ 212
I.7

Lp trnh vi kiu ch (Font) ................................................................ 212

I.7.1 Gii thiu .......................................................................................... 212


I.7.2 Cch lp trnh .................................................................................... 213
I.7.3 Nhn xt ............................................................................................ 214
I.8

Lp trnh vi khung thoi (Dialog) ........................................................ 214

I.8.1 Gii thiu .......................................................................................... 214


I.8.2 Cch thc lp trnh ............................................................................ 215
I.9

Lp trnh vi nhp xut tp tin............................................................... 220

I.9.1 Gii thiu .......................................................................................... 220


I.9.2 Preferences ........................................................................................ 221
I.9.3 Files................................................................................................... 222
I.9.4 Databases .......................................................................................... 226
I.9.5 Network............................................................................................. 231
I.10

Lp trnh vi MapView ......................................................................... 233

I.10.1

Gii thiu ....................................................................................... 233

I.10.2

Cch thc lp trnh ......................................................................... 235

I.10.3

Nhn xt ........................................................................................ 239

I.11

Lp trnh thao tc WebKit ..................................................................... 239

I.11.1

Gii thiu ....................................................................................... 239

I.11.2

Cch thc lp trnh ......................................................................... 240

I.11.3

Nhn xt ........................................................................................ 241

I.12

Lp trnh vi cc widget khc ............................................................... 241

I.12.1

Widget Date/Time .......................................................................... 241

I.12.2

Widget Tab .................................................................................... 242

Ph lc J

Lp trnh vi EndlessList ............................................................. 245

J.1

Gii thiu .............................................................................................. 245

J.2

Cch thc to EndlessList ..................................................................... 246

J.2.1 Cch thc vn hnh ca EndlessList: ................................................. 246


J.2.2 Cch thc lp trnh to EndlessList .................................................... 247
J.3

Nhn xt................................................................................................ 250

Ph lc K

Cu trc v ngha cc thnh phn ca mt project Android...251

Ph lc L

Hng dn s dng, thao tc chnh trn chng trnh

eSaleShopping ..................................................................................................... 253


L.1

S lin kt cc mn hnh chc nng trong ng dng eSaleShopping . 253

L.2

Gii thiu chc nng ca mn hnh chnh .............................................. 254

L.2.1

Cc chc nng trn mn hnh chnh................................................ 254

L.2.2

Thc n (menu) chc nng ca mn hnh chnh ........................... 255

L.3

Thao tc trn mn hnh chp m vch ................................................... 256

L.3.1

S dng chc nng chp m vch .................................................. 256

L.3.2

Cc chc nng thc hin sau khi chp c m vch hng ha ...... 259

L.4

Thao tc trn mn hnh tm theo danh mc hng ha ............................. 262

L.5

Thao tc trn mn hnh tm theo chui .................................................. 264

L.6

Thao tc trn mn hnh tm theo h thng siu th ................................. 265

L.6.1

Thao tc chnh................................................................................ 265

L.6.2

Thao tc trn cc chc nng trn mt siu th c chn................ 267

L.6.3

Tm hng ha siu th theo chui.................................................... 269

L.6.4

Tm hng ha siu th theo m vch ............................................... 269

L.6.5

Tm hng ha siu th theo danh mc ............................................. 270

L.7

Thao tc qun l danh sch hng ha a thch ....................................... 270

L.8

Thao tc qun l danh sch hng ha cn mua ...................................... 271

L.8.1

Thao tc thm hng cn mua .......................................................... 272

L.8.2

Thao tc xa hng cn mua ............................................................ 272

L.8.3

Thao tc gi tin nhn hng cn mua ............................................... 273

Ph lc M

Cc cu trc, m lnh, ng dng tham kho c s dng

trong ng dng eSaleShopping .......................................................................... 275


M.1

B g Ting Vit IME ........................................................................... 275

M.2

Chp m vch hng ha (barcode)......................................................... 276

M.3

ng dng bn v v tr ...................................................................... 279

M.3.1

Cc tham s Google Map h tr tm kim ng i ....................... 279

M.3.2

Th hin ng i trn bn Google Map ................................... 280

M.3.3

Cch thc tm v tr thit b thng qua GPS hoc mng .................. 281

M.4

ng dng EndlessList ........................................................................... 282

M.4.1

Gii php ca M.Murphy ............................................................... 282

M.4.2

Gii php ca Evan Charlton .......................................................... 283

M.5

M ngun android-misc-widgets ........................................................... 284

M.5.1

Hiu ng hot cnh ........................................................................ 285

M.5.2

Cc widget mi .............................................................................. 285

DANH MC CC HNH
Hnh ph lc 1 H iu Hnh Android Ca Google - Phn trm ngi d nh mua
smart phone dng h iu hnh Android trong vng 90 ngy ti (theo
ChangeWave) ................................................................................................. 19
Hnh ph lc 2 ng T l s ngi dng d nh mua smart phone dng h iu
hnh gia t thm d 09/2009 v 12/2009 (theo ChangeWave) .................... 20
Hnh ph lc 3 T l ngi dng smart phone trong t thm d thng 12/2009
(theo ChangeWave) ........................................................................................ 21
Hnh ph lc 4 Biu s ngi mua smart phone trong vng 90 ngy ti th nh
sn xut smart phone no d nh mua gia t thm d thng 9/2009 v
12/2009 (theo ChangeWave) .......................................................................... 22
Hnh ph lc 5 Mc Hi Lng Da Trn H iu Hnh Trong t Thm D
Thng 12/2009 (theo ChangeWave) ............................................................... 23
Hnh ph lc 6 D liu thng k trong 2 tun cui t ngy 4/1/2010 ..................... 25
Hnh ph lc 7 Thng k so snh ba phin bn h iu Android gia hai thi im
17/12/2009 v 04/01/2010 .............................................................................. 25
Hnh ph lc 8 Th phn cc h iu hnh trn smart phone theo tng khu vc ..... 26
Hnh ph lc 9 Th phn h iu hnh trn ton th gii ........................................ 27
Hnh ph lc 10 Biu cnh tranh gia iPhone v Android t 01/01/2009 n
01/12/2009 ..................................................................................................... 28
Hnh ph lc 11 Kin trc Android theo tng tng (ngun developer.Android.com)
....................................................................................................................... 42
Hnh ph lc 12 Trang web ti v Java SE trn Windows ...................................... 46
Hnh ph lc 13 Mc Eclipse cn ti v lm IDE cho pht trin Android .......... 47
Hnh ph lc 14 Mc cn ti v ADT (ngun developer.Android.com) ................. 49
Hnh ph lc 15 Biu din trnh t v quan h gia Java SE, Android SDK, ADT v
Eclipse. .......................................................................................................... 49
Hnh ph lc 16 Mc Android SDK cn ti v dng trn Windows .................. 50
Hnh ph lc 17 La chn mc Java SE (JDK) 6 ................................................... 51

Hnh ph lc 18 La chn ti v bn JDK mi nht............................................... 51


Hnh ph lc 19 Chn la phin bn JDK ph hp vi my trm .......................... 52
Hnh ph lc 20 La chn ni lu tr tp tin JDK v my ..................................... 52
Hnh ph lc 21 Chp nhn iu khon s dng JDK v tin hnh ci t ............. 53
Hnh ph lc 22 La chn ng dn ci t b JDK ....................................... 53
Hnh ph lc 23 Mc la chn bn Eclipse ph hp vi h thng.......................... 54
Hnh ph lc 24 La chn th mc lu tr b Eclipse ........................................... 54
Hnh ph lc 25 Gii nn b IDE Eclipse .............................................................. 55
Hnh ph lc 26 Chn Work space lm vic khi khi ng Eclipse................... 55
Hnh ph lc 27 Mc chn cp nht thm phn mm mi vo Eclipse .............. 56
Hnh ph lc 28 Chn ng dn ng b bn ADT t Google ........................ 56
Hnh ph lc 20 La chn cc plug-in cn ci t vo Eclipse ............................... 57
Hnh ph lc 30 La chn tp tin ADT.zip cp nht vo Eclipse ...................... 58
Hnh ph lc 31 Chn ng dn ti tp tin ADT.zip............................................ 58
Hnh ph lc 32 Chn cp nht ng dn ti b Android SDK trn Eclipse ........ 59
Hnh ph lc 33 Trnh n qun l cc b Android SDK v my o ...................... 60
Hnh ph lc 34 Mc qun l cc thit b Android o ............................................ 61
Hnh ph lc 35 Mc cp nht cc gi h tr lp trnh Android mi nht t Google
....................................................................................................................... 61
Hnh ph lc 36 Hnh minh ha cho vic cp nht mt gi h tr mi nht t
Google ........................................................................................................... 62
Hnh ph lc 37 Mc to mi mt din thoi Android o ...................................... 63
Hnh ph lc 38 Th mc cha b Android SDK .................................................. 65
Hnh ph lc 39 Cc th mc bn trong b Android SDK ..................................... 66
Hnh ph lc 40 Mc to mi mt project Android................................................ 67
Hnh ph lc 41 Cc thng s cn quan tm khi thit lp mt project Android mi
....................................................................................................................... 68
Hnh ph lc 42 Khung ng dng ca HelloNhatTrungApp .................................. 71
Hnh ph lc 43 Mn hnh thit k giao din cho Android ..................................... 72

10

Hnh ph lc 44 Mn hnh hin nt nhn xa TextViews ...................................... 73


Hnh ph lc 45 Mn hnh hin nt thm TextView .............................................. 73
Hnh ph lc 46 Mn hnh thm mi mt widget vo giao din ............................. 74
Hnh ph lc 47 Mn hnh chn thm mi mt EditText ....................................... 75
Hnh ph lc 48 Mn hnh thm mi mt LinearLayout ........................................ 75
Hnh ph lc 49 Mn hnh thm mt Button .......................................................... 76
Hnh ph lc 50 Mn hnh giao din hon chnh .................................................... 77
Hnh ph lc 51 Cc th XML to nn giao din ng dng HelloNhatTrungApp .. 77
Hnh ph lc 52 Mn hnh thng bo li m ha chui khi lu Ting Vit ............ 79
Hnh ph lc 53 Mn hnh chn thuc tnh ca mt project ................................... 80
Hnh ph lc 54 Mn hnh la chn thuc tnh m ha k t ................................. 81
Hnh ph lc 55 Mn hnh chy mt ng dng Android t Eclipse ........................ 82
Hnh ph lc 56 Mn hnh minh ha trng thi chy ca mt ng dng................. 83
Hnh ph lc 57 Mn hnh i ng dng x l xong .............................................. 83
Hnh ph lc 58 Mn hnh thao tc x dng ng dng HelloNhatTrungApp ......... 84
Hnh ph lc 59 Mn hnh giao din chnh ca Android 2.1 .................................. 84
Hnh ph lc 60 cu trc ng dng Android trn Eclipse ....................................... 85
Hnh ph lc 61 Cu trc th mc ca mt project Android trn b nh ............... 87
Hnh ph lc 62 Mnh hnh khung nhn Java ......................................................... 88
Hnh ph lc 63 Ca s Package Explorer ............................................................. 89
Hnh ph lc 64 Thc n ng cnh ca mt project Android ............................... 90
Hnh ph lc 65 Hp thoi Properties/Resource ca mt project Android ............. 91
Hnh ph lc 66 Hp thoi Properties/Android ca mt project Android .............. 92
Hnh ph lc 67 Hp thoi Properties/Java Build Path ca mt project Android ... 93
Hnh ph lc 68 Thc n ng cnh ca mt tp tin .Java ..................................... 94
Hnh ph lc 69 Thc n ng cnh Source trn mt tp tin .Java......................... 95
Hnh ph lc 70 Hnh minh ha cho mt ghi ch m lnh ca mt phng thc ... 96
Hnh ph lc 71 Thc n ng cnh Refactor trn mt tp tin .Java ...................... 97
Hnh ph lc 72 Mn hnh Outline ........................................................................ 98

11

Hnh ph lc 73 Mn hnh Outline ........................................................................ 99


Hnh ph lc 74 Khung nhn DDMS ..................................................................... 99
Hnh ph lc 75 Khung nhn ca File Explorer .................................................... 100
Hnh ph lc 76 Khung nhn ca Devices ............................................................ 101
Hnh ph lc 77 Khung nhn ca Emulator Control ............................................. 101
Hnh ph lc 78 Mn hnh Development Settings h tr lp trnh ci sn trn in
thoi Android o ........................................................................................... 102
Hnh ph lc 79 Khung nhn Debug .................................................................... 103
Hnh ph lc 80 Mn hnh th hin cng on debug .......................................... 104
Hnh ph lc 81 Tab Debug trong khung nhn Debug .......................................... 105
Hnh ph lc 82 Tab Variables trong khung nhn Debug ..................................... 106
Hnh ph lc 83 Tab Breakpoints trong khung nhn Debug ................................. 106
Hnh ph lc 84 Tab Expressions trong khung nhn Debug ................................. 107
Hnh ph lc 85 Tab th hin dng hin hnh ang kim li................................ 107
Hnh ph lc 86 Tab LogCat, Progress, Search, ErrorLog ................................... 108
Hnh ph lc 87 Vng i ca mt Activity ........................................................ 118
Hnh ph lc 88 Vng i ca mt Service ......................................................... 123
Hnh ph lc 89 Hnh minh ha mi quan h gi Eclipse, ADT v Android SDK 126
Hnh ph lc 90 Hnh minh ha cng c DDMS.................................................. 127
Hnh ph lc 91 Hnh minh ha cng c Hierarrchy Viewer................................ 128
Hnh ph lc 92 Cu trc dng cy khi phn tch mt khung giao din ang c
thc thi trn mn hnh .................................................................................. 129
Hnh ph lc 93 Hnh minh ha cng c Pixel Perfect View ............................... 130
Hnh ph lc 94 nh ngha dng hnh NinePatch (Google) ................................ 130
Hnh ph lc 95 Hnh minh ha cho vic thit k mt nh nn ca mt nt nhn
dng nh dng hnh NinePatch .................................................................... 131
Hnh ph lc 96 Hnh nhn nh v thuc tnh Strecthable ca nh Nine Patch ... 132
Hnh ph lc 97 Hnh nhn nh v thuc tnh Padding ca nh Nine Patch ........ 133
Hnh ph lc 98 Hnh minh ha cng c Draw 9-patch........................................ 134

12

Hnh ph lc 99 Hnh minh ha cch thc dng dng lnh thc thi cng c adb
..................................................................................................................... 135
Hnh ph lc 100 Hnh minh ha cch thc to bin mi trng (Windows XP) . 135
Hnh ph lc 101 Hnh minh ha giao din ng dng NhatTrungHelloAndroid .. 138
Hnh ph lc 102 on m lnh XML to giao din cho ng dng
NhatTrungHelloAndroid .............................................................................. 138
Hnh ph lc 103 Hnh minh ha cho vic ko th giao din t khung Layouts v
Views ........................................................................................................... 139
Hnh ph lc 104 Hnh minh ha cho vic to giao din t khung Outline........... 139
Hnh ph lc 105 Hnh minh ha vic thm mt phn t mi t khung Outline ... 140
Hnh ph lc 106 Cc cng c h tr bn trong th mc Android SDK ............... 141
Hnh ph lc 107 Giao din cng c Hierarchy Viewer ....................................... 141
Hnh ph lc 108 Nhm thuc tnh thng gp trn mt TextView ..................... 143
Hnh ph lc 109 Nhm thuc tnh thng gp trn mt LinearLayout ............... 143
Hnh ph lc 110 Hnh nh cc View di gc nhn hng i tng ................. 144
Hnh ph lc 111 Hnh nh minh ha ca mt Linear Layout .............................. 145
Hnh ph lc 112 Hnh nh minh ha ca mt Relative Layout ........................... 146
Hnh ph lc 113 Hnh nh minh ha ca mt Absolute Layout .......................... 147
Hnh ph lc 114 Hnh nh mt s View thng dng........................................... 148
Hnh ph lc 115 Hnh nh minh ha cu trc dng cy ca mt giao din bt k
..................................................................................................................... 148
Hnh ph lc 116 Hnh minh ha to giao din bng m lnh XML .................... 149
Hnh ph lc 117Hnh minh ha to giao din bng Java..................................... 149
Hnh ph lc 118 Cu trc xy dng giao din bng XML .................................. 150
Hnh ph lc 119 Hnh minh ha vic qun l cc View thng qua nh danh ID 152
Hnh ph lc 120 Hnh minh ha mt Linear Layout ........................................... 154
Hnh ph lc 121 Hnh minh ha cho thuc Layout_weight ................................ 157
Hnh ph lc 122 Hnh minh ha cho mt Table Layout ..................................... 158
Hnh ph lc 123 Hnh minh ha cho mt Frame Layout..................................... 160

13

Hnh ph lc 124 Hnh minh ha cho mt Absolute layout .................................. 162


Hnh ph lc 125 Hnh minh ha Relative Layout ............................................... 163
Hnh ph lc 126 Hnh minh ha cc iu khin khc ......................................... 165
Hnh ph lc 127 Hnh minh ha cc iu khin khc ......................................... 165
Hnh ph lc 128 Hnh minh ha cho mt Spinner trong Android ....................... 168
Hnh ph lc 129 Danh sch la chn khi nhn vo Spinner ............................... 169
Hnh ph lc 130 Hnh minh ha vic to Giao din c cha Spinner.................. 169
Hnh ph lc 131 Hnh minh ha Gallery ............................................................ 171
Hnh ph lc 132 Hnh nh minh ha ca mt ListView...................................... 174
Hnh ph lc 133 Minh ha vic to mt List View ............................................. 174
Hnh ph lc 134 Hnh minh ha mt Custom ListView ..................................... 175
Hnh ph lc 135 Hnh minh ha cch thc lm mt custom row cho mt ListView
..................................................................................................................... 176
Hnh ph lc 136 Hnh minh ha cch thc lm mt ListView ............................ 176
Hnh ph lc 137 Hnh nh minh ha mt GridView n gin ............................ 178
Hnh ph lc 138 Cch thc to mt GridView .................................................. 178
Hnh ph lc 139 Hnh nh minh ha mt Custom GridView .............................. 180
Hnh ph lc 140 Cch thc to mt Custom Item cho mt Grid View................ 180
Hnh ph lc 141 Hnh minh ha cch thc to mt GridView ............................ 180
Hnh ph lc 142 Tp tin quy nh hot cnh chuyn ng.................................. 183
Hnh ph lc 143 Hnh nh minh ha s h tr ca Eclipse gip to hiu ng hot
cnh.............................................................................................................. 184
Hnh ph lc 144 Hnh minh ha cho Tweened Animation .................................. 185
Hnh ph lc 145 Cng c h tr thit k hot cnh t Eclipse ............................ 186
Hnh ph lc 146 Hnh minh ha mt Frame-by-frame animation n gin......... 190
Hnh ph lc 147 Hnh nh mt b MediaController h tr vic pht Video tt hn
..................................................................................................................... 194
Hnh ph lc 148 Hnh minh ha vic gi in dng ACTION.CALL................. 196
Hnh ph lc 149 Hnh minh ha vic gi in dng ACTION.DIAL ................. 196

14

Hnh ph lc 150 Hnh minh ha tin trnh v lung ........................................... 199


Hnh ph lc 151 Lp trnh lung dng Message ................................................. 200
Hnh ph lc 152 Hnh minh ha lp trnh lung ................................................. 201
Hnh ph lc 153 Lp trnh lung dng Post ........................................................ 202
Hnh ph lc 154 Hnh minh ha thc n ca h thng ..................................... 203
Hnh ph lc 155 Hnh minh ha thc n ng cnh ........................................... 203
Hnh ph lc 156 Hnh minh ha to menu bng m lnh Java ............................ 204
Hnh ph lc 157 Hnh minh ha to menu bng XML........................................ 204
Hnh ph lc 158 Hnh minh ha thao tc to menu thng qua cng c h tr c
tch hp bn trong Eclipse (ADT) ................................................................. 207
Hnh ph lc 159 Hnh minh ha to thc n ng cnh ..................................... 212
Hnh ph lc 160 Hnh minh ha dng font ch khc trong Android ................... 213
Hnh ph lc 161 Hnh minh ha cc thc chn font ch thng thng m Android
h tr............................................................................................................ 213
Hnh ph lc 162 Hnh minh ha th mc cha tp tin font ch (.ttf) trong mt
project Android ............................................................................................ 214
Hnh ph lc 163 Hnh minh ha hp thoi c nt nhn ...................................... 217
Hnh ph lc 164 Hnh minh ha hp thoi dng danh sch chn ........................ 217
Hnh ph lc 165Hnh minh ha hp thoi dng danh sch la chn RadioButton
..................................................................................................................... 218
Hnh ph lc 166 Hnh minh ha hp thoi dng ProgressDialog ........................ 219
Hnh ph lc 167 Hnh minh ha ProgressDialog dng thanh trt ngang ........... 219
Hnh ph lc 168 Hnh minh ha to hp thoi t mt gioa din ......................... 220
Hnh ph lc 169 Hnh minh ha th mc cha cc lu tr Preferences nm trong
h thng ca in thoi ................................................................................. 221
Hnh ph lc 170 Hinh minh ha th mc mc nh lu tr tp tin SQLite ca mt
ng dng trn h thng Android ................................................................... 228
Hnh ph lc 171 Hnh minh ha th mc cha tp tin debug.keystore (Windows 7)
..................................................................................................................... 236

15

Hnh ph lc 172 Hnh minh ha trang web ly m ng Google Maps ApiKey t


Google ......................................................................................................... 238
Hnh ph lc 173 Hnh minh ha Date widget ..................................................... 241
Hnh ph lc 174 Hnh minh ha Time widget .................................................... 241
Hnh ph lc 175 Hnh minh ha giao din dng Tab trong Android ................... 242
Hnh ph lc 176 M XML minh ha cho vic to mt khung ng dng Tab n
gin .............................................................................................................. 243
Hnh ph lc 177 Hnh minh ha cu trc ca mt Tab widget ............................ 243
Hnh ph lc 178 Hnh minh ha cho mt EndlessList c p dng vo
eSaleShopping.............................................................................................. 247
Hnh ph lc 179 S lin kt cc mn hnh ca ng dng eSaleShopping ...... 253
Hnh ph lc 180 S lin kt cc mn hnh ca ng dng eSaleShopping (tip)
..................................................................................................................... 254
Hnh ph lc 181 Mn hnh chnh ca ng dng eSaleShopping ......................... 254
Hnh ph lc 182 Menu chc nng ca mn hnh chnh ....................................... 256
Hnh ph lc 183 Mn hnh chp v tm kim hng ha da theo m vch .......... 256
Hnh ph lc 184 Cc bc tin hnh ti v ng dng Barcode Scanner .............. 257
Hnh ph lc 185 Mn hnh chp thng tin ca mt m vch hng ha ............... 258
Hnh ph lc 186 Mn hnh hin th kt qu c c t qu trnh chp m vch 258
Hnh ph lc 187 Mn hnh gi tm hng ha theo chui .................................. 259
Hnh ph lc 188 Mn hnh danh sch hng ha ng vi mt m vch no .... 260
Hnh ph lc 189 Mn hnh thm thng tin ca mt hng ha vo danh sch hng
ha cn mua ................................................................................................. 261
Hnh ph lc 190 Mn hnh danh sch cc hng ha a thch .............................. 261
Hnh ph lc 191 Mn hnh thng tin chi tit ca mt hng ha .......................... 262
Hnh ph lc 192 Mn hnh tm kim theo danh mc hng ha v loi hng ha
tng ng ..................................................................................................... 262
Hnh ph lc 193 Mn hnh danh sch hng ha .................................................. 263
Hnh ph lc 194 Mn hnh tm kim hng ha theo chui .................................. 264

16

Hnh ph lc 195 Menu ca mn hnh tm kim hng ha theo chui .................. 264
Hnh ph lc 196 Mn hnh tr gip ngi dng tm kim hiu qu hn ............. 265
Hnh ph lc 197 Mn hnh tm theo danh sch h thng cc siu th .................. 266
Hnh ph lc 198 Mn hnh danh sch siu th con ca h thng siu th ............. 266
Hnh ph lc 199 Cc chc nng khi chn vo mt siu th trong mt h thng siu
th ................................................................................................................. 267
Hnh ph lc 200 Mn hnh thng tin chi tit ca mt siu th ............................. 268
Hnh ph lc 201 Mn hnh thng tin bn ng i n siu th ..................... 269
Hnh ph lc 202 Menu ca ng dng bn ng i n siu th .................... 269
Hnh ph lc 203 Mn hnh tm kim theo danh mc hng ha v loi hng ha
tng ng ..................................................................................................... 270
Hnh ph lc 204 Mn hnh danh sch cc mt hng a thch .............................. 271
Hnh ph lc 205 Mn hnh danh sch hng ha cn mua .................................... 271
Hnh ph lc 206 Menu ca mn hnh danh sch hng cn mua .......................... 272
Hnh ph lc 207 Mn hnh thm hng ha cn mua ........................................... 272
Hnh ph lc 208 Mn hnh xa hng cn mua .................................................... 273
Hnh ph lc 209 Hp thoi hi ngi dng c thc s mun xa mt mt hng no
hay khng ................................................................................................ 273
Hnh ph lc 210 Mn hnh gi tin nhn hng cn mua ....................................... 274
Hnh ph lc 211 Mn hnh s dng b g Ting Vit IME trn Android 1.5 v 2.1
..................................................................................................................... 276
Hnh ph lc 212 Ni dung ca mt gi m ngun ZXing ................................... 277
Hnh ph lc 213 M ngun ZXing dnh cho HH Android ............................... 277
Hnh ph lc 214 ng dng v ng i trn bn Google Map trong
eSaleShopping.............................................................................................. 281
Hnh ph lc 215 Hnh minh ha v bug li ca EndlessAdapter ......................... 283
Hnh ph lc 216 Hnh minh ha ca ng dng Magnatune ................................ 284
Hnh ph lc 217 Cc lp to hiu ng chuyn ng c dng li trong ng dng
eSaleShopping.............................................................................................. 285

17

Hnh ph lc 218 ng dng Panel to khung ch ng i trn bn trong


eSaleShopping.............................................................................................. 286
Hnh ph lc 219 ng dng Switcher to la chn hnh thc bn hng trong
eSaleShopping.............................................................................................. 286

18

Ph lc A

Cuc thm d h iu hnh Android khuy

ng th trng smart phone


Tc gi Paul Carton v Jean Crumrine
Ngy 04 thng 01 nm 2010
H iu hnh Android ca Google ra i cch y hn mt nm v n c
mong i l h iu hnh c th thay i c th trng smart phone trn ton th
gii.
Theo t thm d 4068 khch hng t ngy 9 n ngy 14 thng 12 ca
ChangeWave vi ch h iu hnh Android nh hng n th trng smart
phone, th trong thi im c 4% ni l h ang dng h iu hnh Android c
ngha l tng 3% so vi t thm d ca ChangeWave trong thng 9.
Nhng quan trng hn, 21% trong nhng ngi ni d nh mua smart
phone dng h iu hnh Android trong vng 90 ngy ti.

H iu Hnh Android Ca Google


Phn trm ngi d nh mua smartphone dng h iu
hnh Android trong vng 90 ngy ti
25%
21%

20%
15%
10%
5%
0%

1%

2%

2%

4%

4%

6%
3%

Phn trm ngi d nh


mua smartphone dng h
iu hnh Android trong
vng 90 ngy ti

Hnh ph lc 1 H iu Hnh Android Ca Google - Phn trm ngi d nh mua smart phone dng
h iu hnh Android trong vng 90 ngy ti (theo ChangeWave)

Trong t thm d trc tc l thng 09/2009, ch c 6% s ngi c


hi tr li l s mua smatphone dng h iu hnh Android trong vng 90 ngy ti

19

nhng trong thi im thng 12/2009 th con s tin ln 21% ginh v tr th


2 sau h iu hnh iPhone OS X chim 28% mc d gim 4% so vi t thm d
trc .
35%
30%

32%
28%

25%
21%
20%

18%
17%

t thm d (09/2009)

15%

t thm d (12/2009)
9%

10%
6%

6%

5%

6%
3%

0%
iPhone OS X

Google
Android

BlackBerry
RIM OS

Windows
Palm
Mobile OS/Web OS

Hnh ph lc 2 ng T l s ngi dng d nh mua smart phone dng h iu hnh gia t thm
d 09/2009 v 12/2009 (theo ChangeWave)

Tri li vi s tng vt ca Google Android, RIM OS ch tng nh 1%, cn


Windows Mobile v Palm OS/Web OS gim 3% t t thm d thng 9/2009.
Nhng con s rt ra t nhng t thm d y c nh hng ln i vi cc nh sn
xut smart phone. Nhng ng ghi nhn l s tng tng ny din ra ngay ti thi
im m nghnh cng nghip sn xut smart phone nhn chung ln mnh.
Hn na, 42% trong s ngi tham gia t thm d ni l h ang dng
smart phone, tng 3% so vi t thm d thng 09/2009. Thm vo , 12,8%
ngi trong t thm d ni l h d nh mua smart phone trong vng 90 ngy ti,
y l con s ln nht t trc ti nay trong cc t thm d kin ngi dng ca
ChangeWave.

20

45%

T l s ngi dng smartphone trong t


thm d thng 12/2009
42%

40%
37%

35%
32% 32%

30%
27%

25%

22% 23%
20% 21%

20%
15%

17%
15% 16%

39%

34%
T l s
ngi
dng
smartph
one

10%
5%
0%

Hnh ph lc 3 T l ngi dng smart phone trong t thm d thng 12/2009 (theo ChangeWave)

Trong t thm d ny, khi ChangeWave a ra cu hi l nu bn mun


mua smart phone trong 90 ngy ti th nh sn xut smart phone no m bn chn
mua vi kt qu l biu sau:

21

40%
35%
30%

25%

36%
32%
27%
21%

20%
13%

15%
10%
5%

t thm d 09/2009

9%
5%

8%

t thm d 12/2009
4%

1%

0%

Hnh ph lc 4 Biu s ngi mua smart phone trong vng 90 ngy ti th nh sn xut smart
phone no d nh mua gia t thm d thng 9/2009 v 12/2009 (theo ChangeWave)

Mc d th phn sc mua iPhone ca Apple gim t 36% cn 32% k t t


thm d thng 09/2009 nhng n vn tip tc ng u trong th trng smart
phone. Trong t thm d ny cho thy iPhone vn ng v tr c tn i vi th
trng smart phone trong thi gian sp ti.
Khng ging nh cch y mt nm khi m nhng sn phm mi ca
Blackberry to ra s y mnh cho RIM, s lng ngi dng d nh mua
RIM gim 6 im cn 21%. Nhng m chng ta ghi nhn rng trong na u nm
2010 RIM a ra mt vi mu Backberry vi cc phin bn Tour, Pearl, Bold, v
Curve v iu c ngha l gip ngn chn s ln mnh ca Android v s
thng tr ca iPhone trong lng khch hng.
Cn v Palm, 6 thng sau khi Palm Pre pht hnh, t l s ngi dng d
nh mua my Palm gim t 8% trong t thm d 9/2009 cn 4% trong t thm
d 12/2009. R rng l Palm b mt kt gia h iu Android ang ln v hai nh
cnh tranh smart phone hng mnh l RIM v Apple. Bin php i ph ln nht
ca Palm l pht hnh nhiu mu in thoi mi da trn hai nh phn phi mng
ln l Verizon v AT&T, ha hn s khi sc trong tng lai.

22

Xt gc mc tha mn ngi dng di ng, th iPhone OS X tip tc


dn u trong tt c cc nh sn xut in thoi di ng vi 77% s ngi ni l h
rt hi lng vi iPhone. Vi chi tit theo biu sau:

Mc Hi Lng Da Trn H iu Hnh


Trong t Thm D Thng 12/2009
T l ngi dng ni l h rt hi lng vi h iu hnh trn
smart phone ca h ang dng
90%
80%
70%
60%
50%
40%
30%
20%
10%
0%

77%

72%

41%
33%
25%

iPhone OS X

Google
Android

Blackberry RIM Palm OS/ Web


OS
OS

T l ngi
dng ni l
h rt hi
lng vi h
iu hnh
trn smart
phone ca
h ang
dng

Windows
Mobile

Hnh ph lc 5 Mc Hi Lng Da Trn H iu Hnh Trong t Thm D Thng 12/2009 (theo


ChangeWave)

Trn l nhng tng hp t bi bo co ca ChangeWave do 2 tc gi Paul


Carton v Jean Crumrine a ra vo ngy 04/01/2010. So vi thi im m kha
lun ny bo co th con s c th khc i i cht v th trng in thoi smart
phone dn khi sc sau t khng hong kinh t th gii trong nm 2009.
Nh phn tch trong chng 1 ca cun kha lun th Android ang vn
ln l h iu hnh tim nng trong tng lai v c th vn ln ng v tr dn u
trong nhiu kha cnh v lm c chuyn th cn s hp tc ca cc bn
trong Hip hi cc thit b cm tay m (OHA).

23

Ph lc B
trong

Nhng thng k th v v Google Android

nhng

nm

gn

(theo

iTech.vn

ngy

25/01/2010)
H iu hnh non tr ca Google c mt nm 2009 rt thnh cng, nht
l trong 2 qu cui nm ngoi. y c xem l bc m vng chc Google
Android tip tc gt hi c nhng thnh cng trong nm 2010:
c s hu thun to ln t Google v cc nh sn xut di ng hng u
hin nay nh HTC, Motorola, Sony Ericsson, Samsung, Acer, h iu hnh Google
Android ang dn c nhiu ngi bit n v tr thnh mt i th ng gm
cho cc h iu hnh di ng khc nh Windows Mobile, Symbian v c bit l
RIM OS, WebOS v iPhone OS trong phn khc in thoi thng minh.
Di y l nhng thng k mi nht lin quan n nn tng di ng linh
hot v mnh m ny:

B.1

Nhng thng k t Google


Ging nh thng trc, Google cng a ra cc s liu mi nht v th phn

cc thit b chy trn cc phin bn Android khc nhau. y l cc s liu rt cn


thit v rt quan trng dnh cho cc nh pht trin phn mm, gip h c mt ci
nhn tng qut hn v cc phin bn h iu hnh Android.
Theo s liu t Google, phin bn Android 1.6 l nn tng ph bin nht hin
nay trong cc nn tng Android, vi 47.6%. Tip theo sau l phin bn Android 1.5
v Android 2.0.1 (phin bn Android mi nht, ang c s dng trn Motorola
Droid).

24

Hnh ph lc 6 D liu thng k trong 2 tun cui t ngy 4/1/2010

So snh t 17/12/2009 n 4/1/2010, cc dng in thoi s dng phin bn


Android 1.5 v Android 2.x u tng, trong khi cc thit b s dng Android 1.6 li
gim, nhng trong khong thi gian ny, khng c di ng no cp nht ln cc nn
tng Android 2.x. iu ny c th l gii l s lng bn ra ca cc dng di ng s
dng Android 1.5 v Android 2.x tng cao, ko theo th phn ca 2 nn tng ny
c tng thm.

Hnh ph lc 7 Thng k so snh ba phin bn h iu Android gia hai thi im 17/12/2009 v


04/01/2010

Trong s liu thng k mi nht ny, khng c s ng gp t Google Nexus


One, di ng mi nht ca Google ang s dng Android 2.1.

25

B.2

Nhng thng tin ng ch


78.9% cc thit b ang chy trn nn tng c k l Android 1.5, 1.6 u c

trng i l s nng cp ln phin bn mi nht vo qu 2/2010


C 31% cc di ng khng s dng nhng ng dng mi nht t Google nh
chc nng ch ng min ph Google Maps Navigation, phin bn Android Market
mi, hay ng dng Goggles (cc ng dng ny i hi phi s dng phin bn
Android 1.6 tr ln)
21.1% cc di ng h tr cm ng a chm tch hp sn vo h iu hnh
(Android 2.x).

B.3

Bo co ca Admob
Cng ty qung co trn di ng Admob va mi a ra cc thng k mi

nht v th phn cc h iu hnh di ng trn cc dng smart phone trong qu


4/2009.
Theo th phn h iu hnh phn chia theo tng khu vc, Android l h iu
hnh ph bin ti khu vc Bc M vi 43% v Ty u vi 8%. V th phn smart
phone tnh trn ton th gii, Android t c 16%, ng v tr th 3, sau iPhone
vi 51% v Symbian vi 21%.

Hnh ph lc 8 Th phn cc h iu hnh trn smart phone theo tng khu vc

26

Hnh ph lc 9 Th phn h iu hnh trn ton th gii

Ti th trng M, th phn ca Android ang tng rt n tng v ang ly


i mt phn th phn t iPhone OS. Trong thng 12, th phn ca iPhone t 46%
trong khi th phn ca Android tng ln 36%.
Theo nhiu chuyn gia d on c nhiu kh nng th phn ca Android s
vt qua iPhone trong nm nay, khi s lng cc dng smart phone chy Android
ang tng ln rt nhanh. Mi y nh mng AT&T cng cam kt s gn b vi
Android khi c k hoch phn phi 5 mu smart phone mi chy Android trong
nm nay (bao gm cc dng smart phone ca Motorola, Dell v HTC). Nh vy l
sp ti y th trng M s c n 4 nh mng khng dy ln nht phn phi cc
dng di ng chy Android, bao gm Verizon, Sprint, T-Mobile v mi nht l
AT&T.

27

Hnh ph lc 10 Biu cnh tranh gia iPhone v Android t 01/01/2009 n 01/12/2009

Lu : Bo co ca Admob c thng k qua nhng hot ng trn cc ng


dng v mobile sites nm trong mng qung co ca Admob.

B.4

Bo co ca Myxer
Bo co ca Myxer, cng ty gii tr trn di ng vi hn 30 triu thnh vin

cho thy lng ngi dng truy cp vo website ca cng ty qua di ng s dng
Android tng n 350% trong nm 2009, vt qua tng trng ca iPhone vi
170%.
Phc Trn (Theo AndroidAndMe- ReadWriteWeb - Gigaom)

28

Ph lc C

Danh sch cc cng ty trong Hip hi cc

thit b cm tay m
Cc nh
iu
hnh
mng

Tp
on
truyn thng
di ng Trung
Quc
Vin
thng
mng lin hip
Trung quc
Cng ty NTT
DoCoMo

Vin
thng
Bouyguee

Tp on
truyn thng
Trung Quc
Tp
on
KDDI

Cng ty
phn
mm

Tp on di
ng
SOFTBANK
Sprint Nextel

Truyn thng

T-mobile

Vodafone

Tp
on
Ascender

eBay

Google

KivingImage
LTD

Myriad

Cng ty truyn
thng Nuance

Cng ty phn
mm OMRON

PacketVideo

SkyPop

SONiVOX

Telefonica

29

SVOX
Cng ty
bn dn

Cc nh
sn
xut di
ng

Cng ty bn
dn AKM

Audience

ARM

Truyn thng
Atheros

Tp
on
Broadcom

CSR Plc

Tp on bn
dn Cypress

Cng ty bn
dn Freescale

Tp on Intel

Cng ty bn
dn Marvell

Cng ty cng
ngh MIPS

Tp
on
NVIDIA

Qualcomm

Cng
ngh
Renesas

ST-Ericsson

Cng
Synaptics

Texas
Instruments
Incoporated
Acer

Via Telecom

ty

in thoi di
ng Alcatel

Cng ty my
tnh AsusTek

Foxconn
International
Holdings
Limited

30

Cng ty quc
t Garmin

Tp on HTC

Cng
ngh
Huawei

Kyocera

Lenovo

LG

Motorola

Samsung

Sony Ericsson

Toshiba

Tp on ZTE

31

Ph lc D

Cc smart phone dng h iu hnh

Android
HTC
Dng
in Ngy ra mt
thoi
HTC Bravo
Sp ra mt

Hnh nh
Android 2.0

NexusOne

05/01/2010

Android 2.1

HTC Tattoo

07/09/2009

Android 1.5

HTC Hero

24/06/2009

Android 1.5

HTC Magic

30/04/2009

Android 1.5

32

HTC
Dream(G1)

05/02/2009

Android 1.5

Qu 2 nm 2009

Android 1.5

Motorola
Milestone

Qu 1 nm 2010

Android 2.0

Motorola
BackFlip

Qu 1 nm 2010

Android 1.5

Motorola
(DEXT
MB220)

Cliq Qu 4 nm 2009

Android 1.5

SAMSUNG
Galaxy i7500

MOTOROLA

ACER

33

Acer Liquid

Qu 4 nm 2009

Android 1.6

SONY ERICSSION
Sony Ericsson Qu 1 nm 2010
XPERIA X10

Androi 1.6

34

Ph lc E

So snh cc h iu hnh hin c trn

smart phone

Android

Blackberry

iPhone

S60 5th

Palm

Windows

Cupcake

OS 4.7

OS 3.0

Edition

WebOS

Mobile 6.5

Cc thng s c bn
Loi

Linux

S hu

OS X

Symbian

Linux

Windows

nhn

ring

CE

kh Xut sc

Tt

Km

Xut sc

Xut sc

Xut sc

Tui i Mi

Trng

Lu nm

Trng

Mi

Trng

ca nn

thnh

m ca
nn tng
thnh

thnh

tng
Doanh

Khng

nghip

BlackBerr

Exchange,

Exchange

Exchange,

Domino,

Domino,
BlackBerry

tc

blakcBerr

tr

u tin
Cng

GSM,

GSM,

GSM,

GSM,

GSM,

GSM,

ngh kt WiFi

CDMA,

WiFi

WiFi

CDMA,

CDMA,

ni

WiFi

WiFi

WiFi

khng
dy
Giao din ngi dng

35

5th Palm

Android

Blackberry

iPhone

S60

Cupcake

OS 4.7

OS 3.0

Edition

WebOS

Mobile 6.5

Hn ch

Hn ch

in dung

in tr / in dung in dung

Ra hiu C

Windows

trn mn
hnh
Cng

in dung in dung

in dung

ngh
mn
hnh
a cm C
ng

Khng

Khng

Khng

Khng

(khng
chnh
thc)

Lp bao C
giao
din
Phng

Bn phm Bn phm Bn phm Bn phm Bn phm Bn

thc

o,

nhp
liu

bn o

phm

o,

bn vt l

o,

bn

phm vt

phm

vt

phm

vt

l,

kh

l,

nng nhn

nhn

din k t

din k t,
T9
Tnh nng chnh

Kiu

5th Palm

Android

Blackberry

iPhone

S60

Cupcake

OS 4.7

OS 3.0

Edition

WebOS

Mobile 6.5

Pop-up

Pop-up

Khay

Khay, Pop-

Khay

thng

Pop-up,
nn

Windows

up

bo
Cng c Google

BES, BIS

Exchange,

36

Exchange,

Synergy

Exchange,

qun l /

ActiveSyn

Danh b

c, Mac OS BlackBerr

BlackBerry

tng

Address

thch

Book

X l a C

Domino,

Domino,

y, iSync

ActiveSync

Khng

Ovi

Amazon

Windows

nhim
Ct

/ C

dn
H

tr Amazon

Non-DRM iTunes
iTunes

Media

phng

Player

tin
Global

Khng

Khng

Khng

OTA

Tethered,

Tethered

Tethered,

Khng r

Tethered,

Search
Cp
nht

OTA

OTA

OTA

firmwar
e
Trnh

Webkit

duyt

hu Webkit

Webkit

Webkit

ring

Tetherin

(khng

Internet
Eplorer

chnh
thc)
Stereo

Bluetoot
h
Kh nng h tr cc nh pht trin
Android

Blackberry

iPhone

S60

Cupcake

OS 4.7

OS 3.0

Edition

37

5th Palm
WebOS

Windows
Mobile 6.5

SDK

Ca

Trung

Trung

Cao

Trung

Thp

Cao

hng
ng
dng
trc
tuyn
ng

dng b bnh

bnh

bnh

sung
Cc ng Khng

Khng

Khng

Tt

Xut sc

Tt

Xut sc

Tt

dng
ban u
Kh

Xut sc

nng
qun l
ng
dng
trn
thit b

38

Ph lc F

Hai HH smartphone Android v iPhone

tng trng nhanh nht


Ngy ng: 25/2/2010 lc 9h20
Theo nghin cu ca Gartner, HH iPhone qua mt Windows Mobile,
chim hng 3 sau Symbian v BlackBerry.
Hng nghin cu Gartner hm th Ba cho bit, trong nm 2009, Android v
iPhone l 2 HH tng trng nhanh nht, doanh s ca HH iPhone ca Apple
qua mt Windows Mobile. Hai HH Symbian v BlackBerry (RIM Research In
Motion) vn dn u th trng.
S TD thng minh (smartphone)
chy HH Symbian bn ra trn th gii t
80,9 triu my trong nm 2009, tng so vi
72,9 triu trong nm trc. Gartner cho bit,
v tng s smartphone bn ra tng trng
nhanh hn, t 139,3 triu my nm trc ln
n 172,4 triu, th phn ca Symbian
gim 46,9%. Th phn ng hng nh ca
RIM tng ln 19,9% so vi 16,6% ca nm
2008.
HH smartphone ca Apple ng hng 3 vi s iPhone bn ra trong nm
2009 l 24,9 triu my, so vi 11,4 triu ca nm 2008, t 14,4% th phn.
HH smartphone ca Windows rt xung hng 4 khi th phn gim t
11,8% xung 8,7% v s bn gim 1,5 triu my. Theo Roberta Cozza, nh phn
tch nghin cu chnh ca Gartner, phin bn Windows Phones 7 Series mi tung ra
c v l mt HH cnh tranh hn, nhng v TD dng HH mi ny n cui

39

nm nay mi c trnh lng nn doanh s vn s phi c vn ln trong sut nm


2010.
Linux, trong c LiMo nhng khng bao gm Android, s cn phi ln n
trong th trng smartphone. Th phn ca Linux gim t 7,6% xung cn 4,7%
trong nm 2009.
Android ch ng hng 6 trong nm 2009 vi th phn 3,9%. Tuy nhin, con
s ny s sm thay i. Doanh s TD Android tht s bt u tng trong qu
4/2009. Bn triu trong tng s 6,8 triu my c bn ra trong qu cui nm 2009.
Theo Cozza, 69% trong s ny c bn Bc M nh chng trnh khuyn mi
TD Motorola Droid ca hng Verizon Wireless.
WebOS ca Palm mi xut hin trn danh sch ca Gartner vi hng 7, th
phn l 0,7%.
Trong khi th trng smartphone bng n th tng doanh s TD trn th
gii l 1,2 t my, gim khong 1% so vi nm 2008, Gartner cho bit.
Huy Thng
Theo InfoWorld, 23/2/2010

40

Ph lc G

Lp trnh trn Android

G.1 Tng quan Android


G.1.1 nh ngha Android
Android l h thng tun t cc phn mm cho thit b di ng bao gm h
iu hnh, cc trnh iu khin phn cng v cc ng dng c bn.
G.1.2 Tnh nng v kin trc Android
G.1.2.1

Tnh nng

Android gm cc tnh nng nh sau:


Khung ng dng: cho php ti s dng li cc ng dng c sn.
My o Dalvik: l my o c tinh chnh dnh ring cho thit b di
ng chy trn nn Android. Cc chng trnh Java a phn chy trn my
o Java; trong khi , Dalvik l my o dng chy ng dng Java trn di
ng Android.
Trnh duyt web c tch hp sn: c da trn b m ngun m
Webkit.
H thng x l ha c ti u ha: gm th vin ha 2D, th
vin ha 3D da trn nn OpenGL (ty theo tng loi phn cng ha
ca di ng).
SQLite: dng cho lu tr c s d liu cc b.
Media: h tr nh dng cc tp tin m thanh, video, v hnh nh
thng thng nh: MPEG4, H.264, MP3, AAC, AMR, JPG, PNG v GIF.
in thoi GSM vi cc chc nng nghe gi, tin nhn.
H tr hu ht cc phng thc kt ni Bluetooth, EDGE, 3G, v
Wifi (ty thuc theo phn cng in thoi) .
H tr cc phn cng: Camera, GPS, la bn s, v cm nhn gia tc
(ty thuc theo phn cng in thoi).

41

Mi trng pht trin a dng: bao gm thit b my o, cng c


kim li (debug), b nh v cng c cung cp thng tin gi lp v plugin cho
Eclipse.
G.1.2.2

Kin trc Android

Hnh ph lc 11 Kin trc Android theo tng tng (ngun developer.Android.com)

Hnh ph lc G. -1 trnh by cc thnh phn ln trong h iu hnh Android.


Mi phn c trnh by chi tit trong cc mc bn di.
G.1.2.3

ng dng (Application)

Android bao gm mt b cc ng dng chnh nh trnh nhn email, trnh


nhn tin SMS, lch, bn , trnh duyt web, danh b v cc chng trnh ph tr
khc. Tt c cc ng dng s dng ngn ng lp trnh Java.
G.1.2.4

Khung ng dng

Nh Android cung cp nn tng pht trin m, cc nh pht trin c th xy


dng cc ng dng a dng v sng to. Cc nh pht trin c th dng cc phn

42

cng thit b, ly thng tin v tr, chy ngm cc dch v, thit lp cnh bo, thm
thng bo vo thanh trng thi v nhiu ci khc na.
Cc nh pht trin c th tc ng su vo khung API m cc ng dng
chnh ang dng. Kin trc ng dng c thit k n gin ti s dng li cc
thnh phn trong ng dng . Nh ng dng mua sm xem gi c c th s dng
li ng dng chp m vch BarcodeZXing.
Tt c cc ng dng nn l mt b cc dch v v h thng, bao gm:
B cc View a dng v c th ty bin bao gm: danh sch
(listView), li (gridView), textbox, nt (Button), v cc View khc.
Content Provider: cho php ng dng ly d liu t ng dng khc (v
d danh b) hoc chng chia s d liu vi nhau..v .v . . .
Resource Manager: cho php truy xut cc ngun ti nguyn cc b
nh chui tnh, hnh nh v tp tin khai bo giao din, .v. v
Notification Manager: cho php ng dng trnh by cnh bo ty bin
trn thanh trng thi.
Activity Manager: qun l vng i ng dng.
hiu thm v khung ng dng, cc bn c th tm hiu thm trong project
Notepad.
G.1.2.5

Th vin

Android bao gm b th vin C/C++ c dng bi ng dng chnh ca h


thng Android. Thng qua khung ng dng (Application framework), cc nh pht
trin c th tip cn su vo li th vin bao gm:
Th vin h thng C: c rt ra t th vin h thng C chun (libc).
Th vin media: da tn OpenCORE ca PacketVideo, mt b th
vin h tr c, ghi li nhiu nh dng m thanh, video, hnh nh nh:
MPEG4, H.264, MP3, AAC, AMR, JPG, v PNG.
Surface Manager: qun l giao din bao gm lp giao din 2D v 3D.

43

LibWebCore: l b th vin trnh duyt web mi h tr trnh duyt


Android v WebView.
SGL: h thng ha 2D c s.
Th vin 3D: da trn OpenGL ES 1.0 API; th vin gm phn cng
h tr 3D v phn mm h tr ti u 3D.
FreeType: trnh by kiu ch v hnh nh.
SQLite: h thng c s d liu c kch thc nh nhng mnh m cho
tt c ng dng.
G.1.2.6

Android Runtime

Android bao gm b th vin chnh, cung cp hu ht cc tnh nng cho b


th vin k trn v dng ngn ng Java.
Mi ng dng Android chy trn tin trnh ring ca n vi mt th hin
(instance) ring ca n trn my o Dalvik. Dalvik gip thit b chy nhiu my o
cng lc. My o Dalvik chy nhiu tp tin nh dng .dex c ti u ha cho my
c b nh thp. My o c khai bo v chy cc lp c bin dch bi trnh bin
dch ngn ng Java m mi va c chuyn sang nh dng .dex bi cng c c
sn dx.
My o Dalvik l thuc vo li Linux cho cc tnh nng c bn nh l lung
v qun l b nh mc thp.
G.1.2.7

Li Linux

Android da trn nn Linux phin bn 2.6 cho cc chng trnh h thng


chnh nh an ninh, qun l b nh, qun l tin trnh, mng v mu trnh iu khin
thit b. Nhn Linux cng ng vai tr nh l lp o gia phn cng v phn cn li
ca kin trc Android.

G.2 Gii thiu Java SE JDK, Android SDK , ADT, Eclipse v cc


bc ci t
G.2.1 Gii thiu Java SE JDK, Android SDK, ADT, DDMS, Eclipse v
mi lin h gia chng
44

G.2.1.1

Gii thiu chung

vit ng dng Android, chng ta cn Java SE Development Kit (JDK),


Android SDK, mi trng pht trin phn mm (IDE) v cc cng c h tr pht
trin phn mm Android trn IDE .
Mt cch ngng cung m ni, ta c th lp trnh trn bt c trnh son
tho vn bn no nhng lm vy s mt rt nhiu thi gian trong khi lp trnh ng
dng Android vi IDE v cc cng c i km c s h tr cao v cc cng c h tr
lp trnh giao din, kim li, h tr bin dch chng trnh,
K t cc mc sau tr i ta i su vo tnh nng tng thnh phn v cch thc ti v
i tng thnh phn.
G.2.1.2

Gii thiu Java SE Development Kit (JDK)

Java SE l h thng nn tng Java v thng c ci t ln cc my trm,


my PC hay laptop tin li cho cc nh lp trnh tin hnh pht trin cc ng
dng c nn tng Java. Cho nn d mun d khng th khi lp trnh vi ng dng
Java trn my trm hay laptop hay PC th trn my phi c Java SE Development
Kit (JDK).
Android SDK l b pht trin ng dng Android trn nn Java v n i hi
Java SE JDK phin bn 5 hay cao hn. Ta c th ti v Java SE JDK ti a ch sau:
http://Java.sun.com/Javase/downloads/widget/jdk6.jsp. Hip hi cc thit b cm tay
m v Google chn Java l nn tng xy dng Android khng ch c l do l n
l m ngun m m cn l do quan trng khng km l n c h tr trn nhiu h
iu hnh khc nhau t Windows, Macintosh (x86), Solaris cho n Linux.

45

Hnh ph lc 12 Trang web ti v Java SE trn Windows

Trn l Java SE JDK l nn tng, cn lp trnh trn Java th c nhiu mi


trng pht trin phn mm (IDE) chng hn nh Eclipse, Netbean, Phn sau ta
s tm hiu k hn v IDE Eclipse.
G.2.1.3

Gii thiu Eclipse IDE

V nguyn tc m ni, bn c th dng bt k mi trng pht trin phn


mm Java no m bn thch pht trin ng dng. Thm ch bn c th dng
NotePad ca Windows vit cc m lnh nhng lm th s tn rt nhiu thi gian
v kh phc tp. i vi Android, th theo nh Google khuyn co dng Eclipse
c s h tr ti a t cc cng c lp trnh Android m Google cung cp. Theo
chng ti bit, Netbean cng c th lp trnh c ng dng Android nhng v mt
n nh v h tr th chng ti cha phn tch k v dng th. T chc OHA v
Google khuyn co dng Eclipse v Eclipse c th thc thi trn nhiu h iu hnh
khc nhau m khng cn ci t trn chng. Ton b gi ng dng Eclipse c th
ti v ti a chi sau: http://www.eclipse.org/downloads/ . Phin bn Eclipse IDE ti

46

thiu l 3.4 (Ganymede) hay 3.5 (Galileo) nhng theo chng ti nn chn phin bn
Eclipse mi nht trn a ch ti v Eclipse bn trn t c s h tr ti a t
Eclipse IDE.

Hnh ph lc 13 Mc Eclipse cn ti v lm IDE cho pht trin Android

Nh vy c Elipse v JDK ta c th lp trnh ng dng Java ngay trn cc


my trm c. Do chng ta lp trnh ng dng Android nn cn JDK c nn
tng lp trnh Java, c IDE Eclipse lp trnh ng dng trn , by gi ta cn
thm mt Android SDK h tr vit ng dng c th Android vi nhng cng c
h tr ca n cng vi Eclipse c th vit ng dng Android hon chnh. Eclipse
v Android SDK hiu nhau th ta cn c cng c pht trin phn mm Android c
tc mi Eclipse v Android SDK hiu nhau. Mc d theo l thuyt m ni,
ADT l nhng cng c nm trong Android SDK nhng ADT phi c ci t hay
ng b ha trc vi Eclipse to ly tt c cc bng cp nht nn tng
Android v cho Android SDK.
G.2.1.4

Gii thiu plugin ADT


47

ADT l plugin m rng c tch hp vo mi trng pht trin phn mm


Eclipse. N cho php ta to v kim li ng dng Android d dng hn v nhanh
chng hn. Nu bn dng Eclipse. Plugin ADT s gip bn c cc cng vic sau:
Truy xut trc tip n cc cng c pht trin Android khc bn trong
Eclipse. V d, ADT cho php truy xut n chc nng ca cng c DDMS
nh: chp mn hnh, qun l lin kt vi thit b, t im dng kim li,
v xem thng tin cc lung v tin trnh tr tip t Eclipse.
N cung cp New Project Wizard, m gip ta to v thit lp tt c
cc tp tin c bn cn thit cho mt ng dng Android mi.
N t ng ha v lm n gin ha tin trnh xy dng ng dng
Android.
N cung cp trnh bin tp m lnh Android m gip bn vit lnh
XML cho tp tin AndroidManifest v cc tp tin ti nguyn khc.
Xut ra tp tin .apk ng k (signed) hoc cha ng k
(unsigned) m phn phi ng dng cho ngi dng cui.
Ni chung, dng Eclipse vi plugin ADT, chng ta c th li dng tnh nng
cp nht t xa ca Eclipse. Bng cch thit lp mt trang cp nht t xa, bn c th
d dng ti v, ci t, v kim tra nhng cp nht ADT. Tht cht ADT khng ci
t ring l hay chy trn tp tin thc thi m n c nh vo Eclipse di dng
plugin.Ta ti v ADT di dng plugin dnh cho Eclipse thng qua 2 hnh thc l:
Cp nht v 2 cng c thng dng l DDMS v ADT ln Eclipse qua
ng lin kt https://dl-ssl.google.com/android/eclipse/ th s c mc chn
nh ni l DDMS v ADT. Hai phn ny s c nh km vo Android
v y l hai plugin mi ti v nn tng Android da trn th mc
Android SDK m ta thit lp sau .
Hay ti v tp tin ADT ti http://developer.Android.com/SDK/eclipseadt.html v sau nh km n vo Eclipse cng qua ng Help/Install
New Software c mc Add trn khung thoi Install th ta s Add achive cho

48

n. Ngay lp tc Eclipse s h tr cc cng c v trnh n cn thit thit


lp Android SDK vi nn tng h iu hnh cc cc cng c khc ca
Android SDK.

Hnh ph lc 14 Mc cn ti v ADT (ngun developer.Android.com)

ADT l cng c h tr lp trnh c lc c gn thm trn Eclipse cc


nh pht trin Android lm vic tt hn. Ta cng c th nhn nh ADT nh l
chic cu ni gia Eclipse v Android SDK. Ta tm tt li theo m hnh sau:

Eclipse
ADT
Android SDK
Java SE JDK
Hnh ph lc 15 Biu din trnh t v quan h gia Java SE, Android SDK, ADT v Eclipse.

Mt khi thit lp ADT xong, ta s ti v tp tin Android SDK nh ADT


trn Eclipse thit lp gia Eclipse IDE v Android SDK.
G.2.1.5

Gii thiu Android SDK

Android SDK l nn tng xy dng ng dng Android trn nn Java v c


cung cp trc tip trn trang web: http://developer.Android.com/SDK/index.html
vi 3 phin bn dnh cho ba h iu hnh khc nhau gm Windows, Mac v Linux.

49

Hnh ph lc 16 Mc Android SDK cn ti v dng trn Windows

Android SDK l mt tp tin dng nn .zip v khi gii nn ra th ta s c mt


th mc /android-sdk-windows cng vi cc th mc /tools vi cc cng c i km
pha bn trong nhng th mc /platform th vn cn trng cha c g. Nhim v duy
nht ca ta hin gi l kt ni Eclipse v Android SDK hiu nhau sau cp nht
li nn tng v cc cng c cho Android SDK.
Mt khi thit lp tham chiu n th mc Android SDK cho Eclipse th trn
Eclipse c mc Android SDK and AVD Manager ti v cc thnh phn nn tng
m chng ta cn nh l nn tng Android, cc SDK add-on, cc cng c, v ti liu
hng dn.
G.2.2 Cc bc ci t lp trnh Android
G.2.2.1

Ci t Java (JDK)
Vo trang http://developers.sun.com/downloads/ ti b JDK mi

nht v my tnh.
Tin hnh theo cc bc sau ci t JDK.
Chn mc Java SE Java SE (JDK) 6

50

Hnh ph lc 17 La chn mc Java SE (JDK) 6

Ti v phin bn JDK 6 update 18

Hnh ph lc 18 La chn ti v bn JDK mi nht

Chn h thng ci t l Windows v tin hnh ti JDK v

51

Hnh ph lc 19 Chn la phin bn JDK ph hp vi my trm

Chn ni lu tr

Hnh ph lc 20 La chn ni lu tr tp tin JDK v my

Tin hnh ci t JDK

52

Hnh ph lc 21 Chp nhn iu khon s dng JDK v tin hnh ci t

Hnh ph lc 22 La chn ng dn ci t b JDK

Ch trong t pht qu trnh ci t hon tt.


G.2.2.2

Ci t Eclipse
Vo trang http://www.eclipse.org/downloads/ ti v b Eclipse

phc v vic pht trin ng dng Android.


Tin hnh theo cc bc sau ci t Eclipse.
Chn bn Eclipse IDE for Java Developer (92MB), phin bn
dnh cho Windows 32bit.

53

Hnh ph lc 23 Mc la chn bn Eclipse ph hp vi h thng

Chn ni lu tr b Eclipse. Ta chn a C lu tr.

Hnh ph lc 24 La chn th mc lu tr b Eclipse

Sau khi ti v ton b file nn ti a C, ta tin hnh gii nn.

54

Hnh ph lc 25 Gii nn b IDE Eclipse

Sau khi gii nn ta thu c th mc tng ng l c:\eclipse. Bn


trong th mc s c file thc thi chy chng trnh Eclipse, tin li
hn ta nn to Shortcut cho Eclipse ngoi mn hnh Desktop.
Qu trnh thit lp Eclipse hon tt.
G.2.2.3

Thit lp ADT (Android Development Tools)


Khi ng Eclipse
Chn Workspace thch hp(ng dn ti th mc s cha ton b

cc project Android, v d: C:\Documents and Settings\Admin\workspace).

Hnh ph lc 26 Chn Work space lm vic khi khi ng Eclipse

Thit lp thng s cp nht ADT vo Eclipse.


Chn HelpInstall New Software.

55

Hnh ph lc 27 Mc chn cp nht thm phn mm mi vo Eclipse

Ta s c 2 cch thc cp nht plugin ADT vo Eclipse v ty


theo hon cnh s dng cch 1 hoc cch 2 .
Cch 1: ci t plugin ADT thng qua ng b ha vi
th mc Eclipse trn Google khi ta cha c tp tin
ADT.zip.
o Sau khi nhn nt Add, ta s nhp a ch http://dlssl.google.com/android/eclipse/ vo Location
v nhn OK

Hnh ph lc 28 Chn ng dn ng b bn ADT t Google

56

o Chng trnh s kim tra phin bn ADT mi


nht v thng bo li cho ngi dng chn nh
trong hnh minh ha bn di.

Hnh ph lc 29 La chn cc plug-in cn ci t vo Eclipse

o Chn vo tt c cc mc v nhn Next. Chng


trnh s tin hnh vic cp nht plugin ADT.
Cch 2: ci t plugin ADT thng qua file zip. Cch
ny tin li hn so vi cch 1 trn do tit kim c
thi gian v nhanh chng.
o Ti v b plugin ADT mi nht (ti thi im
ca bi vit l phin bn plugin ADT 0.9.5)
thng

qua

ch

http://dl.google.com/android/ADT-0.9.5.zip. Lu
tp tin ny vo a C ca my tnh, lu l
khng gii nn.
57

o Chn nt Add, sau chn nt Archive

Hnh ph lc 30 La chn tp tin ADT.zip cp nht vo Eclipse

o Chn file ADT-0.9.5.zip a cha (v d a


C) v nhn Open

Hnh ph lc 31 Chn ng dn ti tp tin ADT.zip

58

o Ch trong t pht chng trnh Eclipse cp


nht thng tin t bn ADT-0.9.5.zip ny.
Khi ng li Eclipse hon tt vic cp nht ADT Plugin cho
Eclipse.
G.2.2.4

S dng plugin ADT thit lp, cp nht Android SDK v

thit lp in thoi o Android.


Cp nht Android SDK vo Eclipse
Sau khi ci t ADT thnh cng, ta tin hnh thit lp Android
SDK cho Eclipse. Chn Windows/Preferences, tip theo chn mc
Android v ch ra ng dn ti th mc ang cha b Android SDK (v
d c:\android-sdk-windows\), sau nhn chn OK. Lu , nn ti v v
gii nn Android SDK trc khi ci t ADT cho Eclipse.

Hnh ph lc 32 Chn cp nht ng dn ti b Android SDK trn Eclipse

59

Chn thc n Windows/ Android SDK and AVD Manager (mc


ny ch xut hin khi ci t plugin ADT thnh cng).

Hnh ph lc 33 Trnh n qun l cc b Android SDK v my o

Ta s thy ca s Android SDK and AVD Manager xut hin.


Trong c 3 chc nng chnh:
Virtual Devices: Qun l in thoi Android o.
Installed Packages: Qun l cc gi h tr Android
c ci t vo Eclipse.
Available Packages: Thng tin cc gi h tr Android
mi (SDK, ti liu hng dn, cng c.v.v) t
Google.

60

Hnh ph lc 34 Mc qun l cc thit b Android o

Ci t Android SDK:
Chn mc Available Packages pha bn tri ca Android SDK
and AVD Manager v ch chng trnh cp nht thng tin cc gi h tr
Android mi nht.

Hnh ph lc 35 Mc cp nht cc gi h tr lp trnh Android mi nht t Google

61

Hnh ph lc 36 Hnh minh ha cho vic cp nht mt gi h tr mi nht t Google

Nhn chn vo cc gi SDK m ta mong mun (hnh minh ha


ang chn b Android SDK 1.6 dnh cho Windows), nhn nt Install
Selected tin hnh ti v cp nht.
Thit lp in thoi Android o h tr pht trin ng dng.
Chn mc Virtual Devices pha bn tri ca Android SDK and
AVD Manager, chn New.

62

Hnh ph lc 37 Mc to mi mt din thoi Android o

Cc mc sau cn quan tm khi to mt in thoi Android o:


Name: tn in thoi Android o cn to.
Target: chn phin bn Android SDK m ta mun pht
trin ng dng.
SD Card: m phng th nh cho in thoi. Ta c th
chn kch thc cho th nh o (n v tnh l MiB hay
KiB) hoc tm chn th nh o c thit lp sn t
trc (l mt tp tin c phn m rng l .iso c to
sn t trc. Bn c th tham kho vic to tp tin iso
trn Internet hay lnh mksdcard c trong th mc
\android-sdk-windows\tools).

63

Ngoi ra, cn c cc mc chn nh: thay i skin, thm s h


tr phn cng o cho in thoi Android o v ty theo mc ch s dng
m cc phn ny c ty chnh li theo mun.
Nhn nt Create AVD to in thoi o Android.
Tt c cc thit lp, tp tin to in thoi Android o, th nh
o (file .iso) m ta to bng mc chn Size u tp trung ti th mc
C:\Documents and Settings\<UserName>\.android\avd (Windows XP)
hay tng t ti cc h iu hnh khc.
G.2.2.5

Nhn xt:

Vi s h tr ca b ADT mi nht t Google (plugin ADT 0.9.5) vic lp


trnh pht trin ng dng trn nn h iu hnh Android thun tin hn rt nhiu
nh l ta c th ti v cc b Android SDK mi nht t Google hoc to v qun l
tt hn cc in thoi Android o thng qua giao din ngi dng trc quan (hp
thoi Android SDK and AVD Manager) v cc bc tin hnh n gin m iu
ny gn nh l kh khn i vi cc phin bn ADT tr v trc (mi th u phi
thit lp bng dng lnh gy kh khn cho cc lp trnh vin khi mi tip cn
Android).
G.2.3 Cc iu lu sau khi ci t
G.2.3.1

Ch vic to my o

Trong khi to my o th bn ch vic chn SD Card. C 2 cch chn SD


Card:
Size: nhp vo kch thc v to mi mt SD Card i km chung vi
my o .
File: cho chon mt tp tin .iso lm SD Card ca my o nh vy th
my o v SD Card tch ri nhau.
Gia 2 cch trn th mi cch c mt li v hi ring ca n. Theo kinh
nghim chng ti th nu:

64

Chn Size: th bn s t gp li hn khi b t kt ni gia Eclipse v


my o hoc ta tt ngang my o trong khi ang kim li (debug), ... V d
nh, khi ang debug ng dng trn thit b o m bn tt my o th bo
th ln sau, ta khi ng my o li v chy bnh thng. Nhng nu mt khi
ta xa my o i th tp tin SD Card trong my o cng b mt i.
Chn File: th s thng xuyn b li hn khi b vng phi cc vn
trn mc chn Size. Do mi mt tp tin .iso ch c dng bi mt my
o, khi my o chy th n to ra tp tin kha ngay bn cnh tp tin iso ,
khi chng ta tt ngang hay c li xy ra th tp tin kha cha c xa i
nn nhng ln sau ta khi ng s b li khi khi ng my o. Nhng b li,
tp tin iso vn cn y nguyn khi ta xa my o i trn hp thoi
AVD Manager.
G.2.3.2

Ch n cc th mc pht sinh v nhim v tim nng

ca chng
Nh ni trong cc phn trc ca chng ny, trong th mc Android
SDK cha cc cng c v ti liu cho vic lp trnh Android. Ta ch vo hnh sau:

Hnh ph lc 38 Th mc cha b Android SDK

Nhp vo android-sdk-windows ta ch hnh sau:

65

Hnh ph lc 39 Cc th mc bn trong b Android SDK

Ta cn ch cc th mc sau:
Add-ons: cha cc b APIs cho b th vin ca Google nh Google
Maps chng hn. Trong cha cc phng thc cng vi ti liu hng
dn cho t b API.
Docs: cha ti liu hng dn cc b hm cho ton Android.
Platform: cha cc nn tng Android tng ng vi tng my o chy
trn tng h iu hnh Android tng ng.
Tools: Trong ny cha tt c cc cng c h tr lp trnh Android.
SDK Setup: y l tp tin khi ng hp thoi tng ng vi hp
thoi c m bi trnh n Android SDK v AVD Manager.
Ngoi ra, khi to my o, bn trong th mc C:\Users\<user>\.android
(Windows 7) c tp tin debug.keystore. Hy nh tp tin debug.keystore ny v sau
ny nh tp tin ny m ta c th lp trnh vi bn Google Map.
G.2.3.3

Tham kho su vo cc tp tin h thng nn tng

Bn c th vo th mc ..\android-sdk-windows\platforms\android-2.1 v
tm ti trong . C rt nhiu thnh phn m c c th vc nh data, images,
samples, skins, templates v tools. Nhng th mc ny cha cc v d v cc tp tin
h thng v giao din cng nh cc ti nguyn m ta c th tham kho rt tt. Theo
kinh nghim chng ti, trong th mc \sample v th mc \data c rt nhiu ti
nguyn cho cc bn tham kho.

66

G.3 Bc

lm

quen

vi

Android

HelloNhatTrungApp
G.3.1 Cc bc to project HelloNhatTrungApp
G.3.1.1

Bc 1: To project mi

Chn File/New/ Android Project

Hnh ph lc 40 Mc to mi mt project Android

Bn s thy khung thoi sau:

67

qua

project

Hnh ph lc 41 Cc thng s cn quan tm khi thit lp mt project Android mi


Error! No text of specified style in document.-1 Khung thoi thit lp Android projet mi

Cc bn quen vi lp trnh ng dng Java trn Eclipse s lm quen rt


nhanh vi khung thoi ny, nhng cn vi cc bn cha quen vi lp trnh ng
68

dng Java trn Eclipse th s mt khong thi gian hiu cc khi nim c bn
nh Package name hay Contents vi cc ty chn khc nhau. T mn hnh ny,
chng ti s gii thch s lc mi mc chng ti chn l g chng ta c th lm
quen vi ng dng u tay ca cc bn.
in vo tn ng dng Project name: HelloNhatTrungApp. Do chng ta to
ng dng mi t u cho nn ta chn mc Create new project in workspace trong
phn Contents. Nu to ng dng mi t ngun code c sn th ta chn mc Create
project from existing source. Cn nu khng th chn Create project from existing
sample nu mun chy th cc v d c sn c trong th mc ../Android-SDKwindows/add-ons/. Chng ta tm tm gn cc mc trong Contents nh sau:
Create new project in workspace: To ng dng Android hon ton
mi.
Create project from existing source: To ng dng Android t ngun
c sn.
Use default location: chn ni lu ng dng Android mc nh.
Create project from existing sample: To ng dng Android t v d
sn c ca Android SDK.
Phn Build target cho ta chn cc phin bn h iu hnh m ng dng s
c ci ln nhn c s h tr t h iu hnh. V d nh nu ta vit ng
dng c nhn bit ging ni th phi chn Android 2.1 vi API mc 7 nhn s
h tr t h iu hnh. Ngoi ra, nu ng dng c s dng cc hm h tr bn
hay cc dch v khc t Google th ta chn Google API 2.1 mc 7. Nhn chung,
v c bn Google API 2.1 cng ging nh Android 2.1 nhng c thm cc h tr
bn v cc hm dch v khc t Google cung cp. Tm tm gn cc mc trong
Build target nh sau:
Android 1.1: ng dng s c ci t trn thit b di ng c h iu
hnh Android 1.1. Tng t cho cc Android 1.5, 1.6, 1.6, 2.0, 2.01, 2.1.

69

Google APIs 1.5, 1.6, 2.0, 2.01, 2.1: ng dng s c h tr trn cc


h iu hnh tng ng nh Android 1.5, 1.6, 2.0, 2.01, 2.1 v thm vo
n h tr cc hm APIs ca cc dch v do Google a ra nh bn chng
hn.
Application name l tn chnh thc ca ng dng. y chng ti nhp tn
HelloNhatTrungApp.
Ta ch k hn phn Package name l tn gi Package. y, cc bn
quen vi lp trnh ng dng trn Eclipse th quen vi Package v theo nguyn tc
package thng bt u bng com v tip theo sau l cc tn ni tip sau bi cc
du chm th tng ng vi tng tn nm gia cc du chm th s to ra cc th
mc tng ng. V d nh com.hellonhattrung.nhat.trung th n s to ra th mc
/com/hellonhattrung/nhat/trung cha cc lp ng dng.
Mc chn Create Activity: to ra Activity m hng cho ng dng.
Min SDK Version: chn phin bn SDK nh nht m ng dng mun c
h tr.
Cui cng l chn Finish bt u project.
Bn s thy project nm bn tri mn hnh trong mc Package Explorer vi
tn l HelloNhatTrungApp trng khp vi tn Project name nh trn.

70

Hnh ph lc 42 Khung ng dng ca HelloNhatTrungApp

Ta s to chng trnh u tay ca cc bn vi kch bn sau: mn hnh


c nhp liu cho bn nhp tn vo; sau nhn chn nt Cho Android th s hin
khung thoi Cho mng bn n vi Android.
Chng ta bt u qua bc 2 to giao din cho mn hnh
G.3.1.2

Bc 2 Lp trnh giao din

Mn hnh giao din nm trong file main.xml trong th mc ../res/layout ca


ng dng. Ta nhp p vo main.xml th mn hnh thit k giao din s hin ra
gia mn hnh cng vi cc control.

71

Hnh ph lc 43 Mn hnh thit k giao din cho Android

Ta thit lp li Config ng khung hng nht

l Potrait

thit k mn hnh ng thay v nm ngang nh hin ti. Bn tri phn Layout v


View ln lt gip bn to khung cha cha cc Views trong phn Views m
cc bn ko vo t bn tri. Mt cch khc thm giao din vo mn hnh l dng
cc nt lnh bn tay phi c bao bi mu vng

. Phn

Outlines ny c thit k gip nh pht trin nhn r c giao din chng


trnh theo dng cy vi cc thuc tnh c biu th ngay di Tab Properties c
bao bi mu vng ngay bn di mn hnh. Ta c th thay i thuc tnh cc
Layout v Views ngay y. Cc nt mi tn xanh ln xung

dng di

chuyn layout v View ln xung trong tng cp bc th t cn nt cng


tr

gip ta thm hay xa cc Views ngay trn mn hnh.


Ta to giao din mn hnh theo trnh t sau:
Chnh li Config l Portrait
72

Trn Outlines, nhp chn TextView v nhn vo du tr mu


xa TextViews i.

Hnh ph lc 44 Mn hnh hin nt nhn xa TextViews

Dng chut ko r layout LinearLayout trong Layouts vo mn hnh


thit k.
Nhp chn LinearLayout mi va ko vo trn Outlines v nhp vo
du cng mu xanh

thm vo mt TextView v EditViews tng ng

vi Label v TextBox bn C#.

Hnh ph lc 45 Mn hnh hin nt thm TextView

Ta s thy hp thoi:

73

Hnh ph lc 46 Mn hnh thm mi mt widget vo giao din

Ta thm vo TextView v vo thuc tnh Text tab Properties i


thnh chui Mi bn nhp tn. Ch : ty thuc vo tng h iu hnh ca
my trm bn ang dng cho nn tt nht bn nn chy chng trnh g
ting Vit vi quyn Administrator mi c th g ting Vit c du trn
Eclipse.

74

Hnh ph lc 47 Mn hnh chn thm mi mt EditText

Tip tc nhp chn LinearLayout01 v nhp chn nt du cng mu


xanh

v tip tc thm vo mt EditText. Ta nhp chn EditText mi va

thm v xa cc chui thuc tnh Text ca n di tab Properties. Sa


thuc tnh Single line thnh false, v thuc tnh Width thnh 200 dip (vi dip
l n v kch thc).

Hnh ph lc 48 Mn hnh thm mi mt LinearLayout

Nhp chn vo LinearLayout trn cng ca cy giao din trn


Outline, k tip nhp vo du cng hin khung thoi v thm vo mt
LinearLayout th 2. Cng nhp chn vo LinearLayout02 mi va thm vo
v nhp chn du cng

thm vo Button.

75

Hnh ph lc 49 Mn hnh thm mt Button

Nhp chn Button v vo thuc tnh Text v sa thnh Cho Android.


Ta cn ch thm l cc i tng no s c thit lp li cc thuc
tnh hay cc hnh ng th ta nn sa li thuc tnh ID cho d nh. Do
TextView01 khng thay i thuc tnh hay phng thc nn ta nguyn
ID, cn EditText01 v Button01 s thay i thuc tnh v s kin nhp chn
nn ta ln lt sa li thuc tnh ID trong tab Properties ca chng cho d
nh.
Nhp chn TextView01 vo thuc tnh ID sa li thnh
@+id/EditTextTenCuaBan

tng

cho

Button01

thnh

@+id/ButtonChaoAndroid. Nhng ID ny s l nh danh cho cc i tng


trong lp trnh cc s kin v thuc tnh ca chng trong Android.
Ta iu ng t xu nh canh chnh thuc tnh Layout gravity ca
LinearLayout02 thnh center canh gia ButtonChaoAndroid.

76

Hnh ph lc 50 Mn hnh giao din hon chnh

Cc bn c th xem tp tin giao din ca chng ta mi va to lp di hnh


thc xng xu .xml bng cch click vo tab main.xml ngay di tay tri ca
mn hnh hiu chnh.

Hnh ph lc 51 Cc th XML to nn giao din ng dng HelloNhatTrungApp

Cc bn c th lp trnh trc tip bng dng lnh xml nhng chng ti e rng
n s kh khn hn nhiu so vi vic ko th hay cch thm vo nh chng ti
ngh.
Nh vy, to mn hnh giao din bc u hon thnh xong.
G.3.1.3

Bc 3 Lp trnh x l

Khc so vi C#, ta lp trnh s kin bng cch nhp p vo i tng ngay


trn mn hnh th s pht sinh hm s kin cho i tng. y, trong ng dng

77

Android ny th lp giao din c tch bch khi lp trnh bng tp tin XML v
vic lp trnh nh vo ID nh danh tng i tng.
Nhp p vo HelloNhatTrungApp.Java lp trnh cho cc s kin.
Lp HelloNhatTrungApp m rng hay k tha t lp Activity qun
l cc tng tc ca ngi dng trn mn hnh. Lp ny c mn hnh chnh l main
vi setContentView(R.layout.main). Cng vic ca chng ta l thit lp vic ngi
dng nhp tn vo EditText v nhp chn bt Cho Android th hin khung thoi c
ni dung Cho mng Nguyn Vn A vi Nguyn Vn A l tn ngi dng nhp
vo.
C hai cng vic chnh cn lm l khai bo thc th instance cho 2 nh danh
quan trng l EditText v Button vi cc thuc tnh v phng thc ty mi i
tng.
i vi EditText th ta ch cn ly gi tr m ngi dng a vo nn rt n
gin ch c vi dng v Button c thm phng thc bt s kin click cho nt
ButtonChaoAndroid:
EditText edtTextTenNguoiDung =
(EditText)findViewById(R.id.EditTextTenCuaBan);
Button btnChaoAndroid = (Button)findViewById(R.id.ButtonChaoAndroid);
btnChaoAndroid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
}
});

Th l khung x l xong, by gi l thm cc phng thc hin khung


thoi cho mng. Trong mc // TODO Auto-generated method stub ta thm vo cc
phng thc c nhim v hin khung thoi.
btnChaoAndroid.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {

78

// TODO Auto-generated method stub


// Khai bo instance builder cho mng
AlertDialog.Builder builder = new
AlertDialog.Builder(HelloNhatTrungApp.this);
builder.setTitle("Cho Mng");
builder.setMessage(edtTextTenNguoiDung.getText());
builder.setPositiveButton("ng ", null);
// Khai bo khung thoi hin thc ha builder
AlertDialog dlgChaoMung = builder.create();
// Hin khung thoi
dlgChaoMung.show();
}
});

Hnh ph lc 52 Mn hnh thng bo li m ha chui khi lu Ting Vit

Khi bn g ting Vit vo tp tin HelloNhatTrungApp.Java v khi lu vo s


xut hin li nh trn hnh trn do ta cha chn m k t thch hp cho tp tin.
gii quyt vn ny, ta nhp phi chut vo tn ng dng Android
HelloNhatTrungApp v chn Properties.

79

Hnh ph lc 53 Mn hnh chn thuc tnh ca mt project

Ta s thy khung thoi nh sau:

80

Hnh ph lc 54 Mn hnh la chn thuc tnh m ha k t

Trong mc Text file encoding ta nhp chn vo Other v chn UTF-8


nh dng k t cho cc tp tin c cha chui k t trong chng trnh.
n y, chng trnh chng ta xong, by gi ch cn ngi chm t xu tr
v vi mu bnh nh v nhp chn ch my o lt sau khi kch hot chng trnh
chy bng cch nhp hut phi vo tn ng dng Android HelloNhatTrungApp
chn Run as/ 1 Android Application. Ty theo, tc x l v b nh ca my trm
m my o chy nhanh hay chm ty theo.

81

Hnh ph lc 55 Mn hnh chy mt ng dng Android t Eclipse

Khi chng trnh chy, bn bn di th Console s c hiu lc v th


hin tng bc m Eclipse chy nh kim li chng trnh, khi ng my o, ci
t chng trnh ln my o v cui cng l chng trnh sn sng thc thi trn
my o. Ch khi my o khi ng v khi chng trnh ang ci th bn khng
nn quy qu bt c nt g hay nhp chn bt c g trn mn hnh my o nu
trn

mn

hnh

Console

cha

ti

trng

thi

Starting:

Intent

cmp=com.hellonhattrungapp/.HelloNhatTrungApp } trnh cc li c th gp
phi.

82

Hnh ph lc 56 Mn hnh minh ha trng thi chy ca mt ng dng

Khi trn Console chy ti Starting: Intent th ta qua bn mn hnh Emulator.


Nu bn thy xut hin bt k hp thoi no th u chn Wait trnh cc li xy
ra.

Hnh ph lc 57 Mn hnh i ng dng x l xong

Sau cng, cho mng bn n chng trnh u tay Android mi va to


c qua vi bc n gin. V th tri nghim chng trnh ny bng kch bn
ban u l nhp chui vo EditText v nhn nt Cho Android hin khung thoi
Cho Mng.

83

Hnh ph lc 58 Mn hnh thao tc x dng ng dng HelloNhatTrungApp

Ln lt nhp chn ng v nt Home trn mn hnh ra mn hnh


chnh ca Emulator. V y, cho mng bn n mn hnh giao din chnh ca
Android 2.1.

Hnh ph lc 59 Mn hnh giao din chnh ca Android 2.1

u tin, bn c th th dng cc chng trnh sn c trn h iu hnh


Android 2.1 m trong phn gii thiu Android ta gi chng l ng dng chnh c
84

ngha l ng dng ban u i km vi h iu hnh Android. Ni mt cch d hiu


chng nh l nhng ng dng di km nh NotePad hay Calculator i km vi cc
h iu hnh Windows ca Microsoft vy.
G.3.2 Cu trc ca mt project Android
G.3.2.1

Cu trc cy trn Eclipse

y l cu trc ca ng dng Android trn Eclipse:

Hnh ph lc 60 cu trc ng dng Android trn Eclipse

Ta thy rng cu trc ng dng gm cc thnh phn chnh nh sau:


/src: cha cc package gm cc lp ng dng v x l lin quan n
Activity, cc x l.
/gen: cha cc tp tin Java c pht sinh t ng. Tt nht l khng
c thm hay sa i bt k gi tr g ca cc tp tin nm trong gen; nu
khng tt c cc gi tr va thm hay sa i s c phc hi v gi tr
ban u. Trong tp tin R.Java ca th mc /gen cha cc nh danh cho tt
85

cc i tng trn giao din ca tt c mn hnh, ca tt c cc ngun ti


nguyn gm hnh nh, gi tr, layout, mu sc,... trong th mc /res.
/Google APIs [Android 2.1] nu bn chn Target name l Android 2.1
th th m s tr thnh /Android 2.1. Trong y cha cc tp tin .jar l b cc
hm APIs ca Android v Google l Android.jar v maps.jar. Ngoi ra, nu
chng trnh ca bn cn s h tr cc hm do bn th 3 cung cp th ta c
th thm tham chiu v chng ta s c thm th mc Referenced Libraries
cha cc tp tin .jar gm cc b hm h tr ca bn th 3. V d nh, trong
chng trnh demo ca kha lun ny c dng thm 2 tp tin jar ca bn th
3 cho vic truy dng hm c d liu thng qua service v dng hm
dng cho danh sch ti v dng tun t.
/asset: cc ti nguyn trong th mc ny s khng c Android nh
nh danh ID cho n.
/res: cha cc ngun ti nguyn c trong chng trnh nh th mc
/drawable cha cc hnh nh hay hnh nn chng trnh gm cc tp tin hnh
nh hoc xml; th mc layout cha cc khung giao din chng trnh; v th
mc values cha cc gi tr nh chui, mu sc, Tp tin
AndroidManifest.xml: cha cc thit lp cho chng trnh nh cc quyn
cho php truy cp vo phn cng, thit lp mn hnh chnh v cc thuc tnh
ca chng, v cn rt nhiu thit lp khc.
Trn l cc thnh phn c bn nht ca mt ng dng Android. Ngoi ra cn
mt s thnh phn sau:
G.3.2.2

Cu trc ca project Android trn b nh

Tng ng vi cu trc ng dng Android trn Eclipse th cu trc ca n s


tng t trn a.

86

Hnh ph lc 61 Cu trc th mc ca mt project Android trn b nh

Tng ng vi tng package th s to thnh tng cp th mc tng ng


trong th mc \src nh com.hellonhattrung tr thnh \src\com\hellonhattrung. y
ta ch n th mc \bin cha tp tin thc thi .apk ci vo thit b chy Android
v th mc \.settings cha cc thit lp ng dng Android m ta khng nhn thy
trn Package Explorer.
Tip theo ta lm quen vi cc khung nhn trn Eclipse thy r hn v tng
khung nhn lp trnh Android trn Eclipse.

G.4 Lm quen vi cc khung nhn trn Eclipse qua ci nhn trn


Android project
G.4.1 Khung nhn Java
G.4.1.1

Gii thiu s lc v khung nhn Java

87

Hnh ph lc 62 Mnh hnh khung nhn Java

Nu bn mun khung nhn Java th nhn vo nt nhn Java mu cam nm


bn phi pha trn mn hnh. Trong khung nhn Java cho php cc bn lp trnh giao
din v x l cho cc thnh phn trong ng dng Android. Ngay c thao tc thm
hay xa cc tp tin m thanh, hnh nh, video cho chng trnh ca bn.
Trn hnh, ta thy r 3 thnh phn chnh ca khung nhn Java l Package
Explorer vi mu cam, khu vc thao tc lp trnh giao din v x l vi mu tm
v phn xem tng th lp Java ang thao tc vi cu trc cy d nhn qua khung
Outline vi mu nu. y l cc i tng chnh m chng ta cn quan tm trong
mc ny.
Trong mc ny, c nhiu thao tc nhng chng ti gii thiu n cc bn cc
thao tc c bn m chng ti tri nghim nh kinh nghim thao tc cc thnh
phn trn Package Explorer, thao tc trn thc n ng cnh ca cc tp tin *.Java
v cch dng Outline.
G.4.1.2

Thao tc vi cc thnh phn trn Package Explorer

88

Hnh ph lc 63 Ca s Package Explorer

y, ta s t t i qua cc thnh phn trn ca s Package explorer v tm


hiu chc nng cng vi thao tc ln trn cc thnh phn .
Trc tin l thao tc ln tn project Android HelloNhatTrungApp bng cch
nhp chut phi ln tn project. Trn thc n ng cnh , ta quan tm n cc
mc sau:

89

Hnh ph lc 64 Thc n ng cnh ca mt project Android

Ta thng k chc nng theo tng mc nh sau:


New: gip ta thm cc tp tin XML, Java, mi vo ng dng.
Go into: cho ta ch xem cu trc project Android v giu i ht tt c
cc project Android khc.
Refresh: lm mi li ton b project Android khi ta va thao tc nh
hng n ng dng chng hn nh thm ti nguyn m thanh, hnh nh hay
video mi.
Close project: ng project hin hnh. Khi Eclipse khi ng hay c
s kin chy mt ng dng Android no trn workspace tn gi khc

90

ca Package explorer th Eclipse s qut v duyt ti nguyn v li c php


trn tt c cc project Android no ang m. Nu ch c vi project th bn
khng thy r, nhng nu c vi trm project trong workspace th vic ch
di c l khng trnh khi cho nn ta trnh bng cch ng project khng
lin quan vi project hin ti tit kim c thi gian khi Eclipse khi
ng hay chy mt ng dng.
Close unrelated project: ng tt c cc project khng lin quan vi
project hin ti. Cng vi mc ch tit kim thi gian nh ni trn,
project Android c th dng cc project khc c trn workspace lm tham
chiu nn an ton nht l ch ng cc project khng lin quan vi project
hin hnh m thi.
Run as v Debug as: chy v kim li project hin ti.
Properties: kim sot thuc tnh ca project. Phn ny ta cn tm hiu
hn cc thnh phn c trn hp thoi Properties ca project. Ta nhn
Properties di y:

Hnh ph lc 65 Hp thoi Properties/Resource ca mt project Android

Ta thy trn mc Resource bao bi mu cam th bn phi c mc Text file


encoding bao bi mc xanh l cy gip ta qui nh m chui cho ton cc tp tin c
91

cha chui. Theo nh chng ti, nu cc on code hay cc ghi ch ca bn c


ting Vit th tt hn l bn thit lp ngay t ban u cho thuc tnh Other ca Text
file encoding l UTF-8 c th lu c ting Vit.
Ta qua mc tip theo l Android. Nh trnh by trong mc vit chng
trnh u tay HelloNhatTrungApp mc Build Target phn G.3.1. c phn
chn h iu hnh h tr.
Ngay t ban u ta chn phin bn h iu hnh h tr nhng ta c th
thay i iu bng cch vo mc Android ca hp thoi Properties thay i.

Hnh ph lc 66 Hp thoi Properties/Android ca mt project Android

Cng nh cc chng trnh trn C#, bn mun Add Reference nh DLL


dng li cc phng thc sn c th bn vo mc Java Build Path thm cc tham
chiu dng cc b hm c sn. Bn nhp chn nt Add External Jars thm vo
cc tp tin *.jar ta c th dng li cc hm c cung cp trong tp tin jar . V
d nh chng ta thy trn Hnh ph lc G. -57 th chng ti thm tp tin ksoap2Android-full-2.1.2.jar dng li cc hm c v ly thng tin t server.

92

Hnh ph lc 67 Hp thoi Properties/Java Build Path ca mt project Android

G.4.1.3

Thao tc trn thc n ng cnh ca cc tp tin *.Java

93

Hnh ph lc 68 Thc n ng cnh ca mt tp tin .Java

Ta cn quan tm r hn cc mc c bao bi mu nh sau:


Quick outline: hin trnh n ng cnh xem nhanh cu trc ca tp
tin .Java.

94

Cut, Copy, Paste cc thnh phn m lnh trn tp tin Java.


Surround With: thm vo on m try/catch cho phn m lnh mnh
chn nu on m bt buc dng try/catch hay nh pht trin cn thn
mun xem xt li cho tng thnh phn.
Reference: xem v tr ca mt i tng nm u trn project hoc
trn ton workspace nu project dng bin gi tr ca project khc.
Source: trnh n nhanh cho bn thao tc nhanh trn cc m lnh.

Hnh ph lc 69 Thc n ng cnh Source trn mt tp tin .Java

Nh nhm Comment bao bi mu cam cho php bn thao tc trn cc


ghi ch dnh cho cc mc m lnh. Ch nu chng ta mun ghi ch bnh
thng th ch cn t hai du // trc cc dng ghi ch trnh bin dch
loi b chng ra khi bin dch. Cn dng ghi ch c bit khc l ghi ch
trc cc lp i tng hay trc cc phng thc m cc ghi ch ny s

95

hin th trn cc hp thoi ng cnh thuyt minh khi ta dng n cc lp hay


cc phng thc .
Ta xem minh ha sau:
Ghi ch trc dng lnh
// Khai bo khung thoi hin thc ha builder
AlertDialog dlgChaoMung = builder.create();

Ghi ch trc thn hm.


/**
* <strong> getResult(int value)</strong>
* </br>
* </br>
* Hm c nhim v lm demo th ghi ch s hin ln khi hm ny
c gi n
* value:
*
* @param value gi tr u vo
* @return Gi tr u ra ln hn gi tr u vo 1 n v
*/
int getResult(int value)
{
value= value+1;
return value;
}

Kt qu ca ghi ch trn s hin th nh sau khi ta gi hm ny


trong cc phng thc khc nh sau:

Hnh ph lc 70 Hnh minh ha cho mt ghi ch m lnh ca mt phng thc

96

Format: nh dng li cc dng lnh c trn tp tin .Java nh


pht trin c th nhn d hn cc on m.
Cc phng thc pht sinh Generate rt hu dng khi bn lp trnh
cc lp i tng nh pht sinh cc Constructor, cc hm Get hay Set
cho cc thuc tnh c trong lp i tng.
Refactor: cng nh bn C# th Refactor l cng c cc k hu ch khi
c vn mun thay i hng lot cc m lnh cng nh tch cc on m
trong mt thn hm ra lm phng thc mi hay st nhp cc on m trong
trong cc phng thc bn ngoi vo phng thc hin hnh.

Hnh ph lc 71 Thc n ng cnh Refactor trn mt tp tin .Java

Mc Rename c tc dng i tn mt i tng li hng lot trn


tt c cc tp tin Java c lin quan m khng tn cng ln hi tm i
tng ti cc hm hay cc tp tin Java khc.
Cc phng thc Extract: c tc dng tch cc on m ang chn
trong thn hm ra lm mt phng thc mi v c gi bi phng
thc hin hnh.
Incline: st nhp cc m lnh ca phng thc bn ngoi vo trong
phng thc hin hnh.
97

Nh ni, cc phng thc trong phn Refactor l cng c rt


mnh v hu ch cho cc nh pht trin khi mun iu chnh m lnh v
tch hay gp cc phng thc trn Eclipse IDE.
Ta bn tay phi mn hnh vit m lnh c thanh scroll bar c
cc thnh phn mu nm ngang v thng thng c 3 dng:
Thanh ngang mu xanh: khi nhp vo s i n cc mc nh
du ghi ch dng 1.
Thanh ngang mu vng: khi nhp vo s i n cc bin i
tng khai bo d tha v khng s dng.
Thanh ngang mu : khi nhp vo s i ti cc dng m lnh
b li.
G.4.1.4

Cch dng Outline

Hnh ph lc 72 Mn hnh Outline

98

Hnh ph lc 73 Mn hnh Outline

Phn Outline gip ta xem tng qut c cc phng thc v cc bin nu l


tp tin .Java v xem c cu trc giao din nu l tp tin .xml nh ngha giao
din. Ngoi ra, cn gip ta nh v nhanh chng n cc thnh phn c trn tp tin
m khng cn ln hi khi giao din xml hay tp tin .Java c kh nhiu dng lnh.
G.4.2 Khung nhn DDMS

Hnh ph lc 74 Khung nhn DDMS

Chng ta chuyn qua khung nhn DDMS bng cch nhp vo nt >> bn tay
phi pha trn mn hnh ri nhp chn DDMS hay nhp chn trc tip nt DDMS.
Trn khung nhn DDMS ta thy r 3 thnh phn chnh l Device, Emulator Control
v File Explorer.
By gi ta i qua cc thnh phn y, trc tin l File Explorer.
99

G.4.2.1

Tm hiu File Explorer

Trong mc File Explorer, chng ta ch n cc thnh phn chnh c bao


khung.
Nt

Pull a file from the device gip ta ly mt tp tin t trong

thit b my o hay thit b h chy Android hin hnh kt ni vi Eclipse


IDE.
Tng t, nt

Push a file onto the device gip ta a mt tp

tin trn laptop hay PC bt k vo thit b my o hay thit b Android.


Nt

Delete the selection gip ta xa cc th mc hay tp tin m

ta chn ca s File Explorer.


Trn ca s File Explorer

ta c th thao tc trn

cc tp tin nm trn thit b bao gm cc tp tin h thng trong th mc


/system, cc tp tin trn th nh trong th mc /sdcard v cc tp tin d liu
trong th mc /data.

Hnh ph lc 75 Khung nhn ca File Explorer

G.4.2.2

Tm hiu Device

100

Hnh ph lc 76 Khung nhn ca Devices

Trong mc ny, th hin cc chng trnh hin c ci trn my o hin


hnh. Cc chng trnh c ci t trn h iu hnh Android dc nh bng cc
Package bt u bng com.*. Nh trn hnh trn th hin ng dng
com.hellonhattrung c ci vo my o.
G.4.2.3

Tm hiu Emulator Control

Hnh ph lc 77 Khung nhn ca Emulator Control

101

Trong mc ny gip ta gi lp trng thi in thoi, gi lp hnh ng gi


hay nhn tin ca in thoi, gi lp v tr ca in thoi v gi lp l trnh ng i
bng tp tin KML. KML l tp tin qui nh nh tuyn ng i t im A n
im B ca Google v tp tin ny l cu trc chung cc hm APIs ca Google
Map c th trch xut d liu v th hin ln bn .
Telephone status: gi lp trng thi ca in thoi nh dng mng 2G
hay 3G, tnh trng in thoi ang roaming,
Telephone Actions: gi lp vic gi tin nhn hay gi in thoi ti
my o.
Location Controls: gi lp lin quan ti v tr v bn trn Google
Map. Vi Manual gip ta gi lp my o nhn v tr hin ti thng qua phn
cng v vi KML gip ta c th a vo tp tin KML gi lp nh tuyn
ng i gia 2 im trong chng trnh c dng bn .
Bn cnh Android cn h tr thm mt s cng c h tr tt hn cho
cc nh lp trnh v cc cng c ny c ci sn trong in thoi o Android. Bt
in thoi Android, m ng dng h tr c tn l Dev Tools, chn mc
Development Settings ta s thy c cc chc nng m Android h tr nh lp
trnh nh hnh bn di:

Hnh ph lc 78 Mn hnh Development Settings h tr lp trnh ci sn trn in thoi Android o

102

y l cc chc nng rt hay m Android h tr cho vic lp trnh trn


Android. Nhm chng ti xin im qua mt s chc nng ng ch nh sau:
Show running processes: hin ra cc tin trnh ang chy gip ta gim
st hin ti trn my c bao nhiu tin trnh hin ang chy.
Show screen update: ch ra cc vng no trn mn hnh ang c v
li. y l chc nng hu ch gip ta c th ti u li vic v cc i tng
ln mn hnh.
Show CPU usage: gip ta quan st ngay trn mn hnh trng thi s
dng CPU ca mt ng dng ang chy. Chc nng ny gip ta bit c
vic thit k chng trnh c hiu qu hay khng, c tiu tn ti nguyn ca
thit b hay khng.
G.4.2.4

Khung nhn Debug:

Hnh ph lc 79 Khung nhn Debug

Ta thy trong khung nhn Debug ta thy r bn thnh phn c bn l


Debug, khung tab Variables Breakpoints Expression, khung hin ang kim li
ti dng no bo bi mu xanh dng v cc tab Logcat Progress Search
Error Log. Sau y, ta tm hiu phn u tin Debug.

103

G.4.3 Tm hiu Debug


Trong phn Debug ny th hin cc lung hin ang chy c trn chng
trnh. Chng ta ch k n cc nt lnh sau:
Nt

Resume (F8): hi phc li khi cng vic kim li b gin

on. Theo kinh nghim ca chng ti, khi vic kim li chy mt hi lu
nu xut hin mn hnh tp tin nh hnh bn di th nn nhn F8 vic
kim li i tip.

Hnh ph lc 80 Mn hnh th hin cng on debug

Nt
Nt

Disconnect: ngt kt ni vi my o
Step Into (F5): i vo thn hm ca hm ang c gi ti

dng ang kim li.


Nt

Step Over (F6): tip tc i qua cc dng lnh m khng i

vo thn hm ca cc hm c gi.
Nt

Step Return (F7): Lp tc bay ra khi thn hm hin ang

kim li.

104

Hnh ph lc 81 Tab Debug trong khung nhn Debug

G.4.3.1

Tm hiu tab Variables Breakpoints Expression


Tab Vaviables: hin th tt c cc gi tr ca cc bin hin hnh xung

quanh c trong khu vc hin ang kim li.


Tab Breakpoints: cho php qun l chn hay b chn cc im dng
mt cch nhanh chng m khng cn b cc im dng trn mn hnh ang
kim li.
Tab Expressions: cho php nh lp trnh quan st gi tr ca bt k
bin no, mc ny c v tin li hn cho cc nh lp trnh khi cn xem
nhng gi tr ca cc bin hay i tng cn xem.

105

Hnh ph lc 82 Tab Variables trong khung nhn Debug

Hnh ph lc 83 Tab Breakpoints trong khung nhn Debug

106

Hnh ph lc 84 Tab Expressions trong khung nhn Debug

G.4.3.2

Tm hiu khung th hin dng hin hnh ang kim li

Hnh ph lc 85 Tab th hin dng hin hnh ang kim li

y ta ch , dng hin hnh l dng c bao bi mu cam v c nn


mu xanh. Cc du chm trn bao bi mu l cc im dng Breakpoint. Bn c
th thm cc im dng mi hay b cc im dng c sn trong khi kim li bng
cch tr chut ti dng v nhn t hp phm Ctrl+Shift+B.
G.4.3.3

Tm hiu khung tab Logcat Progress Search Error

Log

107

Hnh ph lc 86 Tab LogCat, Progress, Search, ErrorLog

Hin nht k qu trnh kim li v cc trng thi ca chng.

G.4.3.4

Cc iu ch khi kim li chng trnh

Tuy Android c h tr cho vic kim li chng trnh nhng thc s cng c
debug cha thc s lm hi lng cc nh lp trnh. Vic debug ng dng c tin
hnh rt chm v khi c li xy ra ta khng th bit c thnh phn no ang gy
ra li do Android ch bo li chung chung nh l source khng tm thy Theo
kinh nghim ca mt s nh lp trnh trn cng ng mng, ta nn tn dng vic
dng khi hm try{} catch{} trnh li ng thi dng thm tnh nng ghi ch li
qu trnh chy bng LogCat bit c chnh xc v nhanh chng thnh phn no
gy li cho chng trnh.

G.5 Lm quen vi nn tng ng dng Android


R rng, ng dng Android da trn ngn ng Java. Cc m lnh Java
c bin dch cng vi d liu v cc ti nguyn i km c ng gi li thnh
tp tin .apk duy nht. Tp tin ny c ci vo cc thit b Android v tt c m
lnh v ti nguyn trong tp tin .apk c xem nh l mt ng dng hon chnh.
Vi nhiu cch khc nhau, ng dng Android chy ring bit trong khng
gian ring ca n trn thit b Android:

108

Mc nh, mi ng dng hy trn tin trnh Linux ring ca n.


Android khi ng tin trnh khi dng lnh ca ng dng bt u thc thi v
kt thc tin trnh khi n khng cn chy na hay khng cn c c gi
bi ng dng khc.
Mi tin trnh c mt my o Java ring (VM), v th ng dng chy
c lp vi cc ng dng khc.
Mc nh, mi ng dng c mt nh danh Linux duy nht. Cc quyn
thit lp cho php (Permission) c thit lp cho mi ng dng (nh cho
php dng GPS, dng Internet, dng thoi, ) th ch c th pht huy trong
mi ng dng m thi.
Ta i su vo tm hiu cc thnh phn ng dng, Activities v Tasks, tin
trnh v lung, vng i cc thnh phn ng dng Android.
G.5.1 Cc thnh phn ng dng
Tnh nng hay nht ca Android l mt ng dng c th gi, thc thi v ly
kt qu tr v ca mt ng dng khc. Nh chng trnh BarcodeZxing l chng
trnh chp m vch v tr ra cho ta m vch mi va chp; chng trnh ny do
Zxing Team vit ra. Chng ti ch cn dng li chng trnh ly gi tr m vch
hn l vit ra mt chng trnh mi hay sao chp on m lnh cng b trn
Internet ca nhm Zxing ri nh km vo chng trnh nh vy s tn nhiu thi
gian.
lm c iu trn, h thng phi khi ng tin trnh ng dng v khi
ng i tng Java tc l thc th instance cho tin trnh ng dng . V vy,
khng ging nh nhng h iu hnh khc, ng dng Android khng c hm
main() hay tng t nh bn C++. M thay vo , ng dng Android c 4 dng
thnh phn ct yu m h thng khi ng v chy khi cn l:
Activities: ni d hiu mt Activity l s th hin mt mn hnh
(tng ng vi tng form khi lp trnh trn Windows Form ca C#). V d
nh trong ng dng demo ca chng ti c nhiu activites in hnh nh t

109

Activity chnh ta chuyn sang Activity tm kim hng ha ri t qua


Activity danh sch hng ha v cui cng l chi tit hng ha. Ta cn bit
thm l c nhiu activites trong ng dng vy Activity no s chy u tin
khi ng dng khi ng. y l nhim v ca AndroidManifest.xml; n qui
nh

Activity

no

chy

trc

bng

thuc

tnh

<category

Android:name="Android.intent.category.LAUNCHER" />. Nh ni, mi


Activity l mt mn hnh c th y mn hnh (full screen) nhng cng c
th nh hn mn hnh thng thng nh cc hp thoi chng hn. Ni dung
trn mt mn hnh hay Activity m ngi dng thy c c t chc bi
h thng cp bc cc Views Views l cc i tng trn mn hnh. Mi
Views chim mt v tr trn mn hnh; Views cha cha cc Views con, cc
Views l l cc Views nm cui cng trn cy cp bc cc Views v chnh
cc Views ny s trc tip tip nhn cc s kin m ngi dng tc ng ln
mn hnh. Android h tr mt s Views c sn nh nt lnh, text fields,
thanh cun, thc n, check box v nhiu Views khc na. Ta thit lp cy
cp

bc

giao

din

cho

cho

mt

Activity

bng

phng

thc

Activity.setContentView().
Service: khc vi Activity l mt giao din m ngi dng c th nhn
thy, service chy ngm trong mt khong thi gian khng xc nh. Cc
dng v d cho mt service c th chi nhc nn khi nhn nt, hay ly d liu
qua mng, hay tnh ton v cung cp kt qu cho Activity no ang cn.
Mi service tha k t lp Service c s. Ta c th a v d r hn cho mt
service dng chi cc bi nhc t mt danh sch cc bi ht. ng dng c
nhiu Activity cho php ngi dng chn v chi cc bi nhc; tuy nhin,
trong mt Activity khng th chi tip cc bi nhc khi ngi dng chuyn
qua cc ng dng khc hay lm vic g khc trong khi vn mun tip tc
nghe nhc. lm c vic ny, Activity chi nhc ca ng dng khi
ng mt service chy ngm vic pht nhc ngay khi nhn vo nt chi

110

nhc. Cng nh cc activities v cc thnh phn khc, service chy trong mt


lung chnh ca tin trnh ng dng.
Broadcast receivers: l thnh phn nhn v hi p cc thng bo. Cc
thng bo bt ngun t m h thng nh pin yu, hay c mt nh mi va
chp, Mt ng dng thng thng cng c th pht ra cc thng bo v
d nh, n cc ng dng khc bit l d liu mi c ti v hay n va
tr ra kt qu cho cc ng dng khc. Mt ng dng c nhiu broadcast
receivers. Tt c cc receivers tha k t lp BroadcastReceiver c s.
Broadcast receiver khng hin th trn giao din. Tuy nhin, chng c th
khi ng mt Activity th hin thng tin m chng nhn c hoc
chng c th dng NotificationManager cnh bo ngi dng.
NotificationManager c th cnh bo bng nhiu cch nh chp n, rung,
pht m thanh hay i loi nh vy.
Content provider: cung cp b d liu ca ng dng ny cho ng
dng khc. D liu c th lu tr trong c s d liu SQLite hay cc loi
khc. Content providers a trn lp ContentProvider c s thc thi mt
b phng thc lm cho ng dng khc truy xut v lu tr cc loi d
liu m n qun l.
Cho d l thnh phn no th Android cng to cc thc th ca cc thnh
phn v khi ng chng.
G.5.1.1

Kch hot thnh phn : intents

Vi cc thnh phn va ni trn th Content providers c kch hot bi


mt yu cu t ContentResolver. Cn activities, services v broadcast receivers
c kch hot bi tin nhn bt ng b gi l intents. Mt intents c th gi ni
dung tin nhn. Vi mi loi thnh phn c nhng phng thc kch hot khc nhau:
Activity: c kch hot bi cc phng thc Context.startActivity()
hoc Activity.startActivityForResult(). T Activity ny qua Activity khc s
c th mang theo gi tr v truyn qua Activity c khi ng ging nh
truyn gi tr t form hin hnh qua mt form khc ging nh trn C#. Bn
111

Activity c khi ng c th dng hm getIntent() ly gi tr. Nu mt


Activity khi ng mt Activity khc v mong ch n tr v cho n mt kt
qu th gi hm startAtivityForResult() thay v gi hm startActivity(). V
d, mt Activity ang cn mt tm hnh l kt qu chn la t Activity khc
gm danh sch cc hnh; kt qu tr v thng qua hm onActivityResult().
Service: c khi ng thng qua hm Context.startService().
Tng t, trn mt intents c th dng hm Context.bindService() thit
lp mt kt ni gia cc thnh phn v service mun gi.
G.5.1.2

Tt cc thnh phn
Mt content provider cn hin hnh trong khi n hi p li cc yu

cu t ContentResolver. Mt broadcast receiver hin hnh ch khi n hi p


li tin nhn broadcast v vy khng cn tt chnh thc cc thnh phn ny.
Mt khc, Activity cung cp giao din ngi dng v giao tip vi
ngi dng trong khong thi gian di. Tng t, service c th duy tr chy
ngm trong khong thi gian di. V th Android a ra phng thc tt
Activity v service nh sau:
Mt Activity c th tt bng hm finish(). Mt Activity c th tt
mt Activity khc bng hm finishActivity().
Mt service dng bng cch gi hm stopSelf() hay hm
Context.stopService().
H thng tt cc thnh phn khi chng khng cn c s dng na
hoc khi b nh khng cn ch trng.
G.5.1.3

Tp tin AndroidManifest

Trc khi Android khi ng thnh phn ng dng, n phi bit thnh phn
no ang tn ti. V th, ng dng phi nu r cc thnh phn trong tp tin
AndroidManifest.xml m c gi trong tp tin .apk m tp tin .apk ny gi m
lnh, tp tin, v cc ti nguyn ca ng dng.

112

Manifest l mt tp tin XML v lun lun c t tn l


AndroidManifest.xml cho ng dng. Trong tp tin manifest cha cc thnh phn
sau:
Lit k cc thnh phn nh Activity, service, . . . c trong ng dng.
Cc permission cho php dng cc phn cng.
Thng s thit lp SDK.
V d tp tin AndroidManifest.xml nh sau:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<Activity Android:name="com.example.project.FreneticActivity"
Android:icon="@drawable/small_pic.png"
Android:label="@string/freneticLabel"
. . . >
</Activity>
. . .
</application>
</manifest>

G.5.1.4

Intent filters

Mt i tng Intent c th t tn cho mt thnh phn m mnh mun m


mt cch r rng. Nu lm vy, Android tm thy thnh phn v kch hot n.
Nhng nu l thnh phn khng c t tn r rng v c th b nhp nhng tn,
Android phi chn thnh phn thch hp nht tr v cho intents. N lm vy
bng cch so snh i tng Intent vi intent filters ca thnh phn sp c m.
Intent filters ca thnh phn s thng bo cho Android cc loi intents m thnh
phn c th qun l. Tt c c thng tin ca thnh phn c lu trong tp tin
Android Manifest. Di y l 2 v d m rng c dng intents filters so vi v d
trn:
<?xml version="1.0" encoding="utf-8"?>
<manifest . . . >
<application . . . >
<Activity Android:name="com.example.project.FreneticActivity"
Android:icon="@drawable/small_pic.png"
Android:label="@string/freneticLabel"
. . . >
<intent-filter . . . >

113

<action Android:name="Android.intent.action.MAIN" />


<category Android:name="Android.intent.category.LAUNCHER"
/>
</intent-filter>
<intent-filter . . . >
<action Android:name="com.example.project.BOUNCE" />
<data Android:mimeType="image/jpeg" />
<category Android:name="Android.intent.category.DEFAULT"
/>
</intent-filter>
</Activity>
. . .
</application>
</manifest>

Ta thy trong v v trong th intents filter u tin c 2 thnh phn l action


"Android.intent.action.MAIN"

"Android.intent.category.LAUNCHER".

category
nh

du

Activity

FreneticActivity l mn hnh u tin khi ngi dng khi ng ng dng


trn thit b Android. Ni cch khc, Activity l u vo ca ng dng, n l
mn hnh u tin m ngi dng nhn thy khi h khi ng ng dng.
Trong th intents filter th 2 m t tn action m Activity c th thc thi trn
mt loi d liu no .
Mt thnh phn c th c nhiu intents filter, mi ci m t b kh nng khc
nhau ca Activity. Nu n khng c bt k filter no, n c th ch c kch hot
bng intents m n t tn r rng nh l mt thnh phn cn c m.
i vi broadcast receiver th n c to v khai bo bng m lnh, intent
filter c khi ng trc tip nh l i tng IntentFilter. Tt c cc filter khc
c thit lp trong manifest.
G.5.2 Activities v Tasks
Nh cp trn, mt Activity c th khi ng mt Activity khc.
Trong mt ng dng c nhiu activities v Task l mt ngn xp (Stack) cho cc
activities, v Task khng phi l mt lp hay mt phn t trong tp tin manifest. V
th, khng c cch no thit lp gi tr cho tc v mt cch c lp ca cc
activities ca n. Gi tr cho ton b tc v c thit lp Activity gc. Tt c cc
activities trong mt tc v to thnh mt n v.

114

<Ch 80 trang So snh v ni r Thread>


G.5.3 Tin trnh v lung
Khi thnh phn u tin ca ng dng cn chy, Android khi ng tin
trnh Linux cho n vi mt lung thc thi. Mc nh, tt c cc thnh phn ca ng
dng chy trong tin trnh v lung.
G.5.3.1

Tin trnh

Tin trnh ni m mt thnh phn chy c qun l bi tp tin manifest.


Cc phn t thng gp ca thnh phn l <Activity>, <service>, <receiver>, v
<provider>, mi cc phn t c thuc tnh process m c th ch r tin trnh ni m
thnh phn chy. Nu dng cc thuc tnh ny cc thnh phn chy trn tin trnh
ca ring n v vy m mt s thnh phn c thuc tnh th chia s tin trnh
trong khi cc thnh phn khc th khng.
Tt c cc thnh phn c khi ng trong lung chnh ca tin trnh v h
thng gi n cc thnh phn.
G.5.3.2

Lung

Mc d bn cha ng dng ca mnh trong mt tin trnh n, nhng s c


kh nng bn cn to ra mt lung lm mt vi cng vic ngm. Bi v giao din
ngi dng phi lun nhanh p ng li hnh ng ca ngi dng, cho nn
khng th no mn hnh dng li ch mt hnh ng ti v d lu t mng ri
mn hnh mi c th lm cng vic khc. Ni chung, bt c cng vic g m khng
th lm nhanh c th s c chuyn thnh lung.
Nhng lung c to trong m lnh v dng i tng Thread ca Java.
Android cung cp mt s lp tin li cho vic qun l lung Looper cho vic chy
mt vng lp tin nhn trong lung, Handler cho vic x l tin nhn v
HandlerThread cho vic thit lp mt lung vi vng lp tin nhn.
G.5.4 Vng i cc thnh phn ng dng Android
Cc thnh phn ng dng c vng i l s bt u khi Android khi
ng thnh phn cho n khi kt thc ng dng khi thc th ng dng b hy. Cc

115

trng thi ng dng c th c hiu lc hay khng c hiu lc; i vi activities, th


c tnh trng visible hoc invisible. Trong mc ny ta ni v vng i ca activities,
services, v broadcast receiver.
G.5.4.1

Vng i ca Activity

Mt Activity c ba trng thi:


ang hiu lc hoc ang chy: khi n trc tip giao tc vi ngi
dng.
Tm dng: khi n khng cn c hiu lc nhng vn c nhn thy
bi ngi dng. Ni d hiu hn, c Activity ny nm trn mt Activity khc
m Activity ny trong sut hoc khng che ph ht mn hnh v vy Activity
khc c nhn thy. Mt Activity ang dng th hon ton cn sng
nhng c th b git i bi h thng trong trng hp b nh thp.
Dng hn: nu Activity b che kha hon ton bi mt Activity khc.
N vn cn duy tr tt c trng thi v thng tin thnh vin. Tuy nhin, ngi
dng khng cn thy n v mn hnh ca n n i v thng b git bi h
thng khi khng b nh.
Nu mt Activity b tm dng v dng hn, h thng c th loi b n ra
khi b nh bng cch gi hm finish() hoc loi b n ra khi tin trnh. Khi n
th hin trc ngi dng ln na, n phi khi ng v khi phc li cc trng thi
trc .
Khi mt Activity chuyn t trng thi ny qua trng thi khc, th Activity
s gi cc phng thc protected sau: void onCreate(Bundle savedInstanceState),
void onStart(), void onRestart(), void onResume(), void onPause(), void onStop(),
void onDestroy(). Tt c cc phng thc ny c th vit li (override) ph hp
vi tng cng vic c th i vi ng dng ca bn khi m trng thi ng dng thay
i. Tt c cc Activity phi thc thi li hm onCreate() thit lp ln u khi m
cc i tng trong ng dng c khi ng. Nhiu activy s dng hm onPause()
cp nht li d liu thay i hoc dng hn vic giao tip vi ngi dng.

116

Ch vic gi siu lp (superclass): Vic thc thi bt k phng thc vng


i ng dng no th nn lun lun gi hm tng ng ca siu lp. V d:
protected void onPause() {
super.onPause();
. . .
}

Vi 7 phng thc nh ngha cho ton b vng i ng dng ca Activity.


Nu ch , ta thy c nhng vng khp kn nh sau:
Vng khp kn ton b ca ng dng: Activity bt u t ln gi hm
u tin onCreate() n hm cui cng onDestroy(). Mt Activity lm tt c
cc thit lp u tin cho chng trnh trong hm onCreate() v gii phng
tt c cc ti nguyn trong hm onDestroy(). V d nh ng dng c 1 lung
chy ngm ti d liu t my ch v th n to lung trong hm
onCreate() v sau dng hn lung trong hm OnDestroy().
Vng i nhn thy c bi ngi dng: trong Activity t hm
onStart() cho n hm onStop(). Trong sut thi gian ny, ngi dng c th
thy Activity trn mn hnh. Gia 2 phng thc ny, bn c th duy tr cc
ti nguyn m cn thit trnh by Activity cho ngi dng. V d, bn c
th khai bo BroadcastReceiver trong hm onStart() gim st t thay i
nh hng n giao din v gii phng n trong hm onStop() khi ngi
dng khng cn nhn thy nhng g bn ang trnh by. Hm onStart() v
onStop() c gi nhiu ln bi v acitivity thay i nhiu ln gia trng thi
nhn thy c v n i i vi ngi dng.
Vng i chy ngm: t hm onResume() n hm onPause(). Trong
sut thi gian ny, Activity chuyn t trng thi resume sang pause hay
ngc li. onPause() c gi khi thit b ng hoc khi Activity mi c
khi ng, hm onResume() c gi khi kt qu ca mt Activity hay mt
intent mi c a ra. V th m lnh trong hai phng thc ny nn t thi.
Hnh sau m t nhng vng khp kn v con ng m activty phi tri qua
gia cc trng thi. Hnh van th hin trng thi ca Activity, hnh ch nht th
117

hin cc phng thc ca vng i ng dng khi m Activity c s thay i trng


thi:

Hnh ph lc 87 Vng i ca mt Activity

Bng sau m t mi hm chi tit hn v cch s dng v t n trong vng


i ng dng ca Activity:

118

Phng

M t

thc

th Theo

hy

sau

hm

(killable)
onCreate()

c gi khi Activity ln u tin c Khng

onStart()

to. y l ni u tin bn nn lm tt c
cc thit lp nh to Views, gn d liu
vo danh sch hay i loi vy. Lun theo
sau l hm onStart()
onRestart()

c gi sau khi Activity b dng trc Khng

onStart()

v c c khi ng li. Lun theo


sau hm onStart().
onStart()

c gi ch trc khi acitivity tr nn Khng

onResume()

nhn thy c vi ngi dng. Lun theo

hoc

sau l hm onResume() nu Activity chy

onStop()

ngm hoc onStop() nu n b n i.


onResume() Ch c gi trc Activity bt u tng Khng

onPause()

tc vi ngi dng. Ti thi im ny,


Activity nm trn u ca ngn xp
Activity v ngi dng chun b tng tc
vi chng.

Lun theo sau l hm

onPause().
onPause()

c gi khi h thng sp bt u hi C

onResume()

phc li mt Activity khc. Phng thc

hay

ny c dng lu nhng d liu mi

onStop()

va thay i, dng hn hiu ng ng v


v dng hn nhng th khc c th ngn
ti nguyn CPU hay i loi vy. ng
dng lm bt c ci g sao cho n chy

119

nhanh bi v Activity k tip s khng hi


phc li cho n khi acitvity hin ti dng
li. N theo sau hm onResume() nu
Activity hin ti sp c thc thi hoc
theo sau l hm onStop() nu n tr nn n
i i vi ngi dng.
onStop()

c gi khi ngi dng khng nhn thy C

onRestart()

c Activity na. iu ny c th xy ra

hay

bi v n ang c hy hoc mt Activity

onDestroy()

khc (c th Activity ang tn ti hoc


Activity mi) c hi phc li v ang
ln Activity hin ti. Va theo sau l hm
onRestart() nu Activity ang quay li
tng tc vi ngi dng hoc hm
onDestroy() nu Activity d nh hy i.
onDestroy() c gi trc khi Activity b hy i. Hm Yes

khng

ny c gi ln cui cng khi m mt


ativity ang kt thc hay h thng ch ang
hy nhng thc th ca Activity tit
kim khng gian. C th phn bit 2 trng
thi ny bng hm isFinishing().
Bng 1 Bng m t li ngha cc phng thc trong vng i ca mt Activity

Ghi ch ct C th hy (Killable): ngha ca n l d mun d khng th


h thng c th git tin trnh ang gi Activity ti thi im sau khi phng thc
kt thc m khng thc thi dng m lnh ca mt Activity khc. Ba phng thc
(onPause(), onStop(), onDestroy()) c gi tr l C. Bi v onPause() l phng thc
u tin ca ba phng thc, n l phng thc duy nht bo m c gi trc
khi tin trnh kt thc trong khi onStop() v onDestroy() th khng. V th, bn
nn dng onPause() cp nht tt c d liu mi va c thay i.

120

Cn nhng phng thc c nh du l Khng trong ct C th hy


(Killable) bo m tin trnh gi acitivity khi b git khi thi im m chng
c gi. Mc d vy mt ativity trong tnh trng c th hy bt u t khi
onPause() n onResume(). N khng th b hy cho n khi hm onPause() kt
thc.
Tit kim tnh trng ca Activity: Khi h thng tt Activity bo
ton b nh, ngi dng mong mun Activity gi c trng thi Activity
nh lc trc khi tt. gi li trng thi trc khi Activity b tt, bn nn
dng hm onSaveInstanceState() cho Activity. Android gi hm ny trc
khi hy acvitity. Tip theo sau , ly li trng thi ca Activity th phi
thc thi hm onRestoreInstanceState() sau hm onStart() v hm onCreate()
chy trc . V th ta c th va ti to v lu vt li trng thi
Activity. Khng ging nh hm onPause() hay nhng hm trong vng i
ng dng, hm onSaveInstanceState() hay hm onRestoreInstanceState()
khng phi phng thc vng i ca ng dng v khng phi lc no cng
c gi v khng phi lc no ngi dng cng mun lu vt li trng thi
ca Activity.
Phi hp cc activities: khi mt Activity khi ng mt Activity khc,
c hai Activity s thay i trng thi ca vng i ca mnh. Activity ny
tm dng v c th dng hn trong khi ci khc th mi khi ng. Trong
trng hp bn c th cn phi hp cc Activity ny khi m 2 Activity cng
nm trong cng mt tin trnh.
G.5.4.2

Vng i Service

Mt service c th dng trong 2 cch:


N c th c khi ng v c cho php dng cho n khi ai
dng hn n hoc n t dng hn. khi ng dng hm
Context.startService() v dng hn bng hm Context.stopService() hoc t
dng bng hm Service.stopSelf() hoc Service.stopSelfResult(). Ch l

121

hm stopService() ch c gi mt ln duy nht dng service trong khi


gi hm startService() bao nhiu ln ty thch.
N c th c vn hnh bng m lnh dng lp interface m n
nh ngha. Client thit lp kt ni v dng kt ni y gi dch v. Kt ni
c thit lp bng cch gi Context.bindService() v c ng bi hm
Context.unbindService().
Ging nh Activity, service c nhng phng ng vng i ca ring mnh
m c th thc thi gim st s thay i trong trng thi ca n. Nhng service c
t hn v gm c 3 phng thc public: void onCreate(), void onStart(Intent intent),
void onDestroy().
Bng cch thc thi nhng phng thc ny, bn c th gim st vng i ca
service:
Ton b vng i ca service xy ra khi gi hm onCreate() v kt
thc khi gi hm onDestroy(). Ging nh mt Activity, mt service khi
ng trong hm onCreate() v gii phng mi ti nguyn trong hm
onDestroy().
Vng i c hiu lc ca service bt u khi gi hm onStart(). V
khng c kt thc bng onStop() v hm ny khng c thc.
Phng thc onCreate() v onDestroy() c gi cho tt c dch v cho d
service khi ng bng hm Context.startService() hay hm Context.bindService().
Tuy nhin, onStart() c gi khi service khi ng bng hm startService().
Nu mt service cho php nhng service khc lin kt vi n th phi dng cc
phng thc sau: IBinder onBind(Intent intent), boolean onUnbind(Intent intent),
void onRebind(Intent intent).
Hnh sau m t cc phng thc cho service, Mc d, hnh chia ra 2 loi
service da trn tiu ch khi ng bi hm startService (0 v hm bindService().
Cho d n khi ng bng cch no i chng na, th n vn cho client kt ni ti
n v bt k service no cng c th gi 2 hm onBind() v onUnbind().

122

Hnh ph lc 88 Vng i ca mt Service

G.5.4.3

Vng i BroadcastReceiver

Broadcast receiver c mt hm cho php ngi dng vit li l hm void


onCreate(Context curContext, Intent broadcastMsg).
Khi mt tin nhn pht i cho ngi nhn, Android gi phng thc
onReceive v chuyn n cho i tng Intent ang cha tin nhn. Broadcast
receiver c xem l c hiu lc ch khi no c ang thc thi phng thc ny. Khi
phng thc onReceive() kt thc th broadcast receiver khng cn hiu lc na.

123

Mt tin trnh vi mt broadcast receiver th c bo v khi b git.


Nhng mt tin trnh vi cc thnh phn khng cn hiu lc (Activity, service,)
th b h thng git bt k lc no khi m b nh khng cho cc tin trnh khc.
G.5.4.4

Tin trnh v vng i ng dng

H thng Android duy tr mt tin trnh ng dng cng lu cng tt nhng n


s loi b cc tin trnh c khi m b nh thp. quyt nh tin trnh no c
gi li, tin trnh no b git i, Android t mi tin trnh vo mt h thng cp
bc quan trng da trn cc thnh phn ang chy trn n v trng thi ca cc
thnh phn . Nhng tin trnh vi quan trng thp b loi b i u tin, sau
ti lt cc tin trnh c u tin thp hn v c nh vy. C 5 cp trong h thng
cp bc gm cc cp bc sau:
Tin trnh nn: l tin trnh ngi dng ang lm vic. Mt tin trnh
c xem l tin trnh nn nu c bt k iu kin sau y:
N ang chy mt activty m ngi dng ang tng tc.
Gi mt service m c lin kt vi Activity m ngi dng
ang tng tc.
C i tng Service m ang thc thi mt trong nhng phng
thc onCreate(), onStart(), onDestroy().
C i tng BroadcastReceiver m ang thc thi hm
onReceive().
Ch c mt vi tin trnh ngm s tn ti ti bt k thi gian no.
Chng ch b git i khi nm cui bng tng sp nu b nh qu thp
n ni chng khng th tip tc chy c na.
Tin trnh nhn thy c: l tin trnh khng c cc thnh phn nn
nhng vn c th nh hng n nhng g m ngi dng thy trn mn
hnh. Mt tin trnh c xem nh l thy nu tha c hai iu kin sau:
N gi mt acitivity m khng phi acitivity nn nhng vn nhn
thy c i vi ngi dng. iu ny xy ra khi Activity hin ti l

124

mt hp thoi v Activity trc c th nhn thy c do hp thoi


khng che ht mn hnh.
N gi mt service m ang kt ni ti mt Activity nhn thy
c.
Tin trnh dch v: l tin trnh chy mt service m c bt u bi
hm startService() m n khng ri vo 2 trng thi trn. Mc d tin trnh
dch v khng lin quan g ti bt k ci g m ngi dng thy, nhng n
lm nhng th m ngi dng quan tm n chng hn chi nhc mp3
ngm, v v th h thng gi cho chng chy nu b nh duy tr 2 tin
trnh trn.
Tin trnh ngm: l tin trnh gi mt Activity m ngi dng khng
nhn thy c. Nhng tin trnh ny khng nh hng trc tip ln ngi
dng, n c th b git bt k lc no dnh b nh cho 3 dng tin trnh
trn.
Tin trnh rng l tin trnh khng gi bt c mt ng dng no c.
Ch c mt l do gi nhng tin trnh nh vy l xem n nh l mt vng
m ci thin tc thi gian khi ng vo ln ti khi m cc thnh
phn cn n chy nhanh hn. H thng thng git cc tin trnh ny
m cn bng ti nguyn h thng gia vng m tin trnh v vng m li
bn di thit b.
Android xp hng cc tin trnh t cao n thp da trn mc quan trng
ca cc thnh phn hin ang c hiu lc trong tin trnh. Thm vo , th hng
cc tin trnh c th tng ln bi v cc tin trnh khc ph thuc vo n. Mt tin
trnh m phc v cho tin trnh khc c th khng bao gi c sp thp hn tin
trnh m n ang phc v. V d tin trnh A ang phc v cho B th th hng A
lun cao hn B.

G.6 Lm quen vi cc cng c h tr sn c ca Android SDK


G.6.1 Android Development Tools Plugin (ADT)

125

Eclipse IDE

ADT
Plugin

Android
SDK

Hnh ph lc 89 Hnh minh ha mi quan h gi Eclipse, ADT v Android SDK

ADT l mt plugin b sung tch hp mnh vo Eclipse. N cho php to v


kim li ng dng Android mt cch d dng v thun tin.
Plugin ADT khi kt hp vi Eclipse s h tr rt tt cho cc lp trnh vin
pht trin ng dng chy trn Android mt cch nhanh chng, in hnh l:
Truy cp cc cng c pht trin ng dng Android ngay trong Eclipse.
V d nh l cng c DDMS: chp mn hnh ng dng, t cc breakpoint,
xem cc lung (thread) v thng tin tin trnh (process)
Cung cp New Project Wizard gip cho vic to v thit lp cc tp
tin c bn cho ng dng Android mi mt cch thun tin v nhanh chng.
T ng v n gin ha qu trnh xy dng ng dng Android.
Cung cp trnh bin tp thun tin cho vic xy dng, chnh sa file
XML (Android manifest, v cc ngun ti nguyn khc nh layout,
animation)
G.6.2 Dalvik Debug Monitor Service (DDMS)
DDMS cung cp nhiu cng c hu ch cho vic pht trin ng dng
Android v c tch hp vo bn trong Eclipse, gip lp trnh vin theo di cc
126

lung, gi lp tng i in thoi (cuc gi v SMS), gi lp v tr (location), qun


l file trong in thoi Android o

Hnh ph lc 90 Hnh minh ha cng c DDMS

Mt s cng c hu ch trong DDMS:


Qun l thit b (1): gip ta qun l in thoi Android no ang kt
ni v xem danh sch cc my o (virtual machine) ang chy bn trong in
thoi Android no , cc my o ny c t tn theo tn ca cc gi ng
dng (v d com.android.mms). Ngoi ra cn c cc cng c bn pha trn
gip cho ta c th debug, theo di, dng mt my o
Gi lp in thoi (2): y l chc nng th v v hu ch khi lp trnh
ng dng Android. N gip ta gi lp mng in thoi (UTMS, GSM,
GPRS), gi lp cuc gi, gi lp tin nhn, gi lp thng tin v tr (kinh ,
v ), hay np vo cc file hng dn phc v cho vic gi lp bn
(KML, GPX )

127

Theo di cc ghi vt ca in thoi- Logcat (3): mc ny gip ta thy


c cc ghi vt (log) mong mun khi chy ng dng no , iu ny thc
s hu ch khi kim li mt ng dng Android.
Qun l tp tin trong in thoi (4): mc ny gip ta c th thao tc
vi cc tp tin nm trong in thoi (chp file t my tnh vo in thoi hay
ly file ra dng)
G.6.3 Hierarchy Viewer
ng dng Hierarchy Viewer gip ta kim li v ti u li giao din.
Cch thc chy ng dng:
Kt ni in thoi hoc chy in thoi o.
T dng lnh hoc trong th mc cha SDK /tool tm v chy
hierarchyViewer.
Khi ng dng va chy ta s thy danh sch cc in thoi ang kt
ni. La chn in thoi mong mun v nhn vo nt Load View Hierarchy
thy cu trc cy ca giao din ng dng ang chy trn in thoi.

Hnh ph lc 91 Hnh minh ha cng c Hierarrchy Viewer

Khi chuyn sang ng dng khc trn in thoi m ta mong mun


xem cu trc cy ca giao din th nhn nt Refresh Windows.
Phn tch mt mu giao din.
Hnh bn di l kt qu phn tch mu giao din (1), (2) l kt qu
cy phn cp giao din c phn tch. Theo mt s thng tin khng chnh

128

thc t cng ng pht trin Androi th giao din s ti u nht khi cc tng
ca cy l t nht.

Hnh ph lc 92 Cu trc dng cy khi phn tch mt khung giao din ang c thc thi trn mn
hnh

Ngoi ra, ta cn c th kho st c s phng to, thu nh ca mn hnh


(Pixel Perfect View) nh hnh minh ha bn di. Cng c ny c ch trong vic
pht trin giao din ng dng di hi chnh xc cao v hnh nh hay tinh chnh
li hnh nh, mu sc, trong sut cho hp l hn. Bn cnh cn c cc cng
c hu ch khc nh:
Overlay: np chng vo mt hnh khc v iu chnh trong sut
ca hnh so vi mn hnh hin ti, iu ny rt hu ch khi thit k game
hay ng dng nhiu hnh nh phong ph.
Refresh rate: iu chnh tc lm ti ca hnh nh.
Zoom: phng to hay thu nh hnh nh.

129

Hnh ph lc 93 Hnh minh ha cng c Pixel Perfect View

G.6.4 Draw 9-patch


G.6.4.1

nh dng hnh NinePatch

Hnh ph lc 94 nh ngha dng hnh NinePatch (Google)

130

NinePatch cho php chia mt tm nh thnh 9 phn vi 4 gc khng co gin,


4 cnh co gin v mt hng, phn ni dung chnh gia c co gin theo hai
hng. Thng thng phn ni dung chnh gia trong sut, v vy phn chnh gia
c th y ni dung nh chui vo trong n. N cho php to cc bc nh m c th
co gin theo cch bn mun khi m ni dung vt khi kch thc ca hnh nh.
i vi NinePatch bn c th lp trnh bng 2 cch: m lnh Java vi lp NinePatch
v to ra mt bc nh NinePatch s dng cng c Draw 9-patch. Trong phn ny
chng ti ni r cch to mt hnh nh theo nh dng NinePatch.
nh NinePatch l mt bc nh c th co gin mt cch t ng ty thuc
vo kch thc ni dung bn trong n.
Mt v d s dng NinePatch l cc hnh nn s dng cho nt nhn chun
ca Android. Nh cc bn thy, khi to mt nt nhn, nu ni dung chui hay hnh
nh trong mt nt nhn qu ln hay qu nhiu th nt nhn s b dn ra ty thuc
vo kch thc ca hnh hay chui . Nhng chung quy li, cho d ln bao nhiu
th nt nhn vn c hnh nn ng b vi nhau v khng b b nh nh trong 5 trng
thi hnh bn di:
Nt nhn bnh thng
Nt nhn khng c kch hot
Nt nhn khng c kch hot khi c chn
Nt nhn bnh thng khi c chn
Nt nhn bnh thng khi c nhn
Hnh ph lc 95 Hnh minh ha cho vic thit k mt nh nn ca mt nt nhn dng nh dng hnh
NinePatch

Hnh nh dng NinePatch phi l hnh nh PNG chun m bao gm hnh nh


chnh pha bn trong v mt n bn ng vin ngoi cng c kch thc b
rng l 1 pixel v nh phi lu vi phn m rng l .9.png; ng nhin l nh s

131

c lu tr trong th mc \res\raw trong th mc ca mt project Android.


ngha cc ng vin nh sau:
ng vin trn v ng vin tri ca hnh NinePatch: quy nh
gin ca tm hnh theo chiu dc v chiu ngang khi View cha n co gin.
Ch , bt k mt hnh kiu NinePatch no u phi c vin trn v vin tri;
nu thiu mt trong trong hai ng th chng trnh s khng chp nhn
nh ny.

Hnh ph lc 96 Hnh nhn nh v thuc tnh Strecthable ca nh Nine Patch

ng vin di v ng vin phi ca hnh NinePatch: quy nh


khong cch ti thiu gia phn ni dung ca View cha n vi ng vin
ca n. Ni mt cch d hiu, nu chiu cao v chiu rng ca phn ni dung
qu ln th kch thc chiu cao v chiu rng ca hnh s gin n ph hp
vi ni dung v khong cch ti thiu gia phn ni dung v ng vin s
c quy nh bi hnh v sau:

132

Hnh ph lc 97 Hnh nhn nh v thuc tnh Padding ca nh Nine Patch

Ghi ch: nu kch thc ca View cha n nh hn kch


thc chiu rng ca hnh nh th mt na bn phi v mt na
bn tri ca hnh nh s giao thoa nhau (tng t cho chiu cao)
nh hnh bn:
Nhn xt: ngha v cch dng ca NinePatch c ni r trn trang
http://developer.android.com/guide/developing/tools/draw9patch.html

http://developer.android.com/guide/topics/graphics/2d-graphics.html#nine-patch
nhng khng r rng, d gy s kh hiu cho cc nh pht trin. Chng ti th
s dng NinePatch v p dng hnh nh NinePatch vo chng trnh cho nn chng
ti mi c nhn nh li v cch hiu chnh hnh nh NinePatch nh trn.
G.6.4.2

Cng c Draw 9-patch

Draw 9-patch l cng c to nh thuc kiu NinePatch d dng nht.


Cch thc s dng cng c:

133

Hnh ph lc 98 Hnh minh ha cng c Draw 9-patch

T dng lnh commanline hoc trong th mc cha SDK \tool tm v


chy draw9patch.
Ko v th mt tm hnh (ch h tr nh dng PNG) vo trong ca s
ng dng Draw 9-patch (nh hnh minh ha bn trn).
Nhn chut vo mt trong 4 cnh ca tm hnh (mi ln nhp chut s
to 1 pixel mu en, y chnh l phn quy nh gin ca tm hnh) v
quan st co gin ca hnh nh khung bn phi ca ng dng Draw 9patch.
Sau khi chnh sa to c hnh nh nh , ta tin hnh chn File/
Save 9 patch lu li hnh chnh sa thnh nh dng NinePatch.
G.6.5 Android Debug Bridge (ADB)
y l cng c gip ta c th ci t mt ng dng (ten_ung_dung.apk) t
bn ngoi vo bn trong in thoi Android.

134

Hnh ph lc 99 Hnh minh ha cch thc dng dng lnh thc thi cng c adb

M chng trnh dng lnh Prompt v i n th mc android-sdk-windows


trn a. V d: C:\android-sdk-windows\tools\. Ti y chy tp tin adb.exe vi
tham s theo c php sau: adb install <ng dn ti file ng dng Android>.
Cn cch th 2 l cc bn c th s dng bin mi trng (Environment
Variable) chy tham s dng lnh adb bt k trn a v th mc no m khng
cn vo ng th mc cha n. Ta c th thit lp bin mi trng bng cch sau:
Vo System Properties/Chn th Advanced/ Chn nt Environment Variable. Tip
l hp thoi Environment Variables hin ln, sau ta vo System variables/
Chn Path/ Nhn Edit. Sau n cui gi tr Variable value v thm vo ng
dn n tp tin adb. Nhn Ok v quay tr ra. Th l xong. K t y ta th gi
lnh adb bt k th mc no m khng nht thit vo th mc cha n.

Hnh ph lc 100 Hnh minh ha cch thc to bin mi trng (Windows XP)

135

G.6.6 Cc cng c h tr khc


Android Emulator: cng c to in thoi o gip cc nh lp trnh c
th thit k, kim li, kim tra ng dng.
Android Virtual Devices (AVDs): cc thit lp thit b o. Vi mi s
thit lp ta c th ch nh nn Android thc thi, ty chn phn cng, giao
din my o. Mi chc nng AVD c vai tr nh mt thit b c lp c lu
tr d liu ngi dng, c th nh
Layoutopt: cng c gip phn tch cch xp xp khung giao din ng
dng (applications layouts) sao cho hiu qu.
Android Asset Packaging Tool (aapt): cng c gip to tp tin .apk
cha cc m nh phn v cc ti nguyn ca ng dng Android.
Sqlite3: cng c gip truy cp tp tin c s d liu SQLite c to
v s dng bi ng dng Android.
TraceView: cng c a ra s phn tch bng ha ca cc lu vt
d liu (trace log data) to ra t ng dng Android.
Mksdcard: cng c to nh a c th dng vi in thoi o gi
lp mt th lu tr bn ngoi (th nh SD).
Dx: cng c chuyn m Java bytecode (.class) sang m Android
bytecode (.dex).
Android: l mt tp lnh (script) gip qun l cc AVD v to cc tp
tin xy dng Ant c th bin dch ng dng Android.
Zipalign: mt cng c quan trng ti u tp tin .apk.

136

Ph lc H
H.1

Cc vn c bn trong lp trnh Android

Cc vn v khi nim c bn trong lp trnh giao din

H.1.1 Gii thiu lp trnh giao din trn Android v cc tnh nng ca
n
H.1.1.1

Gii thiu bn cht tp tin giao din trn Android

Cc tp tin giao din ca ng dng Android c qui nh bng XML bao


gm khung cha (layout), cc iu khin (widget) trong khung cha v mi quan
h gia chng. Android xem cc tp tin giao din XML ny l ti nguyn v c
lu trong th mc /res/layout bn trong project Android.
Cc thuc tnh ca cc layout v widget c th hin bng cc thuc tnh
nm trong th i tng ca XML. Nu mun i tng no c qun l hay s
thao tc, ta t thm gi tr cho thuc tnh ID ca i tng y. Phn ny tng ng
nh trn C#, cc i tng phi thng qua mt nh danh ID cho trc.
H.1.1.2

Phn tch mt mnh yu khi dng XML lm giao din

Chng ta thy giao din web hin nay c nh dng 2 dng l HTML v
Flash. Nu hng HTML th trang web rt nh do ni dung giao din c qui
nh bi cc th HTML v cc hnh nh hay phim nh s dc ti v ngay sau .
Cc tp tin giao din ca Android cng ta ta nh th. Ni dung c qui nh
bng tp tin XML cn hnh nh nm trong th mc khc. Khi vn hnh chng s kt
hp li vi nhau to nn giao din mn hnh. Ni chung, XML di dng nhng ta
cn c th c c chng. Nhng khi bin dch chng trnh v ng gi thnh
tp tin .apk th cc tp tin giao din s c bin dch thnh m nh phn bi plugin
bin dch ti nguyn aapt.
Ta d thy mt mnh ca tp tin XML l lm nh hn i vic nh ngha giao
din ca mt chng trnh nhng ngc li n lm cho vic pht trin giao din tr
nn di dng v lum thum khi mi bt u lm quen vi n. Ngi lp trnh s
kt hp kh nhiu layout v widget lp nn mt giao din tng i phc tp
137

trong khi cng vi giao din nu lm trn Windows Form ca Windows


Mobile th ch cn vi thao tc n gin.

Hnh ph lc 101 Hnh minh ha giao din ng dng NhatTrungHelloAndroid

Hnh ph lc 102 on m lnh XML to giao din cho ng dng NhatTrungHelloAndroid

Trn giao din ch c 3 i tng gm Text View, Edit View v Button


nhng lng m lnh XML qui nh cho chng kh nhiu.
H.1.1.3

Cc cch thm giao din

C 2 cch chnh thm giao din l:


Cch 1: ko th i tng giao din trn khung Layout, Views bn tay
tri .

138

Hnh ph lc 103 Hnh minh ha cho vic ko th giao din t khung Layouts v Views

Ta ko th khung cha (layout) v cc widget (Views) vo giao


din k bn sau tinh chnh cc thuc tnh chng th hin nh
mun.
Cch 2: thm trc tip trn khung Outline thng qua nt

Hnh ph lc 104 Hnh minh ha cho vic to giao din t khung Outline

139

Vi cc Layout, chng ta c th thm cc widget cho n bng cch


nhp chn vo layout v chn du cng

hin khung thoi sau

thm vo layout con hoc widget m bn cn:

Hnh ph lc 105 Hnh minh ha vic thm mt phn t mi t khung Outline

Ngoi ra cn cch pro hn l g dng lnh XML trc tip ln tp tin XML.
Nhng nu lm vy th vic lp trnh s di dng v kh khn v ta phi m bo c
php XML v kh qun l khi giao din bt u phc tp dn.
H.1.1.4

Th t cp bc giao din

Thng thng, mt tp tin giao din nn c mt khung cha nu khng c


khung cha th tp tin giao din y ch cha c duy nht mt widget m thi.
Chng ta kt hp nhiu khung cha to nn mt giao din hon chnh.
Bng cch chy tp tin hierarchyViewer.bat trong th mc /android-sdkwindows/tool ta s xem c cu trc giao din hin ti ca mt acitivity hin hnh
ca mt ng dng hin ang chy trn mt my o. Lu l plugin ny c th lin
kt vi nhiu my o khc nhau.

140

Hnh ph lc 106 Cc cng c h tr bn trong th mc Android SDK

y l giao din ca cng c trn:

Hnh ph lc 107 Giao din cng c Hierarchy Viewer

Da theo cy trn, ta c th nhn tng qut hn v h thng cp bc ca giao


din v cc phng thc v thuc tnh ca n khi ng dng ang thc thi.
H.1.2 Cc t kha thng gp trong lp trnh giao din
Chng ti tm hiu lp trnh giao din trn nhiu ngun nh ti liu, cc
website hng dn lp trnh Android th c nhiu t c lp i lp li nh sau:
View, Widget, Control: l cc i tng trc tip nhn c s tng
tc vi ngi dng. V d nh nt nhn, edit text,.v.v

141

Container: y l mt View m cha cc View khc. V d nh mt


li c th xem l mt container bi v n cha cc v ng nhin mi
l mt View.
Layout: l mt tp tin XML m t mt mn hnh giao din nhng
i khi li c dng m t khung cha nh LinearLayout, FrameLayout,
TableLayout,
H.1.3 Cc n v tnh trn giao din
Lc trc, cc nh lp trnh dng n v pixel nh kch thc cho cc
phn t trn giao din bi v kch thc mn hnh theo n v pixel; v d nh
320x480 pixel. Vn xy ra vi pixel l nu chng ta chy ng dng trn mn
hnh c phn gii cao hn th giao din tr nn nh hn v thm ch rt kh thy.
Chnh v l do trn, gii quyt vn ny ta phi c gii php lm sao cho kch
thc cc phn t phi c lp vi phn gii. Android a ra nhiu n v la
chn ty thuc vo nhu cu nh pht trin:
px (pixel): s lng im nh trn mn hnh.
In(inches): kch thc c tnh bng n v inches.
Mm(milimeters): kch thc c tnh bng n v milimet.
Pt (points): c kch thc 1/72 inch.
Dp (density-independent pixels): n v o da trn dy c ca
mn hnh. Trn mn hnh c 160 im nh trn 1 inch th 1dp=1px.
Dip: gn ngha ging dp, c dng nhiu trong cc v d ng d mu
ca Google.
Sp (scale-independent pixels): tng t nh dp nhng p dng cho
kch tc cc font ch.
Ring v kinh nghim ca chng ti, th chng ta nn dng n v dip lm
o cho kch thc cc i tng widget trn mn hnh v ni chung n c Google
dng nhiu trn cc v d. Ngoi ra, nh ni, dip cng nh dp n s c co

142

gin ty thuc theo tng mn hnh cho nn gii quyt c vn nu ban


u mc ny. Tng t cho font ch cng th, ta nn dng n v sp cho chng.
H.1.4 Cc thuc tnh thng gp trn cc View
Thng thng, cc thuc tnh cc View bao gm c 2 dng khung cha
(layout) v widget th s ty thuc vo tng hon cnh m gm 3 nhm thuc tnh
sau:
Nhm thuc tnh ni ti ca View: nhm thuc tnh ny qui nh ln
cc gi tr v thnh phn bn trong View , n khng hon ton nh hng
bi thuc tnh cc View bn ngoi.
Nhm thuc tnh Misc: qui nh s tng quan gia View hin ti vi
cha ca n.
Nhm thuc tnh Deprecate: Qui nh thuc tnh chui thuc i
tng (Nu View ny l i tng c cha chui trong ).

Hnh ph lc 108 Nhm thuc tnh thng gp

Hnh ph lc 109 Nhm thuc tnh thng gp

trn mt TextView

trn mt LinearLayout

143

H.1.5 Tng qut cc View di ci nhn hng i tng


View

AnalogClock

ViewStub
KeyboardView
TextView
ProgressBar

EditText

Button

SurfaceView

DigitalClock

ImageView
CompoundButton
VideoView

Chronometer

ToggleButton

ImageButton
RadioButton
MapView

ViewGroup

AdapterView

SlidingDrawer

RelativeLayout

Spinner

Gallery

CheckedTextView

CheckBox

LinearLayout

FrameLayout

DialerFilter

AbsoluteLayout

ScrollView

WebView

TableLayout

GridView

TwoLineListItem

TimePicker
TableRow
DatePicker

ListView
RadioGroup

AppWidgetHostView
TabWidget
TabHost

ZoomControls
ViewAnimation

Hnh ph lc 110 Hnh nh cc View di gc nhn hng i tng

Sau y, ta i vo hiu thm v cc lp i tng c trn m hnh k tha


trn:
H.1.5.1

Lp View

144

Lp View l lp i din tiu biu cho vic xy dng giao din ngi dng
(UI). Mt View chim mt vng hnh ch nht trn mn hnh, chu trch nhim v
v qun l s kin trn .
View l lp c s cho cc widget (widget dng to cc thnh phn giao
din tng tc ngi dng nh cc nt nhn, vng nhp liu)
H.1.5.2

Viewgroup

ViewGroup l mt View c bit c th cha cc View. ViewGroup l lp


c s cho cc khung cha.
Mt s lp con tiu biu ca ViewGroup:
LinearLayout:

Hnh ph lc 111 Hnh nh minh ha ca mt Linear Layout

y l mt khung cha m cc thnh phn bn trong n c sp


xp trn mt dng n hay ct n.C 2 hng sp xp cc thnh
phn con bn trong l hng ngang hoc hng dc, hng mc nh l
xp xp theo chiu ngang.
LinearLayout l khung cha n gin, d hiu chnhv c dng
nhiu trong vic to giao din ngi dng.

145

RelativeLayout:

Hnh ph lc 112 Hnh nh minh ha ca mt Relative Layout

y l mt khung cha m v tr ca cc thnh phn bn trong


c sp xp c s tng quan so vi cc thnh phn khc hay so vi cha
ca n.
V d:
A nm bn trn (so vi khung cha n).
B nm bn di so vi A, v v pha phi so vi
chnh n.
C nm bn di so vi A, v v pha bn tri so vi
B.
AbsoluteLayout:

146

Hnh ph lc 113 Hnh nh minh ha ca mt Absolute Layout

y l khung cha cho php ta nh ngha chnh xc v tr (ta )


t cc thnh phn bn trong n hay ni cch khc l cc thnh phn bn
trong khung cha ny c t vo mt v tr tuyt i v khng dch
chuyn c. Chnh v vy m AbsoluteLayout km mm do hn so vi
cc khung cha cn li v kh khn trong vic chnh sa nng cp giao
din.
H.1.5.3

Cc View nt l

Cc View nt l View trc tip thao tc vi ngi s dng. y, chng


ti lit k ra mt s cc View thng dng:

147

Hnh ph lc 114 Hnh nh mt s View thng dng

Ngoi ra cn rt nhiu View khc cn ch bn khm ph v p dng theo


tng nhu cu ring ca mnh trong ng dng.
H.1.5.4

Nhn xt

Vic xy dng giao din ngi dng trong Android rt linh hot v uyn
chuyn.

Hnh ph lc 115 Hnh nh minh ha cu trc dng cy ca mt giao din bt k

Ta c th kt hp ViewGroup v View li vi nhau to ra giao din ngi


dng n gin hoc phc tp ty theo nhu cu s dng. Chng hn nh mt
ViewGroup c th cha nhiu View v cng c th cha ViewGroup khc. Chnh v
s kt hp ny m cu trc ca giao din ngi dng trong Android thng c cu
trc dng cy v gc ca cy thng l mt ViewGroup.
148

H.1.6 Cch thc xy dng v thit k giao din


H.1.6.1

Gii thiu

Cng nh C#, Android a ra 2 phng php lp trnh giao din uyn


chuyn l bng tp tin giao din XML v bng m lnh Java. i vi bng tp tin
giao din XML th r, cn i vi vic bng m lnh Java th ta s tm hiu su
hn a ra so snh tng ng gia 2 phn ny.
Trong nhng phn tip theo ca mc ny, chng ti to mt ng dng mu
m t cch lp trnh thit k giao din bng c 2 cch cc bn tham kho. ng
dng c tn l HelloAndroidUI i km vi a DVD ca ti liu ny gm 2 cch
vi cu trc giao din ging nhau cho cc bn tin so snh.

Hnh ph lc 116 Hnh minh ha to giao din

Hnh ph lc 117Hnh minh ha to giao din

bng m lnh XML

bng Java

Hai hnh trn th hin cng mt cu trc giao din nhng bn cht hnh u
lp trnh bng XML hnh 2 th bng m lnh Java.
H.1.6.2

Lp trnh giao din bng XML

Cch thc thao tc ko th hay dng cc nt bn Outline ca giao din cho


n ngng cung g trc tip dng lnh XML to thnh tp tin giao din XML

149

trn Android ta khng bn nhiu y. Ta xem nh c sn tp tin giao din


XML c tn l using_xml.xml trong th mc /res/layout/ nh sau:

Hnh ph lc 118 Cu trc xy dng giao din bng XML

Ta thit lp tp tin giao din ny cho mt Activity bng on m sau:


public class AndroidUI_UsingXML extends Activity {
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// np giao din t tp tin XML
setContentView(R.layout.using_xml);
}
}

thit lp tp tin giao din XML cho mt Activity th ta dng hm


setContentView(R.layout.xxx) vi xxx l tn tp tin. Phng thc ny c thit
lp trong nhng dng m lnh u tin ca phng thc onCreate().
H.1.6.3

Lp trnh giao din bng m lnh Java

Khc vi phng php trn, lp trnh giao din bng m lnh Java l nh x
cc phn t giao din XML thnh m Java tng ng. Ni chung, vic lm ny rt
d v gn ging nh lp trnh XmlDocument trn C# vy.
Sau y l ton b on m lnh:
public class AndroidUI_UsingJava extends Activity {
private LinearLayout parentContainer;
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);

150

// phn ny tng ng nh khung LinearLayout trong tp tin


using_xml
parentContainer = new LinearLayout(this);
parentContainer.setLayoutParams(new LayoutParams(
LayoutParams.FILL_PARENT,
LayoutParams.FILL_PARENT));
parentContainer.setOrientation(LinearLayout.VERTICAL);
// phn ny ng vi TextView trong tp tin using_xml
TextView myTextView = new TextView(this);
myTextView.setText("Hello Android UI (Using Java Code)");
parentContainer.addView(myTextView);
// phn ny ng vi EditText c ID @+id/edt_TestEditText
trong tp tin using_xml
EditText nameLbl = new EditText(this);
nameLbl.setHint("EditText using code");
parentContainer.addView(nameLbl);
// phn ny ng vi Button c ID @+id/btn_TestButton trong
tp tin using_xml
Button btn = new Button(this);
btn.setText("Button Using Code");
parentContainer.addView(btn);
// np giao din to bng Java code ln mn hnh
setContentView(parentContainer);
}
}

Bn nhn thy trn m lnh c phn u l to thc th Layout v thit lp


cc thuc tnh ring cho n. Sau ln lt to thc th cc View v thm vo thc
th layout . Cng on ny xem chng rt t m v tn nhiu thi gian v cui
cng cng thng qua hm setContentView(thc th layout gc) thit lp thc th
giao din cho mn hnh Android.
H.1.6.4

Nhn xt

151

Gia 2 phng php lp trnh giao din trn u ra mt kt qu nh nhau.


Nhng mi phng php c mt mnh yu nh sau:
Bng XML: gip nh lp trnh thit k giao din nhanh hn so vi
bng m lnh Java do c cng c h tr lp trnh giao din ADT. Nhng n
cha p ng c nhu cu khi giao din c s thay i linh hot hn ty
thuc theo tng iu kin m giao din XML khng th p ng c.
Bng m lnh Java: rt kh lp trnh mt giao din phc tp v n
rt kh qun l theo tng dng m lnh nhng b li n uyn chuyn v linh
hot khi m giao din bng XML khng p ng c.
H.1.7 Cch thao tc control trn Java code
Tt c cc khung cha (layout) v cc View u c th khai bo thnh mt
thc th bng m lnh Java. Nu chng ta c nhu cu thit lp li thuc tnh hay
kim sot cc hnh ng ca i tng th phi ti mt nh danh trong thuc tnh
ID ta c th gn i tng cho mt thc th thng qua phng thc
findViewByID(R.id.yyy) vi yyy l tn ID ca nt nhn. V d nh gi tr thuc
tnh ID trn nt nh sau:

Hnh ph lc 119 Hnh minh ha vic qun l cc View thng qua nh danh ID

Chng ta xem li tp tin HelloNhatTrungApp.Java trong project u tay


HelloNhatTrungApp. Trong tp tin ny c on m lnh to thc th cho nt nhn
Cho Android nh sau:
152

Button btnChaoAndroid = (Button) findViewById(R.id.ButtonChaoAndroid);

Ta thy rt d, khai bo thc th cho mt i tng bt k trn mn hnh


giao din th ta dng phng thc findViewById(R.id.yyy) v sau p v kiu d
liu tht ca n. Tng t cho tt c cc i tng cn li nh EditText chng hn:
// Khai bo thc th (instance) nh x qua bn EditTextTenCuaBan trn
final EditText edtTextTenNguoiDung = (EditText)
findViewById(R.id.EditTextTenCuaBan);

Cng vi tng i tng, chng ta c th thay i thuc tnh ca chng,


dng cc phng thc thit lp lng nghe ngi dng tc ng ln n bng cc
phng thc thuc kiu onXXXListener vi XXX l ty theo tng kiu khc nhau.
Trong nhng phn tip theo, chng ti s ni r hn v cch lp trnh i vi khung
cha (layout) v cc widget c bn trong lp trnh giao din.

H.2

Lp trnh vi giao din c bn

H.2.1 Cc iu khin cha iu khin khc (layout)


Cc layout rt quan trng trn mn hnh giao din Android v n l khung
cha cc iu khin ca ng dng. Mi layout c cch dng khc nhau v thuc
tnh khc nhau v gip cho nh lp trnh rt nhiu khi cc nh lp trnh bit uyn
chuyn kt hp chng li vi nhau to nn mn hnh giao din mong mun.
C 5 layout chnh l LinearLayout, TableLayout, FrameLayout, AbsoluteLayout, v
RelativeLayout. Tip theo sau y, ta s i qua ngha v cch s dng tng layout
cng vi kinh nghim ca chng ti khi lm trn chng.
H.2.1.1

Khung cha Linear Layout

Linear l tuyn tnh v ni mt cch d hiu v LinearLayout l v tr cc


i tng con ca LinearLayout i theo tun t t trn xung hay t tri sang phi.
l nguyn tc nht qun ca LinearLayout. Nu thit lp thuc tnh Orientation
l Vertical th cc i tng con ca n theo t trn xung, v nu l Horizontal th
cc i tng thm vo s c xp theo chiu ngang.
V d, ta c hnh minh ha nh sau:

153

Hnh ph lc 120 Hnh minh ha mt Linear Layout

Nh chng ta thy, hinh trn c mt LinearLayout cha c 2 LinearLayout


con l linear layout ng khung mu vng trn v phn ng khung mu
di.
Phn LinearLayout c bao bi khung vng c Orientation l Horizontal
nn cc TextView c xp ngang. Cn LinearLayout c bao bi mu th c
TextView c xp theo chiu dc.
Ta ch k cc thuc tnh c trong LinearLayout trn v di trong on
XML sau:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical" android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"

154

android:layout_weight="1">
<TextView android:text="red"
android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="green"
android:gravity="center_horizontal"
android:background="#00aa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="blue"
android:gravity="center_horizontal"
android:background="#0000aa"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
<TextView android:text="yellow"
android:gravity="center_horizontal"
android:background="#aaaa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1" />
</LinearLayout>
<LinearLayout android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView android:text="row one" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row two" android:textSize="15pt"

155

android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row three" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
<TextView android:text="row four" android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1" />
</LinearLayout>
</LinearLayout>

i vi cc thuc tnh LinearLayout th ta cn ch cc thuc tnh sau:


Orientation: hng ca layout c 2 gi tr l Horizontal v Vertical.
Nh on cho v d trn.
Layout_width v layout_height: ln lt l chiu rng v chiu cao
ca layout. Ta c th in vo kch thc nh mun bng n v dip 110
dip hay dng 2 dng c sn l wrap_content v fill_parent ln lt l bao
theo chiu di ca ni dung v ph y theo chiu dc hay ngang ty theo l
layout_width hay layout_height.
Layout_weight: dng thuc tnh ny ta thit lp mc quan trng
v ginh git khng gian theo hng m thuc tnh Orientation m cha n
qui nh. Layout_weight c p dng cho cc layout m cn cho cc
widget. y, chng ti ly v d Button nh hnh sau:

156

Hnh ph lc 121 Hnh minh ha cho thuc Layout_weight

Nt 1 c layout_wight l 0 cn nt cn li c gi tr l 1 cho nn
nt cn li s chim dng ht phn cn li theo hng ca cha qui nh
cho cc con.
Layout_gravity: l s canh l cho cc i tng bn trong layout hay
widget.
Gravity: l s canh l tri, phi, trn, di so vi cha ca n.
Ta c th lp trnh giao din LinearLayout bng XML v bng m lnh Java
nh hng dn trn.

157

Theo nh kinh nghim ca chng ti, bn nn dng LinearLayout lm


Layout thit k chnh cho ton chng trnh ca mnh v ty theo tng hon cnh
m s kt hp thm cc Layout cn li. Bi v LinearLayout c dng thun thc
th s tc dng cao trong vic phn chia khung h thng giao din trong ng dng.
H.2.1.2

Khung cha Table Layout

Table l bng, ni d hiu TableLayout l khung c thit k theo dng


bng c nhiu dng v nhiu ct v mi c th cha mt widget con hay cha mt
layout khc.

Hnh ph lc 122 Hnh minh ha cho mt Table Layout

Chng ta thy TableLayout to to thnh bng th ta dng Th TableRow


qui nh bng c bao nhiu dng. Cn vic c bao nhiu ct l do bn trong dng
c bao nhiu phn t; s lng phn t qui nh s ct cho dng . Chng ti

158

to 4 TableLayout vi vic thm tng thuc tnh th bng s khc nhau vi


nhng thuc tnh sau:
Android:layout_span: l thuc tnh ca mt i tng bn trong
TableRow. V d nh:
<TextView android:text="red" android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_span="3" />

Nh bn thy do layout_span l 3 nn n m rng ra m trn 3 ct


li trong bng th 2 t trn xung trn hnh trn.
Android:stretchcolumns ch nh ko gin ct no trong bng theo ch
s t 0. V d nh bn t thuc tnh android:stretchColumns="0,1,2" nm
bn trong th TableLayout th n s qui nh ct th 1, th 2 v th 3 dn
y mn hnh v lp phn trng cn li ca cha. V d nh sau:
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:stretchColumns="0,1,2">

Android:layout_weight: s gip cho cc i tng bn trong


TextView s gin ht v chim phn trng cn li ca cha n theo chiu
Orientation m cha n qui nh.
<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:background="#fffff0"
android:layout_height="wrap_content">
<TableRow android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView android:text="red"
android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_height="fill_parent"
android:layout_width="fill_parent"
android:layout_weight="1" />

159

</TableRow>

Theo kinh nghim chng ti, bn nn dng TableLayout khi thit k mn


hnh kiu nhp liu nhiu gi tri6 nh tm kim nng cao hay thng tin khch
hng, Khi cn canh chnh TextView bn tri v cc EditText bn phi cho d
nhn.
H.2.1.3

Khung cha Frame Layout

Frame l khung nh; ni d hiu FrameLayout ging nh tr chi ghp


nhiu tm phim ln vi nhau to thnh mt bc nh hon chnh. V d nh bn
c 5 tm hnh: 1 tm c khun mt, 1 tm c 1 ci mi, 1 tm c 2 con mt, 1 tm
c ming, 1 tm c mi tc v 2 l tay; sau ta ghp cc tm phim li thnh 1 hnh
nh hon chnh. FrameLayout tng t nh th.

Hnh ph lc 123 Hnh minh ha cho mt Frame Layout

on m lnh tng ng vi hnh trn bng XML:


<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff">
<Button android:id="@+id/Button01"
android:layout_width="wrap_content"
android:layout_height="wrap_content" android:text="Hello
Button"></Button>
<FrameLayout android:id="@+id/FrameLayout01"
android:background="#000000" android:layout_gravity="left"

160

android:layout_marginTop="50dip"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<TextView android:id="@+id/TextView01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello FrameLayout 2"></TextView>
</FrameLayout>
<FrameLayout android:id="@+id/FrameLayout02"
android:layout_width="wrap_content"
android:layout_height="wrap_content">
<AnalogClock android:id="@+id/AnalogClock01"
android:layout_width="wrap_content"
android:layout_height="wrap_content"></AnalogClock>
</FrameLayout>
</FrameLayout>

Nh ni, cc FrameLayout nm chng ln nhau cho nn ta nn canh


chnh l cho tng i tng con ca n chng sp xp ln nhau mt cch c
trt t.
Theo chng ti dng FrameLayout cho trng hp mun cc i tng nm
nhng ni m mnh thch khng b chi phi bi s tng quan gia chng nh cc
i tng trn LinearLayout b nh hng n nhau.
H.2.1.4

Khung cha Absolute Layout

Absolute l xc thc; AbsoluteLayout c ngha l cc iu khin c ko


vo th n s iu khin ng nh v tr m i tng c ko vo. Nu
bn no lp trnh giao din trn C# th n s ng y chang nh vy. Nhng n b
mt hn ch l khi mn hnh quay ngang hoc ng th n s b mt i nh hnh
di.

161

Hnh ph lc 124 Hnh minh ha cho mt Absolute layout

on m XML sau th hin giao din trn:


<AbsoluteLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<Button android:layout_width="wrap_content"
android:layout_y="200dip"
android:layout_x="100dip"
android:layout_height="wrap_content"
android:id="@+id/Button01" android:text="Hello
Button"></Button>
<Button android:layout_width="wrap_content" android:text="Hello
Button"
android:layout_y="200dip" android:layout_x="240dip"
android:id="@+id/Button02"
android:layout_height="wrap_content"></Button>

162

</AbsoluteLayout>

Theo nh kinh nghim chng ti, dng AbsoluteLayout trong hon cnh ta
mun cng kin trc giao din.
H.2.1.5

Khung cha Relative Layout

Relative l quan h; Relative Layout c ngha l cc i tng bn trong


n s c v tr tng quan v nh hng dy chuyn vi nhau, khi mt i tng
gc b thay i th tt c cc i tng cn li b thay i theo.

Hnh ph lc 125 Hnh minh ha Relative Layout

on m XML tng ng:


<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dip">

163

<TextView android:id="@+id/label"
android:layout_width="fill_parent"
android:layout_height="wrap_content" android:text="Type
here:" />
<EditText android:id="@+id/entry"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_below="@id/label" />
<Button android:id="@+id/ok" android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@id/entry"
android:layout_alignParentRight="true"
android:layout_marginLeft="10dip"
android:text="OK" />
<Button android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_toLeftOf="@id/ok"
android:layout_alignTop="@id/ok" android:text="Cancel" />
</RelativeLayout>

Nh ta thy th Button ca nt nhn Ok c thuc tnh


android:layout_below="@id/entry"

vi @id/entry l EditText ca mn hnh; nh

vy n c v tr tng i vi EditText v cc i tng cn li u tng t nh


vy khi ta thit lp cc thuc tnh android:layout_below,

android:layout_above,

android:layout_toLeftOf, android:layout_toRightOf,
android:layout_alignTop, android:layout_alignBottom,
android:layout_alignRight, android:layout_alignLeft,

c gi tr l cc ID

ca cc i tng m n ang canh chnh theo tn ca thuc tnh.


Theo chng ti, RelativeLayout l layout gn ging nh LinearLayout v
mt th hin nhng bn cht li khc nhau. Chng ti c 1 s cun sch hng dn
lp trnh Android th mt s tc gi c khuynh hng dng RelativeLayout do n c
tnh ti u hn LinearLayout v mt phn cp giao din. Nhng s dng ra sao th
cn ty thuc vo tng hon cnh ca th ca tng giao din bi ton.
H.2.2 Cc iu khin thng dng

164

Cc iu khin thng dng trn mn hnh cho ta lp trnh giao din


phc v cho cc cng vic ring ng vi tng nhu cu trong thc t gm nhng
giao din thng dng sau:

Hnh ph lc 126 Hnh minh ha cc iu khin khc

Trn cc cc i tng c bn thuc nhm cc nt nhn nh Button,


ImageButton, ToggleButton, CheckBox, Option,

Hnh ph lc 127 Hnh minh ha cc iu khin khc

165

Cc iu khin khc nh RatingBar, Clock, ZoomImage, ImageView,


ProgressBar, SeekBar, ... c cc thuc tnh v phng thc khc nhau.
Trong phn ny, ty theo tng iu khin m thuc tnh v phng thc s
khc nhau. Cho nn trong phn ny nu trnh by th s rt nhiu nhng b li cc
thuc tnh v phng thc rt d. Theo kinh nghim chng ti, thuc tnh v
phng thc th c nhiu nhng quanh i qun li ch tp trung vo thuc tnh chnh
sa thuc tnh ni dung ca n v cc phng thc Listener m thi. Nhng phn
ny, bn no c t kin thc v lp trnh trn C# th lm quen s rt nhanh.

H.3

Cc ch khi lp trnh giao din


Khi mun chn nhiu i tng khng lin tc nhau, ta cn dng t hp

phm Ctrl + nhp chn vo i tng cn chn.


Khi bc vo lp trnh giao din, sau khi tm hiu xong cc thao tc c bn
th bn cn bt tay vo ngay vc th nh thit lp giao din cho cc tng
mn hnh m bn ra, th quay dc hay quay ngang mn hnh xem cc i
tng c b tr li ra lm sao v c ph hp cha. Khi lm vy, bn s c kinh
nghim lp trnh giao din hin thc ha tng ca mnh rt nhanh.
Theo kinh nghim chng ti, bn nn dng cng c thao tc trn Outline
chnh sa ni dung giao din nh to mi, xa hay di chuyn cc layout v View
khi m chng t khng ng v tr.
Mt s thuc tnh ca iu khin v layout khng nm trn tab Properties
ca i tng m ta s thm nng vo trong tp tin giao din bng XML. Phn
ny, ch trong nhng cun sch ln vit v Android nm trong phn ti liu tham
kho ca kha lun s lu lu ni thm v cc thuc tnh bt cht . V d nh,
thuc tnh android:layout_span l thuc tnh khng sn c trn tab Properties ca
cc iu khin nhng thuc tnh y khi c thm vo cc widget l con ca
TableLayout th n s trn vi cc ct pha sau cn trng ca TableLayout . Bn
cht thuc tnh ny khng trc thuc TextView nhng ta thm cng hay nng
bng cch g trc tip vo tp tin XML.

166

Ph lc I Lp trnh theo tng ch


Trong phn ph lc ny, chng ti ni v cch thc lp trnh theo tng ch
m chng ti tm hiu phc v cho ng dng thc t ca chng ti. Mi phn
chng ti nu ra cch dng n gin nht mc c th c th lm quen vi ch
y. Trong mi ch s c rt nhiu ti liu v code mu trn cc din n
Android m cc bn c th tham kho thm.

I.1

Lp trnh giao din ty bin vi Adapter


Thc cht khi nim lp trnh vi Adapter l chng ti tham kho trn

mt s ti liu ni v Android khi lp trnh vi mt s i tng giao din m cn


mt Adapter lm trung gian lin kt gia giao din mn hnh v ngun d liu sn
c. Ni d hiu, n ng vai tr gn kt tng thnh phn d liu vo tng i tng
thnh phn giao din v to nn mt danh sch hay mt h thng cc phn t giao
din hon chnh.
I.1.1 Gii thiu s lc BaseAdapter v cc lp con ca n
I.1.1.1 Gii thiu Base Adapter
BaseAdpater l lp adpater c s cho cc Adapter thng dng khc nh
ArrayAdapter<T>, CursorAdapter, SimpleAdapter. BaseAdapter thng ng vai
tr Adapter cho cc ListView v Spinner s c tm hiu trong cc phn tip theo.
Ch : c th dng lp ListAdapter hoc lp SpinnerAdapter lm Adapter ln lt
cho ListView v Spinner. Nhng 2 lp ny ch l lp o xy dng trn lp
BaseAdapter m thi.
I.1.1.2 Gii thiu ArrayAdapter
Mt ListAdapter c th qun l mt ListView cha danh sch cc phn t c
kiu bt k. Vic rt n gin, bn ch cn mc ni d liu vi TextView thng
qua ID ca n vi mi dng trong ListView l mt TextView v d nh ListView
gm danh sch tn sinh vin m thi. Nu bn mun mi dng ListView phc tp

167

hn tc l gm nhiu thnh phn hn th nn dng mt mng gi tt c cc ID


ca cc TextView trong. Tng cch lm s c ni trong cc phn sau.
I.1.1.3 Gii thiu CursorAdapter
CursorAdapter l lp Adapter ly d liu t mt Cursor ra mt ListView.
Cursor phi c cha tn nh danh cho ct, bng khng n s khng chy.
I.1.1.4 Gii thiu Simple Adapter
SimpleAdapter th ng nh ch simple tc n gin. N l mt Adapter
n gin v d hiu nh x d liu vo nhng View c nh ngha trong mt
tp tin XML. Bn c th ch r d liu s c ng gi trong mt danh sch nh l
mt ArrayList ca vic nh x. Mi phn t trong ArrayList l mt th hin ca mt
dng trn ListView. Cng vic nh x ny n cha d liu cho mi dng. Bn cng
c th ch r mt tp tin XML cha nhiu iu khin (widget) m c dng th
hin mt dng v ta s nh x tng gi tr trong tng phn t trong ArrayList sang
tng widget nm trn tng dng. Gn d liu vo cc Views xy ra trong 2 giao
on. S c trnh by trong cc phn sau.
Trong cc phn tip theo ca mc ny, chng ti s i vo cch lp trnh cho
Spinner, Gallery, ListView, GridView.
I.1.2 Dng Adapter trn Spinner
I.1.2.1 Hnh nh gii thiu
y l mt Spinner, so vi bn C# n gn ging nh l mt DropDownList
vy.

Hnh ph lc 128 Hnh minh ha cho mt Spinner trong Android

Nhp chn vo th s hin danh sch cc phn t cn th hin :

168

Hnh ph lc 129 Danh sch la chn khi nhn vo Spinner

Hnh nh v project mu c tn l HelloAdapter m bn c th tham kho


thm.
I.1.2.2 Tng bc lp trnh
ng nhin l phi c mt Spinner trn giao din ri:

Hnh ph lc 130 Hnh minh ha vic to Giao din c cha Spinner

Thit lp m lnh Java theo tng bc sau:


Spinner s = (Spinner) findViewById(R.id.mySpinner);
ArrayAdapter Adapter = ArrayAdapter.createFromResource(this,
R.array.planets,
android.R.layout.simple_spinner_item);

169

Adapter
.setDropDownViewResource(android.R.layout.simple_spinner_dropdown_i
tem);
s.setAdapter(Adapter);

C 3 bc chnh l
To thc th Spinner.
Khai bo v thit lp Adapter.
Gn Adapter vo spinner.
i vi Spinner c th dng ArrayAdapter th th hin d liu ln
Spinner v Spinner ch cho php ta th hin chui ln tng dng ca Spinner.
y, ta ch ti cch lp trnh c phn l l y l:
ArrayAdapter.createFromResource(this,
R.array.planets,
android.R.layout.simple_spinner_item);

Thay v a vo mt mng chui gi tr th ta c th dng mng gi tr


nh ngha trong th mc /values. Bn c th tham kho thm trong project mu
nh nu. Ngoi ra cn c

android.R.layout.simple_spinner_item

l mt mu

giao din spinner c sn ca android v ta ch cn dng li. Bn ch nu ti


nguyn no nm trong th mc /res ca ng dng th khi dng ch cn R.xxx.yyy;
ngc li nu dng ti nguyn sn c h iu hnh android th theo m tp sau:
android.R.xxx.yyy.
I.1.2.3 Nhn xt
V l thuyt m ni ta c th dng nhiu loi Adapter phc v cho Spinner
nhng theo kinh nghim chng ti th ArrayAdapter th thch hp cho Spinner hn.
I.1.3 Dng Adapter trn Gallery
I.1.3.1 Hnh nh gii thiu
y l hnh nh ca mt Gallery th hin danh sch hnh nh:

170

Hnh ph lc 131 Hnh minh ha Gallery

Bn c th tham kho thm trong project mu HelloAdapter mc


HelloGallery.
I.1.3.2 Tng bc lp trnh
To giao din nh hnh trn vi m lnh XML:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:background="#ffffff">
<Gallery android:id="@+id/gallery"
android:layout_width="fill_parent"
android:layout_height="wrap_content" />
</LinearLayout>

n gin ta ch cn mt Gallery trn giao din.


Sau y l on m lnh trn Java:
// to i tng gallery
Gallery g = (Gallery) findViewById(R.id.gallery);
// gn gallery vi mt BaseAdapter
g.setAdapter(new ImageAdapter(this));

171

Adapter y l ImageAdapter do ta to thm phc v nhu cu Adapter cho


Gallery bi v chng ta mun lm cho Gallery p hn bi cc ng vin v mi
hnh cch nhau nn ta vit lp ImageAdapter t BaseAdpter vi hm getView
phc v cho vic thit k giao din li. Vi on m lnh nh sau:
public Integer[] imageIDs = { R.drawable.gallery_photo_1,
R.drawable.gallery_photo_2, R.drawable.gallery_photo_3,
R.drawable.gallery_photo_4, R.drawable.gallery_photo_4,
R.drawable.gallery_photo_6, R.drawable.gallery_photo_7,
R.drawable.gallery_photo_8, };
public class ImageAdapter extends BaseAdapter {
int mGalleryItemBackground;
private Context mContext;
public ImageAdapter(Context c) {
mContext = c;
// See res/values/attrs.xml for the <declare-styleable>
that defines
// Gallery1.
TypedArray a =
obtainStyledAttributes(R.styleable.Gallery1);
mGalleryItemBackground = a.getResourceId(
R.styleable.Gallery1_android_galleryItemBackground, 0);
a.recycle();
}
public int getCount() {
return imageIDs.length;
}
public Object getItem(int position) {
return position;
}
public long getItemId(int position) {
return position;

172

}
// set image and style for each item of the gallery
public View getView(int position, View convertView, ViewGroup
parent) {
ImageView i = new ImageView(mContext);
i.setImageResource(imageIDs[position]);
i.setLayoutParams(new Gallery.LayoutParams(150, 100));
i.setScaleType(ImageView.ScaleType.FIT_XY);
i.setBackgroundResource(mGalleryItemBackground);
return i;
}
}

Ta thy trong lp ImageAdapter c hm getView, hm ny c cng dng


thit k ti phn giao din theo chng ta m khng dng ci c sn t android nh
sa mu sc, canh l, ng vin,
I.1.3.3 Nhn xt
Vi Gallery l do nhu cu ta chnh sa giao din tng hnh nh trn galery
theo mnh nh thay mu ng vin tng tm hnh, hay lm sng tm hnh,
nn ta s dng BaseAdapter cho n li dng hm getView c th lm chuyn
.
I.1.4 Dng Adapter trn ListView c bn
I.1.4.1 Hnh nh gii thiu
y l hnh gii thiu mn hnh ListView

173

Hnh ph lc 132 Hnh nh minh ha ca mt ListView

Vi mi phn t l mt chui v y l ListView dng n gin.


I.1.4.2 Tng bc lp trnh
u tin ta ko vo mt ListView vo giao din vi hnh nh sau:

Hnh ph lc 133 Minh ha vic to mt List View

M lnh trn Java nh sau:


ListView myList = (ListView) findViewById(R.id.lv_myListView);
String[] listItems = new String[] { "List Item 1", "List Item 2",
"List Item 3", "List Item 4", "List Item 5", };
ArrayAdapter<String> listItemAdapter = new ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, listItems);
myList.setAdapter(listItemAdapter);

Tng t nh Spinner ta dng ArrayAdapter do nhn chung danh sch th


hin gia Spinner v ListView n gin th gn nh l ging nhau v ch khc nhau
v mt th hin m thi. Cho nn n cng tri qua 3 bc:
174

To thc th listView.
Khai bo v thit lp d liu v Adapter cho ListView.
Thit lp Adapter cho ListView.
tn dng li phn giao din layout sn c ca android ta dng
android.R.layout.simple_list_item_1

nh ngha giao din th hin cho tng

dng trn ListView.


I.1.4.3 Nhn xt
i vi ListView n gin th ta ch cn dng ArrayAdapter m thi v n c
danh sch cc gi tr cn th hin ln mn hnh vi mi phn t l mt gi tr dng
s v ch.
I.1.5 Dng Adapter trn ListView nng cao
I.1.5.1 Hnh nh gii thiu
Hnh nh ListView nng cao:

Hnh ph lc 134 Hnh minh ha mt Custom ListView

Trn mi dng c nhiu TextView th hin chui k t.


I.1.5.2 Tng bc lp trnh
175

u tin ta phi to khung mu giao din cho tng dng trong listView.
Tng mu c nhiu TextView s l ni th hin thng tin ln ListView.

Hnh ph lc 135 Hnh minh ha cch thc lm mt custom row cho mt ListView

Sau cng nh ListView n gin l cng cn c mt ListView trn giao


din chnh:

Hnh ph lc 136 Hnh minh ha cch thc lm mt ListView

Sau y l on m lnh Java:


ListView myList = (ListView)
findViewById(R.id.lv_myListView);
// to lin kt vi custom row
String[] mFrom = { "Chuoi_1", "Chuoi_2" };
int[] mTo = { R.id.tv_myTextView_row1,
R.id.tv_myTextView_row2 };
List<HashMap<String, String>> mAdapterData = new
ArrayList<HashMap<String, String>>();
// to d liu
HashMap<String, String> item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 1");
item.put("Chuoi_2", "Custom Row 1.1");
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 2");
item.put("Chuoi_2", "Custom Row 2.1");

176

mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 3");
item.put("Chuoi_2", "Custom Row 3.1");
mAdapterData.add(item);
// gn d liu vo list
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
mAdapterData,
R.layout.hello_customlistView_row, mFrom, mTo);
myList.setAdapter(simpleAdapter);

Ta y l cng c 3 giao on chnh:


To thc th ListView d qun l l ListView myList.
Thit lp ch nh x bng tn i din bng 2 mng 1 chiu
String[] mFrom

int[] mTo

. Bng c ch nh x tn ta to d liu

thng qua mt HashMap<String,String> v thm HashMap vo mt danh


sch d liu List<HashMap<String,String>>.
Gn danh sch vo trong setAdapter.
I.1.5.3 Nhn xt
Theo nh trong ti liu ca developer.android.com hng dn ni l
SimpleAdapter c th tng hnh nh ln SimpleAdapter c nhng theo
chng ti tm hiu th chng ta phi to mt lp m dn xut t lp
SimpleAdapter ti s dng li hm setViewImage ca n. Trong bi demo
chnh thc ca chng ti th chng ti c s dng lp dn xut t lp
SimpleAdapter trong Activity ManHinhDanhSachHangHoa.Java v trong c i
tng thuc kiu HangHoasimpleAdapter.Java trong com.Adapter.
I.1.6 Dng Adapter trn GridView c bn
I.1.6.1 Hnh nh gii thiu
y l mt GridView c bn:

177

Hnh ph lc 137 Hnh nh minh ha mt GridView n gin

Ta thy ch n gin l hin mt tp hp cc gi tr trn mn hnh.


I.1.6.2 Tng bc lp trnh
Ta thit k mn hnh giao din th hin nh sau:

Hnh ph lc 138 Cch thc to mt GridView

K n thit k m lnh Java nh sau:


public class Adapter_BasicGridView extends Activity {
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_basicgridView);

178

GridView myGrid = (GridView)


findViewById(R.id.grv_myGridView);
String[] gridItems = new String[] { "Grid Item 1", "Grid Item
2",
"Grid Item 3", "Grid Item 4", "Grid Item 5", };
ArrayAdapter<String> listItemAdapter = new
ArrayAdapter<String>(this,
android.R.layout.simple_list_item_1, gridItems);
myGrid.setAdapter(listItemAdapter);
}
}

Ta ch y do cc phn t th hin kh n gin l ch n thun l cc


chui d liu nn ta ch cn dng ArrayAdapter thi l cho nn cch thc thit
lp gn nh ging Spinner v ListView c bn.
I.1.6.3 Nhn xt
Nu GridView th hin dng cc mc chn ch c chui thng thng th
nhn chung n rt d. Nhng thng thng GridView khng ch n gin th hin
nh vy m cn c thm hnh nh v chui i km th lc GridView c phn
phc tp. Hay ch n gin nh l mt nhm TextView trn 1 phn t ca
GridView nh ListView dng nng cao chng hn. Chng ti s trnh by trong
phn sau vi GridView c mi phn t l mt nhm cc chui ring bit.
I.1.7 Dng Adapter trn GridView nng cao
I.1.7.1 Hnh nh gii thiu
Hnh nh ca GridView nng cao cng nh ListView v mt bn cht tng
phn t:

179

Hnh ph lc 139 Hnh nh minh ha mt Custom GridView

I.1.7.2 Tng bc lp trnh


To mt tp tin XML qui nh giao din ca tng phn t nm trong
GridView:

Hnh ph lc 140 Cch thc to mt Custom Item cho mt Grid View

Sau thit k mt giao din cha GridView nh GridView c bn:

Hnh ph lc 141 Hnh minh ha cch thc to mt GridView

180

Tip n l thit k m lnh Java, nu tinh ta s suy lun rng m lnh Java
ca GridView nng cao ny s gn ging nh ListView nng cao nh trnh by
trn vy v bn cht l n ging nhau trn tng phn t:
public class Adapter_CustomGridView extends Activity {
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_customgridView);
GridView myGrid = (GridView)
findViewById(R.id.grv_myGridView);
// to lin kt vi custom row
String[] mFrom = { "Chuoi_1", "Chuoi_2" };
int[] mTo = { R.id.tv_myTextView_row1,
R.id.tv_myTextView_row2 };
List<HashMap<String, String>> mAdapterData = new
ArrayList<HashMap<String, String>>();
// to d liu
HashMap<String, String> item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 1");
item.put("Chuoi_2", "Custom Row 1.1");
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 2");
item.put("Chuoi_2", "Custom Row 2.1");
mAdapterData.add(item);
item = new HashMap<String, String>();
item.put("Chuoi_1", "Custom Row 3");
item.put("Chuoi_2", "Custom Row 3.1");
mAdapterData.add(item);

181

// gn d liu vo list
SimpleAdapter simpleAdapter = new SimpleAdapter(this,
mAdapterData,
R.layout.hello_customgridView_row, mFrom, mTo);
myGrid.setAdapter(simpleAdapter);
}
}

I.1.7.3 Nhn xt
Thc t m ni, nhu cu GridView tht t rt phong ph v a dng, trn ch
l nng cao dng c bn m thi, thc t, GridView i hi cao nh tng phn t l
mt tm hnh v bn di c mt chui m t tn tm hnh v c mt hnh nn p
khi ngi dng tc ng vo, Vi m tp , chng ti lm trong chng
trnh ng dng thc t Activity ManHinhHeThongSieuThi.Java m trong c
thc th vit t lp HeThongSieuThiAdapter.Java m dn xut t lp BaseAdapter.
Cc bn c th tham kho thm trong chng trnh .
I.1.8 Kinh nghim lp trnh vi Adapter
Theo kinh nghim chng ti, vic chn kiu Adapter no cho Spinner,
Gallery, ListView v GridView th ty thuc vo thc t bi ton ca cc bn.
Nhng chung qui li chng ti c nhng nhn xt n gin nh sau:
i vi Spinner, ListView n gin, GridView n gin: d liu trn
tng phn t dng n gin th ch cn ArrayAdapter<T> l lp trnh
th hin ni dung vi chng.
ListView nng cao v GridView nng cao ch cha nhiu hn mt
TextView th ta c th dng SimpleAdapter nh x t d liu tht qua
giao din.
ListView v GridView c cha hnh nh trong th ta nn dng
SimpleAdapter nhng phi vit li mt lp dn xut t SimpleAdapter v
thit k li hm public
String value)

void setViewImage(final ImageView image, final

gn hnh vo tng phn t trn giao din.

182

Cng nh trn, nu vi hnh nh phc tp hn th ta cng c th dng


BaseAdapter vit li thit k Adapter ph hp cho ring nhu cu ca
mnh. Vic dng BaseAdapter s phc tp hn so vi SimpleAdapter nhng
nu s dng quen th n s khng cn l vn kh khn na. Ni hung,
BaseAdapter l lp Adapter c s c th ty bin theo nhiu loi giao din
m cc Adapter kia khng p ng c.

I.2

Lp trnh vi hot cnh chuyn ng (Animation)

I.2.1 Gii thiu lp trnh vi Animation


Nhn chung, lp trnh Animation trn Android c hai hng i l:
Hng 1: To v qui nh sn hot cnh chuyn ng trong tp tin
XML v p dng tp tin XML vo i tng cn c thc thi hot cnh.
Hng 2: Dng m lnh Java qui nh hot cnh chuyn ng ca i
tng. Ty theo tng hon cnh m ta p dng.
Theo chng ti, nu thun thc vi XML th nn dng cch 1 to sn hot
cnh chuyn ng, v li tt c u c cng c h tr khi lp trnh hot cnh chuyn
ng cho XML:

Hnh ph lc 142 Tp tin quy nh hot cnh chuyn ng

183

Hnh ph lc 143 Hnh nh minh ha s h tr ca Eclipse gip to hiu ng hot cnh

Ta c th thm, xa v hiu nh li thuc tnh chuyn ng nh vo ADT


h tr. Trong khi , theo hng 2 th ta phi dng cc on m lnh Java v theo
mt mt no n s chim b nh nhiu hn do n phi to ra cc thc th
qun l vic chuyn ng trn m lnh Java.
i theo 2 hng l vy; thm vo lp trnh hot cnh chuyn ng phn
lm 2 dng gi l TweenedAnimation v FrameByFrameAnimation. Hai dng ny
s dng trong nhng hon cnh khc nhau. Ta s i qua tng dng trong cc mc
tip theo.
I.2.2 Lp trnh vi TweenAnimation
u tin, ta thit k mt mn hnh chung p dng hot cnh chuyn ng
ln lt theo tng cch XML v Java nh sau:

184

Hnh ph lc 144 Hnh minh ha cho Tweened Animation

I.2.2.1 Lp trnh bng XML


Ta thit k tp tin Java scaler.xml trong th mc /res/anim nh sau:
<set xmlns:android="http://schemas.android.com/apk/res/android"
android:interpolator="@android:anim/accelerate_interpolator">
<scale android:fromXScale="0.5" android:toXScale="2.0"
android:fromYScale="0.5" android:toYScale="2.0"
android:pivotX="50%"
android:pivotY="50%" android:startOffset="700"
android:duration="400"
android:fillBefore="false" />
</set>

Hay chng ta dng cng c h tr sn c thit k hot cnh chuyn ng


nh sau:

185

Hnh ph lc 145 Cng c h tr thit k hot cnh t Eclipse

Bn c th tm hiu cch thc hiu chnh trong cc tp tin hng dn android


trong phn ti liu tham kho ca chng ti hoc c th tm hiu trn cc din n
Android.
Sau p dng tp tin trn vo i tng cn th hin:
// ====================================
// np animation t XML
// ====================================
AnalogClock testAnalogClockAnim = (AnalogClock)
findViewById(R.id.AnalogClock);
testAnalogClockAnim.setAnimation(AnimationUtils.loadAnimation(this,
R.anim.scaler));

Theo nh chng ti, nu hiu ng hot cnh chuyn ng qu phc tp v


cn i theo mt trnh t vi mt lut cho trc bi mt hm s hay i loi vy th
mi cn thit lp chng bng m lnh Java cn nu khng th mt tp tin XML qui
nh hot cnh chuyn ng thng thng th l .
I.2.2.2 Lp trnh bng m lnh Java
Khc vi phn trn, tt c cc qui nh chuyn ng c vit bng m lnh
Java nh sau:

186

// ====================================
// np animation thng qua code Java
// ====================================
// Create root AnimationSet
AnalogClock testAnalogClockAnim = (AnalogClock)
findViewById(R.id.AnalogClock);
AnimationSet rootSet = new AnimationSet(true);
rootSet.setInterpolator(new AccelerateInterpolator());
// Create ScaleAnimation
ScaleAnimation scaleAnim = new ScaleAnimation(0.5F, 2.0F,
0.5F, 2.0F,
0.5F, 0.5F);
rootSet.setDuration(400);
rootSet.setFillBefore(false);
rootSet.setStartOffset(700);
rootSet.addAnimation(scaleAnim);
// gn Animation
testAnalogClockAnim.startAnimation(rootSet);

Bn c th tm hiu thm v cc phng thc thit lp hot cnh chuyn


ng trong cc ti liu Android i km vi ph lc ny. Nhng nhn chung n theo
m tp nh sau:
To mt thc th hot cnh chuyn ng gc. Thc th ny l trung
tm ca mi hot cnh chuyn ng.
Thit lp cc thuc tnh cn thit nh thi lng, v tr,
Ngoi ra, ta c th thm cc dng hot cnh khc vo hot cnh gc
thc thi trn cng 1 i tng nh ScaleAnimation l hot cnh phng to
chng hn. N c thm vo thc th hot cnh gc.
Sau cng l khi ng hot cnh chuyn ng cho i tng bng
phng thc startAnimation vi tham s u vo l thc th hot cnh
chuyn ng gc.
I.2.2.3 Kinh nghim lp trnh vi TweenedAnimation
Tweened animation thng c dng ph bin cho:

187

S chuyn tip gia cc Activity.


S chuyn tip gia cc khung cha (layout) bn trong mt Activity.
Cung cp li s phn hi cho ngi dng nh rung mt nhp liu
bo cho ngi dng bit d liu nhp sai.
Tweened animation c to bng cch s dng lp Animation. V c cc
loi lp animation sau:
Lp AlphaAnimation: iu chnh mc mu alpha ca mt i
tng.
Lp RotateAnimation: iu chnhhot cnh xoay ca mt i tng.
Lp ScaleAnimation: iu chnh s phng to hay thu nh ca mt i
tng.
Lp TranslateAnimation: iu chnh v tr ca mt i tng.
Tweened animation thng c nh ngha trong mt tp tin XML v c
t trong th mc /res/anim ca mt project Android v c gi thng qua
AnimationUtils. Ta c th gn Tweened animation cho cc View thng qua
setAnimation().

Trong khi , Tweened animation cng c thit lp bng m

lnh Java. Trong bng so snh di y, chng ti so snh s tng quan gia lp
trnh bng m lnh XML vi lp trnh bng Java.
Tn

Thuc tnh

Hm Java

M t

xml
Start time

android:

Animation.

startOffset

setStartOffset()

(hoc

Fill before

Animation, tnh bng mili


giy. 0 mili giy l ch

setStartTime())

Duration

Thi gian bt u mt

android:

Animation.

Duration

setDuration()

android:

Animation.

fillBefore

setFillBefore()

188

mc nh.
Khong thi gian thc hin
ca Animation.
True nu mun Animation

thc hin u tin.


Fill after

android:

Animation.

fillAfter

SetFillAfter()

True nu mun Animation


thc hin sau 1 Animation
khc.

Interpolator

android:

Animation.

interpolator

SetInterpolator()

Gm

AccelerateInterpolator

Animation bt u vi tc
chm v nhanh dn ln.
DecelerateInterpolator

Animation bt u vi tc
nhanh v chm dn.
Bng 2 Bng so snh thuc tnh to hiu ng chuyn ng bng XMl so vi Java

(Bng tham kho t Kha lun 2008 Nghin cu v xy dng t in trn G-Phone ca T
Xun Khi Nguyn v on Chnh Thc)

I.2.3 Lp trnh vi FrameByFrameAnimation


Trong Android khng h tr hnh nh ng dng GIF, v vy vic th hin
hnh nh theo dng ni tip tng nh lin tc l mt iu kh khn. Frame-by-frame
animation c th gii quyt c kh khn trn bng cch np tun t mt chui
hnh nh ln trn nn mt View (thng thng ng dng trn ImageView). Vic to
frame-by-frame animation c th c thc hin d dng thng qua mt tp tin
XML (tp tin ny c t trong th mc /res/anim ca mt project Android).
Frame-by-frame animation c to v qun l bi lp AnimationDrawable, mt
AnimationDrawable c nh ngha trong tp tin XML cha mt phn t
<animation-list>v

mt lot cc thnh phn con c nh ngha bng th <item>,

mi thnh phn con ny nh ngha mt khung nh cho frame animation nh v d


bn di.
<animation-listandroid:id="selected"android:oneshot="false">
<itemandroid:drawable="@drawable/wheel"android:duration="50"/>

189

<itemandroid:drawable="@drawable/whee2"android:duration="50"/>
</animation-list>

Cc thuc tnh trn tp tin XML cn quan tm khi to animation dng frameby-frame:
Tn

ngha

android:drawable

Ch ti mt nh nm trong ti nguyn
ca chng trnh.

android:duration

Khong thi gian (tnh bng mili giy)


dnh cho vic hin th mt khung nh.

android:oneshot

Nu thit lptrue, hiu ng hnh nh s


c thc hin mt ln ri thi v
ngc li.

android:visible

Quy nh trng thi nhn thy ban u


ca mt nh(initial visibility state), gi
tr mc nh l false.

Bng 3 Cc thuc tnh cn quan tm khi to hiu ng Frame-by-frame animation

V d minh ha hnh nh mt thc phim v mt qu banh ny ln ny


xung dng Frame-by-frame animation

Hnh ph lc 146 Hnh minh ha mt Frame-by-frame animation n gin

190

To animation (tp tin framebyframe.xml c t trong th mc


/res/anim ca project Android)
<?xmlversion="1.0"encoding="utf-8"?>
<animation-listxmlns:android="http://schemas.android.com/apk/res/android"
id="selected"android:oneshot="false">
<itemandroid:drawable="@drawable/ball1"android:duration="50"/>
<itemandroid:drawable="@drawable/ball2"android:duration="50"/>
<itemandroid:drawable="@drawable/ball3"android:duration="50"/>
<itemandroid:drawable="@drawable/ball4"android:duration="50"/>
<itemandroid:drawable="@drawable/ball5"android:duration="50"/>
<itemandroid:drawable="@drawable/ball6"android:duration="50"/>
</animation-list>

Gi thc thi animation


// Load the ImageView that will host the animation and
// set its background to our AnimationDrawable XML resource.
ImageView imvHinhDong = (ImageView)
findViewById(R.id.imv_HinhDong);
imvHinhDong.setBackgroundResource(R.anim.framebyframe);
// Get the background, which has been compiled to an
// AnimationDrawable object.
AnimationDrawableballAnimation = (AnimationDrawable)
imvHinhDong.getBackground();
// Start animation
ballAnimation.start();

Mt iu lu quan trng l phng thc start()

c gi trong

AnimationDrawable s khng c thc hin trong sut phng thc onCreate()


ca Activity, bi v AnimationDrawable cha thc s c np y .

I.3

Lp trnh vi Media

I.3.1 Gii thiu


Vic h tr v pht media l mt iu ht sc thit yu trn mt chic in
thoi thng minh v Android khng th thiu i phn h tr media ny. Chnh v

191

vy m Android c tch hp sn b c v ghi cho nhiu loi nh dng media


(xem bng lit k bn di), v th m ta c th d dng tch hp m thanh, hnh
nh, video vo trong ng dng mt cch d dng.
Kiu

nh dng

Ghi

Loi tp tin h tr

3GPP (.3gp) v MPEG-4

AAC LC/LTP

(.mp4, .m4a). Khng h tr

HE-AACv1

(AAC+)

AAC (.aac)

HE-AACv2
(enhanced

AAC+)
Audio

AMR-NB

3GPP (.3gp)

AMR-WB

3GPP (.3gp)

MP3

MP3 (.mp3)

MIDI

.mid

Ogg Vorbis

Ogg (.ogg)

PCM/WAVE

WAVE (.wav)

JPEG (.jpg)

GIF

GIF (.gif)

PNG

PNG (.png)

BMP

BMP (.bmp)

JPEG
Image

H.263

Video H.264 AVC

MPEG-4 SP

3GPP (.3gp) v MPEG-4


(.mp4)
3GPP (.3gp) v MPEG-4
(.mp4)
3GPP (.3gp)

Bng 4 Cc loi nh dng media m Android h tr

Android h tr vic pht m thanh, video t nhiu ngun khc nhau chng
hn nh tp tin m thanh nm trong ti nguyn ca chng trnh (trong th mc
/res/raw), tp tin nm trong h thng (th nh) hay tp tin trn mng. nm bt
192

c cch pht media trn Android ta tin hnh tm hiu cc v d n gin cc


phn s cp ngay sau y.
I.3.2 Lp trnh pht m thanh trn Android
Vic pht m thanh trn Android c thc hin thng qua ng ra tiu chun
ca thit b (loa hoc tai nghe Bluetooth). Mt lu l Android khng h tr pht
m thanh trong lc gi in m thoi.
Cch thc pht m thanh t ti nguyn ca chng trnh:
Chp m thanh vo trong th mc /res/raw ca project.
To mt th hin ca lp MediaPlayer, ch dn n tp tin m thanh
thng qua MediaPlayer.create(). Dng start() bt u pht m thanh.
on m minh ha cho vic pht m thanh:
MediaPlayer mp = MediaPlayer.create(context, R.raw.sound_file_1);
mp.start();

Cch thc pht m thanh t file bn ngoi:


To mt th hin ca lp MediaPlayer dng new.
Gi setDataSource(duong_dan_den_file).
Lu l phi thc thi prepare() trc khi chy start()
on m minh ha:
MediaPlayer mp = new MediaPlayer();
mp.setDataSource(DUONG_DAN_TOI_FILE);
mp.prepare();
mp.start();

DUONG_DAN_TOI_FILE c th l ng dn ti tp tin nm trong ti


nguyn chng trnh hoc tp tin nm trong th nh hoc tp tin nm trn mng.
I.3.3 Lp trnh pht Video trn Android
Vic pht video c phn phc tp hn vic pht m thanh trn Android, ta c
th dng lp MediaPlayer pht video trong Android tuy nhinvic dng lp ny
khng c thun tin v c phn kh khn. Bn cnh Android h tr mt View

193

c bit pht video c gi l VideoView nn ta s dng VideoView ny


pht video.
pht video, iu trc tin phi lm l thm vo widget VideoView vo
trong ng dng, sau ch ra ng dn ti tp tin video m Android h tr v cui
dng l pht video thng qua phng thc start()
VideoView videoView = (VideoView) findViewById(R.id.testVideoView);
videoView.setVideoURI(Uri.parse("file:///sdcard/test.mp4"));
videoView.start();

Khi gn ng dn ti tp tin video ta dng setVideoPath() cho cc tp tin


nm trn my (ng dn vt l) v dng setVideoURI() cho cc tp tin nm trn
mng.
Ngoi ra ta cng c th thm vo ng dng mt b MediaController (nh
hnh minh ha bn di) thun tin hn cho vic pht video.

Hnh ph lc 147 Hnh nh mt b MediaController h tr vic pht Video tt hn


// add media controller to your app
MediaController mc = new MediaController(this);
videoView.setMediaController(mc);

I.3.4 Nhn xt
Khi pht mt tp tin m thanh hoc video nm trn mng ta cn gn quyn
truy cp c mng Internet cho ng dng nm trong tp tin AndroidManifest.xml
nh sau <uses-permissionandroid:name="android.permission.INTERNET"/> v tp
tin m thanh, video ny c kh nng ti v c.
Khi

lp

trnh

pht

media

ta

nn

dng

cc

by

li

nh

IllegalArgumentException v IOException trnh cc li khng mong mun nh


khng tn ti tp tin

194

Mt khi gn ngun d liu cho lp MediaPlayer, ta khng th t ng


thay i sang mt ngun d liu khc. lm c iu ny ta phi to mt lp
MediaPlayer mi hoc gi phng thc reset() khi chy li chng trnh pht.
Mi mt lp MediaPlayer khi chy u chy trn mt lung (thread) do th li
khuyn khi dng lp ny l nn gi phng thc release() khi hon tt vic pht
m thanh hoc video. Nu dng VideoView pht video th ta khng cn quan
tm n iu ny do VideoView c c ch t thc hin khi pht xong.

I.4

Lp trnh vi thao tc Telephony

I.4.1 Gii thiu


Mt trong nhng thnh phn c bn m khng km phn quan trng trong
Android l in thoi (mobile phone). Cc chc nng quay s in thoi, nhn cuc
gi, gi v nhn tin nhn u c th d dng s dng, kt hp cc chc nng li
vi nhau v cng c th nhng chng vo trong ng dng mt cch linh hot.
c th dng c cc chc nng in thoi ca Android, hu ht ta u
phi thc hin xin quyn truy cp n cc chc nng ca in thoi nh gi in,
gi tin nhn thng qua AndroidManifest.xml. V nm bt c cc thao tc
n gin vi in thoi, ta tin hnh tm hiu v phn tch cc v d bn di nh
gi in thoi ti mt s cho trc, gi tin nhn SMS, rung in thoi.
I.4.2 Thc hin gi in thoi ti mt s cho trc
thc hin gi in thoi ti mt s in thoi cho trc ta c hai cch
dng thng qua cch gi Intent:
Intent.ACTION_CALL: t ng bt u cuc gi v hin th qu trnh
gi in thoi. V ng dng gi Intent loi ny s phi thc hin xin php
thc

hin

cuc

gi

trong

AndroidManifest.xml

<uses-permission android:name="android.permission.CALL_PHONE" />

195

Hnh ph lc 148 Hnh minh ha vic gi in dng ACTION.CALL

Intent.ACTION_DIAL: hnh ng ny s trc tip gi ng dng quay


s in thoi v s in thoi cn gi s c gn ln trn ng dng quay s.
Ngi dng mun thc hin cuc gi th phi nhn nt gi in thoi. ng
dng gi Intent loi ny khng yu cu phi thc hin xin php gi in
thoi.

Hnh ph lc 149 Hnh minh ha vic gi in dng ACTION.DIAL

C hai cch gi Intent trn u yu cu u vo l mt s in thoi theo


nh dng l "tel:1234567". Sau y l m lnh Java thc hin gi in thoi:
Intent intent = new Intent(Intent.ACTION_CALL, Uri

196

.parse("tel:1234567"));
startActivity(intent);

hoc
Intent intent = new Intent(Intent.ACTION_DIAL, Uri
.parse("tel:1234567"));
startActivity(intent);

I.4.3 Thc hin gi tin nhn SMS


Tin nhn SMS (Short Message Service) rt i ph bin v c tm quan
trng trong s truyn thng gia cc thit b mobile.
<uses-permission android:name="android.permission.SEND_SMS" />

Ta thit lp permission trong Androidmanifest.xml qui nh chng trnh


c c php dng tnh nng SMS.
SMS cng gn ging nh phn gi in thoi trn c 2 hnh thc l gi
thng n s ch nh m khng cn thng qua mn hnh gi tin nhn v m mn
hnh gi tin nhn vi s v ni dung u vo.
I.4.3.1 Gi SMS thng v khng cn mn hnh
sendSmsMessage(phoneNum.getText().toString(),// s in thoi cn gi
textMess.getText().toString() // ni dung cn gi
);

Ta ch cn mt phng thc sendSmsMessage thi th l


I.4.3.2 Gi tin nhn vi mn hnh SMS
C 2 cch m mn hnh sendSMS nh sau:
Cch 1:
Intent sendIntent = new Intent(Intent.ACTION_VIEW);
sendIntent.putExtra("address", "0976188622");
sendIntent.putExtra("sms_body", "V Thnh Nht (07HC102) Phan Thnh
Trung (07HC167)");
sendIntent.setType("vnd.android-dir/mms-sms");
startActivity(sendIntent);

Cch 2: cng tng t nh trn nhng vi ACTION khc

197

Intent sendIntent = new Intent(Intent.ACTION_SENDTO,


Uri.parse("sms://"));
sendIntent.putExtra("address", "0919816456");
sendIntent.putExtra("sms_body", "Nht Trung");
startActivity(sendIntent);

Ni chung, 2 cch tng t nhau nhng phn u ta qui nh Intent bng


setType l mms v sms c ngha l c th gi bng tin nhn a phng tin hoc tin
nhn dng chui thng thng. Cn cch 2 th ch c th gi bng SMS m thi.
I.4.4 Thc hin chc nng rung in thoi
Thc hin chc nng rung in thoi cng phi cn permission trong
AndroidManifest.xml:
<uses-permission android:name="android.permission.VIBRATE" />

Ta ghi on m lnh Java sau thc hin vic rung in thoi:


Vibrator vibarte = (Vibrator) getSystemService(Context.VIBRATOR_SERVICE);
// 1. Cho rung khong 1 giy
long milliseconds = 1000;
vibarte.vibrate(milliseconds);

Ngoi ra, ta c th kt hp hi ha khong thi gian cho rung v hm rung


vibrate c th to ra cc nhp iu rung l v ph hp vi tng ng cnh v thi
im khc nhau. V d nh ty theo tng ngi khc nhau m c cch run khc
nhau.

I.5

Lp trnh vi lung (Thread)

I.5.1 Gii thiu lung


Lung l n v nh nht ca x l ng thi. Nhiu lung c th chy trong
cng mt tin trnh v chia s ti nguyn b nh m tin trnh c. Trn mt tin
trnh ca mt ng dng c mt lung chnh (main thread) v nhiu lung khc
(thread-xx). Tt c chng chy song hnh vi nhau v thc thi nhng nhim v
khc nhau v c th lin lc vi nhau.

198

Hnh ph lc 150 Hnh minh ha tin trnh v lung

Cc mt mnh ca lung:
Lung chia s ti nguyn tin trnh vi nhau nhng chng chy c
lp.
Ni chung, ng dng lun chy hi p li nhng thao tc ca
ngi dng, cho nn nhng hnh ng no tn thi gian th s c tch ra
thnh mt lung v chy ngm pha bn di.
Cc mt yu ca lung:
Vic lp trnh cho n gn nh l hi phc tp.
Cn c xc nhn, trnh v gii quyt hin tng Deadlock. V d
nh 2 lung cng chy v cng thao tc thay i gi tr mt bin ton cc th
lc c th Deadlock s xy ra.
I.5.2 Cc c tnh v cch thc vn hnh lung
Trong mt chng trnh, lun c mt lung chnh v nhiu lung chy ngm
khc. Cc lung ny s giao tip vi nhau thng qua mt Handler qun l danh
sch cc tin nhn yu cu x l nhng hnh ng c np sn trong Handler m
vi mi tin nhn l mt lung no gi ti.

199

Handler l lp trung gian ng chnh gia qun l cc hnh ng m cc


lung yu cu x l. C nhiu Handler trong mt ng dng, v mt khi khai bo mt
thc th Handler trong ng dng th n s ng vai tr lm trung gian gia lung
chnh (main thread) v cc lung ph khc. V d d hiu nht l chng ta khng
th s dng cc thc th giao din nh EditView, TextView, Button, trong lung
m ch thao tc chng trong Handler m thi.
I.5.3 Lp trnh lung
Lp trnh lung c 2 phng php: dng Message v dng Post.
I.5.3.1 Lp trnh lung dng Messages

Hnh ph lc 151 Lp trnh lung dng Message

Thng thng ta to mt Thread i km vi mt Handler. Thread s gi tin


nhn ln Handler v Handler ng vai tr kim tra tin nhn l g v lm nhng vic
tng ng. Trong ni ti Thread khng th gi v x l cc i tng thuc giao
din cho nn ta phi thng qua mt Handler x l cc i tng giao din.
Trong mt chng trnh c nhiu Handler v c nhiu lung, mi mt lung
c th gi tin nhn n nhiu Handler. Trong cc Handler l ni x l cc tc v
m chng ta cn.
gi mt Mesaage n mt Handler th thng qua hm obtainMessage()
ly ni dung tin nhn v thng qua hm sendMessage() gi tin nhn i n
mt Handler m chy hm sendMeassage .
200

Ta ch cc phng thc sendMessage sau:


sendMessage(): gi tin nhn ln Handler ngay lp tc
sendMessageAtFrontOfQueue(): gi tin nhn ln Handler v tin nhn
s u tin gii quyt trc.
sendMessageAtTime(): gi tin nhn vo thi im ch nh trc.
sendMessageDelayed(): gi tin nhn vo Handler sau mt khong thi
gian nht nh.
Chng ti lm mt lung vi 2 Handler. Trong lung y gi tin nhn n
2 Handler v 2 Handler y s x l cc hnh ng trn giao din m lung mong
mun. Project mu ln l HelloThread vi kch bn l 1 Handler s hin cho
thanh chy ngm nhanh v mt Handler cho thanh chy ni pha trn chm thy
r mt lung qui nh 2 Handler chy vi 2 dng hnh ng khc nhau. V d nh
hnh sau:

Hnh ph lc 152 Hnh minh ha lp trnh lung

Cc bn c th tham kho thm.


I.5.3.2 Lp trnh lung dng Post

201

Hnh ph lc 153 Lp trnh lung dng Post

Lp trnh lung vi Post cng gn ging nh bng Message. Trong chng


trnh chnh, ta to mt lung trong onCreate() v khi ng lung . Ngoi ra to
thm 3 bin private ln lt l Handler myHandler, Runnable foregroundTask v
Runnable backgroundTask. Vi foregroundTask l ni thc thi cc hnh ng chnh
cn x l v backgroundTask l ni kim tra cc hnh ng nn dng lc no.

I.6

Lp trnh vi thc n (Menu)

I.6.1 Gii thiu thc n


Thc n c hai dng trn Android l thc n thng thng xut hin khi ta
nhn nt Menu trn in thoi v thc n ng cnh khi ta nhn c chn lu mt
i tng no .
Trn thc n thng thng v thc n ng cnh ta thng thy cc i
tng sau:
Chui
Biu tng.
Nt chn Radio Button.
Nt chn CheckBox.
Menu con.
Cc phm short-cut.
202

Hnh ph lc 154 Hnh minh ha thc n ca h thng

Cn phn thc n ng cnh th khng a hnh nh ln c nh sau:

Hnh ph lc 155 Hnh minh ha thc n ng cnh

I.6.2 Cch thc lp trnh

203

Thc n c 2 cch thc lp trnh bng XML v bng m lnh Java cng
tng t cch thc lp trnh giao din trong project HelloUI nh trnh by trong
cc phn trc. Sau y l cch thc lp trnh theo tng hng theo 2 ch .
I.6.2.1 Lp trnh thc n la chn chnh
Thc n la chn xut hin khi ta nhn vo nt Menu trn thit b. Ta c
th dng 2 phng php l XML hoc bng m lnh Java.
Trong project HelloMenu c 2 phng php m lnh Java v bng XML cho
mt menu thng thng.

Hnh ph lc 156 Hnh minh ha to menu bng

Hnh ph lc 157 Hnh minh ha to menu bng

m lnh Java

XML

Vi cch to menu bng m lnh Java ta lm nh on m lnh sau:


// to menu cho chng trnh
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuItem mMenuItem;
// to menu item
mMenuItem = menu.add(Menu.NONE, // group

204

0, // item ID
Menu.NONE, // order
"Menu 1"); // title
// gn icon cho mt menu item
mMenuItem.setIcon(R.drawable.icon);
mMenuItem = menu.add(Menu.NONE, 1, Menu.NONE, "Menu 2");
mMenuItem.setIcon(R.drawable.exit);
mMenuItem = menu.add(Menu.NONE, 2, Menu.NONE, "Menu 3");
mMenuItem.setIcon(R.drawable.icon);
// // to sub menu
// SubMenu subMenu = menu.addSubMenu("Test SubMenu");
// subMenu.add(Menu.NONE, 3, Menu.NONE, "Sub Menu Item 1");
// subMenu.add(Menu.NONE, 4, Menu.NONE, "Sub Menu Item 2");
return true;
}
// gn s kin khi nhn menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case 0:
Toast.makeText(this, "Menu 1 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 1:
Toast.makeText(this, "Menu 2 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 2:
Toast.makeText(this, "Menu 3 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case 3:

205

Toast.makeText(this, "Sub MenuItem 1 Clicked!",


Toast.LENGTH_SHORT)
.show();
break;
case 4:
Toast.makeText(this, "Sub MenuItem 2 Clicked!",
Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
return true;
}

u tin ta to menu bng cch vit li hm onCreateOptionMenu(Menu


menu)

hm ny

gip

ta

to

li

ton

menu

vit

li

hm

onOptionItemSelected(MenuItem item) gip vic bt s kin khi ta nhn chn


tng thnh phn trn menu.
i vi hm onCreateOptionMenu(Menu menu) th to tng MenuItem v
thm n vo menu chnh. Sau , thit lp hnh nh cho tng menu.
Cch th 2 l lm bng tp tin XML. Vi cch thc dng XML th d nhin
u tin ta to mt tp tin XML qui nh cho thc n chnh vi tn menu1.xml
trong th mc /res/menu nh sau:
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<!-- This group uses the default category. -->
<group android:id="@+id/menuGroup_Main">
<item android:orderInCategory="5" android:title="Test Sub
Menu"
android:icon="@drawable/icon"
android:id="@+id/testsubmenu">
<menu>
<item android:title="Item 1"
android:id="@+id/menu_subitem01"></item>
<item android:title="Item 2"
android:id="@+id/menu_subitem02"></item>
</menu>
</item>

206

<item android:id="@+id/menu1" android:icon="@drawable/icon"


android:title="Menu Item 1"></item>
<item android:id="@+id/menu2" android:icon="@drawable/icon"
android:title="Menu Item 2"></item>
</group>
</menu>

Hoc thao tc thng qua cng c h tr sn c ca ADT:

Hnh ph lc 158 Hnh minh ha thao tc to menu thng qua cng c h tr c tch hp bn trong
Eclipse (ADT)

Sau vo lp giao din Activity thc thi on m lnh sau:


// to menu
@Override
public boolean onCreateOptionsMenu(Menu menu) {
super.onCreateOptionsMenu(menu);
MenuInflater inflater = getMenuInflater(); // from Activity
// np menu t tp tin XML nm trong th mc
/res/menu/menu1.xml
inflater.inflate(R.menu.menu1, menu);
return true;
}

207

// x l s kin nhn menu


@Override
public boolean onOptionsItemSelected(MenuItem item) {
super.onOptionsItemSelected(item);
switch (item.getItemId()) {
case R.id.menu1:
Toast.makeText(this, "Menu 1 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case R.id.menu2:
Toast.makeText(this, "Menu 2 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case R.id.menu_subitem01:
Toast.makeText(this, "Menu SubItem 1 Clicked!",
Toast.LENGTH_SHORT)
.show();
break;
case R.id.menu_subitem02:
Toast.makeText(this, "Menu SubItem 2 Clicked!",
Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
return true;
}

Ta d dng thy v cu trc chung th gia XML v m lnh Java th gn nh


ging nhau l to v thit lp thc n; k tip l vit hm s kin cho n khi c s
kin nhn chn thc n. Trong tp tin XML ta thy ta thit lp chui, hnh nh cho
tng thc n.
Trong hm onCreate() ta thit lp nh sau:

208

MenuInflater inflater = getMenuInflater(); // from Activity


// np menu t tp tin XML nm trong th mc /res/menu/menu1.xml
inflater.inflate(R.menu.menu1, menu);

Ta thy rng n tin hnh gn menu XML vo thc th menu ca chng


trnh. Cn phn cn li thit lp s kin nhp chn th ging nh lm bng Java.
I.6.2.2 Lp trnh thc n ng cnh
Thc n ng cnh phi i chung vi mt widget no nh Button,
editText, m khi ta nhn v gi lu th thc n ng cnh xut hin cho php ta
chn nhng hnh ng x l lin quan n thuc tnh, chc nng v nhim v ring
ca thc n ng cnh y.
Trong v d chng ti tm thi to mt nt nhn v cho ngi dng nhn lu
th s hin thc n ng nh vi 2 kiu cch l XML v bng m lnh Java.
u tin, ta khai bo thc n ng cnh trong phng thc
setOnCreateContextMenuListener(new OnCreateContextMenuListener(). Phng
thc ny c th c gi t hu ht cc widget trn Android. Ta tin hnh thit lp
thc n ng cnh nh sau bng m lnh Java:
Button btnMenu = (Button)findViewById(R.id.Button01);
btnMenu.setOnCreateContextMenuListener(new
OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View
v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
MenuItem mMenuItem;
// to menu item
mMenuItem = menu.add(Menu.NONE, // group
0, // item ID
Menu.NONE, // order
"Menu 1"); // title
// gn icon cho mt menu item
mMenuItem.setIcon(R.drawable.icon);

209

mMenuItem = menu.add(Menu.NONE, 1, Menu.NONE,


"Menu 2");
mMenuItem.setIcon(R.drawable.exit);
mMenuItem = menu.add(Menu.NONE, 2, Menu.NONE,
"Menu 3");
mMenuItem.setIcon(R.drawable.icon);
}
});

Hoc bng m lnh Java nhng thc n to thnh tp tin menu1.xml


trc trong th mc /res/menu v ta thit lp ghp tp tin menu1.xml vo thc n
ng cnh nh sau:
Button btnMenu = (Button)findViewById(R.id.Button01);
btnMenu.setOnCreateContextMenuListener(new
OnCreateContextMenuListener() {
@Override
public void onCreateContextMenu(ContextMenu menu, View
v,
ContextMenuInfo menuInfo) {
// TODO Auto-generated method stub
MenuInflater inflater = getMenuInflater(); //
from Activity
// np menu t tp tin XML nm trong th mc
/res/menu/menu1.xml
menu.setHeaderTitle("Thc n ng cnh");
inflater.inflate(R.menu.menu1, menu);
}
});

Trn l hai cch thit lp menu ng cnh cho nt nhn cho trc trn mn
hnh. Tng t nh thc n ng cnh thng thng ta cng phi thit lp s kin
nhp chn thc n nh sau:
@Override

210

public boolean onContextItemSelected(MenuItem item) {


switch (item.getItemId()) {
case R.id.menu1:
Toast.makeText(this, "Menu 1 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case R.id.menu2:
Toast.makeText(this, "Menu 2 Clicked!",
Toast.LENGTH_SHORT).show();
break;
case R.id.menu_subitem01:
Toast.makeText(this, "Menu SubItem 1 Clicked!",
Toast.LENGTH_SHORT)
.show();
break;
case R.id.menu_subitem02:
Toast.makeText(this, "Menu SubItem 2 Clicked!",
Toast.LENGTH_SHORT)
.show();
break;
default:
break;
}
return false;
}

V y l kt qu giao din th hin ca thc n ng cnh:

211

Hnh ph lc 159 Hnh minh ha to thc n ng cnh

I.6.3 Nhn xt
Ty theo tng hon cnh m ta s dng hai loi thc n k trn. Nu mun
lm thc n thao tc c nh hng n phm vi ng dng hay Activity hin ti th
ta nn dng thc n thng thng lm Menu cho Activity hin ti. Cn nu mun
gy tc ng v nh hng ln mt i tng cho trc sau khi nhn v chn lu
i tng .

I.7

Lp trnh vi kiu ch (Font)

I.7.1 Gii thiu


Mc nh trn Android c 4 loi kiu ch l Normal, Sans, Serif v
Monospace. Nhng khng v th m giao din b nhm chn bng cch ta p dng
nhiu kiu ch khc nhau t nhng tp tin kiu ch .ttf sn c.

212

Hnh ph lc 160 Hnh minh ha dng font ch khc trong Android

Hnh trn c kiu ch l tubes.ttf cho ch Hello Custom Font.


I.7.2 Cch lp trnh
chn kiu ch cho cc i tng cha chui trn Android th ta ch cn
thay i gi tr trong thuc tnh TypeFace thnh gi tr kiu ch mnh mun nh
hnh sau:

Hnh ph lc 161 Hnh minh ha cc thc chn font ch thng thng m Android h tr

Cn i vi lp trnh p dng nhng kiu ch ngoi 4 kiu ch chun ca


Android th ta ch cn c tp tin kiu ch .ttf c lu trong th mc /asset/font.

213

Hnh ph lc 162 Hnh minh ha th mc cha tp tin font ch (.ttf) trong mt project Android

Sau ta khai bo thc th kiu TypeFace c tham s u vo l tp tin kiu


ch. V cng on cui l thit lp TypeFace cho i tng cn thit. on m
Java nh sau:
// bind the "custom" textView with chosen font
TextView tvCustom = (TextView) findViewById(R.id.tv_TestFont);
Typeface myNewFace = Typeface.createFromAsset(getAssets(),
"fonts/tubes.ttf");
tvCustom.setTypeface(myNewFace);

I.7.3 Nhn xt
Thng thng i vi cc tr chi hay cc chng trnh cn nhiu kiu ch
vi nhiu mc ch ha khc nhau th mi a nhiu kiu ch vo chng trnh.
Nhng vi nhng chng trnh thng thng th 4 kiu ch sn c ca Android
lp trnh kiu ch cho giao din. V nu p dng nhiu kiu ch qu th giao
din s rt ri.

I.8

Lp trnh vi khung thoi (Dialog)

I.8.1 Gii thiu

214

Mt hp thoi thng l mt mn hnh nh m xut hin ln cc Activity


hin ti. Activity nm di s khng tng tc c vi ngi dng m thay vo
l hp thoi s ng vai tr . Hp thoi thng thng dng thng bo hay i
loi vy. Thng thng c cc loi hp thoi sau:
AlertDialog: l dng hp thoi c nhiu nht 3 nt nhn hoc c thm
danh sch cc mc la chn c thm checkbox hay radio button. AlertDialog
thch hp lm hp thoi trong cc chng trnh Android v c khuyn
khch dng.
ProgressDialog: l hp thoi c vng xoay hay thanh th hin tin
trnh ang chy. Bi v n l dng AlertDialog m rng cho nn n cng c
nt nhn.
DatePickerDialog: l hp thoi cho php ngi dng chn ngy.
TimePickerDialog: l hp thoi cho php ngi dng chn gi.
Trong hon cnh, mun thit k li cc hp thoi th c th vit li lp
Dialog hay nh ngha li giao din cho cc lp hp thoi trn.
I.8.2 Cch thc lp trnh
I.8.2.1 To AlertDialog
Khi to mt AlertDialog th ta c th thit lp cc gi tr sau: ta , ni
dung tin nhn, cc nt (di 3 nt) v danh sch cc mc chn (c hoc khng c
checkbox v radio button). to mt AlertDialog ta s dng lp con
AlertDialog.Builder. Lp ny c nhim v to v thit lp nt nhn, gi tr thng
hay mt danh sch, biu tng, v checkbox hay radio button hnh thnh mt
hp thoi.
AlertDialog.Builder alertDialog;
// to mt AlertDialog
alertDialog = new AlertDialog.Builder(this);
// gn title cho alertDialog
alertDialog.setTitle("Xin cho AlertDialog");

215

// gn icon cho alertDialog


alertDialog.setIcon(R.drawable.icon);
// gn thng tin cho mt alertDialog
alertDialog.setMessage("Ni dung thng bo!");
// to v gn s kin cho nt nhn Positive
alertDialog.setPositiveButton("Yes",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// Do something
}
});
// to v gn s kin cho nt nhn Neutral
alertDialog.setNeutralButton("Cancel",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// Do something
}
});
// to v gn s kin cho nt nhn Negative
alertDialog.setNegativeButton("No",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog,
int which) {
// Do something

216

}
});
alertDialog.show();

Ta d thy c 3 bc chnh to mt AlertDialog l to thc th hp thoi


bng lp AlertDialog.Builder

alertDialog;

v sau thit lp tiu , ni dung,

tin nhn v cc nt cho hp thoi nh on m lnh nu trn. Cui cng l hp


thoi phi show() hin hp thoi trn mn hnh giao din vi giao din sau:

Hnh ph lc 163 Hnh minh ha hp thoi c nt nhn

Ngoi ra, ta c th to hp thoi vi dng danh sch la chn nh sau:

Hnh ph lc 164 Hnh minh ha hp thoi dng danh sch chn

lm hp thoi dng danh sch nh trn ta dng on m lnh Java nh


sau:
217

final CharSequence[] items = {"Red", "Green", "Blue"};


AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setItems(items, new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();

Nu mun giao din hp thoi dng danh sch c cc mc chn dng radio
button th dng on m lnh sau:
final CharSequence[] items = {"Red", "Green", "Blue"};
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setTitle("Pick a color");
builder.setSingleChoiceItems(items, -1, new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog, int item) {
Toast.makeText(getApplicationContext(), items[item],
Toast.LENGTH_SHORT).show();
}
});
AlertDialog alert = builder.create();

Vi hnh m phng nh sau:

Hnh ph lc 165Hnh minh ha hp thoi dng danh sch la chn RadioButton

I.8.2.2 To ProgressDialog
ProgressDialog c m rng t lp AlertDialog m c hnh dng l bnh xe
quay quay hay l thanh chy th hin qu trnh ang chy ngm hay qu trnh x
l c bao nhiu phn trm ngi dng c th bit c vi hnh nh sau:

218

Hnh ph lc 166 Hnh minh ha hp thoi dng ProgressDialog

Hnh ph lc 167 Hnh minh ha ProgressDialog dng thanh trt ngang

Vi hnh bnh xe quay th ta dng on m lnh sau:


ProgressDialog dialog = ProgressDialog.show(MyActivity.this, "",
"Loading. Please wait...", true);

Vi thanh tin trnh th ta dng on m lnh sau:


ProgressDialog progressDialog;
progressDialog = new ProgressDialog(mContext);
progressDialog.setProgressStyle(ProgressDialog.STYLE_HORIZONTAL);
progressDialog.setMessage("Loading...");
progressDialog.setCancelable(false);

I.8.2.3 To hp thoi c hiu chnh li


Trn l cc hp thoi c kiu giao din c qui nh sn nhng ta c th qui
nh li cc giao din hp thoi bng tp tin giao din ring v p dng tp tin giao
din cho hp thoi theo trnh t sau:
To tp tin giao din. V d nh :
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/layout_root"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:padding="10dp"
>
<ImageView android:id="@+id/image"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_marginRight="10dp"
/>
<TextView android:id="@+id/text"

219

android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:textColor="#FFF"
/>
</LinearLayout>

Sau thit lp on m lnh Java p dng giao din ln hp thoi v


thit lp cc thuc tnh cho hp thoi
Context mContext = getApplicationContext();
Dialog dialog = new Dialog(mContext);
dialog.setContentView(R.layout.custom_dialog);
dialog.setTitle("Custom Dialog");
TextView text = (TextView) dialog.findViewById(R.id.text);
text.setText("Hello, this is a custom dialog!");
ImageView image = (ImageView) dialog.findViewById(R.id.image);
image.setImageResource(R.drawable.android);

V y l giao din ng vi phn trn:

Hnh ph lc 168 Hnh minh ha to hp thoi t mt gioa din

Ngoi ra, theo nguyn tc lp trnh giao din, ta c th to giao din trc tip
bng m lnh Java cho hp thoi m khng cn thng qua tp tin XML nh trn. Ta
dng cch no cn ty theo tng hon cnh v trng hp.

I.9

Lp trnh vi nhp xut tp tin

I.9.1 Gii thiu


Bt k h iu hnh thng thng trn my vi tnh u c nhng ng dng
m c kh nng lu, xa, sa cc tp tin m cc tp tin iu c truy xut bi
cc ng dng khc. Android s dng c ch khc, tt c d liu trong mt ng dng
ch c dng cho ng dng m thi.
Tuy nhin, Android cng cung cp mt cch a nhng tp tin ca ng
dng ny sang ng dng khc thng qua mt dng l ContentProvider.
ContentProvider l thnh phn ca ng dng m n c d liu t tp tin bn trong
220

ra cho cc ng dng khc v ghi d liu t cc ng dng khc vo tp tin bn trong.


Android h tr mt s ContentProvider chun cho cc dng tp tin nh hnh nh,
m thanh, tp tin video v tp tin thng tin lin lc c nhn.
Cho d chng ta c mun xut d liu sang cc ng dng khc hay khng th
chng ta phi cn bit cch thc lu tr n. Android c nhiu cch thc lu tr
d liu v truy xut n l : Preferences, files, Databases v Network.
I.9.2 Preferences
I.9.2.1 Gii thiu
Preferences l cch lu tr v truy xut cc thit lp ca ng dng Android.
V d nh cc thit lp rung hay khng rung khi n phm, bt/tt GPS Ta gi hm
Context.getSharedPreferences() c v ghi gi tr. Gn tn cho b Preferences
nu bn mun chia s chng vi cc thnh phn khc trong cng mt ng dng hay
s dng hm Activity.getPreferences() v khng gn tn dng n trong ni ti
Activity m thi. Bn khng th chia s Preference cho cc ng dng khc;
ngoi tr dng ContentProvider.
Cc gi tr thit lp ca Preferences c lu thnh mt tp tin XML trong
th mc ng dng ca h thng /com.<ten_ung_dung>/shared_prefs.

Hnh ph lc 169 Hnh minh ha th mc cha cc lu tr Preferences nm trong h thng ca in


thoi

221

Sau y l ni dung ca mt tp tin mu lu vt Preferences:


<?xml version='1.0' encoding='utf-8' standalone='yes' ?>
<map>
<boolean name="default_toggle" value="true" />
<string name="default_edittext">Default value</string>
<string name="default_list">beta</string>
</map>

I.9.2.2 Cch thc lp trnh


y l v d on m lnh Preferences:
import android.app.Activity;
import android.content.SharedPreferences;
public class Calc extends Activity {
public static final String PREFS_NAME = "MyPrefsFile";
. . .
@Override
protected void onCreate(Bundle state){
super.onCreate(state);
. . .
// Restore preferences
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
boolean silent = settings.getBoolean("silentMode", false);
setSilent(silent);
}
@Override
protected void onStop(){
super.onStop();
// Save user preferences. We need an Editor object to
// make changes. All objects are from android.context.Context
SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0);
SharedPreferences.Editor editor = settings.edit();
editor.putBoolean("silentMode", mSilentMode);
// Don't forget to commit your edits!!!
editor.commit();
}

I.9.3 Files
I.9.3.1 Gii thiu

222

Ta c th lu tr tp tin trn b nh trong ca thit b di ng hay trn b


nh ngoi (SD Card). Mc nh, cc ng dng khc khng th truy xut n cc tp
tin nm trong b nh trong ca ng dng.
c d liu t tp tin, gi hm Context.openFileInput() v tham s u
vo l ng dn v tn tp tin. N s tr ra mt i tng tp tin ta d dng
qun l. ghi mt tp tin th dng hm Context.openFileOutput() vi tham s l
tn v ng dn. N s tr v i tng FileOutputSream. Gi nhng phng thc
ny vi tham s u vo l ng dn v tn tp tin t cc ng dng khc s khng
c; lc y, bn c th ch truy xut n cc tp tin ca ng dng ca mnh m
thi.
Nu bn c sn mt tp tin c ng gi cng vi ng dng lc bin dch
ng dng, bn c th lu tp tin ny trong project trong th mc
/res/raw/myDataFile,

sau

Resources.openRawResource(R.raw.myDataFile).

m
N s

n
tr

bng
v

hm

i tng

InputStream m bn c th dng c tp tin.


Cc bn tham kho thm trong project mu i km vi tn l HelloIO.
I.9.3.2 Cch thc lp trnh
C 3 cch thc cn bn ti trong mc ny l ghi tp tin vo SDCard, c tp
tin t SDCard v c tp tin trong th mc chng trnh tp tin h thng.
c tp tin t th mc chng trnh:
Khi lp trnh vi vic c ghi tp tin th Java khuyn co v i
khi bt buc nh lp trnh phi cc on m lnh c ghi tp tin trong
try/catch c th bt cc li xy ra v kh nng li rt cao khi m tp tin
khng cn tn ti trong b nh.
Ni dung chnh nh sau:
try {
// hm c tp tin my_base_data.txt t th mc
// res/drawable/
PlayWithRawFiles();

223

} catch (IOException e) {
Toast.makeText(getApplicationContext(),
"Problems: " + e.getMessage(), 1).show();
}

Ni dung hm PlayWithRawFiles() nh sau:


public void PlayWithRawFiles() throws IOException {
String str = "";
StringBuffer buf = new StringBuffer();
InputStream is = this.getResources().openRawResource(
R.drawable.my_base_data);
BufferedReader reader = new BufferedReader(new
InputStreamReader(is));
if (is != null) {
while ((str = reader.readLine()) != null) {
buf.append(str + "\n");
}
}
is.close();
Toast.makeText(getBaseContext(), buf.toString(), Toast.LENGTH_LONG)
.show();
}

Nh chng ta thy cho d tch hm hay cng nhau th phi c


try/catch.
Ta nn theo cc bc chnh l c tp tin cn c a vo
InputStream. K n, to BufferReader c tun t t u n cui
InputStream . Trong khi c ta tin hnh ly gi tr ra ngoi vo
chui tng ng.
c tp tin t th mc SDCard
Cng nh trn l phi cn c try/catch:
try {
// read an SD-file
Scanner infile = new Scanner(new FileReader(
"/sdcard/mysdfile.txt"));
String inString = "";

224

while (infile.hasNextLine()) {
inString += infile.nextLine() + "\n";
}
// show result
Toast.makeText(getBaseContext(), inString,
Toast.LENGTH_LONG).show();
infile.close();
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.toString(),
Toast.LENGTH_LONG).show();
}

Ta c nhiu cch c tp tin nh ta thy trn c cch th 2 l


dng lp Scanner. Nhng lp scanner th ch c th c theo tng dng
m thi. Nu tp tin chng ta qun l theo dng th lp ny s tin hn.
Cn lp InputStream v BufferReader th c theo tng k t.
Ghi tp tin vo SDCard
try {
File myFile = new File("/sdcard/mysdfile.txt");
myFile.createNewFile();
FileOutputStream fOut = new FileOutputStream(myFile);
OutputStreamWriter myOutWriter = new OutputStreamWriter(
fOut);
myOutWriter.append("Phan Thanh Trung Vo Thanh Nhat");
myOutWriter.close();
fOut.close();
// thng bo ghi file thnh cng
Toast.makeText(getBaseContext(),
"Done writing SD 'mysdfile.txt'",
Toast.LENGTH_SHORT).show();
// xa khung nhp liu

225

txtData.setText("");
} catch (Exception e) {
Toast.makeText(getBaseContext(), e.getMessage(),
Toast.LENGTH_SHORT).show();
}

to tp tin mi gm cc bc to thc th File bt u thao


tc; sau kch hot bng hm createNewFile(). Tip n, tin hnh ghi
ni dung ln tp tin bng 2 lp FileOutputStream v OutputStreamWriter
tin hnh ghi d liu vo tp tin.
Ch : khi tin hnh c tp tin hoc ghi tp tin th sau khi thao tc ta
phi ng tp tin li bng phng thc FileOutputStream.close() hoc
InputStream.close().
I.9.3.3 Nhn xt
Nu c nhu cu ghi d liu dng n gin th ta ch cn thao tc trn tp tin
thng thng. Cn nu qun l theo mi quan h d liu quan h vi nhau th cn
qun l chng thnh c s d liu tin theo di v qun l.
I.9.4 Databases
I.9.4.1 Gii thiu
Android cung cp cho ta cch to v lu tr d liu bng c s d liu
(CSDL) SQLite. Mi CSDL ch c dng trong ng dng m thi.
i tng SQLiteDatabase th hin mt CSDL v c cc phng thc giao
tc vi CSDL nh thm, xa, sa v truy vn d liu. to CSDL, gi hm
SQLiteDatabase.create() v cng c th dng lp SQLiteOpenHelper.
Android a ra cc tnh nng qun l cho php ta lu tr cc d liu t n
gin n phc tp. V d nh ta c th lu chui, s, hnh nh,
Android c cng c h tr CSDL SQL l sqlite3 gip ta c th truy xut n
ni dung cc bng, chy dng lnh SQL v thc thi cc tnh nng hu dng khc
trn CSDL SQLite.

226

Tt c CSDL gm CSDL SQLite v cc CSDL khc c lu tr trong


thit b trong th mc /data/data/package_name/databases.
Chuyn c bao nhiu bng trong CSDL SQLite, cc ct cha d liu g,
chng lin kt vi nhau ra sao th l nhim v ca vic qun l c s d liu
thun ty. Trong phn SQLite ny chng ti ch gii thiu tng bc v cch thc
lp trnh thao tc trn d liu m thi.
Bn c th tham kho thm trn project mu phn SQLite c tn project l
HelloSQLite.
I.9.4.2 Cch thc lp trnh
Cng nh cc cng c thao tc trn c s d liu Access hay MDF ca
MSSQL, SQLite cung cp cc phng thc cn thit thao tc c s d liu.
Nhn chung, c m kt ni n CSDL, thao tc v ng kt ni CSDL. u
tin, chng ti ni v m kt ni:
SQLiteDatabase db;
// to mt SQLite database
db =
SQLiteDatabase.openDatabase("data/data/com.hellosqlite/testDB",
null, SQLiteDatabase.CREATE_IF_NECESSARY);

v ng kt ni:
db.close();

Ta ch n ng dn CSDL. Nu CSDL tn ti th openDatabase s


m

n ln cn nu khng th s

SQLiteDatabase.CREATE_IF_NECESSARY

to CSDL

mi do thuc tnh

qui nh.

Khi chng ti lp trnh phn ny, th chng ti thy nu tn CSDL thi th


openDatabase s tm hoc to CSDL trong th mc mc nh ca ng dng android
l data/com.<tn ng dng>/lib/<tn CSDL> nh sau:

227

Hnh ph lc 170 Hinh minh ha th mc mc nh lu tr tp tin SQLite ca mt ng dng trn h


thng Android

Cn nu ch r v tr trn th nh gn ngoi th n s c hoc ghi CSDL ln


th nh ngoi .
C 2 kiu chnh thao tc ln CSDL l thc thi cu lnh SQL execSQL hay s
dng cc phng thc sn c ca i tng SQLiteDatabase nh query, insert,
update, delete. Ngoi ra, n cn h tr tnh ton vn ca giao tc bng cc b hm
beginTransaction(), setTransactionSuccessful() v endTransaction(). Ta t cc cu
lnh SQL gia beginTransaction() v endTransaction(). V trong Android c h tr
cc cch thc hin cu truy vn nh sau:
Thc thi truy vn bng cu lnh SQL
Cursor c=null;
try {
c = db.rawQuery(sql, null);
} catch (SQLException e) {
Toast.makeText(mContext,
"Loi khi truy van du lieu:" + e.toString(),
4000).show();
}

228

Thc thi cu lnh truy vn SQL v kt qu tr c cha trong


bin con tr Cursor. Sau , ta duyt bin con tr ly ra tng gi tr ta
cn bng hm movetoNext().
Thc thi truy vn bng phng thc sn c
Cursor c = null;
try {
c = db.query(tablename, columns, selection,
selectionArgs, groupBy,
having, orderBy);
} catch (SQLException e) {
Toast.makeText(mContext,
"Loi khi truy van du lieu:" + e.toString(),
4000).show();
}

Android a ra cch th 2 l dng hm c sn thc hin truy


vn. Gip nh lp trnh gii phng khi vn l phi bit ngn ng truy
vn SQL. Vic lp trnh bng hm query th phi theo khun kh v theo
tng tham s u vo ng vi tng i tng trn cu truy vn. i
tng no khng c th ta NULL. Bn c th tham kho ton din
trong chng trnh ng dng thc t eSaleShopping trong Package
com.DataProvider.
Thc thi hnh ng thm/ xa/ sa bng cu lnh SQL
try {
db.execSQL(sql);
result = 1;
} catch (SQLException e) {
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}

Ta a vo cu sql cha cu lnh SQL thm, xa, hoc sa v


thc thi.
Thc thi hnh ng thm/ xa/ sa bng phng thc sn c

229

Thm
int result = 0;
try {
result = (int) db.insert(table, null, values);
} catch (SQLException e) {
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}

Cp nht
int result = 0;
try {
result = (int) db.update(table, values, whereClause, whereArgs);
} catch (SQLException e) {
// TODO: handle exception
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}

Xa
int result = 0;
try {
result = (int) db.delete(table, whereClause, whereArgs);
} catch (SQLException e) {
// TODO: handle exception
Toast.makeText(mContext, "Thuc thi khong thanh cong: "
+ e.toString(), 3000);
}

I.9.4.3 Nhn xt
Ty theo tng trng hp v hon cnh m ta dng cc cch khc nhau.
Theo kinh nghim chng ti th nu cc bn c hc m hnh 3 lp vit cho
ng dng cc b truy vn d liu MSSQL th t hn bit lp DataProvider l lp
nn tng thc thi cc truy vn CSDL. Cho nn, khi lm vic vi SQLite th ta

230

cng nn to lp DataProvider cung cp tp trung hu ht cc phng thc c bn


cho vic thao tc ln CSDL cho d dng v d qun l.
I.9.5 Network
I.9.5.1 Gii thiu
Theo nh xu hng ngy nay, cc my di ng v cc thit b my tnh tr
thnh thit b u cui l ni th hin d liu v x l u vo. Do s ln mnh
ca cc my ch c kh nng lu tr lng d liu khng l v kh nng x l cc
nhanh nn hu nh tt c d liu c lu trn mt my ch v tt c thit b c th
truy xut ly d liu v v hin th cho ngi dng.
Lp trnh dng thc ny l dng lp trnh theo tng tng v ta pht lnh truy
xut d liu t di ng cho my ch, my ch tr v kt qu tng ng cho di ng.
Vn ln y l nu lng d liu tr v qu ln th trong mt ln khng th tr
v ht cho nn phi c c ch giao tip thch hp gia my ch v thit b di ng.
Hin nay c nhiu my ch chy cc nn tng khc nhau, chng ti ch
cp n 2 nn tng chnh l Java v .Net. Cc my ch dng webservice l ni cung
cp d liu m n c cp nht lin tc cho cc thit b u cui. Cc webservice
c xy dng trn nn Java hay .Net th s c c ch truyn v nhn d liu khc
nhau t pha client client l thit b u cui nhn v yu cu d liu t
webservice. Dot Net th dng c ch XML vi nh dng ca ring mnh v client
phi bit c ch nh dng m lm theo webservice v client c th hiu nhau
m truyn cho nhau thng ip yu cu v hi p.
Hin nay, theo chng ti bit th Android h tr truy xut thng tin t
webservice trn nn ASP ln PHP vi s h tr t kSOAP. Nhng trong phn ny,
chng ti s ni nhiu v c ch giao tip vi webservice vit trn nn .Net v
chng ti cha c c hi lm quen vi PHP nn hin thc ha ng dng thc t
vi phn webservice trn nn .Net.
I.9.5.2 Cch thc lp trnh
String SOAP_ACTION = "http://tempuri.org/HelloArr";
String METHOD_NAME = "HelloArr";// = "GetHS";

231

String NAMESPACE = "http://tempuri.org/";


String URL = "http://192.168.200.85/HelloWebservice/Service.asmx";
SoapSerializationEnvelope envelope;
// khi to mi trng, ng dn kt ni vi webservice
envelope = new SoapSerializationEnvelope(SoapEnvelope.VER11);
envelope.dotNet = true;
SoapObject request = new SoapObject(NAMESPACE, METHOD_NAME);
envelope.setOutputSoapObject(request);
// x l kt ni webservice (ASP.NET) ly kt qu thng
qua s kin
// nhn nt
Button btn = (Button) findViewById(R.id.btn_TestWebservice);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
SoapObject result = null;
try {
// gi ly kt qu t webservice thng qua
i tng
// SoapObject result
HttpTransportSE androidHttpTransport = new
HttpTransportSE(URL);
androidHttpTransport.call(SOAP_ACTION,
envelope);
result = (SoapObject)
envelope.getResponse();
result.toString();
// x l kt qu nhn c t webservice
String resultFromWebservice = "";
for (int i = 0; i <
result.getPropertyCount(); i++) {
resultFromWebservice += "\n"
+
result.getProperty(i).toString();
}
Toast.makeText(getBaseContext(),

232

"Result From Server: \n" +


resultFromWebservice,
Toast.LENGTH_LONG).show();
} catch (Exception e) {
Toast.makeText(getBaseContext(), "" +
e.toString(),
Toast.LENGTH_LONG).show();
}
}
});

Hon cnh y l ta cn pht lnh yu cu my ch webservice tr v cho


chng ta tp gi tr ng vi yu cu m ta gi ln trc .
Trn l on m lnh thc hin c d liu webservice v th hin ln mn
hnh Android. Trong project mu hng dn c tn l HelloWebservice c mt
webservice vit sn. Bn chy webservice ln my ca bn; sau thit lp IP
thch hp cho my ca bn. y, chng ti tm thit lp IP nh trn v t y
my tnh ca bn tr thnh mt server c webservice cung cp thng tin cho ng
dng Android.
u tin ta phi thit lp cc thng s SOAP_ACTION, METHOD_NAME,
NAMESPACE, URL. Sau khi to mi trng kt ni ti webservice thng qua
SoapSerializationEnvelope

SoapObject

theo gi v ly kt qu v thng qua

gi yu cu ln webservice. Tip

HttpTransportSE

. Ty theo tng hon cnh

m ta phn gii gi tr tng ng thng qua phng thc getProperty().


I.9.5.3 Nhn xt
Cng nh SQLite, ta nn to mt lp chuyn thc thi kt ni ti
webservice v ly d liu v t my ch. Trong ng dng eSaleShopping, chng ti
to ra lp ServiceProvider bao gm cc phng thc c bn kt ni v yu
cu d liu t my ch.

I.10 Lp trnh vi MapView


I.10.1 Gii thiu

233

Lp trnh bn l th mnh ca Android do n c s hu thun ti a t


Google. ng dng bn v v tr dng cc lp trong gi android.location v cc
th vin m rng ca Google.
Android cho php ng dng truy xut n cc dch v v tr (c mt phn cn
phi c s h tr ca thit b) thng qua gi android.location. Thnh phn chnh
ca android.location l LocationManager s cung cp cc hm API xc nh v
tr nu c s h tr ca thit b (nh GPS hay v tr thng qua trm thu pht sng
in thoi).
Cng nh cc dch v h thng khc, ta khng khi ng thc th
LocationManager

trc

tip

phi

nh

thng

gi

hm

getSystemService(Context.LOCATION_MANAGER). Hm ny s tr ra mt thc
th LocationManager qun l bn v v tr.
Mt khi c thc th LocationManager th ng dng c th lm nhng vic
sau:
Tm li danh sch cc LocationProvider tm gi tr v tr ln cui
cng m LocationProvider c (LocationProvider l cc thit b nhn tn hiu
v tr thng qua GPS, Wifi, Mng in thoi).
Thit lp hay g b thit lp cho khong thi gian nhn gi tr cp
nht cho LocationProvider.
Tuy nhin, khi dng my o chy ng dng bn th ta khng th nhn
gi tr v tr tht t LocationPrivider (nh mng hay GPS). Trong hon cnh ny, ta
c th dng DDMS gi tn hiu gi lp cho my o.
Google

cung

cp

cho

ta

th

vin

rng

gm

gi

com,google.android.maps. Cc lp con ca gi ny cung cp cho ta bn , canh


chnh bn , lu vt bn v nhiu s h tr khc na.
Lp quan trng ca gi Maps l MapView, l mt lp con ca ViewGroup.
MapView hin th bn vi d liu c c t dch v Google Map. Ty theo
ngi dng thao tc ln mn hnh mapView m n s phng to, thu nh bn . N
cung cp cc phn t giao din cn thit qun l bn nh la bn i km chng
234

hn. Ngoi ra, MapView c cha cc lp qun l v v cc loi hnh nh ln


bn chng hn nh cc nt ghim, cc ch thch ...
Gi th vin Maps khng phi l phn th vin chnh thc t th vin
Android, v th nu bn mun lp trnh ng dng c s h tr ca Google Maps th
phi dng thm th vin v thm vo reference ca ng dng nh l phn KSOAP
ca Webservice.
I.10.2 Cch thc lp trnh
Chng ti hng dn bn theo tng bc to mt ng dng c p dng
bn .
I.10.2.1

Bc 1:

D nhin l to project. Tm t tn l HelloOtherWidget.


I.10.2.2

Bc 2:

Khai bo l ta c s dng bn trong AndroidManifest.xml vi gi tr qui


nh nm trong th <application> nh sau:
<uses-library android:name="com.google.android.maps" />

I.10.2.3

Bc 3:

Do ta cn truy xut Internet truy xut bn ca Google; v th ta cn cp


php dng Internet. Trong tp tin AndroidManifest.xml, th thm vo gi tr bn
trong th <manifest> nh sau:
<uses-permission android:name="android.permission.INTERNET" />

I.10.2.4

Bc 4:

Cng trong tp tin AndroidManifest.xml ta thit lp thuc tnh khng th


hin tiu cho Activity bn nh sau:
<Activity android:name=".HelloMapView" android:label="@string/app_name"
android:theme="@android:style/Theme.NoTitleBar">
<intent-filter>
<action android:name="android.intent.action.MAIN"
/>
<category
android:name="android.intent.category.SAMPLE_CODE" />

235

</intent-filter>
</Activity>

Thuc tnh qui nh khng c tiu c hay khng c u c.


I.10.2.5

Bc 5:

M tp tin qui nh giao din, chng ti to mt tp tin giao din XML mi


c tn l hello_mapView.xml v thit k nh sau:
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/mainlayout" android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<com.google.android.maps.MapView
android:id="@+id/mapView" android:layout_width="fill_parent"
android:layout_height="fill_parent" android:clickable="true"
android:apiKey="0zAN4n_WR-D5XultBqPDnHAv2g_krHVOK8m4D3g" />
</RelativeLayout>

Ta lu trn c mc apiKey. Mc ny l kha m Google Maps a cho


mi ngi khc nhau vi tng debug.keystore khc nhau.
Trong ti liu ph lc ny c mc trnh by ci t my o v c phn yu
cu cc bn ch n phn debug.keystore sau ny lp trnh bn . Google
Maps yu cu vi mi nh lp trnh trn mi my khc nhau th cn c mt apiKey
khc nhau. ly c apiKey ta theo cc bc sau:
Vo th mc cha my o ly ng dn debug.keystore. y
ti c ng dn sau: C:\Users\ThanhTrung\.android\debug.keystore.

Hnh ph lc 171 Hnh minh ha th mc cha tp tin debug.keystore (Windows 7)

236

M CommandPromt v vo n th mc v chy dng lnh:


C:\Program

Files\Java\jdk1.6.0_16\bin>keytool

-list

-keystore

"C:\Users\ThanhTrung\.android\debug.keystore"
Khi mn hnh s xut hin ni dung sau:
***************** WARNING WARNING WARNING
*****************
* The integrity of the information stored in your keystore *
* has NOT been verified! In order to verify its integrity, *
* you must provide your keystore password.

***************** WARNING WARNING WARNING


*****************

Keystore type: JKS


Keystore provider: SUN

Your keystore contains 1 entry

androiddebugkey, 07-12-2009, PrivateKeyEntry,


Certificate fingerprint (MD5):
AD:35:5C:24:54:36:76:AB:42:7B:4F:2B:D4:D9:38:DB

Vo

website

http://code.google.com/intl/vi-VN/android/add-

ons/google-apis/maps-api-signup.html v nhp vo m s Certificate


fingerprint (MD5) nh hnh sau:

237

Hnh ph lc 172 Hnh minh ha trang web ly m ng Google Maps ApiKey t Google

Cui cng Google yu cu ta ng nhp vi ti khon ca GoogleMail


vo v ta s nhn c apiKey. Lc , ta lu li apiKey s dng cho cc
chng trnh sau.
Lc ny ta dng apiKey cho phn apiKey mc trn.
Ch l khng dng apiKey nh v d trn v chc chn mn hnh bn
s khng hin th c Google Map khi bn dng apiKey ca my khc.
I.10.2.6

Bc 6

To tp tin Java c tn l HelloMapView.Java v tha k lp MapActivity


public class HelloMapView extends MapActivity

I.10.2.7

Bc 7

Trong mi lp no k tha t lp MapActivity phi vit li hm


isRouteDisplayed().
@Override
protected boolean isRouteDisplayed() {
return false;
}

238

Bc 8

I.10.2.8

Thit k ni dung hm onCreate() nh sau:


@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_mapView);
MapView mapView = (MapView) findViewById(R.id.mapView);
// chnh phng to ca bn
mapView.getController().setZoom(17);
// gn b ZoomController vo bn
mapView.setBuiltInZoomControls(true);
}

Th l xong ng dng c bn .
I.10.3 Nhn xt
Trn l nhng bc c bn to nn bn c s dng tnh nng ca
Google Maps. Ngoi ra, vic khai thc bn dng nh l v tn khi ta thm cc
i tng trn mn hnh bn phc v cho tng tng lin quan n bn .
Cho nn vic v cc nt nhn, cc biu tng ln trn l iu rt cn thit.
tm hiu k hn phn ny ta vo mc Part 2: Adding Overlay Items trong trang
web:

http://developer.android.com/resources/tutorials/Views/hello-mapView.html

tm hiu thm.

I.11 Lp trnh thao tc WebKit


I.11.1 Gii thiu
Android h tr ta m trnh duyt web ngay trn phn mm ng dng
Android. Ch cn vi thao tc n gin ta c th m cc trang web ngay trn mn
hnh thao tc ca ng dng m khng cn tn cng m trnh duyt web ln.

239

Phn lp trnh vi Webkit chng ti lm trong project mu


HelloOtherWidget mc Webkit.
I.11.2 Cch thc lp trnh
I.11.2.1

To giao din

To tp tin giao din XML vi ni dung n gin nh sau:


<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:orientation="vertical">
<WebView android:id="@+id/webkit"
android:layout_height="fill_parent"
android:layout_width="fill_parent" />
</LinearLayout>

Cc bn khng qun kim tra s pho php dng Internet trong th permission
thuc tp tin AndroidManifest.xml c tn ti cha.
I.11.2.2

M lnh Java

Thit k lp Activity n gin nh sau.


public class HelloWebKit extends Activity {
WebView browser;
/** Called when the Activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_webkit);
// to mt WebView
browser = (WebView) findViewById(R.id.webkit);
browser.getSettings().setJavaScriptEnabled(true);
// np vo WebView a ch web
browser.loadUrl("http://google.com");
}
}

240

N s m mt trnh duyt web v vo thng trang web www.google.com .


Bn ch , khi thit k bn c thm TextView hay cc widget khc th trnh duyn
cng che lp ht cc widget y.
I.11.3 Nhn xt
Cng ging nh cc trnh gi in thoi hay gi tin nhn, th trnh trnh duyt
web gip nh lp trnh c th gi trc tip mn hnh duyt web ngay t chng
trnh v s thun tin cho ngi dng khi nhp vo cc ng lin kt th n s m
trang web ng vi ng lin kt y.

I.12 Lp trnh vi cc widget khc


I.12.1 Widget Date/Time
I.12.1.1

Gii thiu

iu khin ny cho php ta chn ngy/ gi h thng. Chng c giao din nh


sau:

Hnh ph lc 174 Hnh minh ha Time widget

Hnh ph lc 173 Hnh minh ha Date widget

I.12.1.2

Cch thc lp trnh

241

Vic lp trnh trn widget ny tng i d. Cc bn c th t tm hiu thm


phn

ny

trong

ng

mu

HelloOtherWidget

vi

phn

HelloDateTimeSelectionWidget.Java.
I.12.2 Widget Tab
I.12.2.1

Gii thiu

Phn tab gip ta nhn trn nhn khung nhn khc nhau. Ty theo tng chng
trnh ng dng m ta c th p dng chng:

Hnh ph lc 175 Hnh minh ha giao din dng Tab trong Android

I.12.2.2

Cch thc lp trnh

u tin, to tp tin giao din XML nh sau:

242

Hnh ph lc 176 M XML minh ha cho vic to mt khung ng dng Tab n gin

Ta ch , giao din tab c 3 thnh phn chnh:


Tabhost: l khung cha chnh cho nt lnh tab v ni dung tab.
Tabwidget: l phn cha s nt tab bao gm ch v biu tng.
FrameLayout: l ni cha ni dung tab.

Hnh ph lc 177 Hnh minh ha cu trc ca mt Tab widget

Nh trong phn m lnh XML ta c th hin tng TextView ng vi tng


Tab trong TabWidget.
Tip n vo m lnh Java thit lp cho tng tab nh sau:
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.hello_tabwidget);
TabHost mTabHost = getTabHost();

243

mTabHost.addTab(mTabHost.newTabSpec("tab_test1").setIndicator("TAB
1")
.setContent(R.id.textView1));
mTabHost.addTab(mTabHost.newTabSpec("tab_test2").setIndicator("TAB
2")
.setContent(R.id.textView2));
mTabHost.addTab(mTabHost.newTabSpec("tab_test3").setIndicator("TAB
3")
.setContent(R.id.textView3));
mTabHost.setCurrentTab(0);
}

Lc ny, tab c hnh thnh theo mun ca chng ta.

244

Ph lc J Lp trnh vi EndlessList
J.1

Gii thiu
Vic to mt danh sch trn Android nh ta bit cc phn ph lc trc

l mt vic ht sc d dng v nhanh chng. y, chng ta ch cn to mt


ListView trn mn hnh giao din v dng bt k mt Adapter no gn kt d
liu vo ListView ny. Vic lp trnh nh vy nu xt v kha cnh cc b trn mt
thit b di ng th khng c g phi bn nhng nu xt trn ng cnh thit b
hot ng trn mi trng mng th y li l mt vn thch thc i vi cc nh
lp trnh.
Vic hin th d liu cc b (ngun d liu c th l cc mng chui lu
trong ti nguyn chng trnh hay lu trong CSDL SQLite) c Android thc hin
rt nhanh chng v chnh xc. Tuy nhin vic ly d liu t server v v hin th ln
ListView l mt iu kh do n ph thuc vo nhiu yu t nh: cht lng ng
truyn ca mng, ln ca d liu... V d nh vic hin th mt list cc bi nhc
hay album t mt website m nhc no ln mn hnh cho ngi dng xem v
nghe th trc khi mua bi ht hay album no . C nhiu cch thc hin cng
vic ny. Cch n gin nht l ta ti ht ton b d liu t server v mt ln sau
mi hin th ln cho ngi dng xem v chn. Cch ny tuy n gin nhng bc l
khng t cc nhc im l: nu ngun d liu kh ln th ngi dng s i
di c cho d liu c ti v ht v ngoi ra n cn tim n li cho chng
trnh nu nh ng truyn mng b trc trc.
gii quyt bi ton nu ra trn th khi nim EndlessList ra i v c
cc nh lp trnh p dng vi nhiu cch thc khc nhau. Mt b d liu ln trn
server s c ch nh v chng trnh s download tun t tng b d liu c
ch nh ny v th hin ln trn mt ListView lc ny ListView s c gi nm
na l EndlessList.

245

J.2

Cch thc to EndlessList


Vic lp trnh to ra EndlessList tng i l phc tp, v vy thc hin

c mt EndlessList iu u tin l ta phi bit c cch gn kt d liu vo


ListView thng qua mt SimleAdapter (phn ny c trnh by k phn ph
lc I.1).
iu tin quyt tip theo l ngun d liu t server tr ra cho client phi
c ch nh ra ta c th ly v tng b nh ny v hin th ln ListView ca
chng trnh (v d trn server c 100 record th b d liu ny phi c chia nh
lm 10 phn, mi phn c 10 record nh cho ph hp vi vic truyn ti d
liu trn mi trng thit b di ng).
J.2.1 Cch thc vn hnh ca EndlessList:
Chng trnh s download v trc phn d liu nh u tin v hin th ln
trn ListView. Khi ngi dng duyt n dng cui cng ca ListView, chng
trnh s bt c s kin ny v tin hnh gi mt yu cu ln server yu cu
phn d liu tip theo.
Nu server bo khng cn phn d liu no na th ng dng s hon tt v
khng cn gi yu cu ln server na. Lc ny danh sch c ti v th hin
y ln trn mn hnh.
Ngc li th chng trnh s tip tc download v phn d liu tip theo.
Sau khi download xong chng trnh s thc hin gn ni tip phn d liu ny vo
ListView (tc l ni lin phn d liu ban u vi phn d liu mi ny v hin th
ln List). Tin trnh trn c c lp i lp li cho n khi chng trnh download
ht cc phn d liu v.
Ngi dng s tn mt khong thi gian nh cho mi ln ch mt phn d
liu c ti v. Tuy nhin vic ch i ny l chp nhn c hn so vi vic phi
ngi ch rt lu ti ht trn b d liu v my ri mi xem.
Hnh nh minh ha cho mt EndlessList c ng dng trong bi ton
eSaleShopping.

246

Hnh ph lc 178 Hnh minh ha cho mt EndlessList c p dng vo eSaleShopping

J.2.2 Cch thc lp trnh to EndlessList


Phn ny chng ti s khng trnh by chi tit cc m lnh to ra
EndlessList m ch nu vn mc tng qut nht do tng hon cnh thc t m
ta s c cch p dng EndlessList khc nhau.
Theo nh s tm hiu ca chng ti, ta s to mt lp dn xut t lp
SimpleAdapter v task khng ng b (AsyncTask) c th to mt EndlessList.
Cch thc hot ng v c ch s c nu r phn bn di.
To mt lp m rng t lp SimpleAdapter nh sau:
public class TestSimpleAdapter extends SimpleAdapter {
public TestSimpleAdapter(TestEndlessSlow context,
List<? extends Map<String, String>> data, int resource,
String[] from, int[] to) {
super(context, data, resource, from, to);
}
@Override
public View getView(int position, View convertView, ViewGroup
parent) {

247

// kim tra xem c cn load thm d liu v t server hay


khng
if (!mDone && (getCount() - position) <= 1) {
if (mTestEndlessSlow.isAsyncTaskFinished()) {
mTestEndlessSlow.loadNextValues();
}
}
View ret = super.getView(position, convertView, parent);
if (ret != null) {
// Do something
}
return ret;
}
// ...
}

Lp ny c nhim v gn kt d liu vi ListView (cch thc s


dng lp dn xut t SimpleAdapter gn d liu vo ListView thng
qua phng thc setAdapter() nh c trnh by ph lc I.1),
ng thi kim tra xem hin thi ListView c cun ti cui danh
sch cha. Nu ti cui danh sch th ta to mt Task khng ng b
thc hin vic ti tip phn d liu mi v. Task khng ng b ny s
c trnh by k hn phn bn di.
Vic kim tra xem cui danh sch ca ListView hay cha ta s
thit k hm t bn trong phng thc public View getView(int
position, View convertView, ViewGroup parent) {}
Gi thc thi mt AsyncTask thc thi vic ly d liu ngm t
server v:
AsyncTask l mt task khng ng b do Android h tr cc nh
lp trnh thc hin cc hot ng chy nn bn di v y kt qu thc
hin c ra lung UI (UI Thread) m khng cn thng qua Handler hay
Thread. hiu r hn ta c th tham kho thm nh ngha v cch

248

dng

AsyncTask

trang

http://developer.android.com/reference/android/os/AsyncTask.html
Khi mt AsyncTask c gi thc thi, n phi tri qua 4 bc nh
sau (v ta s li dng 4 bc ny thc hin vic ti ngm tng phn d
liu t server v sau khi ti xong phn no s y phn ln trn giao
din)
onPreExcute() phng thc ny s c gi mt ln khi
AsyncTask c kch hot. Ta s khi ng cc hiu ng ca
progressBar ln trn mn hnh bo cho ngi dng bit l phi ch i
ti thm thng tin v t server.
doInBackground() phng thc ny l mt thread chy ngm v
c chy ngay sau khi hm onPreExcute() c thc hin xong. Ta s
thit k cc hm c d liu t server ngay bn trong phng thc ny.
Ngay khi c c b d liu no t server ta c th gi kt qu ny qua
hm onProgressUpdate() x l kt qu thng qua phng thc
publishProgress(ket_qua_doc_duoc).
onProgressUpdate() phng thc ny c chy trn UI Thread,
phng thc ny c dng x l d liu c gi qua t phng
thc doInBackground(). Tng record khi c gi qua y s c thm
vo mt List<T>, List<T> ny chnh l ni cha d liu c ang hin th
trn ListView v gi s cha thm d liu mi va thm vo. Mi lin h
gia List<T> SimpleAdapter ListView c ni r trn phn ph
lc I.1 nn phn ny s khng c cp y.
onPostExcute() phng thc ny cng c chy trn UI Thread
v c gi thc thi khi tc v tnh ton chy ngm thc thi hon tt.
Ta s gi thc hin tt hiu ng progressBar i v yu cu ListView cp
nht thm d liu mi (thng qua vic dng phng thc
notifyDataSetChanged()ca

lp dn xut t SimpleAdapter c m t

nh phn trn).

249

J.3

Nhn xt
Vic lp trnh vi EndlessList tuy c phn phc tp nhng mt khi nm

vng c cch thc hot ng ca EndlessList th vic p dng EndlessList vo


cc ng dng c dng kt ni d liu vi server s nng cao tnh linh hot v uyn
chuyn cho ng dng khi hot ng trn mi trng mng, v ngi dng khng
phi tn cng ch mt lng ln d liu ti v m thay vo l nhm nhi dn
dn d liu.
Theo s nhn xt ca chng ti, EndlessList thng c dng cho cc ng
dng thng mi, tin tc v thng c dng lit k danh sch sn phm ang
bn hay qung b sn phm ti ngi dng in hnh nh ng dng Google Market
hay Magnatune (http://evancharlton.com/projects/magnatune) v ng dng
eSaleShopping cng c p dng EnlessList cho vic hin th danh sch hng ha
ang c bn t cc siu th khc nhau.

250

Ph lc K

Cu trc v ngha cc thnh phn ca

mt project Android
MyApp/
AndroidManifest.xml

(rt cn) Cha cc khai bo v mt project


nh tn project, tn gi package, cc lp
Activity, lp Activity chnh khi chng trnh
c chy
(rt cn) Th mc ny cha tt c cc source

src/
/myPackagePath/.../MyClass.Java

code ca chng trnh.

res/

(rt cn) Th mc ny cha tt c cc


resource ca chng trnh

anim/

(khng bt buc) Cha cc file XML v khai


animation1.xml

bo animation m chng trnh cn s dng

...
(khng bt buc) Cc files trong th mc ny

drawable/

some_picture.png

some_stretchable.9.png

Android.graphic.drawable.

some_background.xml

thng l cc file nh nh PNG. JPG hay

...
layout/

bin

dch

trong
Cc

resources
file

ny

GIF.
(khng bt buc) Cha tt c cc file XML

screen_1_layout.xml
...

m t v giao din mn hnh hay mt phn


giao din mn hnh.
(khng bt buc) y l cc file XML cha

values/
arrays

cc thng tin thm nh strings, color hay

classes.xml

styles.

colors.xml
dimens.xml
strings.xml

251

styles.xml
values.xml
Cc file XML c th c c trong thi gian

xml/

chy trn thit b


(khng bt buc) Tt c cc file trong th mc

raw/

ny s c chp trc tip ln thit b.


Bng B.1 Cu trc project Android

Bng B-1 Cu trc project Android c tham kho t Kha lun 2008
Nghin cu v xy dng t in trn G-Phone ca T Xun Khi Nguyn v
on Chnh Thc thc hin.
i vi cc resource, bn cnh nhng resource do ngi dng to ra, Android
cng h tr mt s resource khc trong gi Android.R. (cc resource do ngi dng
thm vo c s dng bng cch gi R.)

252

Ph lc L

Hng dn s dng, thao tc chnh trn

chng trnh eSaleShopping


L.1

S lin kt cc mn hnh chc nng trong ng dng

eSaleShopping
tin vic trnh by phn hng dn s dng cc chc nng trong chng
trnh eSaleShopping chng ti a ra s lin kt cc mn hnh chc nng trong
ng dng nh hnh bn di.

Mn hnh
chnh

MH tm theo
danh mc

MH tm theo
h thng siu
th

MH tm theo
chui

MH tm theo
m vch

MH tm theo
Loi hng
ha

...

MH danh
sch hng
ha

MH danh
sch hng
ha

MH chi tit
hng ha

MH chi tit
hng ha

MH danh
sch hng
ha

MH hng ha
cn mua

MH hng ha
u thch

MH ty chn

MH chi tit
hng ha

Hnh ph lc 179 S lin kt cc mn hnh ca ng dng eSaleShopping

253

MH thng tin
chng trnh

Mn hnh tm
theo h thng
siu th

MH thng tin
siu th

MH ch ng i
ngn nht

MH la chn ca
mt siu th trong
h thng siu th

MH ch ng
n siu th

MH tm hng ha
theo chui

MH tm hng ha
theo m vch

MH tm hng ha
theo danh mc

Hnh ph lc 180 S lin kt cc mn hnh ca ng dng eSaleShopping (tip)

L.2

Gii thiu chc nng ca mn hnh chnh

Hnh ph lc 181 Mn hnh chnh ca ng dng eSaleShopping

L.2.1 Cc chc nng trn mn hnh chnh

Tm hng ha theo m vch: chn chc nng ny nu chng ta


mun chp thng tin ca mt m vch hng ha no v tm thng tin ca
254

hng ha hin ang bn ti siu th no, c gi c l bao nhiu, c


khuyn mi hay khng, .v.v

Tm hng ha theo siu th: chn chc nng ny nu ta mun


tm cc thng tin v hng ha hin ang bn ti siu th ca mt h thng
siu th no v cc thng tin khc nh bn ng i n siu th hoc
thng tin siu th,
Tm hng ha theo danh mc: chn chc nng ny nu ta
mun tm thng tin hng ha theo cc danh mc c chia sn theo nhiu
tiu ch nh: hng gia dng, thc phm ng lnh Khi chn chc nng
ny, chng trnh s hin th thng tin cc hng ha c phn hoch theo
danh mc hng ha, loi hng ha cho ngi dng tin theo di.
Tm hng ha theo chui: chn chc nng ny nu ngi dng
mun tm kim hng ha thng qua cc t kha, cc chui V d, khi
ngi dng g vo t kha tr xanh v nhn nt tm kim th chng trnh
s ly d liu danh sch nhng mt hng no c cha t kha tr xanh t
server v v hin th chng ra trn mn hnh.
Qun l danh sch hng ha u thch: chn chc nng ny nu
ta mun thm, xa, sa hay xem thng tin ca mt hng ha u thch no .

Qun l danh sch hng ha cn mua: chn chc nng ny


nu ta mun thm, xa, sa hay xem thng tin ca mt hng cn mua.
L.2.2 Thc n (menu) chc nng ca mn hnh chnh

255

Hnh ph lc 182 Menu chc nng ca mn hnh chnh

Menu chc nng trong mn hnh chnh gm c 3 chc nng chnh nh sau:
Thit lp chng trnh: y l chc nng m ngi dng c th thit
lp hay s dng cc chc nng nh: xa rc hnh nh, cp nht li ton b d
liu ca chng trnh.
Thng tin chng trnh: chc nng ny cho bit thng tin phin bn
phn mm cng nh thng tin tc gi thc hin.
Thot chng trnh: chc nng thot chng trnh.

L.3

Thao tc trn mn hnh chp m vch

Hnh ph lc 183 Mn hnh chp v tm kim hng ha da theo m vch

L.3.1 S dng chc nng chp m vch


tin vic trnh by hng dn s dng chc nng chp m vch chng ti
s tm lc li bng mt kch bn s dng nh sau:

256

Ngi dng thc hin nhn nt c M Vch

. Chng trnh

s kim tra trn in thoi c ci chng trnh Barcode Scanner hay khng.
Nu khng c chng trnh Barcode Scanner chp m vch th s
hi xem ngi dng c cn ti ng dng chp m vch ny v hay khng.
Nu cn th chng trnh s d tm v ti v ng dng Barcode Scanner t
Android Market v v ci t ln trn in thoi theo trnh t sau:

Hnh ph lc 184 Cc bc tin hnh ti v ng dng Barcode Scanner

257

Nu in thoi c sn chng trnh Barcode Scanner th ng dng


ny s c kch hot chp m vch hng ha

Hnh ph lc 185 Mn hnh chp thng tin ca mt m vch hng ha

Nu chp c m vch ca hng ha, kt qu s c phn tch


thnh chui s gm 13 k t v c hin th li trn mn hnh
chp m vch nh sau

Hnh ph lc 186 Mn hnh hin th kt qu c c t qu trnh chp m vch

258

Nu khng chp c m vch th chng trnh s a ra gi l


c tip tc tm kim thng tin hng ha bng cch s dng Mn
hnh tm kim chui hay khng.

Hnh ph lc 187 Mn hnh gi tm hng ha theo chui

L.3.2 Cc chc nng thc hin sau khi chp c m vch hng ha
Sau khi chp c m vch ca hng ha, ta c 3 chc nng c th thc hin
c nh sau: thm vo danh sch mua hng, thm vo a thch v tm hng ha.
C 3 chc nng trn u c mt kch bn chung l khi nhn chn mt trong ba chc
nng th chng trnh s tin hnh gi thng tin m vch va chp c trn server,
yu cu server tm cc thng tin hng ha ng vi m vch . Sau khi x l yu
cu server s tr kt qu ny v cho client. Trn client s hin th cc thng tin ny
di dng mt danh sch nh hnh ph lc.

259

Hnh ph lc 188 Mn hnh danh sch hng ha ng vi mt m vch no

Khi nhn chn vo mt dng trn danh sch ta s thc hin chc nng ng vi chc
nng t ln nhn chn bn ngoi mn hnh chp m vch nh sau:
ng vi chc nng thm vo danh sch mua hng: cc thng tin ca
mt hng ha trn danh sch cc hng ha ng vi m vch c chp s
c chuyn sang Mn hnh thm hng ha cn mua. Trong mn hnh ny
ta s c 2 thao tc chnh nh sau:
Nhn nt Thm tin hnh thm thng tin ny vo danh sch
hng ha cn mua. Sau khi chng trnh x l thm xong, ta c
th nhp thm thng tin ca mt hng ha khc na vo danh sch
hng ha cn mua.
Nu ch mun thm mt hng ha v xem lin danh sch cn mua
th ta nhn chn Thm v Xem.

260

Hnh ph lc 189 Mn hnh thm thng tin ca mt hng ha vo danh sch hng ha cn mua

ng vi chc nng thm vo a thch: thng tin hng ha s c lu


thng vo danh sch cc mt hng a thch v Mn hnh danh sch cc mt
hng a thch s c hin th cho ngi dng xem.

Hnh ph lc 190 Mn hnh danh sch cc hng ha a thch

ng vi chc nng tm hng ha: thng tin chi tit ca hng ha s


c hin th ra cho ngi dng xem.

261

Hnh ph lc 191 Mn hnh thng tin chi tit ca mt hng ha

L.4

Thao tc trn mn hnh tm theo danh mc hng ha

Hnh ph lc 192 Mn hnh tm kim theo danh mc hng ha v loi hng ha tng ng

Nhn chn icon

trn mn hnh chnh m ra c mn hnh la

chn danh mc hng ha. Nhn chn mt dng trn Danh mc hng ha s m ln
Mn hnh loi hng ha cha tt c danh sch ca cc loi hng ha ng vi mt
danh mc hng ha no . V d nh trong danh mc hng ha l Thc Phm

262

ng Lnh c cc loi hng ha nh Cc Loi Kem, Cc Loi Lu ng


Lnh
Trn mn hnh la chn loi hng ha, khi nhn chn vo mt dng th
chng trnh s m ra mn hnh danh sch hng ha nm trong mt loi hng ha
no

Hnh ph lc 193 Mn hnh danh sch hng ha

V khi ta nhn vo mt dng trn danh sch hng ha th chng trnh s m ra


mn hnh chi tit ca hng ha .

263

L.5

Thao tc trn mn hnh tm theo chui

Hnh ph lc 194 Mn hnh tm kim hng ha theo chui

Nhn chn icon

trn mn hnh chnh, chng trnh s m ra mn

hnh tm hng ha theo chui gip ngi dng c th tm thy hng ha m mnh
cn tm.
Trong mn hnh ny ngoi tm kim bng chui ta cn c th nhn nt
gi mn hnh chp m vch ly chui m vch qua bn mn hnh tm theo
chui ny thc hin vic tm kim chnh xc hn.
Khi ngi dng in y cc thng tin cn tm th ngi dng nhn nt
yu cu server tm kim cc mt hng no tha mn yu cu tm
kim ca ngi dng v tr v danh sch kt qu cho ngi dng.
Khi ngi dng nhn nt Menu trn my s c thm 2 chc nng ph l:
tr gip v thot chng trnh

Hnh ph lc 195 Menu ca mn hnh tm kim hng ha theo chui

264

Khi ta nhn chn menu Gip chng trnh s m ra mn hnh


gi gip cho ngi dng c th thc hin vic tm kim chnh xc hn.

Hnh ph lc 196 Mn hnh tr gip ngi dng tm kim hiu qu hn

Khi ta nhn chn menu Thot Chng Trnh th s thot ng dng


eSaleShopping.

L.6

Thao tc trn mn hnh tm theo h thng siu th


y l chc nng h tr ngi dng tm kim cc thng tin nh:
Thng tin h thng siu th, siu th.
Bn ch ng n siu th no hay ng i n siu th gn
nht trong mt h thng siu th.
Tm kim hng ha ang c bn ti siu th theo cc tiu ch nh:
tm kim theo m vch, tm kim theo chui, tm kim theo danh mc hng
ha.

L.6.1 Thao tc chnh

Chn biu tng

t mn hnh chnh ta s ti c mn hnh th hin

danh sch cc h thng siu th nh hnh ph lc 197

265

Hnh ph lc 197 Mn hnh tm theo danh sch h thng cc siu th

Tip tc ta chn mt logo ca h thng siu th tng ng, v d nh logo


ca h thng siu th Metro

ta s c mn hnh c th hin danh sch

cc siu th con ca h thng siu th Metro

Hnh ph lc 198 Mn hnh danh sch siu th con ca h thng siu th

266

Khi nhn chn mt siu th trong danh sch cc siu th ta s thy cc chc
nng nh sau:
Thng tin ca siu th c chn.
Ch ng i n siu th.
Tm hng ha ca siu th theo chui.
Tm hng ha ca siu th theo m vch.
Tm hng ha ca siu th theo danh mc.

Hnh ph lc 199 Cc chc nng khi chn vo mt siu th trong mt h thng siu th

L.6.2 Thao tc trn cc chc nng trn mt siu th c chn


L.6.2.1

Thng tin siu th

267

Hnh ph lc 200 Mn hnh thng tin chi tit ca mt siu th

y l chc nng th hin thng tin chi tit ca mt siu th nh tn, a ch,
s in thoi lin h, gi m ca, chng trnh ca siu th, hay cc thng tin h tr
vn chuyn lp t, h tr thanh ton th, thng tin cc my rt tin c ti siu th.
Nhn
Nhn

xem thng tin bn ng i n siu th.


thc hin gi in thoi ti s in thoi ca siu th.
hin th ra vng thng tin khc chc

Nhn vo vng

thng tin ca siu th nh: thng tin h tr vn chuyn lp t


L.6.2.2

Ch ng n siu th

268

Hnh ph lc 201 Mn hnh thng tin bn ng i n siu th

y l chc nng th hin bn ng i n mt siu th v c kt hp


phn ch dn ng i c th.
Nhn vo icon

m ra vng hng dn ch dn ng i c th. Nhn

li icon mt ln na ng li vng hin th ny.


Nhn Menu trn my ta s nhn c menu ca ng dng bn ng i.
nhn chn Ch Xem hin th thm 2 la chn ch xem bn l hnh v
hay hnh v tinh.

Hnh ph lc 202 Menu ca ng dng bn ng i n siu th

L.6.3 Tm hng ha siu th theo chui


y l chc nng tm kim hng ha theo mt chui no . Hng dn cch
thc thao tc trn mn hnh tm kim hng ha tm theo chui c chng ti
trnh by trong phn ph lc L.5.
L.6.4 Tm hng ha siu th theo m vch

269

Khi chn la chc nng ny, chng trnh s chuyn sang Mn hnh chp m
vch nh hng dn phn ph lc L.3.
L.6.5 Tm hng ha siu th theo danh mc

Hnh ph lc 203 Mn hnh tm kim theo danh mc hng ha v loi hng ha tng ng

Khi chn chc nng ny, chng trnh s chuyn sang Mn hnh la chn
danh mc hng ha cho php ngi dng la chn. Phn hng dn thao tc vi
Mn hnh danh mc hng ha c trnh by trong phn ph lc L.4.

L.7

Thao tc qun l danh sch hng ha a thch

Ngi dng nhn chn

t mn hnh chnh m mn hnh danh sch

hng ha a thch. y l mn hnh c chc nng xem danh sch cc mt hng a


thch cng nh xem gi c hin thi ca mn hng u thch no hin ang bn
siu th no, gi c bao nhiu.
Khi ngi dng nhn chn vo mt dng trong danh sch hng ha a thch,
mt vng hin th danh sch cc h thng siu th hin ang bn mt hng s
c cp nht t server v m ra nh hnh ph lc 195. thu vng ny li ta cn
nhn nt

270

Hnh ph lc 204 Mn hnh danh sch cc mt hng a thch

L.8

Thao tc qun l danh sch hng ha cn mua

Ngi dng nhn chn

t mn hnh chnh m ra danh sch hng

ha cn mua. y l mn hnh gip ta qun l c mt hng no mua ri, mt


hng no cn mua thng qua 2 danh sch l Danh sch hng ha cn mua v Danh
sch hng ha c mua.

Hnh ph lc 205 Mn hnh danh sch hng ha cn mua

271

Khi ngi dng ang ng danh sch ny m nhn chn mt hng ha no


th hng ha s c di chuyn qua danh sch cn li.
Ngi dng nhn nt Menu trn thit b s thy c 3 chc nng l:
Thm hng cn mua, Xa hng cn mua, Gi tin hng cn mua.

Hnh ph lc 206 Menu ca mn hnh danh sch hng cn mua

L.8.1 Thao tc thm hng cn mua

Hnh ph lc 207 Mn hnh thm hng ha cn mua

Mn hnh ny gip ngi dng nhp cc thng tin hng ha cn mua. Ngi
dng nu mun ch thm mt hng cn mua v xem danh sch hng cn mua th
nhn nt Thm v Xem, cn nu mun nhp nhiu ln th nhn nt Thm.
L.8.2 Thao tc xa hng cn mua

272

Hnh ph lc 208 Mn hnh xa hng cn mua

Mn hnh ny gip ngi dng xa mt phn hoc xa ht danh sch hng


ha cn mua. Nu mun xa mt mt hng ngi dng nhn chn vo mt dng,
chng trnh s hin ln hp thoi hi li ngi dng c thc s mun xa mt
hng hay khng. Cn ngi dng nu mun xa ton b danh sch th ch cn
nhn nt Xa Ht.

Hnh ph lc 209 Hp thoi hi ngi dng c thc s mun xa mt mt hng no hay khng

L.8.3 Thao tc gi tin nhn hng cn mua

273

Hnh ph lc 210 Mn hnh gi tin nhn hng cn mua

y l chc nng gi tin nhn SMS cho mt ngi no nh h mua gim


cc mt hng c trong danh sch hng ha cn mua. Ngi dng ch vic kim tra
li ni dung tin nhn ln cui v nhn nt gi i.

274

Ph lc M

Cc cu trc, m lnh, ng dng tham

kho c s dng trong ng dng eSaleShopping


M.1 B g Ting Vit IME
ng gp phn khng nh cho ng dng eSaleShopping chnh l ng
dng b g Ting Vit thc hin tm kim thng tin hng ha bng Ting Vit.
Nhm quyt nh l dng b g Ting Vit IME ( c din n tinhte.com
gii thiu gn y - http://www.tinhte.com/threads/192466-Vietnamese-IME-bn1.9-b-g-ting-Vit-u-tin-trn-Android) c th g c Ting Vit trn
Android v phc v cho chc nng tm kim hng ha bng Ting Vit.
B g Ting Vit IME do tc gi Phm Cao Tr pht trin v pht hnh min
ph i vi ngi dng ti a ch http://code.google.com/p/vietnameseime/. Phin
bn mi nht l VietnameseIME-1.9.1 h tr 2 kiu g Ting Vit l VNI v
TELEX rt tt, giao din p. phin bn ny tc gi ci tin, thm mt s tnh
nng mi nh: h tr tt cho cc phin bn Android (t 1.5 n 2.1), chnh rung
khi g phm, chnh m lng khi g phm, c ty chn mu sc bn phm, v chc
nng c sc l h tr t in gi Ting Vit kt hp vi chc nng t to mt t
in gi cho ring ngi dng. Hnh bn di l hnh chp mn hnh gi tin nhn
SMS dng b g Ting Vit IME g ting Vit vi 2 phin bn Android l 1.5 v
2.1.

275

Hnh ph lc 211 Mn hnh s dng b g Ting Vit IME trn Android 1.5 v 2.1

M.2 Chp m vch hng ha (barcode)


Trong ng dng eSaleShopping c chc nng chp m vch ca mt hng
ha bt k, sau ly kt qu m vch phn tch c t hnh chp gm 13 ch s
v tin hnh gi m vch ny ln server yu cu server tr v thng tin hng ha
ng vi m vch .
Trong qu trnh tm hiu tng, cng ngh h tr cho chc nng va
nu, nhm gp nhiu kh khn. Kh khn ln nht l lm sao chp c hnh
nh ca mt m vch c in trn hng ha v phn tch hnh nh ny thnh chui
s c th gi ln cho server yu cu tm kim thng tin hng ha. Vic vit ring
mt chng trnh chp m vch l mt iu khng kh thi. Nhm chuyn sang
tm hiu theo mt hng khc l tch hp cc module chp m vch c cng
b trn mng vo chng trnh eSaleShopping. Sau nhiu ln tm kim gii php
trn mng, nhm tm thy ZXing ("Zebra Crossing") mt project m vi giy
php Apache License 2.0 (http://www.apache.org/licenses/LICENSE-2.0) c
cng b trn Google Code (http://code.google.com/p/zxing/). Khi ti v b m

276

ngun ca ZXing chng ti nhn thy ton b m ngun h tr cho nhiu nn tng,
h iu hnh khc nhau nh RIM, iPhone, Android

Hnh ph lc 212 Ni dung ca mt gi m ngun ZXing

Hnh ph lc 213 M ngun ZXing dnh cho HH Android

Tuy gnh nng chp m vch c gim bt nhng vic p dng


project ZXing ny vo ng dng cng l mt kh khn khng nh do ton b m
ngun c cng b ht sc s. nm bt v ng dng c b m ngun
ny th lng thi gian b ra tm hiu l khng nh. Sau mt hi ln tm gii
php trn mng, nhm chng ti cng tm c mt gii php thay th chnh l
nh chng trnh Barcode Scanner chp phn gii m vch v tr kt qu v cho
277

ng dng eSaleShopping. Barcode Scanner cng do nhm ZXing pht trin (a ch


ti v ng dng http://zxing.googlecode.com/files/BarcodeScanner3.1.apk). Vic
gi thc thi Barcode Scanner ly kt qu m vch c thc hin thng qua gi
Intent

cng

nhm

ZXing

hng

dn

th

ti:

http://code.google.com/p/zxing/wiki/ScanningViaIntent
public Button.OnClickListener mScan = new Button.OnClickListener() {
public void onClick(View v) {
Intent intent = new
Intent("com.google.zxing.client.android.SCAN");
intent.putExtra("SCAN_MODE", "QR_CODE_MODE");
startActivityForResult(intent, 0);
}
};
public void onActivityResult(int requestCode, int resultCode, Intent
intent) {
if (requestCode == 0) {
if (resultCode == RESULT_OK) {
String contents = intent.getStringExtra("SCAN_RESULT");
String format = intent.getStringExtra("SCAN_RESULT_FORMAT");
// Handle successful scan
} else if (resultCode == RESULT_CANCELED) {
// Handle cancel
}
}
}

tin dng hn, nhm chng ti dng lp IntentIntegrator.java v lp


IntentResult.java (cc lp ny c tit k bi cc tc gi: Sean Owen, Fred Lin,
Isaac Potoczny-Jones) thc hin vic gi Intent kch hot chng trnh Barcode
Scanner chp nh m vch v yu cu ly kt qu tr v thng qua cc phng thc
initiateScan()

parseActivityResult()

trn cc Activity gi v nhn kt

qu t chng trnh Barcode Scanner.


Cch gi ng dng Barcode Scanner trn Activity

ManHinhTimTheoMaVach:

vic gi Intent c thc hin thng qua s kin nhn nt c M Vch


// button chp barcode
btnReadBarcode.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
IntentIntegrator.initiateScan(ManHinhTimTheoMaVach.this);
IntentIntegrator.initiateScan(ManHinhTimTheoMaVach.this,

278

"Thng Bo",
"ng ti v chng trnh Barcode Scanner khng?",
"ng ", "Khng");
}
});

Cch thc ly kt qu tr v t ng dng Barcode Scanner:


protected void onActivityResult(int requestCode, int resultCode, Intent
data) {
switch (requestCode) {
case IntentIntegrator.REQUEST_CODE: {
if (resultCode != RESULT_CANCELED) {
IntentResult scanResult =
IntentIntegrator.parseActivityResult(
requestCode, resultCode, data);
if (scanResult != null) {
String upc = scanResult.getContents();
TextView txtBarcodeResult = (TextView)
findViewById(R.id.TextViewBarcodeResult);
txtBarcodeResult.setText("" + upc);
// . . .
break;
}
}

Mt im th v ca 2 lp IntentIntegrator.java v lp IntentResult.java l
khi in thoi khng c sn chng trnh c m vch l Barcode Scanner th s
xut hin thng bo v hi ngi dng c mun ti v ng dng Barcode Scanner
hay khng. Nu ng ti v th chng trnh s tm kim ng dng Barcode
Scanner thng qua Android Market tin hnh ti v ci t ng dng.
Nhm chng ti rt hoan nghnh v cm n cng ng m ngun m cng
nh cc nh lp trnh pht trin v cung cp nhng ng dng, project tht s hay
v c cht lng nh b m m ZXing nh cp trn.

M.3 ng dng bn v v tr
M.3.1 Cc tham s Google Map h tr tm kim ng i

279

Vic Google m rng h tr ch ng i cho Vit Nam l mt iu thun


li cho nhm tch hp phn ch ng i ny vo bn v ch ra ng i ti siu
th gn nht. Thng tin yu cu ng i s c gi ln Google vi cc tham s
theo quy nh (http://mapki.com/wiki/Google_Map_Parameters). Sau khi tnh ton
l trnh ng i, Google s tr ra kt qu l mt tp tin KML c cu trc dng cc
th XML. Ta ch vic phn tch thng tin t tp tin ny c c hng dn ch
ng i t Google.
Sau y l v d mu v yu cu tm ng i t 2 im c kinh v v
bit trc v gi yu cu ln Google tm ng i gia 2 im y:
http://maps.google.com/maps?f=d&hl=en&saddr=10.75896,106.68257&daddr=10.
848731,106.773877&ie=UTF8&0&om=0&output=kml. Vi saddr l thng tin
kinh , v ca im xut pht; dsddr l thng tin kinh , v ca im cn
n.
Ni dung ca mt tp tin KML c tr v t Google
<?xml version="1.0" encoding="UTF-8"?><kml
xmlns="http://earth.google.com/kml/2.0"><Document><name>Nguyn Tri to
Unknown road</name><Style
id="roadStyle"><LineStyle><color>7fcf0064</color><width>6</width></LineSt
yle></Style><Snippet><![CDATA[<font size=+1><a
href="http://maps.google.com/maps?f=d&hl=en&saddr=10.75896,106.68257&dadd
r=10.848731,106.773877&ie=UTF8&om=0">Printable
view</a></font>]]></Snippet><Placemark><name>Head east on Nguyn Tri
toward Nguyen Bieu</name><description><![CDATA[go
0.2&#160;km]]></description><address>Nguyn
Tri</address><StyleMap><Pair><key>normal</key><Style><IconStyle><Icon><h
ref>http://maps.gstatic.com/intl/en_ALL/mapfiles/kml/paddle/go.png</href>
</Icon><hotSpot x="0.500000" y="0.000000" xunits="fraction"
yunits="fraction"
/></IconStyle><ListStyle><ItemIcon><href>http://maps.gstatic.com/intl/en_
ALL/mapfiles/kml/paddle/go-lv.png</href> . . .

M.3.2 Th hin ng i trn bn Google Map


Nhm tham kho v p dng bi vit ch dn v ng i ln bn
GoogleMap l: Android - Driving Direction (Route Path) ti a ch http://csietw.blogspot.com/2009/06/android-driving-direction-route-path.html hin thc
ha chc nng ch ng i n siu th.

280

Hnh ph lc 214 ng dng v ng i trn bn Google Map trong eSaleShopping

Nhm tham kho 2 lp l Direction.java (truyn tham s ln Google) v


MyOverlay.java (v ng i trn bn ) p dng vo ng dng
eSaleShopping. Bn cnh tham kho 2 lp ny, nhm tin hnh x l li thut
ton c tp tin KML c th ly v cng nh tnh ton ra ng i ngn nht n
mt siu th gn nht.
M.3.3 Cch thc tm v tr thit b thng qua GPS hoc mng
chng trnh c th xc nh c v tr hin ti nhm tham kho bi
vit Android Examples - Using Location API, c vit bi tc gi Marko
Gargenta ti a ch http://marakana.com/forums/android/android_examples/42.html
v

ngun

tham

kho

ca

bi

vit

ti

ch

http://marakana.com/static/tutorials/LocationDemo.zip
ng thi nhm cng c tham kho bi vit ca thnh vin c nickname l
jagtap.jj1 trn din n anddev.org vi phn bi vit l app with GPS-enable but
the

device

is

indoor

(http://www.anddev.org/app_with_gps-

enable_but_the_device_is_indoor-t8997.html)

281

tham

kho

phng:

startLocationReceiving(), stopLocationReceiving()

cho vic khi ng hay

dng cc thit b nhn tn hiu xc nh v tr hin ti.

M.4 ng dng EndlessList


Khi nim EndlessList c chng ti trnh by trong ph lc J. phn
ny chng ti ch trnh by 2 gii php tiu biu m chng ti c dp tham kho v
p dng vo ng dng eSaleShopping.
M.4.1 Gii php ca M.Murphy
Mark Murphy hin lm vic cho Commons Ware, email lin h:
mmurphy@commonsware.com
Tc gi c cung cp sn m ngun cng nh hng dn s dng project
CWAC EndlessAdapter ti a ch http://github.com/commonsguy/cwac-endless.
Nhm c dp dng v ng dng EndlessAdapter ca M.Murphy vo bi ton
EndlessList. Vic ng dng EndlessList vo tuy gii quyt c vn d ca
EndlessList nhng bn cnh EndlessAdapter cn tn ti mt li nh l vng
trn xoay th hin tin trnh download d liu mi t server gn thm vo
ListView hin th b li. Chng hin th khng c kim sot trn mn hnh
ListView. Do m ngun ca ng dng c tc gi ng gi thnh mt tp tin .jar
nn nhm chng ti khng th hiu chnh li li ny nn tin hnh tm kim gii
php khc cho vn EndlessList. Hnh bn di th hin ng dng chy ca
EndlessAdapter v bug li ca n.

282

Hnh ph lc 215 Hnh minh ha v bug li ca EndlessAdapter

M.4.2 Gii php ca Evan Charlton


Tc gi Evan Charlton hin l sinh vin nm 4 ca hc vin cng ngh
Rochester (http://evancharlton.com/about/). Trong bi vit cng b trn mng ca
tc gi (http://evancharlton.com/thoughts/lazy-loading-images-in-a-listview/) nhm
thy y l mt ngun tham kho rt hu ch. ng dng Magnatune
(http://evancharlton.com/projects/magnatune/downloads/) ca tc gi khng nhng
gii quyt rt tt vn ca EndlessList ng thi cng c cch gii quyt vic
download hnh nh minh ha v my mt cch linh hot v uyn chuyn. ng dng
Magnatune s ti v my thng tin (chui k t) tn cc bi ht, album, thng tin
nhc s ca s t server v hin th trc trn ListView v hnh nh s c download
v ti th nh v khi download c hnh no th s hin th ln trn ListView ngay
sau nh hnh minh ha bn di.
Nhm chng ti dng li cc hm thit k ca tc gi phc v cho ng
dng eSaleShopping l:

283

Dng

li

cc

lp

HTTPQueue.java,

HTTPThread.java,

RemoteImageView.java: phc v cho vic chy ngm ti hnh nh t server


v di dng danh sch hng i dng Thread.
Hiu chnh lp MagnatuneAPI.java nhng c chnh sa li cho ph
hp phc v vic lu vt th mc tm lu tr hnh nh t server v.
Hiu chnh lp LazyAdapter.java phc v hin th mt item trn
ListView.
Hiu chnh lp LazyActivity.java, y l lp m nhm tham kho k
nht v thc hin vit li mt s tnh nng cho ph hp v trong lp ny cha
gii php gii quyt vn ca EndlessList cc k hiu qu l dng Task
khng ng b. Vn dng Task khng ng b c nhm trnh by
ti ph lc J.

Hnh ph lc 216 Hnh minh ha ca ng dng Magnatune

M.5 M ngun android-misc-widgets


y l mt project c vit bi tc gi c nickname l pskink
(http://code.google.com/u/pskink/) c ng ti trn Google Code ti a ch

284

http://code.google.com/p/android-misc-widgets/. y l mt project cha mt lot


cc hiu ng chuyn ng (animation) v widget mi rt tin dng v hu ch.
Nhm chng ti p dng mt s lp, thit k trong projec android-misc-widget
lm phong ph thm cho ng dng eSaleShopping.
M.5.1 Hiu ng hot cnh
Nhm chng ti dng li ht cc lp to hiu ng chuyn ng vo ng
dng eSaleShopping. l cc ng vi hnh minh ha bn di.

Hnh ph lc 217 Cc lp to hiu ng chuyn ng c dng li trong ng dng eSaleShopping

M.5.2 Cc widget mi
Nhm dng li 2 widget mi c tn l Panel v Switcher lm cho
ng dng eSaleShopping thm phn phong ph hn.

285

Hnh ph lc 218 ng dng Panel to khung ch ng i trn bn trong eSaleShopping

Hnh ph lc 219 ng dng Switcher to la chn hnh thc bn hng trong eSaleShopping

286

You might also like