Você está na página 1de 18

andbook Android Programing (Vietnamese version anhtn.bk@gmail.

com)

powered by anddev.org Page 1

Li ni u / c ti liu ny th no
Ti liu ny c vit cho cc nh pht trin lm vic vi cc ng dng J ava
trc v mun bt u vi nn tng Android. Ti c gng to ra n nh l mt
cun s tay, lu gi cc on m v d mi ni m n ph hp. Ngoi ra, ti cng
c gng chn nhiu cc hnh nh nh c th bi chng lm cho qu trnh hc tp
tr nn sng ng v th gin mt ca ngi c.
Nhng tht khng may, lp trnh khng phi l tt c; c mt s th c bn ca nn
tng Android cn phi hc c th hiu mt cch y . y l nhng g s c
m t trong nhng trang u tin ca ti liu ny. Thc s th khng cn thit phi
c tt c cc trang trong ti liu ny, tuy nhin n kh l li ch. Bn c th dng
n nh mt kiu ti liu tham kho. Nhng g bn s c trong cng c gii
thch khi chng xut hin trong qu trnh tin trnh thc thi thc t (hands-on
process).
Tt c cc on m bn thy trong ti liu ny (bao gm c cc workspace ca
chng) c th c ly ti: http://andbook.anddev.org/sources/
Gii thiu
Open Handset Alliance pht hnh Google Android SDK vo ngy 12/11/2007, mt
vi tun sau khi gii thiu v n. S kin ny gy nn mt tc ng khng th tin
ni, hu nh mi trang tin tc v IT u b ln t bi cc thng tin v vic pht hnh
SDK Google Group trn ngp vi trn 2000 thng ip ch trong hai ngy u
tin.
tng ca nn tng Android v vn lm sng st mi ngi v cc kha hc
vn thu ht nhiu hn v nhiu hn na cc lp trnh vin mi ngy. c bit, kin
trc m da trn Intents v kh nng thay th ngay c cc Home-application (cc
ng dng mc nh cho cc tc v chnh ca h iu hnh) to ra mt nn tng thc
s mm do.
Android l g mt GPhone ?
Mt vi tun v vi thng trc khi Google pht hnh Android SDK c rt nhiu tin
n v mt th c gi l GPhone. N ni v mt thit b c ch to bi Google
cung cp tnh nng lin lc min ph bng cch hin th cc ni dung qung co ph
thuc vo tng hon cnh ti ngi dng trn chnh thit b.
Nhng vo 5/11/2007 Andy Rubin (trng nhm pht trin Android) ni rng :
Nn tng Android c tham vng v gi tr hn nhiu mt chic in thoi.
Google vi Open Handset Alliance (OHA) to ra mt h thng phn mm hon
chnh cho cc thit b di ng: mt h iu hnh, thnh phn giao tip phn cng v
cc ng dng di ng. Nhng g c cng b mt vi tun sau cha phi l sn
phm cui cng, nhng vi First Look SDK c nhiu th cha c thc hin.
Cc trang tin tc chnh a tin v s kh chu ca mt vi nh pht trin ni rng
Android c qu nhiu bug v thiu cc ti liu tham kho (documentation). Nhng
hu ht ni rng Android khng c nhiu bug hn cc nn tng phn mm khc
mc ny.
Android from above
Cng nhn nhn v cc c im m OHA lm ni bt trn tng Android:
Tnh m
Android c xy dng t di ln cho php nh pht trin to ra cc ng
dng di ng hp dn mang y cc li ch ca mt thit b cm tay. N c
xy dng hon ton m. V d, mt ng dng c th gi ti mt vi chc nng c
bn ca in thoi nh thc hin cc cuc gi, gi tin nhn vn bn, hoc s dng
camera, cho php nh pht trin to ra cc ng dng phong ph cho ngi dng.
iu ny l ng, l mt nh pht trin bn c th lm mi th, t gi mt tin nhn
ngn gn vi 2 dng code ti thay th c hnh nn giao din chnh ca thit b ca
bn. C th d dng to ra mt h iu hnh hon ton ty bin trong mt vi tun,
cung cp nhng tnh nng m cc ng dng mc nh ca Google khng c ti
ngi dng.
Android c xy dng da trn nhn Linux. Ngoi ra, n s dng mt my o
ring c thit k ti u ha vic s dng b nh v cc ti nguyn phn cng
trn mi trng di ng. Android l m ngun m, n c th c ty m rng
thm vo cc cng ngh mi. Nn tng ny s cn tip tc pht trin cng vi cc
nh pht trin xy dng nn cc ng dng di ng sng to, mi m hn.
y, Google ang ni v ci c gi l my o Dalvik (DalvikVM), y l mt
my o register-based, c thit k bi Dan Bornstein v cc k s khc ca
Google, mt thnh phn rt quan trng ca nn tng Android. Ni cch khc,
register-based m chng ta ni u l khc so vi my o Java thng thng
(trn cc h thng Windows, Linux ca Sun).
Tt c cc ng dng c to ra ging nhau
Android khng c s khc nhau gia cc ng dng c bn ca in thoi (phones
core apps) v cc ng dng ca bn th ba. Tt c chng u c xy dng
truy cp theo cch thc ging nhau ti cc tnh nng ca in thoi cung cp
cho ngi dng mt di cc ng dng v dch v phong ph. Vi cc thit b c
xy dng trn nn tng Android, ngi dng c ton quyn ty chnh in thoi cho
ph hp s thch ca h. H c th thay i hnh nn, cch hin th b quay s hoc
mt vi ng dng. Thm ch h c th ci t in thoi s dng ng dng xem
nh yu thch ca chnh h hin th cho tt c cc bc nh thay cho ng dng
mc nh ca h iu hnh.
Mt ln na, tt c iu ny l ng. Cc nh pht trin c th ty chnh 100% cc
thit b Android. H thng lin lc ca Android c bn da trn ci c gi l
Intents, c th nhiu hoc t hn mt mt hnh ng cn c x l. Mt v d cho
iu ny l:
android.provider.Telephony.SMS_RECEIVED
One can simply listen on that Intent by writing about 5 lines of definitions
(khng hiu phi dch th no ? :D). H thng sau s nhn ra rng c nhiu hn
mt ng dng mun x l Intent ny v ngh ngi dng la chn mt th m
anh ta hoc c ta s thch x l Intent.
Ph v cc ro cn ng dng
Android ph v cc ro cn xy dng cc ng dng mi v sng to. V d,
mt nh pht trin c th kt hp thng tin t trang web vi d liu trn mt thit b
di ng nh danh b ngi dng, lch, hoc v tr a l cung cp cc kinh
nghim chnh xc hn ti ngi dng. Vi Android, mt nh pht trin c th xy
dng mt ng dng cho php ngi dng xem v tr ca bn b h v thng bo khi
h trong cc vng ln cn c c hi gp nhau.
Nhanh chng v d dng pht trin ng dng
Android cung cp mt lng ln cc th vin v cng c hu ch c th c s
dng xy dng cc ng dng phong ph. V d, Android cho php nh pht trin
ly thng tin v a im ca thit b, v cho php thit b giao tip vi mt peer-to-
peer social applications. Ngoi ra, Android cng bao gm mt tp cc cng c
c xy dng t nn tng cung cp cho cc nh pht trin kh nng can thip
su vo h thng, to ra cc ng dng c hiu sut cao.
Kh Web 2.0 pht trin, vic to ra cc ng dng vi ni dung phong ph trong vng
vi pht l iu hon ton c th. Android mang ti s pht trin vi mt tc
khng tng. Cng xem xt mt v d:
Mt ngy no ti tnh c bit n ng dng Buzzword DrivingDirections
trong Android Documentation. Qu trnh pht trin ng dng trong bc nh (xem
ti liu gc) mt khong 1 gi (bao gm c giao din ngi dng n gin v tt
c cc bc nh m bn thy). C th to ra mt ng dng phc tp nh th ny trn
mt nn tng di ng khc ? Khng.
Ngoi ra ng dng ny cng c th c ci tin vi v tr GPS hin ti ca thit b
bng cch x l mt vi dng code.
Google lm ni bt sc mnh ca Android trong vic cung cp dch v nh v.
Google Maps hon ton mt m trn Android nh th n c pht trin cho
chnh Android. N c th hon ton h tr phng to v cho php ko th bn
bng cch thm ba k t trong on m J ava ca ng dng Android mc nh v ba
dng trong m XML.
Mt c tnh th v khc d dng c s dng vi Android l Animations v trnh
chiu a phng tin. T phin bn m5, Android SDK cha cc hm cho php pht
cc d liu nh dng GeoCoding, sau m rng cho mp3, ogg-Vorbis, MIDI v
mt s nh dng khc.
Dalvik.equals(Java) == false
Ti sao l Dalvik ? My o Dalvik c t bi Bornstein theo tn mt lng chi
Iceland, ni t tin ca ng sng.
Nh bn bit phn u, Dalvik l tn ca my o Android. N ch l mt my
o thng dch thc thi cc file nh dng thc thi ca Dalvik (Dalvik Executable -
*.dex), mt nh dng c ti u ha cho lu tr v s dng b nh hiu qu. y
l mt my o register-based, v n c th chy cc class c bin dch bi mt
trnh bin dich J ava c chuyn thnh nh dng tng thch vi n bi cng c
dx. My o chy mc trn cng ca nhn Linux 2.6 v da trn cc chc nng
pha di ca h thng (ging nh lung v trnh qun l b nh mc thp).
DalvikVM cng c ti u ha chy a th hin vi mt very low memory-
footprint. Mt vi my o cung cp c ch bo v cc ng dng ca chng khng b
nh hng bi mt ng dng gp li khc.
S khc bit vi my o Java thng thng
My o J ava c th tm thy trn hu ht cc my tnh ngy nay l stack-based VM.
DalvikVM th khc, l mt register-based, bi v mt vi x l di ng c ti u
ha cho thao tc register-based. My o register-based cng cho php thi gian thc
thi nhanh hn.
The Android Code Challenge (ADC)
The ADC l mt tng ca Google khuyn khch cng ng xy dng cc ng
dng hp dn cho nn tng Android bng cch trao gii cho 50 ng dng thu ht
nhiu nht.
Tt nhin, ADC vi hn 10 triu la tin thng ca n thc s hp dn vi cc
nh pht trin phn mm to ra cc ng dng thc s hu ch.
To ra cc ng dng Android
Trong chng ny chng ta s tm hiu cch to ra mt ng dng Android.
Gii phu mt ng dng Android
C bn thnh phn trong vic xy dng mt ng dng Android:
- Activity
- Intent Receiver
- Service
- Content Provider
Khng phi mi ng dng u cn c bn phn trn, nhng ng dng ca bn s
vit s l s kt hp ca mt vi phn trong chng.
Mt khi bn quyt nh c cc thnh phn bn cn cho ng dng ca mnh,
bn nn lit k chng trong mt file gi l AndroidManifest.xml. y l mt file
XML ni bn khai bo cc thnh phn ca ng dng v cc tnh nng v cc yu
cu ca chng. Chng ta s sm cp ti nhng g m AndroidManifest.xml chu
trch nhim.
Activity
Activities l thnh phn thng s dng nht trong bn thnh phn xy dng ng
dng Android. Mt activity thng thng l mt screen trong ng dng ca bn.
Mi activity c thc thi bi mt lp k tha t lp c s Activity. Lp ca bn s
hin th mt giao din ngi dng bao gm cc View v cc trnh p ng s kin.
Hu ht cc ng dng cha nhiu cc screen. V d, mt ng dng tin nhn vn bn
c th c mt screen hin th danh sch cc ti khon gi tin nhn i, v mt
screen th hai vit tin nhn ti ti khon c chn, v mt screen khc
hin th cc tin nhn c hoc thay i cc ci t. Mi mt screen s c ci t
nh l mt activity. Di chuyn sang screen khc thc cht l bt u mt activity
mi. Trong mt vi trng hp mt Activity c th tr v mt gi tr ti mt
activity trc v d l mt activity cho php ngi dng chn mt bc nh s
tr v bc nh c chn ti ngi gi.
Khi mt screen mi c m ra, screen trc c tm dng v a vo trong
history stack. Ngi dng c th di chuyn ngc li ti screen trc c m
trong lch s. Cc screen cng c th chn xa hn khi history stack khi n khng
cn ph hp khi chng tr li. Android ghi nh li cc history stack cho mi ng
dng c np t mn hnh chnh.
Intent v Intent Filters
Android s dng mt lp c bit gi l Intent di chuyn t screen ny sang
screen khc. Intent m t ci m mt ng dng mun lm. Hai thnh phn quan
trng nht ca ca mt cu trc d liu intent l hnh ng v d liu. Cc gi tr
c trng cho hnh ng l MAIN, VIEW, PICK, EDIT D liu c lu gi
di dng mt URI. V d, hin th mt website trong mt trnh duyt, bn c th
to ra mt Intent vi hnh ng VIEW v tp d liu ti Website-URI.
New Intent(android.content.Intent.VIEW_ACTION,
ContentURI.create(http://anddev.org));
C mt lp lin kt gi l IntentFilter. Trong khi mt intent l c tc dng nh l
mt yu cu lm mt cng vic g , mt intent filter l mt m t ca ci m
intents ca mt activity c kh nng x l. Mt activity hin th thng tin lin lc
cho mt ngi s cng b mt IntentFilter ni rng n bit lm th no x l
hnh ng VIEW khi nhn c d liu m t v ngi . Cc activity cng b
cc IntentFilter ca chng trong AndroidManifest.xml file.
Di chuyn gia cc screen l hon ton ph thuc vo vic gii quyt cc intent.
di chuyn tin, mt activity gi startActivity(myIntent). H thng sau s tm kim
intent filter cho tt c cc ng dng c ci t v chn ly activity m intent
filter ca n ph hp nht vi myIntent. Activity mi c thng bo v ni dung
ca intent, l nguyn nhn m n c a ra. Trnh gii quyt cc intent xut hin
thi im chy khi startActivity c gi, n c hai li ch:
- Cc activity c th ti s dng cc chc nng t mt thnh phn khc n
gin bng cch to ra mt yu cu trong form ca mt Intent.
- Cc activity c th c thay th bt k lc no bi mt Activity mi vi
mt IntentFilter tng ng.
Intent Receiver
Bn c th s dng IntentReceiver khi bn mun on m trong ng dng ca mnh
c thc hin phn ng li mt s kin t bn ngoi, v d, khi chung in
thoi ku, hoc khi d liu trn mng c nhn, hoc vo lc na m. Intent
receiver khng hin th mt UI, mc d chng cng c th hin th mt Notification
thng bo cho ngi dng nu mt vi th xut hin. Intent receiver cng c
ng k trong AndroidManifest.xml, nhng bn cng c th ng k chung t code
s dng Context.registerReceiver(). ng dng ca bn khng cn thit phi ang
chy intent receiver ca n c gi; h thng s khi ng ng dng ca bn,
nu cn, khi mt intent receiver c kch hot. Cc ng dng cng c th gi
qung b intent ca chnh chng ti cc ng dng khc vi
Content.broadcastIntent().
Service
Mt Service l mt on m long-lived v chy m khng cn c mt UI. Mt v d
tt v service l mt media player ang pht cc bi ht t mt playlist. Trong mt
ng dng media player, hu nh chc chn s c mt hoc nhiu cc activity cho
php ngi dng chn cc bi ht v pht chng. Tuy nhin, music playback bn
thn chng khng nn c x l bi mt activity bi v ngi dng s mong mun
l bi nhc s tip tc c pht ngay c khi chuyn sang mt screen mi. Trong
trng hp ny, media player activity c th bt u mt service s dng
Context.startService() chy ngm v gi cho bi ht c pht lin mch. H
thng s gi cho music playback service chy cho ti n hon thnh (bn c th hc
thm v quyn u tin cho cc service trong h thng bng cch c Life Cycle of
an Android Application). Ch l bn c th cn kt ni ti mt service (v bt u
n nu n cha c bt u) vi phng thc Context.bindService(). Khi kt ni
ti mt service, bn c th giao tip vi n thng qua mt giao din c cung cp
bi service. V d vi music service, giao din s cho php bn tm dng, tip
tc pht bi ht
Content Provider
Cc ng dng c th cha cc d liu ca chng trong cc file, mt CSDL SQL thu
gn, hoc mt vi c ch khc. Tuy nhin, mt content provider li rt hu dng
nu bn mun d liu trong ng dng ca mnh c th c chia s vi ng dng
khc. Mt content provider l mt lp thc thi mt tp cc phng thc chun cho
php cc ng dng khc lu tr v ly ra cc kiu ca d liu c x l bi
content provider ny.
Android User Interface
UI trong Android c th c xy dng theo hai cch, nh ngha m XML hoc
vit m J ava. nh ngha cu trc giao din trong XML l c khuyn co bi v
n tun theo m hnh Model-View-Control quy nh rng giao din lun nn c
tch ri vi cc phn chng trnh logic. Ngoi ra, vi m XML vic p ng giao
din ca mt chng trnh vi cc mn hnh phn gii khc nhau l d dng hn
nhiu.
nh ngha mt UI trong XML l rt n gin nh to mt ti liu HTML thng
thng. Hy xem mt Androids XML-Layouts. Mi thnh phn u c cu trc
cht ch v c th c m rng theo cu trc cy:
<?xml ver si on="1. 0" encodi ng=" ut f - 8" ?>
<Li near Layout
xml ns: andr oi d="ht t p: / / schemas. andr oi d. com/ apk/ r es/ andr oi d"
andr oi d: or i ent at i on="ver t i cal "
andr oi d: l ayout _wi dt h=" f i l l _par ent "
andr oi d: l ayout _hei ght =" f i l l _par ent " >
<Text Vi ew
andr oi d: l ayout _wi dt h=" wr ap_cont ent "
andr oi d: l ayout _hei ght ="wr ap_cont ent "
andr oi d: t ext =" Hel l o Wor l d" / >
</ Li near Layout >
Cu trc phn cp ca cc thnh phn Screen
Thnh phn thc thi c bn ca mt ng dng Android l cc activity mt i
tng ca lp android.app.Activity. Mt activity c th lm nhiu th, nhng bn
thn chng khng c s hin din trn screen. lm cho cc activity ca bn c
mt screen presence (s hin din trn mn hnh) v thit kt giao din cho n, bn
cn lm vic vi cc view v viewgroups thnh phn c bn ca giao din ngi
dng c s dng trong Android.
Views
Mt view l mt i tng k tha t lp c s android.view.View. N l mt cu
trc d liu m cc thuc tnh cha layout v ni dung cho mt vng hnh ch nht
xc nh trn mn hnh. Mt i tng View x l measuring, layout, drawing, thay
i focus, scrolling v cc hnh ng tc ng ln vng mn hnh m n biu din.
Lp View cng c dng nh l mt lp c s cho tt c cc widget mt tp cc
lp con c thc thi y v cc thnh phn tng tc mn hnh. Cc Widget
x l measuring v drawing ca chnh chng, bn c th s dng chng xy
dng giao din ca bn nhanh hn. Danh sch cc widget c th s dng nh:
TextView, EditText, Button, RadioButton, Checkbox, ScrollView,
Viewgroups
Mt viewgroup l mt i tng ca lp android.view.Viewgroup. Ging nh tn
ca n ch ra, mt viewgroup l mt kiu c bit ca mt i tng view m
chc nng ca n l cha v qun l mt tp cc view v viewgroup con,
Viewgroup cho php bn thm kt cu cho giao din ca bn v xy dng cc thnh
phn screen phc tp nh l mt thc th n.
Lp Viewgroup cng l lp c s cho cc layout, mt tp cc lp con c thc thi
y cung cp cc kiu b tr mn hnh thng thng nht. Cc layout mang
ti cho bn mt cch xy dng mt cu trc cho mt tp cc view.
A Tree-Structured UI
Trn nn tng Android, bn nh ngha mt giao din ngi dng ca Activity s
dng mt cy ca cc nt l cc view v viewgroup, nh hin th trong s di
y. Cy ny c th n gin hay phc tp ty vo nhng g bn cn to ra n,
v bn c th xy dng n s dng tp cc widget v layout c xy dng sn ca
Android hoc cc kiu view ty chnh do chnh bn to ra.

gn mt cy hin th ti mt screen, Activity ca bn gi phng thc
setContentView() ca n v a vo mt tham chiu ti i tng nt gc ca
cy. Mt khi h thng Android tham chiu ti i tng nt gc, n c th lm
vic trc tip vi cc nt lm v cc hin th c th ca cy. Khi Activity ca bn
c kch hot v nhn c focus, h thng thng bo ti activity ca bn v yu
cu nt gc nh gi v v cy. Nt gc sau yu cu cc nt con ca n t v
chng ln lt, mi nt viewgroup trong cy l chu trch nhim vic v ca cc nt
con trc tip ca n.
Nh nhc ti phn trc, mi view group chu trch nhim nh gi vng
trng cho php ca n, cc layout ca con n, v gi ti draw() trn mi con cho
php n t v. Nt con c th yu cu v kch thc v v tr ca n trong cha,
nhng i tng s c quyt nh cui cng v kch thc ca con ti mi v tr.
So snh cc thnh phn giao din ca Android v Java Swing
Mt vi nh pht trin c ti liu ny tng lm vic vi cc thnh phn giao
din Swing trc y a ra mt vi s ging nhau gia Android v J ava Swing:
- Cc Activity trong Android l gn ging vi JFrame trong Swing
- Views v J Component
- TextViews v J Label
- EditTexts v J TextField
- Button v JButton
Thit lp b lng nghe s kin ti mt View l kh ging nhau gia Android v
Swing:
/ / Andr oi d
myVi ew. set OnCl i ckLi st ener ( new OnCl i ckLi st ener ( ) { . . .
/ / Swi ng
myBut t on. addAct i onLi st ener ( new Act i onLi st ener ( ) {. . .

File AndroidManifest.xml
AndroidManifest.xml l mt file cn thit cho mi ng dng Android. N cha
trong th mc root ca ng dng, v m t cc gi tr ton cc cho cc package
ca bn, bao gm cc thnh phn ng dng (activity, service, etc) m package
cng khai vi bn ngoi, kiu ca d liu cho mi Activity c th x l, v lm
th no chng c th c kch hot.
Mt iu quan trng khi cp ti file ny l cc IntentFilter ca n. Cc b lc
m t ni no v khi no activity c th c bt u. Khi mt acivity (hoc h
iu hnh) mun thc thi mt hnh ng nh l m mt trang Web hoc m mt
mn hnh la chn danh b, n to ra mt i tng Intent. i tng intent ny
c th gi mt s thng tin m t nhng g bn mun lm, nhng d liu g cn
thit hon thnh n vi mt s t thng tin khc. Android so snh thng tin
trong mt i tng Intent vi nhng g intent filter cng b bi mi ng
dng v tm kim activity thch hp nht x l d liu hoc thc thi mt hnh
ng c bit bi ngi gi. Nu c nhiu hn mt ng dng c kh nng x l
Intent ny, ngi dng s nhn c mt ngh la chn ng dng m anh ta
mun s dng x l.
Ngoi ra, file ny cng m t cc Activity, Content Provider, Service, Intent
Receiver, bn cng c th xc nh quyn hn trong AndroidManifest.xml. Mt
file AndroidManifest.xml n gin c dng nh sau :

- Hu nh mi file AndroidManifest.xml s cha m t v khng gian tn
(namespace) (xmlns:android=http://schemas.android.com/apk/res/android)
trong thnh phn u tin ca n. M t ny cho php s dng mt lot cc
thuc tnh (cc attribute trong XML element) chun a dng ca Android, l
nhng thuc tnh hu ch c s dng cung cp d liu cho hu ht cc
thnh phn trong file ny.
- Hu ht mi manifest cng bao gm mt tag <application>cha mt vi tag
m t v Application, IntentReceiver, etc c s dng trong ng dng
ny.
- Nu bn mun to ra mt Acitivity cho php kch hot trc tip thng qua
ngi dng, bn s cn phi n h tr mt MAIN action v LAUNCHER
category. Kt qu nh hnh :


Sau y l danh sch chi tit v cu trc ca mt tp tin AndroidManifest.xml, m
t tt c cc <tags>c sn, vi cc v d tng ng:
<manifest>
y l nt gc ca mi file AndroidManifest.xml. N cha thuc tnh gi (package-
attribute), ch ti mt vi package pha ngoi Activity. Cc ng dn cho cc
Activity s l ng dn tng i da trn gi tr package-attribute ny.
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.anddev.android.smstretcher">
<user-permission>
M t mt s cho php bo mt m package ca bn cn phi c cp cho php
n hot ng mt cch chnh xc (v d nh khi bn mun gi SMS hoc s dng
danh b in thoi). Cc quyn hn c cp bi ngi dng trong sut qu trnh
ci t ng dng ca bn.
<uses-permission android:name=" android.permission.RECEIVE_SMS"/>
<permission>
M t mt s cho php bo mt c th c s dng hn ch cc ng dng c
th truy cp vo cc thnh phn v cc tnh nng trong package ca bn (hoc
khc). S lng: 0
+
<instrumentation>
M t m ca mt thnh phn thit b c sn kim tra cc tnh nng ca gi ny
hoc gi khc. S lng: 0
+

<application>
Thnh phn gc cha cc m t ca cc thnh phn mc ng dng cha trong
package. Thnh phn ny cng c th bao gm cc thuc tnh ton cc v/hoc cc
thnh phn mc nh ca ng dng nh label, icon, theme, quyn hn cn c, etc.
S lng: 0 hoc 1
<application android:icon="@drawable/icon">
Bn c th c 0
+
cho mi thnh phn con sau y :
<activity>
Activity l thnh phn chnh ca mt ng dng tng tc vi ngi dng. Mn
hnh ban u ngi dng nhn thy khi kch hot mt ng dng l mt activity, v
hu ht cc mn hnh khc h s dng s c ci t l cc activity ring bit c
m t vi cc tag activity
<activity android:name=".Welcome" android:label="@string/app_name">
Ch : mi activity phi c mt <activity> tag trong manifest cho d l n s c
cng khai vi th gii bn ngoi hay ch c nh s dng trong package ca n.
Nu mt Activity khng c tag tng ng trong manifest, bn s khng th kch hot
hay s dng n.
Ty chn, h tr tm kim mun vo thi gian chy, bn c th thm 1
+
thnh
phn <intent-filter> m t cc action m activity h tr
<intent-filter>
M t mt kiu Intent m mt component h tr. Cc gi tr kiu khc nhau
c th c xc nh di thnh phn ny, cc thuc tnh c th c ly t
y cung cp duy nht mt label, icon, hoc thng tin khc cho hnh ng
c m t.
<action>
Mt kiu action m component h tr. V d:
<action android:name="android.intent.action.MAIN" />
<category>
Mt kiu category cc component h tr. V d:
<category android:name="android.intent.category.LAUNCHER" />
<data>
Mt kiu MIME (xem MIME-header trn Internet bit thm), URI
scheme, URI authority hoc URI path m cc component h tr.
Bn cng c th thm 1
+
thnh phn meta-data trong activity ca bn:
<meta-data>
Thm mt mnh thng tin d liu cho activity cc client c th ly v
thng qua ComponentInfo.metaData (gn ging metadata trong cc HTML
document).
<receiver>
Mt IntentReceiver cho php mt ng dng lng nghe v nhng s thay i trn d
liu hoc cc hnh ng xy ra, ngay c khi n ang khng chy. Ging nh vi
activity tag, bn c th ty chn thm 1
+
thnh phn <intent-filter>m receiver h
tr hoc cc gi tr <meta-data>, chng c ngha tng t nh vi khi t trong
<activity>.
<receiver android:name=".SMSReceiver">
<service>
Mt Service l mt thnh phn c th chy ngm trong mt khong thi gian. Ging
nh vi cc activity tag, bn c th ty chn thm mt hoc nhiu cc thnh phn
<intent-filter>m service h tr hoc cc gi tr <meta-data>.
<provider>
Mt ContentProvider l mt thnh phn qun l bo m ton vn d liu v xut
bn cho php cc ng dng khc truy cp ti chng. Bn cng c th ty chn thm
mt hoc nhiu cc gi tr <meta-data>ging nh trn.
D nhin, mi mt tag trn s cn c mt tag ng </closed> hoc ng trc tip
<directly/>.

Resources and the magic R.java
Cc ti nguyn ca mt d n v file R.java c quan h rt cht ch vi nhau.
Cc ti nguyn (Resources)
Cc ti nguyn l cc file m rng (khng phi cc file m ngun) c s dng bi
cc on m ng dng ca bn v c bin dch vo trong ng dng giai on
bin dch. Android h tr mt s lng cc kiu file khc nhau bao gm: XML,
PNG v JPEG file. Cc file XML c rt nhiu nh dng khc nhau ty thuc vo
ci m chng m t.
Cc ti nguyn nm ngoi m ngun, v cc file XML c bin dch thnh dng
nh phn, nh dng cho php np nhanh chng tng hiu sut. Cc chui cng
c nn thnh mt dng s dng hiu qu hn.
Danh sch cc ti nguyn
Cc kiu ti nguyn v ni m chng c t:
- Cc file lay-out ->/res/layout/
- Images ->/res/drawable/
- Animations ->/res/anim/
- Styles, strings, arrays -> /res/values/ : c nh ngha bi cc file XML
- Raw file nh mp3 hoc video ->/res/raw/
S dng cc ti nguyn trong code:
S dng cc ti nguyn trong code ch l vn cn phi bit c mt tham chiu
y ti ID ca ti nguyn v kiu i tng m ti nguyn ca bn c bin
dch. y l mt c php tham chiu ti mt ti nguyn:
android.R.resource_type.resource_name
hoc
R.resource_type.resource_name
resource_type l mt lp con ca R gi kiu xc nh ca resource.resource_name
l tn thuc tnh cho ti nguyn c nh ngha trong cc file XML hoc tn file
(khng c phn m rng) cho cc ti nguyn c nh ngha bi cc kiu file khc.
Mi kiu ti nguyn s c thm vo thnh mt lp con xc nh ca lp R, ph
thuc vo kiu ti nguyn ca n.
Cc ti nguyn c bin dch bi chnh ng dng ca bn c th c tham chiu
ti m khng cn c tn package (n gin nh R.resource_type.resource_name).
Android cha mt s cc ti nguyn chun nh screen style v button background.
ch ti chng trong code, bn phi xc nh chng vi ch th gi android u,
nh v d sau:
android.R.drawable.button_background.
Tham chiu ti cc ti nguyn
Mt gi tr cung cp trong mt thuc tnh (hoc ti nguyn) cng c th l mt tham
chiu ti mt ti nguyn khc. y l cch thng xuyn c s dng trong cc
file layout cung cp cc chui (m chng nh v c) v cc image (tn ti
trong mt file khc), mc d mt tham chiu c th l bt k loi ti nguyn no bao
gm c cc color v s nguyn.
V d, nu chng ta c cc ti nguyn v mu, chng ta c th vit mt file layout
cha cc thit lp v kch thc v mu ca vn bn l cc gi tr c cha trong
cc ti nguyn khc:
<EditText
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@color/opaque_red"
android:text="Hello, World!" />
Ch l y l vic s dng tin t @ ch ti mt ti nguyn c tham
chiu, theo sau l tn ti nguyn tham chiu dng @[package:]type/name. Trong
trng hp ny chng ta khng xc nh r mt package bi v chng ta tham chiu
ti mt ti nguyn trong chnh package hin ti ca chng ta (package ca ng
dng). tham chiu ti mt ti nguyn ca h thng, bn cn phi vit:
<EditText
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="Hello, World!" />
Mt v d khc, bn lun lun nn s dng mt ti nguyn tham chiu khi cung cp
cc chui trong mt file layout bit v tr.
<EditText
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:textColor="@android:color/opaque_red"
android:text="@string/hello_world" />

Alternate Resources & Localization
Ti nguyn thay th v a phng ha l mt gii php rt hu ch bn s thch vi
Android. Gi s bn phi thit k mt GUI khp vi khung cnh v nh hng
mn hnh cng mt lc iu ny gn nh l khng th.
Bn c th cung cp cc ti nguyn khc cho ng dng ca bn cho ph hp vi
ngn ng giao din hoc cu hnh phn cng ca thit b. Ch rng bn c th
thm vo bao gm cc chui, layout, v tt c cc ti nguyn khc, nhng SDK
khng cung cp cc phng thc cho php bn xc nh chnh xc ti nguyn no
s c thit lp s dng. Android pht hin thit lp ring ph hp cho phn
cng v v tr, v np chng. Ch ngi dng c th la chn thit lp ngn ng
thay th s dng panel ci t trn thit b.
bao gm cc ti nguyn thay th, to ra cc th mc ti nguyn song song vi
mt s qualifierc thm vo tn ca th mc xc nh cu hnh m n s c
p dng (v d nh ngn ng, nh hng mn hnh ngang-dc, dpi, phn gii,
).
V d, y l mt d n khc nhau gia ting Anh v ting c:
MyApp/
Res/
Values-en/
Strings.xml
Values-de/
Strings.xml
Android cung cp mt vi kiu qualifier, vi cc gi tr khc nhau. s dung,
thm chng vo cui ca tn th mc ngn cch bi du gch ngang. Bn c th
thm nhiu qualifier cho mi mt tn th mc, nhng chng phi xut hin theo th
t chng c lit k y. V d, mt th mc cha cc ti nguyn cho v c cu
hnh xc nh y s ging nh sau:
MyApp/
res/
drawable-en-rUS-port-92dpi-finger-keyshidden-12key-dpad-480x320/
Thng thng, bn s ch xc nh mt vi ty chn cu hnh c th m c nh
ngha cho ti nguyn . Bn c th b bt k mt trong cc gi tr ny t danh sch
hon chnh, min l cc gi tr cn li vn theo ng th t. V d:
MyApp/
res/
drawable-en-rUS-finger/
drawable-port/
drawable-port-160dpi/
drawable-qwerty/
Android s la chn cc file ti nguyn ph hp nht vo thi gian chy ph thuc
v cu hnh hin ti trn thit b.
The magic R.java
Mt file R.java ca mt d n l mt file c sinh t ng nh ch mc cho tt
c cc ti nguyn ca d n ca bn. Bn s dng lp ny trong m ngun nh l
mt cch ngn gn tham chiu ti cc ti nguyn bn thm vo trong d n
ca bn. iu ny s tr nn rt mnh m vi cc tnh nng hon thnh code ca cc
IDE nh Eclipse bi v n cho php bn nhanh chng tng tc v xc nh v tr
tham chiu bn ang tm kim.
Ngoi ra, bn c c thi gian bin dch an ton m cc ti nguyn bn mun s
dng thc s tn ti.
Hello World The Android way.
(t phn ny v sau l hng dn ci t s dng v vit ng dng HelloWorld nn
b qua :D)

Você também pode gostar