SlideShare une entreprise Scribd logo
1  sur  20
Télécharger pour lire hors ligne
Tìm hi u v Androidể ề
Android là gì?
Android là m t ph n m m stack cho các thi t b di đ ng bao g m m t h đi u hành,ộ ầ ề ế ị ộ ồ ộ ệ ề
middleware và các ng d ng quan tr ng. Android SDK cung c p các công c và API c n thi tứ ụ ọ ấ ụ ầ ế
đ b t đ u phát tri n các ng d ng trên n n t ng Android b ng cách s d ng ngôn ng l pể ắ ầ ể ứ ụ ề ả ằ ử ụ ữ ậ
trình Java.
Nh ng đ c tínhữ ặ
• ng d ng framework cho phép tái s d ng và thay th các thành ph nỨ ụ ử ụ ế ầ
• Dalvik máy o đ c t i u hóa cho các thi t b di đ ngả ượ ố ư ế ị ộ
• Tích h p trình duy t d a trên đ ng c WebKit mã ngu n mợ ệ ự ộ ơ ồ ở
• T i u hóa đ h a đ c h tr b i m t tùy ch nh đ h a 2D th vi n; đ h a 3D d aố ư ồ ọ ượ ỗ ợ ở ộ ỉ ồ ọ ư ệ ồ ọ ự
trên nh ng đ c đi m k thu t OpenGL ES 1,0 (Tùy chôn tăng t c ph n c ng )ữ ặ ể ỹ ậ ố ầ ứ
• SQLite cho vi c l u tr d li u c u trúcệ ư ữ ữ ệ ấ
• Ph ng ti n truy n thông h tr cho âm thanh ph bi n, video, và v n còn đ nh d ngươ ệ ề ỗ ợ ổ ế ẫ ị ạ
hình nh (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)ả
• GSM đi n tho i (ph thu c ph n c ng)ệ ạ ụ ộ ầ ứ
• Bluetooth, EDGE, 3G và WiFi (ph thu c ph n c ng )ụ ộ ầ ứ
• Camera, GPS, la bàn, và gia t c (ph thu c ph n c ng)ố ụ ộ ầ ứ
• Môi tr ng phát tri n phong phú bao g m m t mô ph ng thi t b , công c đ g l i,ườ ể ồ ộ ỏ ế ị ụ ể ỡ ỗ
b nh và profiling hi u su t, và m t plugin cho IDE Eclipseộ ớ ệ ấ ộ
Ki n trúc Androidế
S đ d i đây cho th y các thành ph n chính c a h đi u hành Android.ơ ồ ướ ấ ầ ủ ệ ề M i ph n đ cỗ ầ ượ
mô t chi ti t h n d i đây.ả ế ơ ướ
ng d ngỨ ụ
Android s ship v i m t b các ng d ng lõi bao g m m t ng d ng email, l ch ch ng trìnhẽ ớ ộ ộ ứ ụ ồ ộ ứ ụ ị ươ
tin nh n SMS,, b n đ , trình duy t, liên l c, và nh ng ng i khác. T t c các ng d ng đ cắ ả ồ ệ ạ ữ ườ ấ ả ứ ụ ượ
vi t b ng cách s d ng ngôn ng l p trình Java.ế ằ ử ụ ữ ậ
ng d ng FrameworkỨ ụ
B ng cách cung c p m t n n t ng phát tri n m , Android cung c p cho các nhà phát tri n khằ ấ ộ ề ả ể ở ấ ể ả
năng đ xây d ng các ng d ng vô cùng phong phú và sáng t o. Các nhà phát tri n đ c mi nể ự ứ ụ ạ ể ượ ễ
phí đ t n d ng l i th c a các thi t b ph n c ng, thông tin đ a đi m truy c p, d ch v ch yể ậ ụ ợ ế ủ ế ị ầ ứ ị ể ậ ị ụ ạ
n n, thi t l p h th ng báo đ ng, thêm các thông báo đ n các thanh tr ng thái, và nhi u,ề ế ậ ệ ố ộ ế ạ ề
nhi u h n n a.ề ơ ữ
Các nhà phát tri n có th truy c p vào các API cùng m t khuôn kh đ c s d ng b i các ngể ể ậ ộ ổ ượ ử ụ ở ứ
d ng lõi. Ki n trúc ng d ng đ c thi t k đ đ n gi n hóa vi c tái s d ng các thành ph n;ụ ế ứ ụ ượ ế ế ể ơ ả ệ ử ụ ầ
b t kỳ ng d ng có th xu t b n các kh năng c a mình và ng d ng nào khác sau đó có thấ ứ ụ ể ấ ả ả ủ ứ ụ ể
làm cho vi c s d ng nh ng kh năng (tùy thu c vào ch b o đ m thi hành theo khuôn kh ).ệ ử ụ ữ ả ộ ế ả ả ổ
C ch này cũng cho phép các thành ph n đ c thay th b i ng i s d ng.ơ ế ầ ượ ế ở ườ ử ụ
N m bên d i t t c các ng d ng là m t t p h p các d ch v và h th ng, bao g m:ằ ướ ấ ả ứ ụ ộ ậ ợ ị ụ ệ ố ồ
• M t t p phong phú và m r ng c a xem có th đ c s d ng đ xây d ng m t ngộ ậ ở ộ ủ ể ượ ử ụ ể ự ộ ứ
d ng, bao g m các danh sách, l i, h p văn b n, các nút, và th m chí m t trình duy tụ ồ ướ ộ ả ậ ộ ệ
web nhúng
• Nhà cung c p n i dung cho phép các ng d ng đ truy c p d li u t các ng d ngấ ộ ứ ụ ể ậ ữ ệ ừ ứ ụ
khác (nh Contacts), ho c chia s d li u c a riêng mìnhư ặ ẻ ữ ệ ủ
• M t qu n lý tài nguyên, cung c p quy n truy c p vào tài nguyên phi mã nh dây b nộ ả ấ ề ậ ư ả
đ a hoá, đ h a, và b trí t p tin.ị ồ ọ ố ậ
• M t Notification Manager cho phép t t c các ng d ng tùy ch nh đ hi n th c nh báoộ ấ ả ứ ụ ỉ ể ể ị ả
trong thanh tr ng thái.ạ
• M t Activity Manager qu n lý vòng đ i c a các ng d ng và cung c p m t backstackộ ả ờ ủ ứ ụ ấ ộ
ph bi n chuy n h ng.ổ ế ể ướ
Th vi nư ệ
Android bao g m m t b th vi n C/C++, đ c s d ng b i các thành ph n khác nhau c aồ ộ ộ ư ệ ượ ử ụ ở ầ ủ
h th ng Android. Nh ng kh năng ti p xúc v i các nhà phát tri n thông qua các khuôn khệ ố ữ ả ế ớ ể ổ
ng d ng Android. M t s các th vi n lõi đ c li t kê d i đây:ứ ụ ộ ố ư ệ ượ ệ ướ
• System C library - m t BSD-có ngu n g c th c hi n các h th ng th vi n chu n Cộ ồ ố ự ệ ệ ố ư ệ ẩ
(LIBC), đi u ch nh cho nhúng d a trên Linux các thi t bề ỉ ự ế ị
• Media Libraries - d a trên OpenCORE PacketVideo's; s h tr các th vi n phát l iự ự ỗ ợ ư ệ ạ
và ghi âm c a âm thanh và ph bi n nhi u đ nh d ng video, cũng nh các t p tin hìnhủ ổ ế ề ị ạ ư ậ
nh tĩnh, bao g m MPEG4, H.264, MP3, AAC, AMR, JPG, và PNGả ồ
• Surface Manager - qu n lý quy n truy c p vào h th ng con hi n th và hoàn toàn phùả ề ậ ệ ố ể ị
h p ch t 2D và 3D l p t nhi u ng d ng đ h aợ ấ ớ ừ ề ứ ụ ồ ọ
• LibWebCore - m t trình duy t web hi n đ i, đ ng c có quy n h n c hai trình duy tộ ệ ệ ạ ộ ơ ề ạ ả ệ
web c a Android và m t xem nhúngủ ộ
• SGL - các công c đ h a 2D ti m nụ ồ ọ ề ẩ
• 3D libraries - m t vi c th c hi n d a trên OpenGL ES 1,0 API; các th vi n, ho c sộ ệ ự ệ ự ư ệ ặ ử
d ng ph n c ng tăng t c 3D (n u có) ho c bao g m, cao t i u rasterizer ph n m mụ ầ ứ ố ế ặ ồ ố ư ầ ề
3D
• SQLite - m t m nh m và nh quan h c s d li u có s n cho t t c các ng d ngộ ạ ẽ ẹ ệ ơ ở ữ ệ ẵ ấ ả ứ ụ
Th i gian ch y Androidờ ạ
Android bao g m m t t p các th vi n lõi mà cung c p h u h t các ch c năng s n có trongồ ộ ậ ư ệ ấ ầ ế ứ ẵ
th vi n c t lõi c a ngôn ng l p trình Java.ư ệ ố ủ ữ ậ
M i ng d ng Android ch y trong ti n trình riêng c a mình, v i tr ng h p riêng c a cácỗ ứ ụ ạ ế ủ ớ ườ ợ ủ
máy o Dalvik. Dalvik đã đ c vi t nên m t thi t b có th ch y nhi u máy o hi u qu . VMả ượ ế ộ ế ị ể ạ ề ả ệ ả
Dalvik th c hi n tác ph m trong các Executable Dalvik (dex). Đ nh d ng đ c t i u hóa choự ệ ẩ ị ạ ượ ố ư
b nh t i thi u. VM là đăng ký trên, và ch y các l p h c biên so n b i m t trình biên d chộ ớ ố ể ạ ớ ọ ạ ở ộ ị
ngôn ng Java đã đ c chuy n thành các đ nh d ng dex. Do dx "bao g m" công c .ữ ượ ể ị ạ ồ ụ
VM Dalvik d a vào h t nhân Linux cho các ch c năng ti m n nh lu ng và c p qu n lý bự ạ ứ ề ẩ ư ồ ấ ả ộ
nh th p.ớ ấ
S d ng tài nguyên trong ng d ng Androidử ụ ứ ụ
B n nên luôn luôn s d ng ngu n tài nguyên nh hình nh và chu i t mã ng d ng c a b n,ạ ử ụ ồ ư ả ỗ ừ ứ ụ ủ ạ
đ b n có th duy trì chúng m t cách đ c l p. Externalizing ngu n l c c a b n cũng cho phépể ạ ể ộ ộ ậ ồ ự ủ ạ
b n t i cung c p ngu n tài nguyên thay th có h tr c u hình thi t b c th nh ngôn ngạ ớ ấ ồ ế ỗ ợ ấ ế ị ụ ể ư ữ
khác nhau ho c kích c màn hình, mà ngày càng tr nên quan tr ng nh nhi u thi t b h trặ ỡ ở ọ ư ề ế ị ỗ ợ
Android tr nên có s n v i các c u hình khác nhau. Đ cung c p kh năng t ng thích v iở ẵ ớ ấ ể ấ ả ươ ớ
c u hình khác nhau, b n ph i t ch c các ngu n l c trong th m c res d án c a b n, b ngấ ạ ả ổ ứ ồ ự ư ụ ự ủ ạ ằ
cách s d ng sub th m c khác nhau, nhóm các tài nguyên theo lo i hình và c u hình.ử ụ ư ụ ạ ấ
Đ i v i b t c lo i tài nguyên, b n có th m c đ nh và thay th nhi u ngu n l c cho ngố ớ ấ ứ ạ ạ ể ặ ị ế ề ồ ự ứ
d ng c a b n:ụ ủ ạ
• M c đ nh là nh ng tài nguyên đ c s d ng không ph thu c vào c u hình thi t bặ ị ữ ượ ử ụ ụ ộ ấ ế ị
ho c khi không có ngu n tài nguyên thay th phù h p v i c u hình hi n t i.ặ ồ ế ợ ớ ấ ệ ạ
• Thay th các ngu n l c đ c các m c b n đã thi t k đ s d ng v i m t c u hìnhế ồ ự ượ ụ ạ ế ế ể ử ụ ớ ộ ấ
c th . Đ xác đ nh nó m t nhóm các ngu n l c cho m t c u hình đ c bi t, thêm m tụ ể ể ị ộ ồ ự ộ ấ ặ ệ ộ
vòng lo i c u hình phù h p v i tên th m c.ạ ấ ợ ớ ư ụ
Ví d , trong khi m c đ nh layout giao di n c a b n đ c l u trong th m c res/layout/, b nụ ặ ị ệ ủ ạ ượ ư ư ụ ạ
có th xác đ nh m t layout giao di n khác nhau đ c s d ng khi màn hình đ nh h ng phongể ị ộ ệ ượ ử ụ ị ướ
c nh, b ng cách l u nó trong th m c res/layout-land/. Android s t đ ng áp d ng các ngu nả ằ ư ư ụ ẽ ự ộ ụ ồ
l c thích h p b ng cách k t h p c u hình hi n t i c a thi t b t i tên th m c tài nguyên c aự ợ ằ ế ợ ấ ệ ạ ủ ế ị ớ ư ụ ủ
b n.ạ
( nh minh h a tẢ ọ ừ
http://developer.android.com/images/resources/resource_devices_diagram1.png)
Hình 1 th hi n nh th nào m t t p h p các ngu n tài nguyên m c đ nh t m t ng d ngể ệ ư ế ộ ậ ợ ồ ặ ị ừ ộ ứ ụ
đ c áp d ng cho hai thi t b khác nhau khi không có ngu n tài nguyên thay th có s n.ượ ụ ế ị ồ ế ẵ
( nh minh h a tẢ ọ ừ
http://developer.android.com/images/resources/resource_devices_diagram2.png)
Hình 2 cho th y vi c áp d ng cùng v i m t t p h p các ngu n tài nguyên thay th nó đ đi uấ ệ ụ ớ ộ ậ ợ ồ ế ủ ề
ki n đ i v i m t trong các c u hình thi t b , do đó, hai thi t b s d ng ngu n tài nguyên khácệ ố ớ ộ ấ ế ị ế ị ử ụ ồ
nhau.
Thông tin trên ch là gi i thi u v cách làm vi c ngu n l c ng d ng trên Android. Các tàiỉ ớ ệ ề ệ ồ ự ứ ụ
li u sau đây cung c p m t h ng d n đ y đ t i làm th nào b n có th t ch c các ngu nệ ấ ộ ướ ẫ ầ ủ ớ ế ạ ể ổ ứ ồ
l c ng d ng c a b n, xác đ nh ngu n tài nguyên thay th , truy c p chúng trong ng d ngự ứ ụ ủ ạ ị ồ ế ậ ứ ụ
c a b n, và nhi u h n n a:ủ ạ ề ơ ữ
Vi c cung c p tài nguyên :ệ ấ Nh ng lo i tài nguyên mà b n có th cung c p trong ng d ngữ ạ ạ ể ấ ứ ụ
c a b n, n i t i l u l i, và làm th nào đ t o ra ngu n l c thay th cho các c u hình thi t bủ ạ ơ ớ ư ạ ế ể ạ ồ ự ế ấ ế ị
c th .ụ ể
Truy c p các tài nguyên :ậ Làm th nào t i s d ng các ngu n l c mà b n đã cung c p, ho cế ớ ử ụ ồ ự ạ ấ ặ
b ng cách tham chi u đ n chúng t mã ng d ng c a b n ho c t các ngu n khác XML.ằ ế ế ừ ứ ụ ủ ạ ặ ừ ồ
X lý Thay đ i Runtime :ử ổ Làm th nào t i qu n lý thay đ i c u hình x y ra trong khi Activityế ớ ả ổ ấ ả
c a b n đang ch y.ủ ạ ạ
Localization : M t h ng d n t d i lên t i đ a ph ng hóa đ n c a b n b ng cách sộ ướ ẫ ừ ướ ớ ị ươ ơ ủ ạ ằ ử
d ng ngu n tài nguyên thay th . Trong khi đây ch là m t c th s d ng tài nguyên thay th ,ụ ồ ế ỉ ộ ụ ể ử ụ ế
nó là r t quan tr ng đ ti p c n ng i dùng h n.ấ ọ ể ế ậ ườ ơ
Các lo i tài nguyên :ạ M t tài li u tham kh o c a các lo i tài nguyên khác nhau, b n có thộ ệ ả ủ ạ ạ ể
cung c p, mô t XML c a h y u t , thu c tính, và cú pháp. Ví d , tham chi u này cho th yấ ả ủ ọ ế ố ộ ụ ế ấ
b n làm th nào đ t o ra m t ngu n l c cho các menu ng d ng, drawables, hình đ ng, vàạ ế ể ạ ộ ồ ự ứ ụ ộ
nhi u h n n a.ề ơ ữ
Các lo i tài nguyên trong ng d ng Androidạ ứ ụ
M i c a các tài li u trong ph n này mô t vi c s d ng, đ nh d ng và cú pháp cho m t lo iỗ ủ ệ ầ ả ệ ử ụ ị ạ ộ ạ
tài nguyên ng d ng mà b n có th cung c p trong th m c tài nguyên c a b n (res/).ứ ụ ạ ể ấ ư ụ ủ ạ
D i đây là tóm t t c a t ng lo i tài nguyên:ướ ắ ủ ừ ạ
Tài nguyên hình nh đ ng :ả ộ Xác đ nh hình nh đ ng đ c xác đ nh tr c.ị ả ộ ượ ị ướ
• Tween hình nh đ ng đ c l u trongả ộ ượ ư res/Anim/ và truy c p t các l pậ ừ ớ R.anim.
• Frame hình nh đ ng đ c l u trongả ộ ượ ư res/drawable/ và truy c p t các l pậ ừ ớ
R.drawable.
Danh sách State tài nguyên màu : Xác đ nh m t tài nguyên màu s c nó thay đ i d a trên cácị ộ ắ ổ ự
ti u bang View.ể
• L u trongư res/color và truy c p t các l p R.color.ậ ừ ớ
Tài nguyên Drawable : Xác đ nh đ h a khác nhau v i bitmap ho c XML.ị ồ ọ ớ ặ
• L u trongư res/drawable/ và truy c p t các l p R.drawable.ậ ừ ớ
B trí ngu n l c :ố ồ ự Xác đ nh layout cho giao di n ng i dùng ng d ng c a b n.ị ệ ườ ứ ụ ủ ạ
• L u trong res/layout/và truy c p t các l pư ậ ừ ớ R.layout.
Menu Resource : Xác đ nh n i dung c a các menu ng d ng c a b n.ị ộ ủ ứ ụ ủ ạ
• L u trongư res/menu/ và truy c p t các l pậ ừ ớ R.menu.
Tài nguyên String : Xác đ nh các chu i, m ng chu i, và s nhi u (và bao g m các đ nh d ngị ỗ ả ỗ ố ề ồ ị ạ
chu i và t o ki u tóc).ỗ ạ ể
• L u trongư res/value/ và truy c p t các l pậ ừ ớ R.string, R.array, và R.plurals.
Tài nguyên phong cách : Xác đ nh xem xét và đ nh d ng cho cáccác y u t giao di n ng iị ị ạ ế ố ệ ườ
dùng .
• L u trongư res/value/ và truy c p t các l pậ ừ ớ R.style.
Các lo i tài nguyên khác :ạ Xác đ nh giá tr nh các phép toán lu n, s nguyên, kích th c,ị ị ư ậ ố ướ
màu s c, và các m ng khác.ắ ả
• L u trongư res/value/ nh ng m i truy c p t duy nh t R ti u h c (như ỗ ậ ừ ấ ể ọ ư R.bool,
R.integer, R.dimen, vv.)
Qu n lý vòng đ i c a m t Service trong Androidả ờ ủ ộ
Vòng đ i c a m t service đ n gi n h n nhi u so v i các activity. Tuy nhiên, nó th m chí cònờ ủ ộ ơ ả ơ ề ớ ậ
quan tr ng h n, b n có ph i quan tâm t i cách service c a b n đ c t o ra và h y di t, b i vìọ ơ ạ ả ớ ủ ạ ượ ạ ủ ệ ở
m t service có th ch y trong background mà không cho ng i dùng đ c bi t.ộ ể ạ ườ ượ ế
Vòng đ i c a m t Service, t khi nó đ c t o ra cho khi nó b phá h y, có th theo hai conờ ủ ộ ừ ượ ạ ị ủ ể
đ ng khác nhau:ườ
• M t service started : Các service đ c t o ra khi component khác g iộ ượ ạ ọ startService().
Các service sau đó nó ch y vô th i h n và d ng l i b ng cách g iạ ờ ạ ừ ạ ằ ọ stopSelf(). M tộ
component khác cũng có th d ng d ch v b ng cách g iể ừ ị ụ ằ ọ stopService(). Khi d ch vị ụ
này đ c d ng l i, h th ng tiêu di t nó ..ượ ừ ạ ệ ố ệ
• M t service bound : Các service đ c t o ra khi m t component (m t client) g iộ ượ ạ ộ ộ ọ
bindService(). Client sau đó giao ti p v i các service thông qua m t giao di nế ớ ộ ệ IBinder.
Các client có th đóng k t n i b ng cách g iể ế ố ằ ọ unbindService(). Nhi u khách hàng cóề
th liên k t v i các service t ng t và khi t t c chúng unbind, h th ng s phá h yể ế ớ ươ ự ấ ả ệ ố ẽ ủ
các service. (chính nó không c n d ng l i.)ầ ừ ạ
Hai con đ ng không hoàn toàn riêng bi t. B n có th liên k t v i m t d ch v đã đ cườ ệ ạ ể ế ớ ộ ị ụ ượ
started v iớ startService(). Ví d , m t service background âm nh c có th đ c started b ngụ ộ ạ ể ượ ằ
cách g iọ startService() v i m t ý đ nh nh n d ng âm nh c đ ch i. Sau đó, có th khi ng iớ ộ ị ậ ạ ạ ể ơ ể ườ
dùng mu n th c hi n m t s ki m soát đ i v i các c u th ho c nh n đ c thông tin v cácố ự ệ ộ ố ể ố ớ ầ ủ ặ ậ ượ ề
bài hát hi n hành, m t activity có th liên k t v i các service b ng cách g iệ ộ ể ế ớ ằ ọ bindService().
Trong tr ng h p nh th này,ườ ợ ư ế stopService() ho cặ stopSelf() không th c s d ng service choự ự ừ
đ n khi khách hàngế unbind t t c .ấ ả
Tri n khai th c hi n vòng đ i callbackể ự ệ ờ
Gi ng nh m t activity, m t service có vòng đ i method callback và b n có th tri n khai đố ư ộ ộ ờ ạ ể ể ể
theo dõi nh ng thay đ i trong tr ng thái c a service và th c hi n công vi c vào th i đi mữ ổ ạ ủ ự ệ ệ ờ ể
thích h p. Các service th hi n skeleton sau m i vòng đ i c a các method:ợ ể ệ ỗ ờ ủ
( nh minh h a đ c s d ng t http://developer.android.com/images/service_lifecycle.png)Ả ọ ượ ử ụ ừ
Hình 2. Các vòng đ i service. S đ bên trái cho th y vòng đ i khi d ch v đ c t o ra v iờ ơ ồ ấ ờ ị ụ ượ ạ ớ
startService() và s đ bên ph i cho th y vòng đ i khi d ch v đ c t o ra v i bindService().ơ ồ ả ấ ờ ị ụ ượ ạ ớ
B ng cách th c hi n nh ng ph ng pháp này, b n có có th theo dõi hai vòng l p l ng nhauằ ự ệ ữ ươ ạ ể ặ ồ
trong vòng đ i c a service:ờ ủ
• S s ng c a m t service x y ra gi a th i gian onCreate() đ c g i và onDestroy() th iự ố ủ ộ ả ữ ờ ượ ọ ờ
gian tr v . Gi ng nh m t activity, m t service không thi t l p ban đ u trongả ề ố ư ộ ộ ế ậ ầ
onCreate() cho nó và t t c các ngu n l c còn l i trong onDestroy(). Ví d , m t serviceấ ả ồ ự ạ ụ ộ
nghe nh c có th t o ra các ch đ mà âm nh c s đ c ch i trong onCreate(), sau đóạ ể ạ ủ ề ạ ẽ ượ ơ
d ng thread trong onDestroy().ừ
• Các onCreate() và onDestroy() method đ c g i cho t t c các d ch v , cho dù h đangượ ọ ấ ả ị ụ ọ
t o ra b i startService() ho c bindService().ạ ở ặ
• Các cu c đ i ho t đ ng c a m t service b t đ u v i m t cu c g i đ n ho c làộ ờ ạ ộ ủ ộ ắ ầ ớ ộ ộ ọ ế ặ
onStartCommand() ho c onBind(). M i ph ng pháp đ c đ a các ý đ nh đó đ cặ ỗ ươ ượ ư ị ượ
thông qua ho c là startService() ho c bindService(), t ng ng.ặ ặ ươ ứ
N u service đ c started, các ho t đ ng k t thúc cu c đ i cùng th i đi m k t thúc toàn bế ượ ạ ộ ế ộ ờ ờ ể ế ộ
cu c đ i (d ch v này v n còn ho t đ ng ngay c sau khi onStartCommand() tr v ). N uộ ờ ị ụ ẫ ạ ộ ả ả ề ế
d ch v đ c bound, k t thúc cu c đ i ho t đ ng tr l i khi onUnbind().ị ụ ượ ế ộ ờ ạ ộ ở ạ
Tìm hi u v Activity trong Androidể ề
Activity M t là m t thành ph n ng d ng đó cung c p m t màn hình mà ng i dùng có thộ ộ ầ ứ ụ ấ ộ ườ ể
t ng tác đ làm m t cái gì đó, ch ng h n nh quay s đi n tho i, ch p nh, g i email, ho cươ ể ộ ẳ ạ ư ố ệ ạ ụ ả ử ặ
xem m t b n đ . M i activity đ c cho m t c a s , trong đó cho v giao di n ng i dùngộ ả ồ ỗ ượ ộ ử ổ ẽ ệ ườ
c a nó. C a s th ng l p đ y màn hình, nh ng có th nh h n so v i màn hình và n i lênủ ử ổ ườ ấ ầ ư ể ỏ ơ ớ ổ
trên các c a s khác.ử ổ
M t ng d ng th ng bao g m nhi u activity đ c ràng bu c l ng l o v i nhau. Thôngộ ứ ụ ườ ồ ề ượ ộ ỏ ẻ ớ
th ng, m t trong nh ng activity trong m t ng d ng đ c quy đ nh nh các activity "chính",ườ ộ ữ ộ ứ ụ ượ ị ư
đ c trình bày cho ng i dùng khi tung ra ng d ng cho l n đ u tiên. M i activity sau đó cóượ ườ ứ ụ ầ ầ ỗ
th b t đ u activity khác đ th c hi n hành đ ng khác nhau. M i l n m t activity m i b tể ắ ầ ể ự ệ ộ ỗ ầ ộ ớ ắ
đ u, các activity tr c đó đ c d ng l i, nh ng h th ng các khu b o v các activity trongầ ướ ượ ừ ạ ư ệ ố ả ệ
m t ngăn x p (các "back stack"). Khi m t activity m i b t đ u, nó đ c đ y lên phía sau ngănộ ế ộ ớ ắ ầ ượ ẩ
x p và vi c chú tr ng c a ng i dùng. S tr l i ngăn x p tuân th các c b n "last in, firstế ệ ọ ủ ườ ự ở ạ ế ủ ơ ả
out" c ch hàng đ i, do đó, khi ng i dùng đ c th c thi v i các activity hi n t i và nh nơ ế ợ ườ ượ ự ớ ệ ạ ấ
phím BACK, nó là popped kh i đ ng (và phá h y) các h s activity tr c đó. (S tr l iỏ ố ủ ồ ơ ướ ự ở ạ
ngăn x p đ c th o lu n nhi u h n trong công vi c và s p x p l i tài li u.)ế ượ ả ậ ề ơ ệ ắ ế ạ ệ
Đ t o ra m t activity, b n ph i t o m t sub class c a Activity. Trong sub class c a b n, b nể ạ ộ ạ ả ạ ộ ủ ủ ạ ạ
c n cho th c thi method g i h th ng các cu c g i khi chuy n đ i activity gi a các state khácầ ự ọ ệ ố ộ ọ ể ổ ữ
nhau cho vòng đ i c a nó, ch ng h n nh khi activity đang đ c t o ra, d ng l i, n i l i,ờ ủ ẳ ạ ư ượ ạ ừ ạ ố ạ
ho c b phá h y. Hai ph ng pháp g i l i quan tr ng nh t là:ặ ị ủ ươ ọ ạ ọ ấ
Create Activity
B n ph i tri n khai method này. H th ng các cu c g i này khi t o activity c a b n. Trongạ ả ể ệ ố ộ ọ ạ ủ ạ
th i h n tri n khai th c hi n c a b n, b n nên kh i t o các thành ph n thi t y u c a activityờ ạ ể ự ệ ủ ạ ạ ở ạ ầ ế ế ủ
c a b n. Quan tr ng nh t, đây là n i b n ph i g i setContentView() đ xác đ nh vi c layoutủ ạ ọ ấ ơ ạ ả ọ ể ị ệ
cho giao di n ng i dùng c a activity.ệ ườ ủ
Start Activity
Khi làm vi c trong ng d ng c a riêng b n, b n th ng s c n cho đ n gi n là kh i đ ngệ ứ ụ ủ ạ ạ ườ ẽ ầ ơ ả ở ộ
m t activity đ c bi t đ n. B n có th làm nh v y b ng cách t o ra m t intent đó rõ ràngộ ượ ế ế ạ ể ư ậ ằ ạ ộ
xác đ nh activity b n mu n b t đ u, s d ng tên l p. Ví d , đây là cách m t activity b t đ uị ạ ố ắ ầ ử ụ ớ ụ ộ ắ ầ
activity khác có tên SignInActivity:
Intent intent = new Intent(this, SignInActivity.class);
startActivity(intent);
Đóng m t Activityộ
B n có th đóng m t activity b ng cách g i methosạ ể ộ ằ ọ finish() c a nó. B n cũng có th đóng c aủ ạ ể ử
m t activity riêng bi t tr c đó b n đã b t đ u b ng cách g iộ ệ ướ ạ ắ ầ ằ ọ finishActivity().
Ngoài ra trong Activity còn nhi u method khác,ề
Qu n lý vòng đ i Activityả ờ
Qu n lý vòng đ i Activity c a b n b ng cách th c hi n g i method là r t quan tr ng cho phátả ờ ủ ạ ằ ự ệ ọ ấ ọ
tri n m t ng d ng m nh m và linh ho t. Vòng đ i c a m t activity tr c ti p b nh h ngể ộ ứ ụ ạ ẽ ạ ờ ủ ộ ự ế ị ả ưở
b i k t h p nhi m v c a nó và back stack v i các activity khác.ở ế ợ ệ ụ ủ ớ
M t ho t đ ng có th t n t i trong ba tr ng thái c b n: Resumed, Paused và Stoppedộ ạ ộ ể ồ ạ ạ ơ ả
N u m t activity b t m d ng ho c d ng l i, h th ng có th drop nó t b nh ho c là b ngế ộ ị ạ ừ ặ ừ ạ ệ ố ể ừ ộ ớ ặ ằ
cách yêu c u cho nó k t thúc (g i method finish() c a nó), ho c đ n gi n là gi t ch t quáầ ế ọ ủ ặ ơ ả ế ế
trình c a nó. Khi ho t đ ng này đ c m l i (sau khi đ c finished ho c ch t), nó ph i đ củ ạ ộ ượ ở ạ ượ ặ ế ả ượ
t o ra nh trên.ạ ư
Tìm hi u v Service trong Androidể ề
Service là m t ng d ng component có th th c hi n các ho t đ ng long-running trongộ ứ ụ ể ự ệ ạ ộ
background và không cung c p m t giao di n ng i dùng. M t ng d ng component có thấ ộ ệ ườ ộ ứ ụ ể
b t đ u m t service và nó s ti p t c ch y trong background th m chí n u ng i dùngắ ầ ộ ẽ ế ụ ạ ậ ế ườ
chuy n cho ng d ng khác. Ngoài ra, m t component có th liên k t cho m t d ch v t ngể ứ ụ ộ ể ế ộ ị ụ ươ
tác v i nó và th m chí th c hi n giao ti p InterProcess (IPC). Ví d , m t d ch v có th x lýớ ậ ự ệ ế ụ ộ ị ụ ể ử
các giao d ch m ng, nghe nh c, th c hi n các t p tin I/O, ho c t ng tác v i m t providerị ạ ạ ự ệ ậ ặ ươ ớ ộ
content, t t c t background.ấ ả ừ
M t service c b n có th có hai hình th c:ộ ơ ả ể ứ
Started
service là "started" khi m t component ng d ng (nh m t activity) b t đ u nó b ng cách g iộ ứ ụ ư ộ ắ ầ ằ ọ
startService (). Khi b t đ u, m t service có th ch y trên background vô th i h n, ngay c khiắ ầ ộ ể ạ ờ ạ ả
các thành ph n đó b t đ u nó b phá h y. Thông th ng, m t service b t đ u th c hi n m tầ ắ ầ ị ủ ườ ộ ắ ầ ự ệ ộ
ho t đ ng đ n l và không tr l i k t qu cho ng i g i. Ví d , nó có th t i v ho c t i lênạ ộ ơ ẻ ả ạ ế ả ườ ọ ụ ể ả ề ặ ả
m t t p tin qua m ng. Khi ho t đ ng đ c th c hi n, các service nên d ng l i b n thân.ộ ậ ạ ạ ộ ượ ự ệ ừ ạ ả
Bound
service là "bound" khi m t component ng d ng liên k t cho nó b ng cách g i bindService ().ộ ứ ụ ế ằ ọ
M t service ràng bu c cung c p m t giao di n client-server cho phép các component t ng tácộ ộ ấ ộ ệ ươ
v i các d ch v , g i các yêu c u, có đ c k t qu , và th m chí làm nh v y qua quá trìnhớ ị ụ ử ầ ượ ế ả ậ ư ậ
giao ti p InterProcess (IPC). M t service bound ch ch y mi n là ng d ng component khác bế ộ ỉ ạ ễ ứ ụ ị
ràng bu c vào nó. Nhi u thành ph n có th liên k t cho d ch v cùng m t lúc, nh ng khi t tộ ề ầ ể ế ị ụ ộ ư ấ
c chúng unbind, service này b phá h y.ả ị ủ
Các khái ni m c b n :ệ ơ ả
Đ t o ra m t service, b n ph i t o m t l p d ch v (ho c m t trong các subclasses hi n t iể ạ ộ ạ ả ạ ộ ớ ị ụ ặ ộ ệ ạ
c a nó). Trong implementation c a b n, b n c n cho ghi đè lên m t s method g i l i có thủ ủ ạ ạ ầ ộ ố ọ ạ ể
x lý các khía c nh quan tr ng c a vòng đ i service và cung c p m t c ch cho cácử ạ ọ ủ ờ ấ ộ ơ ế
component cho g n k t v i d ch v , n u thích h p. Các method quan tr ng nh t b n có nênắ ế ớ ị ụ ế ợ ọ ấ ạ
ghi đè lên g i là:ọ
onStartCommand()
H th ng g i method này khi component nh là m t activity, yêu c u các service đ c started,ệ ố ọ ư ộ ầ ượ
b ng cách g i startService (). Sau khi th c hi n ph ng pháp này, các service đ c kh i đ ngằ ọ ự ệ ươ ượ ở ộ
và có th ch y trong background vô th i h n. N u b n có tri n khai đi u này, đó là tráchể ạ ờ ạ ế ạ ể ề
nhi m c a b n đ d ng d ch v khi công vi c c a mình đ c th c hi n, b i stopSelf g iệ ủ ạ ể ừ ị ụ ệ ủ ượ ự ệ ở ọ
đi n tho i () ho c stopService (). (N u b n có ch mu n cung c p ràng bu c, b n không c nệ ạ ặ ế ạ ỉ ố ấ ộ ạ ầ
ph i tri n khai method này.)ả ể
onBind()
H th ng g i method này khi component mu n liên k t v i các service (ch ng h n nh choệ ố ọ ố ế ớ ẳ ạ ư
th c hi n RPC), b ng cách g i bindService(). Trong implementation c a b n c a ph ngự ệ ằ ọ ủ ạ ủ ươ
pháp này, b n có ph i cung c p m t giao di n đó khách hàng s d ng đ giao ti p v i d chạ ả ấ ộ ệ ử ụ ể ế ớ ị
v , b ng cách tr l i m t IBinder. B n luôn luôn ph i tri n khai ph ng pháp này, nh ng n uụ ằ ả ạ ộ ạ ả ể ươ ư ế
b n không mu n cho phép liên k t, sau đó b n nên tr v null.ạ ố ế ạ ở ề
onCreate()
H th ng g i method này khi service đ u tiên t o ra, đ th c hi n các th t c thi t l p m tệ ố ọ ầ ạ ể ự ệ ủ ụ ế ậ ộ
l n (tr c khi cu c g i ho c là onStartCommand() ho c onBind()). N u service đang ch y,ầ ướ ộ ọ ặ ặ ế ạ
ph ng pháp này không đ c g i.ươ ượ ọ
onDestroy()
H th ng g i method này khi service không còn đ c s d ng và đang đ c b phá h y.ệ ố ọ ượ ử ụ ượ ị ủ
service c a b n nên tri n khai đi u này cho làm s ch b t c ngu n tài nguyên nh ch đ ,ủ ạ ể ề ạ ấ ứ ồ ư ủ ề
ng i nghe đã đăng ký, nh n, vv Đây là các cu c g i qua d ch v này nh n đ c.ườ ậ ộ ọ ị ụ ậ ượ
Giao di n ng i dùng trong Androidệ ườ
Trong m t ng d ng Android, giao di n ng i dùng đ c xây d ng b ng cách s d ng Viewộ ứ ụ ệ ườ ượ ự ằ ử ụ
và ViewGroup đ i t ng. Có nhi u lo i quan đi m và các nhóm view, m i m t trong s đó làố ượ ề ạ ể ỗ ộ ố
h u du c a l p View. View objects là các đ n v c b n c a bi u hi n giao di n ng i dùngậ ệ ủ ớ ơ ị ơ ả ủ ể ệ ệ ườ
trên n n t ng Android. Các class xem nh là c s ph c v cho class con đ c g i làề ả ư ơ ở ụ ụ ượ ọ
"widget", trong đó cung c p đ y đ các đ i t ng th c hi n giao di n, gi ng nh các lĩnh v cấ ầ ủ ố ượ ự ệ ệ ố ư ự
văn b n và nút. Class ViewGroup ph c v nh là c s cho l p con đ c g i là " layouts",ả ụ ụ ư ơ ở ớ ượ ọ
cung c p các lo i khác nhau c a ki n trúc b trí, nh linear, tabular và relative.ấ ạ ủ ế ố ư
• M t View object là m t c u trúc d li u có đ c tính l u tr các thông s b trí và n iộ ộ ấ ữ ệ ặ ư ữ ố ố ộ
dung cho m t khu v c c th hình ch nh t c a màn hình.ộ ự ụ ể ữ ậ ủ
• M t View object x lý đo l ng riêng c a mình, b trí, b n v thay đ i t p trung,, diộ ử ườ ủ ố ả ẽ ổ ậ
chuy n, và phím/t ng tác c ch cho khu v c hình ch nh t c a màn hình.ể ươ ử ỉ ự ữ ậ ủ
Là m t object trong giao di n ng i dùng, view cũng là m t đi m t ng tác cho ng i sộ ệ ườ ộ ể ươ ườ ử
d ng và nh n các s ki n t ng tác.ụ ậ ự ệ ươ
Xem Hierarchy
Trên n n t ng Android, b n xác đ nh m t ho t đ ng c a giao di n ng i dùng b ng cách sề ả ạ ị ộ ạ ộ ủ ệ ườ ằ ử
d ng m t h th ng phân c p c a View và ViewGroup, nh trong bi u đ d i đây.ụ ộ ệ ố ấ ủ ư ể ồ ướ
Cây này có th đ c phân c p đ n gi n hay ph c t p nh b n c n nó đ c, và b n có thể ượ ấ ơ ả ứ ạ ư ạ ầ ượ ạ ể
xây d ng nó lên b ng cách s d ng thi t l p Android c a widgets và layouts đ nh s n, ho cự ằ ử ụ ế ậ ủ ị ẵ ặ
v i Views tùy ch nh mà b n t o ra cho mình.ớ ỉ ạ ạ
Đ đính kèm v i cây phân c p xem màn hình cho rendering, Ho t đ ng c a b n ph i g iể ớ ấ ạ ộ ủ ạ ả ọ
setContentView() Ph ng pháp và thông qua m t tham chi u đ n đ i t ng button g c.ươ ộ ế ế ố ượ ố
H th ng Android nh n đ c t p tin này và s d ng nó đ làm m t hi u l c, đo l ng, và vệ ố ậ ượ ậ ử ụ ể ấ ệ ự ườ ẽ
cây.
Nút g c c a các yêu c u phân c p cho nó v các nút con - l n l t, m i nút view là nhóm ch uố ủ ầ ấ ẽ ầ ượ ỗ ị
trách nhi m kêu g i m i l n view nút con riêng c a mình đ v có th yêu c u m t kíchệ ọ ỗ ầ ủ ể ẽ ể ầ ộ
th c và v trí trong nút g c., Nh ng đ i t ng viewgroup có quy t đ nh cu i cùng v n i làmướ ị ố ư ố ượ ế ị ố ề ơ
th nào, có th đ c cho m i nút con.ế ể ượ ỗ
Android parses các y u t c a cách b trí c a b n trong th t (t phía trên cùng c a cây phânế ố ủ ố ủ ạ ứ ự ừ ủ
c p), instantiating vi c xem và thêm chúng vào parent(s).ấ ệ
B i vì đây là nh ng trích ra trong tr t t , n u có các y u t đó ch ng chéo nhau các v trí, m tở ữ ậ ự ế ế ố ồ ị ộ
l n cu i đ đ c rút ra s n m trên đ u trang c a nh ng ng i khác tr c đây đ rút raầ ố ể ượ ẽ ằ ầ ủ ữ ườ ướ ể
không gian đó.
Giao di nệ
Cách ph bi n nh t đ xác đ nh b trí c a b n và th hi n s phân c p view là v i m t t pổ ế ấ ể ị ố ủ ạ ể ệ ự ấ ớ ộ ậ
tin XML layout. XML cung c p m t c c u có th đ c đ c cho b trí, gi ng nh HTML.ấ ộ ơ ấ ể ọ ượ ố ố ư
M i ph n t trong XML là c m t View ho c đ i t ng ViewGroup (ho c h u du đó). Cácỗ ầ ử ả ộ ặ ố ượ ặ ậ ệ
đ i t ng View là lá trong cây, ViewGroup đ i t ng là các nhánh trong cây.ố ượ ố ượ
Tên c a m t ph n t XML là t ng ng v i l p h c Java mà nó đ i di n. Vì v y, m t y u tủ ộ ầ ử ươ ứ ớ ớ ọ ạ ệ ậ ộ ế ố
<textview> t o ra m t TextView trong UI c a b n, và m t ph n tạ ộ ủ ạ ộ ầ ử <linearlayout> t o ra m tạ ộ
LinearLayout viewgroup. Khi b n t i m t layout resource, h th ng Android kh i ch y th iạ ả ộ ệ ố ở ạ ờ
gian các đ i t ng, t ng ng v i các y u t trong cách b trí c a b n. Ví d , m t b trí d cố ượ ươ ứ ớ ế ố ố ủ ạ ụ ộ ố ọ
đ n gi n v i m t l n xem văn b n và m t nút s nh th này:ơ ả ớ ộ ầ ả ộ ẽ ư ế
<? 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">
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView"/>
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
Chú ý r ng các ph n t LinearLayout ch a c TextView và Button. B n có th làm khácằ ầ ử ứ ả ạ ể
LinearLayout (ho c các lo i hình xem nhóm) bên trong đây, đ kéo dài s phân c p xem vàặ ạ ở ể ự ấ
t o ra m t b c c ph c t p h n. Đ bi t thêm v vi c xây d ng m t b c c UI, đ c Giaoạ ộ ố ụ ứ ạ ơ ể ế ề ệ ự ộ ố ụ ọ
di n kê khai.ệ
Có r t nhi u cách mà b n có th xem cách b trí c a b n. S d ng nhi u h n và các lo iấ ề ạ ể ố ủ ạ ử ụ ề ơ ạ
khác nhau c a các view group, b n có th c u trúc views con và view groups trong vô s cách .ủ ạ ể ấ ố
Xác đ nh các nhóm xem đ c cung c p b i Android (g i là layouts) bao g m LinearLayout,ị ượ ấ ở ọ ồ
RelativeLayout, TableLayout, GridLayout và khác. M i cung c p m t b duy nh t c a cácỗ ấ ộ ộ ấ ủ
thông s b trí đ c s d ng đ xác đ nh v trí c a views con và c c u layout Đ tìm hi uố ố ượ ử ụ ể ị ị ủ ơ ấ ể ể
v m t s các lo i khác nhau c a các view group đ c s d ng cho m t layout, đ c Giaoề ộ ố ạ ủ ượ ử ụ ộ ọ
di n đ i t ng th ng g p.ệ ố ượ ườ ặ
Widgets
Widget là m t object View ph c v nh m t giao di n đ t ng tác v i ng i dùng. Androidộ ụ ụ ư ộ ệ ể ươ ớ ườ
cung c p m t t p các widgets th c hi n đ y đ , gi ng nh các button, Checkbox, và text-ấ ộ ậ ự ệ ầ ủ ố ư
entry , do đó b n có th nhanh chóng xây d ng giao di n ng i dùng c a b n. M t s widgetsạ ể ự ệ ườ ủ ạ ộ ố
đ c cung c p b i Android ph c t p h n, gi ng nh m t date picker, clock, và zoom controls.ượ ấ ở ứ ạ ơ ố ư ộ
Nh ng nó không gi i h n trong các lo i widgets đ c cung c p b i các n n t ng Android.ư ớ ạ ạ ượ ấ ở ề ả
N u b n mu n làm m t cái gì thêm cho tùy bi n và t o ra các y u t c a hành đ ng c a b n,ế ạ ố ộ ế ạ ế ố ủ ộ ủ ạ
b n có th , b ng cách xác đ nh object view c a riêng b n ho c b ng cách m r ng và k t h pạ ể ằ ị ủ ạ ặ ằ ở ộ ế ợ
các Widget hi n có. Đ c ti p t i Building Custom Components. Đ có m t danh sách các v tệ ọ ế ạ ể ộ ậ
d ng đ c cung c p b i Android, xem gói android.widgetụ ượ ấ ở
UI S ki nự ệ
M t khi b n đã thêm m t s Views/widgets đ n giao di n, có th b n mu n bi t v s t ngộ ạ ộ ố ế ệ ể ạ ố ế ề ự ươ
tác c a ng i dùng v i h , vì v y b n có th th c hi n hành đ ng.ủ ườ ớ ọ ậ ạ ể ự ệ ộ
Đ đ c thông báo v UI events ng i dùng, b n c n ph i làm m t trong hai đi u:ể ượ ề ườ ạ ầ ả ộ ề
• Xác đ nh m t s ki n nghe và đăng ký nó v i các View. Khác th ng h n không, đây làị ộ ự ệ ớ ườ ơ
cách b n s l ng nghe cho các s ki n. Các class View có ch a m t t p h p các giaoạ ẽ ắ ự ệ ứ ộ ậ ợ
di n l ng nhau đ t tênệ ồ ặ On<something>Listener, đ u có m t ph ng pháp g i l iề ộ ươ ọ ạ
đ c g i làượ ọ On<something>() Ví d .ụ View.OnClickListener (đ x lý "nh p chu t"ể ử ấ ộ
trên m t View),ộ View.OnTouchListener ( đ x lý các s ki n màn hình c m ngể ử ự ệ ả ứ
trong m t View), vàộ View.OnKeyListener (đ x lý thi t b ép quan tr ng trong m tể ử ế ị ọ ộ
View). Vì v y n u b n mu n View c a b n đ c thông báo khi nó là " clicked" (ch ngậ ế ạ ố ủ ạ ượ ẳ
h n nh khi m t nút đ c ch n), th c hi n và xác đ nhạ ư ộ ượ ọ ự ệ ị OnClickListener c a nó g iủ ọ
method onClick() (n i b n th c hi n các hành đ ng sau khi nh p chu t), và đăng ký nóơ ạ ự ệ ộ ấ ộ
vào Xem v iớ setOnClickListener()
• Ghi đè m t callback method hi n cho View. Đây là nh ng gì b n nên làm gì khi b n đãộ ệ ữ ạ ạ
th c hi n l p View c a riêng b n và mu n l ng nghe cho các s ki n c th x y raự ệ ớ ủ ạ ố ắ ự ệ ụ ể ả
trong nó. Ví d v các s ki n b n có th x lý bao g m màn hình là touchedụ ề ự ệ ạ ể ử ồ
onTouchEvent() khi trackball là di chuy nể onTrackballEvent() ho c khi m t phím trênặ ộ
thi t b đ c nh nế ị ượ ấ onKeyDown(). Đi u này cho phép b n xác đ nh các hành vi m cề ạ ị ặ
đ nh cho t ng s ki n bên trong tuỳ ch nh View c a b n và xác đ nh xem s ki n nàyị ừ ự ệ ỉ ủ ạ ị ự ệ
c n đ c thông qua ngày đ View con khác. M t l n n a, đây là nh ng callbacks Viewầ ượ ể ộ ầ ữ ữ
class, do đó, c h i duy nh t c a b n đ xác đ nh đó là khi b n xây d ng m t ph n tùyơ ộ ấ ủ ạ ể ị ạ ự ộ ầ
ch nh.ỉ
Menus
Menu đ n có m t ph n quan tr ng c a giao di n ng i dùng trong m t ng d ng. Menusơ ộ ầ ọ ủ ệ ườ ộ ứ ụ
cung c p m t giao di n đáng tin c y cho th y r ng các ch c năng ng d ng và cài đ t. Trongấ ộ ệ ậ ấ ằ ứ ứ ụ ặ
trình đ n ng d ng ph bi n nh t là ti t l b ng cách b m phím MENU trên thi t b . Tuyơ ứ ụ ổ ế ấ ế ộ ằ ấ ế ị
nhiên, b n cũng có th thêm Context Menus, có th hi n th khi ng i s d ng máy nh n vàạ ể ể ể ị ườ ử ụ ấ
n m gi phím trên m t m c. Th c đ n cũng đ c h th ng phân c p c u trúc b ng cách sắ ữ ộ ụ ự ơ ượ ệ ố ấ ấ ằ ử
d ng m t xem, nh ng b n không xác đ nh c u trúc này cho mình.ụ ộ ư ạ ị ấ
Thay vào đó, b n xác đ nhạ ị onCreateOptionsMenu() ho cặ onCreateContextMenu() g iọ
method cho ho t đ ng c a b n và tuyên b các m c mà b n mu n bao g m trong menu c aạ ộ ủ ạ ố ụ ạ ố ồ ủ
b n. Trong m t th i gian thích h p, Android s t đ ng t o ra h th ng View phân c p c nạ ộ ờ ợ ẽ ự ộ ạ ệ ố ấ ầ
thi t cho menu, và rút ra m i trong m i menu items đó.ế ỗ ỗ
Menus cũng x lý các s ki n riêng c a nó, do đó không c n ph i đăng ký s ki n listenersử ự ệ ủ ầ ả ự ệ
trên các item trong menu c a b n. Khi m t item trong menu c a b n đ c ch n,ủ ạ ộ ủ ạ ượ ọ
onOptionsItemSelected() ho cặ onOptionsItemSelected() onContextItemSelected() method
onContextItemSelected() s đ c g i b ng framework. Và cũng gi ng nh layout c a b n,ẽ ượ ọ ằ ố ư ủ ạ
b n có tùy ch n đ khai báo các menu item cho b n trong m t t p tin XML. Đ c T o Menusạ ọ ể ạ ộ ệ ọ ạ
đ tìm hi u thêm.ể ể
Adapters
Th nh tho ng b n s mu n populate m t view group v i m t s thông tin mà không th hard-ỉ ả ạ ẽ ố ộ ớ ộ ố ể
coded đ c, thay vào đó, b n mu n bind đ xem m t ngu n d li u bên ngoài. Đ làm đi uượ ạ ố ể ộ ồ ữ ệ ể ề
này, b n s d ng m t AdapterView xem nh là view group c a b n và View con đ c kh iạ ử ụ ộ ư ủ ạ ượ ở
t o và populated v i d li u t Adapter. Các đ i t ng AdapterView là m t implementationạ ớ ữ ệ ừ ố ượ ộ
c a ViewGroup xác đ nh nh ng view con c a nó d a trên m t đ i t ng Adapter nh t đ nh.ủ ị ữ ủ ự ộ ố ượ ấ ị
Adapter các hành vi nh là chuy n phát nhanh gi a các ngu n d li u c a b n (có l là m tư ể ữ ồ ữ ệ ủ ạ ẽ ộ
m ng c a chu i bên ngoài) và AdapterView, hi n th nó trong đó. Có m t s hi n th c c aả ủ ỗ ể ị ộ ố ệ ự ủ
class Adapter, cho nhi m v c th , ch ng h n nh CursorAdapter vi c đ c d li u c s dệ ụ ụ ể ẳ ạ ư ệ ọ ữ ệ ơ ở ữ
li u t m t Cursor, ho c m t ArrayAdapter đ c t m t m ng tùy ý. Đ tìm hi u thêm v cáchệ ừ ộ ặ ộ ọ ừ ộ ả ể ể ề
s d ng m t adapter cho populate views c a b n, hãy đ c đóng vào d li u v i AdapterView.ử ụ ộ ủ ạ ọ ữ ệ ớ
Styles and Themes
Có l b n không hài lòng v i dáng v c a các widgets tiêu chu n. Đ s a đ i chúng, b n cóẽ ạ ớ ẻ ủ ẩ ể ử ổ ạ
th t o m t s style riêng và ch đ c a b n.ể ạ ộ ố ủ ề ủ ạ
• M t Style là m t t p h p c a m t hay nhi u thu c tính đ nh d ng mà b n có th ápộ ộ ậ ợ ủ ộ ề ộ ị ạ ạ ể
d ng nh m t đ n v đ n các y u t cá nhân trong layout c a b n. Ví d , b n có thụ ư ộ ơ ị ế ế ố ủ ạ ụ ạ ể
xác đ nh m t Style ch đ nh m t văn b n kích th c và màu s c nh t đ nh, sau đó ápị ộ ỉ ị ộ ả ướ ắ ấ ị
d ng nó đ ch các y u t View c th .ụ ể ỉ ế ố ụ ể
• M t Theme là m t t p h p c a m t hay nhi u thu c tính đ nh d ng mà b n có th ápộ ộ ậ ợ ủ ộ ề ộ ị ạ ạ ể
d ng nh m t đ n v đ n t t c các ho t đ ng trong m t ng d ng, ho c ch ho tụ ư ộ ơ ị ế ấ ả ạ ộ ộ ứ ụ ặ ỉ ạ
đ ng đ n l . Ví d , b n có th đ nh nghĩa m t theme mà b màu s c c th cho khungộ ơ ẻ ụ ạ ể ị ộ ộ ắ ụ ể
c a s và n n b ng, và đ t kích c ch và màu s c cho các menu. Theme này sau đó cóử ổ ề ả ặ ỡ ữ ắ
th đ c áp d ng cho các ho t đ ng c th ho c ng d ng toàn b . Styles and themesể ượ ụ ạ ộ ụ ể ặ ứ ụ ộ
là ngu n tài nguyên.ồ
Android cung c p m t s ki u m c đ nh và style and themes mà b n có th s d ng, ho cấ ộ ố ể ặ ị ạ ể ử ụ ặ
b n có th phát tri n riêng tài nguyên style and theme c a b n. Learn more about using stylesạ ể ể ủ ạ
and themes in the Applying Styles and Themes document. Tìm hi u thêm v cách s d ngể ề ử ụ
phong cách và ch đ trong các ng d ng Styles và tài li u đ .ủ ề ứ ụ ệ ề
K thu t x lý b nh trong Android Mobileỹ ậ ử ộ ớ
Android ng d ng, trên T-Mobile G1, đ c gi i h n ít nh t 16 MB c a heap. Đó là b nhứ ụ ượ ớ ạ ấ ủ ộ ớ
cho đi n tho i và r t ít cho nh ng gì m t s nhà phát tri n mu n đ t đ c. Th m chí n uệ ạ ấ ữ ộ ố ể ố ạ ượ ậ ế
b n không k ho ch s d ng t t c các b nh này, b n nên s d ng ít nh t có th cho cácạ ế ạ ử ụ ấ ả ộ ớ ạ ử ụ ấ ể
ng d ng khác ch y mà không ph i đào th i chúng.ứ ụ ạ ả ả
Các ng d ng khác Android có th gi trong b nh , nhanh h n, cho ng i s d ng đứ ụ ể ữ ộ ớ ơ ườ ử ụ ể
chuy n đ i gi a các ng d ng c a mình.ể ổ ữ ứ ụ ủ
Là m t ph n c a công vi c c a tôi, tôi ch y vào các v n đ rò r b nh trong các ng d ngộ ầ ủ ệ ủ ạ ấ ề ỉ ộ ớ ứ ụ
Android và chúng tôi th y đ c ph n l n th i gian do các sai l m: gi quá lâu cho tham chi uấ ượ ầ ớ ờ ầ ữ ế
đ n m t Context. Trên Android, m t Context đ c s d ng cho nhi u ho t đ ng, nh ng chế ộ ộ ượ ử ụ ề ạ ộ ư ủ
y u là đ t i và truy c p tài nguyên. Đây là lý do t i sao t t c các widgets nh n đ c m t sế ể ả ậ ạ ấ ả ậ ượ ộ ố
Context trong xây d ng c a h . Trong m t ng d ng bình th ng c a Android, b n th ng cóự ủ ọ ộ ứ ụ ườ ủ ạ ườ
hai lo i Context Activity và Application. Nó th ng là m t trong nh ng cái đ u tiên mà nhàạ ườ ộ ữ ầ
phát tri n đi đ n các classes và methods c n m t Context :ể ế ầ ộ
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
setContentView(label);
}
Đi u này có nghĩa là Views có m t tham chi u đ n toàn b ho t đ ng và do đó b t c đi u gìề ộ ế ế ộ ạ ộ ấ ứ ề
đ n Activity đang n m gi ; th ng đ c View toàn b h th ng phân c p và t t c cácế ắ ữ ườ ượ ộ ệ ố ấ ấ ả
ngu n tài nguyên c a nó. Vì v y, n u b n b rò r các Context ( "leak" có nghĩa là nh v y b nồ ủ ậ ế ạ ị ỉ ư ậ ạ
gi m t tham chi u đ n nó, ngăn ch n các GC t thu th p), b n b rò r r t nhi u b nh . Ròữ ộ ế ế ặ ừ ậ ạ ị ỉ ấ ề ộ ớ
r toàn b ho t đ ng có th th c s d dàng n u b n không c n th n. Khi đ nh h ng s thayỉ ộ ạ ộ ể ự ự ễ ế ạ ẩ ậ ị ướ ẽ
đ i h th ng, theo m c đ nh, tiêu hu activity hi n t i và t o ra m t cái m i trong khi giổ ệ ố ặ ị ỷ ệ ạ ạ ộ ớ ữ
tr ng thái.ạ Trong khi làm đi u đó, Android s t i l i giao di n c a ng d ng t các ngu n tàiề ẽ ả ạ ệ ủ ứ ụ ừ ồ
nguyên. Bây gi hãy t ng t ng b n đã vi t m t ng d ng v i m t bitmap l n mà b nờ ưở ượ ạ ế ộ ứ ụ ớ ộ ớ ạ
không mu n thay phiên t t c . Cách đ n gi n nh t đ gi cho nó xung quanh và không ph iố ấ ả ơ ả ấ ể ữ ả
t i xoay vòng l i m i ngày nên đ nó trong static field:ả ạ ỗ ể
private static Drawable sBackground;
@Override
protected void onCreate(Bundle state) {
super.onCreate(state);
TextView label = new TextView(this);
label.setText("Leaks are bad");
if (sBackground == null) {
sBackground = getDrawable(R.drawable.large_bitmap);
}
label.setBackgroundDrawable(sBackground);
setContentView(label);
}
Mã này là r t nhanh và cũng r t sai, nó t o ra leak các ho t đ ng đ u tiên khi thay đ i đ nhấ ấ ạ ạ ộ ầ ổ ị
h ng. Khi m t Drawable đ c đính kèm đ View, view đ c thi t l p nh là m t callbackướ ộ ượ ể ượ ế ậ ư ộ
trên drawable. Trong đo n mã trên, đi u này có nghĩa là drawable có m t tham chi u đ nạ ề ộ ế ế
TextView mà t nó có m t tham chi u đ n các ho t đ ng (trong Context mà l n l t có thamự ộ ế ế ạ ộ ầ ượ
chi u khá nhi u đ n b t c đi u gì (tùy thu c vào mã c a b n.)ế ề ế ấ ứ ề ộ ủ ạ
Ví d này là m t trong nh ng tr ng h p đ n gi n nh t leaking c a các Context và b n cóụ ộ ữ ườ ợ ơ ả ấ ủ ạ
th xem th nào, chúng tôi đã làm vi c xung quanh nó trong mã ngu n c a các màn hình chể ế ệ ồ ủ ủ
(tìm unbindDrawables() method) b ng cách thi t l p các callbacks drawables l u tr đ nullằ ế ậ ư ữ ể
khi Activity này phá h y. Đi u thú v , có nh ng tr ng h p b n có th t o ra m t chu i cácủ ề ị ữ ườ ợ ạ ể ạ ộ ỗ
hoàn c nh b rò r , và khó khăn. Nó làm cho b n h t b nh khá nhanh chóng.ả ị ỉ ạ ế ộ ớ
Có hai cách d dàng đ tránh rò r b nh ng c nh có liên quan. The most obvious one is toễ ể ỉ ộ ớ ữ ả
avoid escaping the context outside of its own scope. M t rõ ràng nh t là đ tránh b i c nh bênộ ấ ể ố ả
ngoài ph m vi c a chính mình.ạ ủ
Ví d trên cho th y tr ng h p c a m t tham chi u tĩnh nh ng bên trong classe và ti m nụ ấ ườ ợ ủ ộ ế ư ề ẩ
reference cho class bên ngoài có th nguy hi m nh nhau. The second solution is to use theể ể ư
Application context. Gi i pháp th hai là s d ng ng c nh Application.ả ứ ử ụ ữ ả
Context này s không sao mi n là ng d ng c a b n v n ho t đ ng và không ph thu c vàoẽ ễ ứ ụ ủ ạ ẫ ạ ộ ụ ộ
chu kỳ ho t đ ng c a activities. N u b n có k ho ch duy trì lâu dài s ng các đ i t ng màạ ộ ủ ế ạ ế ạ ố ố ượ
c n m t b i c nh đó, nh đ i t ng áp d ng. B n có th có đ c nó m t cách d dàng b ngầ ộ ố ả ớ ố ượ ụ ạ ể ượ ộ ễ ằ
cách g i Context.getApplicationContext() ho c Activity.getApplication()ọ ặ
Tóm l i, đ tránh nh ng context có liên quan rò r b nh , xin hãy nh :ạ ể ữ ỉ ộ ớ ớ
• Không gi tham chi u đ n context activity quá lâu(m t tham chi u đ n m t activityữ ế ế ộ ế ế ộ
nên có chu kỳ s ng t ng t nh các ho t đ ng chính nó)ố ươ ự ư ạ ộ
• Hãy th s d ng các context c a application thay vì context c a activityử ử ụ ủ ủ
• Tránh non-static bên trong các classes c a m t activity n u b n không ki m soát vòngủ ộ ế ạ ể
đ i c a nó, s d ng m t class static bên trong và th c hi n m t tham chi u y u đ nờ ủ ử ụ ộ ự ệ ộ ế ế ể
activity bên trong. Các gi i pháp cho v n đ này là s d ng m t static class bên trongả ấ ề ử ụ ộ
v i m t WeakReference cho class bên ngoài, nh th c hi n trong ViewRoot và l p đóớ ộ ư ự ệ ớ
c a nó ch ng h nủ ẳ ạ
• M t b thu rác không ph i là m t b o hi m ch ng rò r b nh .ộ ộ ả ộ ả ể ố ỉ ộ ớ
Khai báo Layout trong Android
Layout c a b n là ki n trúc cho các giao di n ng i dùng trong m t Activity. Nó xác đ nh củ ạ ế ệ ườ ộ ị ơ
c u và n m gi các y u t xu t hi n cho ng i dùng th y. B n có th khai báo layout c aấ ắ ữ ế ố ấ ệ ườ ấ ạ ể ủ
b n theo hai cách:ạ
• Khai báo ph n t UI trong XML.ầ ử Android cung c p m t v n t v ng đ n gi n XMLấ ộ ố ừ ự ơ ả
t ng ng v i các l p View và subclasses, ch ng h n nh widget và layout.ươ ứ ớ ớ ẳ ạ ư
• Kh i t o các y u t layout trong th i gian ch y.ở ạ ế ố ờ ạ ng d ng c a b n th t o ra đ iỨ ụ ủ ạ ể ạ ố
t ng View và ViewGroup (và thao tác các properties c a nó) theo ch ng trình.ượ ủ ươ
Vi t XMLế
S d ng v n t v ng c a Android XML, b n có h nhanh chóng thi t k UI layout và cácử ụ ố ừ ự ủ ạ ể ế ế
thành ph n ch a chúng, gi ng nh cách b n t o các trang web trong HTML - v i m t lo t cácầ ứ ố ư ạ ạ ớ ộ ạ
ph n t l ng nhau.ầ ử ồ
M i t p tin layout ph i bao g m ph n t g c m t cách chính xác, và ph i là m t đ i t ngỗ ậ ả ồ ầ ử ố ộ ả ộ ố ượ
View ho c ViewGroup. M t khi b n đã xác đ nh các ph n t g c, b n có th thêm đ i t ngặ ộ ạ ị ầ ử ố ạ ể ố ượ
layout b sung ho c các widget nh là các ph n t con cho t ng b c xây d ng m t h th ngổ ặ ư ầ ử ừ ướ ự ộ ệ ố
View đ nh nghĩa layout c a b n. Ví d , đây là có layout XML có s d ng m t LinearLayoutị ủ ạ ụ ử ụ ộ
d c cho t ch c m t TextView và m t Button:ọ ổ ứ ộ ộ
<?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" >
<TextView android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
Sau khi b n đã khai báo layout c a b n trong XML, l u t p tin v i ph n m r ng .xml, trongạ ủ ạ ư ậ ớ ầ ở ộ
th m c res/layout/ d án Android c a b n, do đó, đ đúng cách biên d ch.ư ụ ự ủ ạ ể ị
N p tài nguyên XMLạ
Khi b n biên d ch ng d ng c a b n, m i t p tin XML layout là biên d ch vào m t ngu n tàiạ ị ứ ụ ủ ạ ỗ ậ ị ộ ồ
nguyên View. B n c n ph i t i các ngu n tài nguyên layout t mã ng d ng c a b n, trongạ ầ ả ả ồ ừ ứ ụ ủ ạ
Activity.onCreate() callback implementation c a b n. Làm nh v y b ng cách g iủ ạ ư ậ ằ ọ
setContentView(), qua nó tham chi u cho tài nguyên layout c a b n trong các hình th c:ế ủ ạ ứ
R.layout.layout_file_name
Ví d :ụ n u XML layout c a b n đ c l u nhế ủ ạ ượ ư ư main_layout.xml, b n s t i nó cho Activityạ ẽ ả
c a b n nh sau:ủ ạ ư
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main_layout);
}
Thu c tính c a Layout khai báo trong Androidộ ủ
M i đ i t ng View và ViewGroup h tr đa d ng c a riêng nó các thu c tính XML. M t sỗ ố ượ ỗ ợ ạ ủ ộ ộ ố
thu c tính đ c c th cho m t đ i t ng View (ví d , TextView h tr thu c tính textSize),ộ ượ ụ ể ộ ố ượ ụ ỗ ợ ộ
nh ng các thu c tính này cũng đ c k th a b i b t c đ i t ng View có th m r ng l pư ộ ượ ế ừ ở ấ ứ ố ượ ể ở ộ ớ
này. M t s đ c s d ng chung cho t t c đ i t ng View, b i vì nó đ c th a k t l pộ ố ượ ử ụ ấ ả ố ượ ở ượ ừ ế ừ ớ
View g c(gi ng nh các thu c tính id). Và, các thu c tính khác đ c coi là "tham s layout",ố ố ư ộ ộ ượ ố
mà đ c thu c tính mô t đ nh h ng layout nh t đ nh c a đ i t ng View, theo đ nh nghĩaượ ộ ả ị ướ ấ ị ủ ố ượ ị
c a đ i t ng đó là đ i t ng ViewGroup parent.ủ ố ượ ố ượ
ID
B t kỳ đ i t ng View có th có ID s nguyên liên k t v i nó, đ nh n di n ra các View bênấ ố ượ ể ố ế ớ ể ậ ệ
trong cây. Khi ng d ng biên d ch, ID này là tham chi u nh là m t s nguyên, nh ng IDứ ụ ị ế ư ộ ố ư
th ng đ c giao trong layout các file XML nh m t chu i, trong thu c tính id. Đây là thu cườ ượ ư ộ ỗ ộ ộ
tính chung cho t t c đ i t ng View (đ c đ nh nghĩa b i l p View) và b n s s d ng nóấ ả ố ượ ượ ị ở ớ ạ ẽ ử ụ
r t th ng xuyên. Cú pháp c a có ID, bên trong th XML là:ấ ườ ủ ẻ
android:id="@+id/my_button"
T i bi u t ng (@) t i đ u c a chu i cho th y r ng cú pháp XML c n phân tích và m r ngạ ể ượ ạ ầ ủ ỗ ấ ằ ầ ở ộ
ph n còn l i c a chu i ID và xác đ nh nó nh là m t ngu n tài nguyên ID. Các bi u t ngầ ạ ủ ỗ ị ư ộ ồ ể ượ
c ng (+) có nghĩa r ng đây là m t tên tài nguyên m i ph i đ c t o ra và thêm đ ngu n tàiộ ằ ộ ớ ả ượ ạ ể ồ
nguyên c a chúng tôi (trong file R.java). Có m t s tài nguyên ID khác đ c cung c p b i cácủ ộ ố ượ ấ ở
khuôn kh Android.ổ
android:id="@android:id/empty"
Đ t o ra views và tham kh o chúng t ng d ng, m t mô hình ph bi n là:ể ạ ả ừ ứ ụ ộ ổ ế
• Xác đ nh group/widget trong t p tin layout và gán cho nó m t mã s duy nh t:ị ậ ộ ố ấ
<Button android:id="@+id/my_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/my_button_text"/>
• Sau đó t o m t instance c a đ i t ng group và n m b t nó t layout (thông th ngạ ộ ủ ố ượ ắ ắ ừ ườ
dùng trong method onCreate()):
Button myButton = (Button) findViewById(R.id.my_button);
Xác đ nh ID cho các đ i t ng group là quan tr ng khi t o ra m t RelativeLayout. Trong cáchị ố ượ ọ ạ ộ
b trí t ng đ i, views sibling có th xác đ nh layout c a mình t ng đ i khác group sibling,ố ươ ố ể ị ủ ươ ố
đó là tham chi u b i ID duy nh t.ế ở ấ
M t ID không c n ph i là duy nh t trong su t toàn b cây, nh ng nó c n là duy nh t trongộ ầ ả ấ ố ộ ư ầ ấ
m t ph n c a cây b n đang tìm ki m (th ng có th là toàn b cây, vì v y t t nh t cho làộ ầ ủ ạ ế ườ ể ộ ậ ố ấ
hoàn toàn đ c nh t khi có th ).ộ ấ ể
Layout Parameters
layout các thu c tính có tên là XML đ nh nghĩa các thông s layout_something layout cho cácộ ị ố
View thích h p cho các ViewGroup trong đó c trú.ợ ư
M i l p ViewGroup th c hi n m r ng m t l p ViewGroup.LayoutParams l ng nhau. L pỗ ớ ự ệ ở ộ ộ ớ ồ ớ
này có ch a các lo i properties xác đ nh kích th c và v trí cho t ng group child, nh thíchứ ạ ị ướ ị ừ ư
h p cho nhóm group. Nh b n nhìn th y hình 1, các nhóm parent group thông s xác đ nhợ ư ạ ấ ở ố ị
layout cho t ng group con(bao g m c nhóm group child).ừ ồ ả
( nh minh h a đ c s d ng t http://developer.android.com/images/layoutparams.png)Ả ọ ượ ử ụ ừ

Contenu connexe

Similaire à Android program 6167

Bài 2: J2EE - Lập Trình Mạng Nâng Cao
Bài 2: J2EE - Lập Trình Mạng Nâng CaoBài 2: J2EE - Lập Trình Mạng Nâng Cao
Bài 2: J2EE - Lập Trình Mạng Nâng CaoTuan Nguyen
 
Auto cad nâng câo và lập trình autocad trần anh bình
Auto cad nâng câo và lập trình autocad   trần anh bìnhAuto cad nâng câo và lập trình autocad   trần anh bình
Auto cad nâng câo và lập trình autocad trần anh bìnhTiến Quang
 
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libreBai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libreTony Khánh
 
lam_chat_room_3348.pdf
lam_chat_room_3348.pdflam_chat_room_3348.pdf
lam_chat_room_3348.pdfdinhson2000
 
Linq to-sql-1221970293242272-9
Linq to-sql-1221970293242272-9Linq to-sql-1221970293242272-9
Linq to-sql-1221970293242272-9m22m
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận winccNamzekeng Nzk
 
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]bookbooming1
 
ADO .NET Entity framework
ADO .NET Entity frameworkADO .NET Entity framework
ADO .NET Entity frameworkMinh Tri Lam
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Trần Thiên Đại
 
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)CNTT-DHQG
 
Xây dựng website thương mại điện tử
Xây dựng website thương mại điện tửXây dựng website thương mại điện tử
Xây dựng website thương mại điện tửCat Van Khoi
 
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...Trần Đức Anh
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycleVu Dang
 
Ebook drupal 7 vn
Ebook drupal 7 vnEbook drupal 7 vn
Ebook drupal 7 vngaugauvn
 
Thiet ke va lap trinh web
Thiet ke va lap trinh webThiet ke va lap trinh web
Thiet ke va lap trinh webQaPhy-Duong MTE
 

Similaire à Android program 6167 (20)

Bài 2: J2EE - Lập Trình Mạng Nâng Cao
Bài 2: J2EE - Lập Trình Mạng Nâng CaoBài 2: J2EE - Lập Trình Mạng Nâng Cao
Bài 2: J2EE - Lập Trình Mạng Nâng Cao
 
Auto cad nâng câo và lập trình autocad trần anh bình
Auto cad nâng câo và lập trình autocad   trần anh bìnhAuto cad nâng câo và lập trình autocad   trần anh bình
Auto cad nâng câo và lập trình autocad trần anh bình
 
Bai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libreBai giang ktlt-v2010_academia.edu-libre
Bai giang ktlt-v2010_academia.edu-libre
 
lam_chat_room_3348.pdf
lam_chat_room_3348.pdflam_chat_room_3348.pdf
lam_chat_room_3348.pdf
 
Os php-7oohabits
Os php-7oohabitsOs php-7oohabits
Os php-7oohabits
 
Linq to-sql-1221970293242272-9
Linq to-sql-1221970293242272-9Linq to-sql-1221970293242272-9
Linq to-sql-1221970293242272-9
 
Th 21-full-permission-
Th 21-full-permission-Th 21-full-permission-
Th 21-full-permission-
 
tiểu luận wincc
tiểu luận wincctiểu luận wincc
tiểu luận wincc
 
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]Hệ quản trị cơ sở dữ liệu   tạ thị thu phượng[bookbooming.com]
Hệ quản trị cơ sở dữ liệu tạ thị thu phượng[bookbooming.com]
 
Tailieuvkt hk3
Tailieuvkt hk3Tailieuvkt hk3
Tailieuvkt hk3
 
ADO .NET Entity framework
ADO .NET Entity frameworkADO .NET Entity framework
ADO .NET Entity framework
 
Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)Nền tảng lập trình java (Core java)
Nền tảng lập trình java (Core java)
 
Chuong 10 multi user
Chuong 10   multi userChuong 10   multi user
Chuong 10 multi user
 
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
THCS_W04_BaiGiang_CÁC KIẾN THỨC CƠ BẢN VỀ CÔNG NGHỆ THÔNG TIN (2)
 
Xây dựng website thương mại điện tử
Xây dựng website thương mại điện tửXây dựng website thương mại điện tử
Xây dựng website thương mại điện tử
 
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...Tailieu.vncty.com   nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
Tailieu.vncty.com nghien cuu-ve_mang_luu_tru_va_de_xuat_phuong_an_mang_luu_...
 
Android chapter03-life-cycle
Android chapter03-life-cycleAndroid chapter03-life-cycle
Android chapter03-life-cycle
 
Ebook drupal 7 vn
Ebook drupal 7 vnEbook drupal 7 vn
Ebook drupal 7 vn
 
Chuong 02 access
Chuong 02   accessChuong 02   access
Chuong 02 access
 
Thiet ke va lap trinh web
Thiet ke va lap trinh webThiet ke va lap trinh web
Thiet ke va lap trinh web
 

Android program 6167

  • 1. Tìm hi u v Androidể ề Android là gì? Android là m t ph n m m stack cho các thi t b di đ ng bao g m m t h đi u hành,ộ ầ ề ế ị ộ ồ ộ ệ ề middleware và các ng d ng quan tr ng. Android SDK cung c p các công c và API c n thi tứ ụ ọ ấ ụ ầ ế đ b t đ u phát tri n các ng d ng trên n n t ng Android b ng cách s d ng ngôn ng l pể ắ ầ ể ứ ụ ề ả ằ ử ụ ữ ậ trình Java. Nh ng đ c tínhữ ặ • ng d ng framework cho phép tái s d ng và thay th các thành ph nỨ ụ ử ụ ế ầ • Dalvik máy o đ c t i u hóa cho các thi t b di đ ngả ượ ố ư ế ị ộ • Tích h p trình duy t d a trên đ ng c WebKit mã ngu n mợ ệ ự ộ ơ ồ ở • T i u hóa đ h a đ c h tr b i m t tùy ch nh đ h a 2D th vi n; đ h a 3D d aố ư ồ ọ ượ ỗ ợ ở ộ ỉ ồ ọ ư ệ ồ ọ ự trên nh ng đ c đi m k thu t OpenGL ES 1,0 (Tùy chôn tăng t c ph n c ng )ữ ặ ể ỹ ậ ố ầ ứ • SQLite cho vi c l u tr d li u c u trúcệ ư ữ ữ ệ ấ • Ph ng ti n truy n thông h tr cho âm thanh ph bi n, video, và v n còn đ nh d ngươ ệ ề ỗ ợ ổ ế ẫ ị ạ hình nh (MPEG4, H.264, MP3, AAC, AMR, JPG, PNG, GIF)ả • GSM đi n tho i (ph thu c ph n c ng)ệ ạ ụ ộ ầ ứ • Bluetooth, EDGE, 3G và WiFi (ph thu c ph n c ng )ụ ộ ầ ứ • Camera, GPS, la bàn, và gia t c (ph thu c ph n c ng)ố ụ ộ ầ ứ • Môi tr ng phát tri n phong phú bao g m m t mô ph ng thi t b , công c đ g l i,ườ ể ồ ộ ỏ ế ị ụ ể ỡ ỗ b nh và profiling hi u su t, và m t plugin cho IDE Eclipseộ ớ ệ ấ ộ Ki n trúc Androidế S đ d i đây cho th y các thành ph n chính c a h đi u hành Android.ơ ồ ướ ấ ầ ủ ệ ề M i ph n đ cỗ ầ ượ mô t chi ti t h n d i đây.ả ế ơ ướ
  • 2. ng d ngỨ ụ Android s ship v i m t b các ng d ng lõi bao g m m t ng d ng email, l ch ch ng trìnhẽ ớ ộ ộ ứ ụ ồ ộ ứ ụ ị ươ tin nh n SMS,, b n đ , trình duy t, liên l c, và nh ng ng i khác. T t c các ng d ng đ cắ ả ồ ệ ạ ữ ườ ấ ả ứ ụ ượ vi t b ng cách s d ng ngôn ng l p trình Java.ế ằ ử ụ ữ ậ ng d ng FrameworkỨ ụ B ng cách cung c p m t n n t ng phát tri n m , Android cung c p cho các nhà phát tri n khằ ấ ộ ề ả ể ở ấ ể ả năng đ xây d ng các ng d ng vô cùng phong phú và sáng t o. Các nhà phát tri n đ c mi nể ự ứ ụ ạ ể ượ ễ phí đ t n d ng l i th c a các thi t b ph n c ng, thông tin đ a đi m truy c p, d ch v ch yể ậ ụ ợ ế ủ ế ị ầ ứ ị ể ậ ị ụ ạ n n, thi t l p h th ng báo đ ng, thêm các thông báo đ n các thanh tr ng thái, và nhi u,ề ế ậ ệ ố ộ ế ạ ề nhi u h n n a.ề ơ ữ Các nhà phát tri n có th truy c p vào các API cùng m t khuôn kh đ c s d ng b i các ngể ể ậ ộ ổ ượ ử ụ ở ứ d ng lõi. Ki n trúc ng d ng đ c thi t k đ đ n gi n hóa vi c tái s d ng các thành ph n;ụ ế ứ ụ ượ ế ế ể ơ ả ệ ử ụ ầ b t kỳ ng d ng có th xu t b n các kh năng c a mình và ng d ng nào khác sau đó có thấ ứ ụ ể ấ ả ả ủ ứ ụ ể làm cho vi c s d ng nh ng kh năng (tùy thu c vào ch b o đ m thi hành theo khuôn kh ).ệ ử ụ ữ ả ộ ế ả ả ổ C ch này cũng cho phép các thành ph n đ c thay th b i ng i s d ng.ơ ế ầ ượ ế ở ườ ử ụ
  • 3. N m bên d i t t c các ng d ng là m t t p h p các d ch v và h th ng, bao g m:ằ ướ ấ ả ứ ụ ộ ậ ợ ị ụ ệ ố ồ • M t t p phong phú và m r ng c a xem có th đ c s d ng đ xây d ng m t ngộ ậ ở ộ ủ ể ượ ử ụ ể ự ộ ứ d ng, bao g m các danh sách, l i, h p văn b n, các nút, và th m chí m t trình duy tụ ồ ướ ộ ả ậ ộ ệ web nhúng • Nhà cung c p n i dung cho phép các ng d ng đ truy c p d li u t các ng d ngấ ộ ứ ụ ể ậ ữ ệ ừ ứ ụ khác (nh Contacts), ho c chia s d li u c a riêng mìnhư ặ ẻ ữ ệ ủ • M t qu n lý tài nguyên, cung c p quy n truy c p vào tài nguyên phi mã nh dây b nộ ả ấ ề ậ ư ả đ a hoá, đ h a, và b trí t p tin.ị ồ ọ ố ậ • M t Notification Manager cho phép t t c các ng d ng tùy ch nh đ hi n th c nh báoộ ấ ả ứ ụ ỉ ể ể ị ả trong thanh tr ng thái.ạ • M t Activity Manager qu n lý vòng đ i c a các ng d ng và cung c p m t backstackộ ả ờ ủ ứ ụ ấ ộ ph bi n chuy n h ng.ổ ế ể ướ Th vi nư ệ Android bao g m m t b th vi n C/C++, đ c s d ng b i các thành ph n khác nhau c aồ ộ ộ ư ệ ượ ử ụ ở ầ ủ h th ng Android. Nh ng kh năng ti p xúc v i các nhà phát tri n thông qua các khuôn khệ ố ữ ả ế ớ ể ổ ng d ng Android. M t s các th vi n lõi đ c li t kê d i đây:ứ ụ ộ ố ư ệ ượ ệ ướ • System C library - m t BSD-có ngu n g c th c hi n các h th ng th vi n chu n Cộ ồ ố ự ệ ệ ố ư ệ ẩ (LIBC), đi u ch nh cho nhúng d a trên Linux các thi t bề ỉ ự ế ị • Media Libraries - d a trên OpenCORE PacketVideo's; s h tr các th vi n phát l iự ự ỗ ợ ư ệ ạ và ghi âm c a âm thanh và ph bi n nhi u đ nh d ng video, cũng nh các t p tin hìnhủ ổ ế ề ị ạ ư ậ nh tĩnh, bao g m MPEG4, H.264, MP3, AAC, AMR, JPG, và PNGả ồ • Surface Manager - qu n lý quy n truy c p vào h th ng con hi n th và hoàn toàn phùả ề ậ ệ ố ể ị h p ch t 2D và 3D l p t nhi u ng d ng đ h aợ ấ ớ ừ ề ứ ụ ồ ọ • LibWebCore - m t trình duy t web hi n đ i, đ ng c có quy n h n c hai trình duy tộ ệ ệ ạ ộ ơ ề ạ ả ệ web c a Android và m t xem nhúngủ ộ • SGL - các công c đ h a 2D ti m nụ ồ ọ ề ẩ • 3D libraries - m t vi c th c hi n d a trên OpenGL ES 1,0 API; các th vi n, ho c sộ ệ ự ệ ự ư ệ ặ ử d ng ph n c ng tăng t c 3D (n u có) ho c bao g m, cao t i u rasterizer ph n m mụ ầ ứ ố ế ặ ồ ố ư ầ ề 3D • SQLite - m t m nh m và nh quan h c s d li u có s n cho t t c các ng d ngộ ạ ẽ ẹ ệ ơ ở ữ ệ ẵ ấ ả ứ ụ Th i gian ch y Androidờ ạ Android bao g m m t t p các th vi n lõi mà cung c p h u h t các ch c năng s n có trongồ ộ ậ ư ệ ấ ầ ế ứ ẵ th vi n c t lõi c a ngôn ng l p trình Java.ư ệ ố ủ ữ ậ M i ng d ng Android ch y trong ti n trình riêng c a mình, v i tr ng h p riêng c a cácỗ ứ ụ ạ ế ủ ớ ườ ợ ủ máy o Dalvik. Dalvik đã đ c vi t nên m t thi t b có th ch y nhi u máy o hi u qu . VMả ượ ế ộ ế ị ể ạ ề ả ệ ả Dalvik th c hi n tác ph m trong các Executable Dalvik (dex). Đ nh d ng đ c t i u hóa choự ệ ẩ ị ạ ượ ố ư b nh t i thi u. VM là đăng ký trên, và ch y các l p h c biên so n b i m t trình biên d chộ ớ ố ể ạ ớ ọ ạ ở ộ ị ngôn ng Java đã đ c chuy n thành các đ nh d ng dex. Do dx "bao g m" công c .ữ ượ ể ị ạ ồ ụ
  • 4. VM Dalvik d a vào h t nhân Linux cho các ch c năng ti m n nh lu ng và c p qu n lý bự ạ ứ ề ẩ ư ồ ấ ả ộ nh th p.ớ ấ S d ng tài nguyên trong ng d ng Androidử ụ ứ ụ B n nên luôn luôn s d ng ngu n tài nguyên nh hình nh và chu i t mã ng d ng c a b n,ạ ử ụ ồ ư ả ỗ ừ ứ ụ ủ ạ đ b n có th duy trì chúng m t cách đ c l p. Externalizing ngu n l c c a b n cũng cho phépể ạ ể ộ ộ ậ ồ ự ủ ạ b n t i cung c p ngu n tài nguyên thay th có h tr c u hình thi t b c th nh ngôn ngạ ớ ấ ồ ế ỗ ợ ấ ế ị ụ ể ư ữ khác nhau ho c kích c màn hình, mà ngày càng tr nên quan tr ng nh nhi u thi t b h trặ ỡ ở ọ ư ề ế ị ỗ ợ Android tr nên có s n v i các c u hình khác nhau. Đ cung c p kh năng t ng thích v iở ẵ ớ ấ ể ấ ả ươ ớ c u hình khác nhau, b n ph i t ch c các ngu n l c trong th m c res d án c a b n, b ngấ ạ ả ổ ứ ồ ự ư ụ ự ủ ạ ằ cách s d ng sub th m c khác nhau, nhóm các tài nguyên theo lo i hình và c u hình.ử ụ ư ụ ạ ấ Đ i v i b t c lo i tài nguyên, b n có th m c đ nh và thay th nhi u ngu n l c cho ngố ớ ấ ứ ạ ạ ể ặ ị ế ề ồ ự ứ d ng c a b n:ụ ủ ạ • M c đ nh là nh ng tài nguyên đ c s d ng không ph thu c vào c u hình thi t bặ ị ữ ượ ử ụ ụ ộ ấ ế ị ho c khi không có ngu n tài nguyên thay th phù h p v i c u hình hi n t i.ặ ồ ế ợ ớ ấ ệ ạ • Thay th các ngu n l c đ c các m c b n đã thi t k đ s d ng v i m t c u hìnhế ồ ự ượ ụ ạ ế ế ể ử ụ ớ ộ ấ c th . Đ xác đ nh nó m t nhóm các ngu n l c cho m t c u hình đ c bi t, thêm m tụ ể ể ị ộ ồ ự ộ ấ ặ ệ ộ vòng lo i c u hình phù h p v i tên th m c.ạ ấ ợ ớ ư ụ Ví d , trong khi m c đ nh layout giao di n c a b n đ c l u trong th m c res/layout/, b nụ ặ ị ệ ủ ạ ượ ư ư ụ ạ có th xác đ nh m t layout giao di n khác nhau đ c s d ng khi màn hình đ nh h ng phongể ị ộ ệ ượ ử ụ ị ướ c nh, b ng cách l u nó trong th m c res/layout-land/. Android s t đ ng áp d ng các ngu nả ằ ư ư ụ ẽ ự ộ ụ ồ l c thích h p b ng cách k t h p c u hình hi n t i c a thi t b t i tên th m c tài nguyên c aự ợ ằ ế ợ ấ ệ ạ ủ ế ị ớ ư ụ ủ b n.ạ ( nh minh h a tẢ ọ ừ http://developer.android.com/images/resources/resource_devices_diagram1.png) Hình 1 th hi n nh th nào m t t p h p các ngu n tài nguyên m c đ nh t m t ng d ngể ệ ư ế ộ ậ ợ ồ ặ ị ừ ộ ứ ụ đ c áp d ng cho hai thi t b khác nhau khi không có ngu n tài nguyên thay th có s n.ượ ụ ế ị ồ ế ẵ ( nh minh h a tẢ ọ ừ http://developer.android.com/images/resources/resource_devices_diagram2.png)
  • 5. Hình 2 cho th y vi c áp d ng cùng v i m t t p h p các ngu n tài nguyên thay th nó đ đi uấ ệ ụ ớ ộ ậ ợ ồ ế ủ ề ki n đ i v i m t trong các c u hình thi t b , do đó, hai thi t b s d ng ngu n tài nguyên khácệ ố ớ ộ ấ ế ị ế ị ử ụ ồ nhau. Thông tin trên ch là gi i thi u v cách làm vi c ngu n l c ng d ng trên Android. Các tàiỉ ớ ệ ề ệ ồ ự ứ ụ li u sau đây cung c p m t h ng d n đ y đ t i làm th nào b n có th t ch c các ngu nệ ấ ộ ướ ẫ ầ ủ ớ ế ạ ể ổ ứ ồ l c ng d ng c a b n, xác đ nh ngu n tài nguyên thay th , truy c p chúng trong ng d ngự ứ ụ ủ ạ ị ồ ế ậ ứ ụ c a b n, và nhi u h n n a:ủ ạ ề ơ ữ Vi c cung c p tài nguyên :ệ ấ Nh ng lo i tài nguyên mà b n có th cung c p trong ng d ngữ ạ ạ ể ấ ứ ụ c a b n, n i t i l u l i, và làm th nào đ t o ra ngu n l c thay th cho các c u hình thi t bủ ạ ơ ớ ư ạ ế ể ạ ồ ự ế ấ ế ị c th .ụ ể Truy c p các tài nguyên :ậ Làm th nào t i s d ng các ngu n l c mà b n đã cung c p, ho cế ớ ử ụ ồ ự ạ ấ ặ b ng cách tham chi u đ n chúng t mã ng d ng c a b n ho c t các ngu n khác XML.ằ ế ế ừ ứ ụ ủ ạ ặ ừ ồ X lý Thay đ i Runtime :ử ổ Làm th nào t i qu n lý thay đ i c u hình x y ra trong khi Activityế ớ ả ổ ấ ả c a b n đang ch y.ủ ạ ạ Localization : M t h ng d n t d i lên t i đ a ph ng hóa đ n c a b n b ng cách sộ ướ ẫ ừ ướ ớ ị ươ ơ ủ ạ ằ ử d ng ngu n tài nguyên thay th . Trong khi đây ch là m t c th s d ng tài nguyên thay th ,ụ ồ ế ỉ ộ ụ ể ử ụ ế nó là r t quan tr ng đ ti p c n ng i dùng h n.ấ ọ ể ế ậ ườ ơ Các lo i tài nguyên :ạ M t tài li u tham kh o c a các lo i tài nguyên khác nhau, b n có thộ ệ ả ủ ạ ạ ể cung c p, mô t XML c a h y u t , thu c tính, và cú pháp. Ví d , tham chi u này cho th yấ ả ủ ọ ế ố ộ ụ ế ấ b n làm th nào đ t o ra m t ngu n l c cho các menu ng d ng, drawables, hình đ ng, vàạ ế ể ạ ộ ồ ự ứ ụ ộ nhi u h n n a.ề ơ ữ Các lo i tài nguyên trong ng d ng Androidạ ứ ụ M i c a các tài li u trong ph n này mô t vi c s d ng, đ nh d ng và cú pháp cho m t lo iỗ ủ ệ ầ ả ệ ử ụ ị ạ ộ ạ tài nguyên ng d ng mà b n có th cung c p trong th m c tài nguyên c a b n (res/).ứ ụ ạ ể ấ ư ụ ủ ạ D i đây là tóm t t c a t ng lo i tài nguyên:ướ ắ ủ ừ ạ
  • 6. Tài nguyên hình nh đ ng :ả ộ Xác đ nh hình nh đ ng đ c xác đ nh tr c.ị ả ộ ượ ị ướ • Tween hình nh đ ng đ c l u trongả ộ ượ ư res/Anim/ và truy c p t các l pậ ừ ớ R.anim. • Frame hình nh đ ng đ c l u trongả ộ ượ ư res/drawable/ và truy c p t các l pậ ừ ớ R.drawable. Danh sách State tài nguyên màu : Xác đ nh m t tài nguyên màu s c nó thay đ i d a trên cácị ộ ắ ổ ự ti u bang View.ể • L u trongư res/color và truy c p t các l p R.color.ậ ừ ớ Tài nguyên Drawable : Xác đ nh đ h a khác nhau v i bitmap ho c XML.ị ồ ọ ớ ặ • L u trongư res/drawable/ và truy c p t các l p R.drawable.ậ ừ ớ B trí ngu n l c :ố ồ ự Xác đ nh layout cho giao di n ng i dùng ng d ng c a b n.ị ệ ườ ứ ụ ủ ạ • L u trong res/layout/và truy c p t các l pư ậ ừ ớ R.layout. Menu Resource : Xác đ nh n i dung c a các menu ng d ng c a b n.ị ộ ủ ứ ụ ủ ạ • L u trongư res/menu/ và truy c p t các l pậ ừ ớ R.menu. Tài nguyên String : Xác đ nh các chu i, m ng chu i, và s nhi u (và bao g m các đ nh d ngị ỗ ả ỗ ố ề ồ ị ạ chu i và t o ki u tóc).ỗ ạ ể • L u trongư res/value/ và truy c p t các l pậ ừ ớ R.string, R.array, và R.plurals. Tài nguyên phong cách : Xác đ nh xem xét và đ nh d ng cho cáccác y u t giao di n ng iị ị ạ ế ố ệ ườ dùng . • L u trongư res/value/ và truy c p t các l pậ ừ ớ R.style. Các lo i tài nguyên khác :ạ Xác đ nh giá tr nh các phép toán lu n, s nguyên, kích th c,ị ị ư ậ ố ướ màu s c, và các m ng khác.ắ ả • L u trongư res/value/ nh ng m i truy c p t duy nh t R ti u h c (như ỗ ậ ừ ấ ể ọ ư R.bool, R.integer, R.dimen, vv.) Qu n lý vòng đ i c a m t Service trong Androidả ờ ủ ộ Vòng đ i c a m t service đ n gi n h n nhi u so v i các activity. Tuy nhiên, nó th m chí cònờ ủ ộ ơ ả ơ ề ớ ậ quan tr ng h n, b n có ph i quan tâm t i cách service c a b n đ c t o ra và h y di t, b i vìọ ơ ạ ả ớ ủ ạ ượ ạ ủ ệ ở m t service có th ch y trong background mà không cho ng i dùng đ c bi t.ộ ể ạ ườ ượ ế Vòng đ i c a m t Service, t khi nó đ c t o ra cho khi nó b phá h y, có th theo hai conờ ủ ộ ừ ượ ạ ị ủ ể đ ng khác nhau:ườ • M t service started : Các service đ c t o ra khi component khác g iộ ượ ạ ọ startService(). Các service sau đó nó ch y vô th i h n và d ng l i b ng cách g iạ ờ ạ ừ ạ ằ ọ stopSelf(). M tộ component khác cũng có th d ng d ch v b ng cách g iể ừ ị ụ ằ ọ stopService(). Khi d ch vị ụ này đ c d ng l i, h th ng tiêu di t nó ..ượ ừ ạ ệ ố ệ • M t service bound : Các service đ c t o ra khi m t component (m t client) g iộ ượ ạ ộ ộ ọ bindService(). Client sau đó giao ti p v i các service thông qua m t giao di nế ớ ộ ệ IBinder. Các client có th đóng k t n i b ng cách g iể ế ố ằ ọ unbindService(). Nhi u khách hàng cóề th liên k t v i các service t ng t và khi t t c chúng unbind, h th ng s phá h yể ế ớ ươ ự ấ ả ệ ố ẽ ủ các service. (chính nó không c n d ng l i.)ầ ừ ạ Hai con đ ng không hoàn toàn riêng bi t. B n có th liên k t v i m t d ch v đã đ cườ ệ ạ ể ế ớ ộ ị ụ ượ started v iớ startService(). Ví d , m t service background âm nh c có th đ c started b ngụ ộ ạ ể ượ ằ cách g iọ startService() v i m t ý đ nh nh n d ng âm nh c đ ch i. Sau đó, có th khi ng iớ ộ ị ậ ạ ạ ể ơ ể ườ
  • 7. dùng mu n th c hi n m t s ki m soát đ i v i các c u th ho c nh n đ c thông tin v cácố ự ệ ộ ố ể ố ớ ầ ủ ặ ậ ượ ề bài hát hi n hành, m t activity có th liên k t v i các service b ng cách g iệ ộ ể ế ớ ằ ọ bindService(). Trong tr ng h p nh th này,ườ ợ ư ế stopService() ho cặ stopSelf() không th c s d ng service choự ự ừ đ n khi khách hàngế unbind t t c .ấ ả Tri n khai th c hi n vòng đ i callbackể ự ệ ờ Gi ng nh m t activity, m t service có vòng đ i method callback và b n có th tri n khai đố ư ộ ộ ờ ạ ể ể ể theo dõi nh ng thay đ i trong tr ng thái c a service và th c hi n công vi c vào th i đi mữ ổ ạ ủ ự ệ ệ ờ ể thích h p. Các service th hi n skeleton sau m i vòng đ i c a các method:ợ ể ệ ỗ ờ ủ ( nh minh h a đ c s d ng t http://developer.android.com/images/service_lifecycle.png)Ả ọ ượ ử ụ ừ Hình 2. Các vòng đ i service. S đ bên trái cho th y vòng đ i khi d ch v đ c t o ra v iờ ơ ồ ấ ờ ị ụ ượ ạ ớ startService() và s đ bên ph i cho th y vòng đ i khi d ch v đ c t o ra v i bindService().ơ ồ ả ấ ờ ị ụ ượ ạ ớ B ng cách th c hi n nh ng ph ng pháp này, b n có có th theo dõi hai vòng l p l ng nhauằ ự ệ ữ ươ ạ ể ặ ồ trong vòng đ i c a service:ờ ủ • S s ng c a m t service x y ra gi a th i gian onCreate() đ c g i và onDestroy() th iự ố ủ ộ ả ữ ờ ượ ọ ờ gian tr v . Gi ng nh m t activity, m t service không thi t l p ban đ u trongả ề ố ư ộ ộ ế ậ ầ onCreate() cho nó và t t c các ngu n l c còn l i trong onDestroy(). Ví d , m t serviceấ ả ồ ự ạ ụ ộ nghe nh c có th t o ra các ch đ mà âm nh c s đ c ch i trong onCreate(), sau đóạ ể ạ ủ ề ạ ẽ ượ ơ d ng thread trong onDestroy().ừ • Các onCreate() và onDestroy() method đ c g i cho t t c các d ch v , cho dù h đangượ ọ ấ ả ị ụ ọ t o ra b i startService() ho c bindService().ạ ở ặ • Các cu c đ i ho t đ ng c a m t service b t đ u v i m t cu c g i đ n ho c làộ ờ ạ ộ ủ ộ ắ ầ ớ ộ ộ ọ ế ặ onStartCommand() ho c onBind(). M i ph ng pháp đ c đ a các ý đ nh đó đ cặ ỗ ươ ượ ư ị ượ thông qua ho c là startService() ho c bindService(), t ng ng.ặ ặ ươ ứ
  • 8. N u service đ c started, các ho t đ ng k t thúc cu c đ i cùng th i đi m k t thúc toàn bế ượ ạ ộ ế ộ ờ ờ ể ế ộ cu c đ i (d ch v này v n còn ho t đ ng ngay c sau khi onStartCommand() tr v ). N uộ ờ ị ụ ẫ ạ ộ ả ả ề ế d ch v đ c bound, k t thúc cu c đ i ho t đ ng tr l i khi onUnbind().ị ụ ượ ế ộ ờ ạ ộ ở ạ Tìm hi u v Activity trong Androidể ề Activity M t là m t thành ph n ng d ng đó cung c p m t màn hình mà ng i dùng có thộ ộ ầ ứ ụ ấ ộ ườ ể t ng tác đ làm m t cái gì đó, ch ng h n nh quay s đi n tho i, ch p nh, g i email, ho cươ ể ộ ẳ ạ ư ố ệ ạ ụ ả ử ặ xem m t b n đ . M i activity đ c cho m t c a s , trong đó cho v giao di n ng i dùngộ ả ồ ỗ ượ ộ ử ổ ẽ ệ ườ c a nó. C a s th ng l p đ y màn hình, nh ng có th nh h n so v i màn hình và n i lênủ ử ổ ườ ấ ầ ư ể ỏ ơ ớ ổ trên các c a s khác.ử ổ M t ng d ng th ng bao g m nhi u activity đ c ràng bu c l ng l o v i nhau. Thôngộ ứ ụ ườ ồ ề ượ ộ ỏ ẻ ớ th ng, m t trong nh ng activity trong m t ng d ng đ c quy đ nh nh các activity "chính",ườ ộ ữ ộ ứ ụ ượ ị ư đ c trình bày cho ng i dùng khi tung ra ng d ng cho l n đ u tiên. M i activity sau đó cóượ ườ ứ ụ ầ ầ ỗ th b t đ u activity khác đ th c hi n hành đ ng khác nhau. M i l n m t activity m i b tể ắ ầ ể ự ệ ộ ỗ ầ ộ ớ ắ đ u, các activity tr c đó đ c d ng l i, nh ng h th ng các khu b o v các activity trongầ ướ ượ ừ ạ ư ệ ố ả ệ m t ngăn x p (các "back stack"). Khi m t activity m i b t đ u, nó đ c đ y lên phía sau ngănộ ế ộ ớ ắ ầ ượ ẩ x p và vi c chú tr ng c a ng i dùng. S tr l i ngăn x p tuân th các c b n "last in, firstế ệ ọ ủ ườ ự ở ạ ế ủ ơ ả out" c ch hàng đ i, do đó, khi ng i dùng đ c th c thi v i các activity hi n t i và nh nơ ế ợ ườ ượ ự ớ ệ ạ ấ phím BACK, nó là popped kh i đ ng (và phá h y) các h s activity tr c đó. (S tr l iỏ ố ủ ồ ơ ướ ự ở ạ ngăn x p đ c th o lu n nhi u h n trong công vi c và s p x p l i tài li u.)ế ượ ả ậ ề ơ ệ ắ ế ạ ệ Đ t o ra m t activity, b n ph i t o m t sub class c a Activity. Trong sub class c a b n, b nể ạ ộ ạ ả ạ ộ ủ ủ ạ ạ c n cho th c thi method g i h th ng các cu c g i khi chuy n đ i activity gi a các state khácầ ự ọ ệ ố ộ ọ ể ổ ữ nhau cho vòng đ i c a nó, ch ng h n nh khi activity đang đ c t o ra, d ng l i, n i l i,ờ ủ ẳ ạ ư ượ ạ ừ ạ ố ạ ho c b phá h y. Hai ph ng pháp g i l i quan tr ng nh t là:ặ ị ủ ươ ọ ạ ọ ấ Create Activity B n ph i tri n khai method này. H th ng các cu c g i này khi t o activity c a b n. Trongạ ả ể ệ ố ộ ọ ạ ủ ạ th i h n tri n khai th c hi n c a b n, b n nên kh i t o các thành ph n thi t y u c a activityờ ạ ể ự ệ ủ ạ ạ ở ạ ầ ế ế ủ c a b n. Quan tr ng nh t, đây là n i b n ph i g i setContentView() đ xác đ nh vi c layoutủ ạ ọ ấ ơ ạ ả ọ ể ị ệ cho giao di n ng i dùng c a activity.ệ ườ ủ Start Activity Khi làm vi c trong ng d ng c a riêng b n, b n th ng s c n cho đ n gi n là kh i đ ngệ ứ ụ ủ ạ ạ ườ ẽ ầ ơ ả ở ộ m t activity đ c bi t đ n. B n có th làm nh v y b ng cách t o ra m t intent đó rõ ràngộ ượ ế ế ạ ể ư ậ ằ ạ ộ xác đ nh activity b n mu n b t đ u, s d ng tên l p. Ví d , đây là cách m t activity b t đ uị ạ ố ắ ầ ử ụ ớ ụ ộ ắ ầ activity khác có tên SignInActivity:
  • 9. Intent intent = new Intent(this, SignInActivity.class); startActivity(intent); Đóng m t Activityộ B n có th đóng m t activity b ng cách g i methosạ ể ộ ằ ọ finish() c a nó. B n cũng có th đóng c aủ ạ ể ử m t activity riêng bi t tr c đó b n đã b t đ u b ng cách g iộ ệ ướ ạ ắ ầ ằ ọ finishActivity(). Ngoài ra trong Activity còn nhi u method khác,ề Qu n lý vòng đ i Activityả ờ Qu n lý vòng đ i Activity c a b n b ng cách th c hi n g i method là r t quan tr ng cho phátả ờ ủ ạ ằ ự ệ ọ ấ ọ tri n m t ng d ng m nh m và linh ho t. Vòng đ i c a m t activity tr c ti p b nh h ngể ộ ứ ụ ạ ẽ ạ ờ ủ ộ ự ế ị ả ưở b i k t h p nhi m v c a nó và back stack v i các activity khác.ở ế ợ ệ ụ ủ ớ M t ho t đ ng có th t n t i trong ba tr ng thái c b n: Resumed, Paused và Stoppedộ ạ ộ ể ồ ạ ạ ơ ả N u m t activity b t m d ng ho c d ng l i, h th ng có th drop nó t b nh ho c là b ngế ộ ị ạ ừ ặ ừ ạ ệ ố ể ừ ộ ớ ặ ằ cách yêu c u cho nó k t thúc (g i method finish() c a nó), ho c đ n gi n là gi t ch t quáầ ế ọ ủ ặ ơ ả ế ế
  • 10. trình c a nó. Khi ho t đ ng này đ c m l i (sau khi đ c finished ho c ch t), nó ph i đ củ ạ ộ ượ ở ạ ượ ặ ế ả ượ t o ra nh trên.ạ ư Tìm hi u v Service trong Androidể ề Service là m t ng d ng component có th th c hi n các ho t đ ng long-running trongộ ứ ụ ể ự ệ ạ ộ background và không cung c p m t giao di n ng i dùng. M t ng d ng component có thấ ộ ệ ườ ộ ứ ụ ể b t đ u m t service và nó s ti p t c ch y trong background th m chí n u ng i dùngắ ầ ộ ẽ ế ụ ạ ậ ế ườ chuy n cho ng d ng khác. Ngoài ra, m t component có th liên k t cho m t d ch v t ngể ứ ụ ộ ể ế ộ ị ụ ươ tác v i nó và th m chí th c hi n giao ti p InterProcess (IPC). Ví d , m t d ch v có th x lýớ ậ ự ệ ế ụ ộ ị ụ ể ử các giao d ch m ng, nghe nh c, th c hi n các t p tin I/O, ho c t ng tác v i m t providerị ạ ạ ự ệ ậ ặ ươ ớ ộ content, t t c t background.ấ ả ừ M t service c b n có th có hai hình th c:ộ ơ ả ể ứ Started service là "started" khi m t component ng d ng (nh m t activity) b t đ u nó b ng cách g iộ ứ ụ ư ộ ắ ầ ằ ọ startService (). Khi b t đ u, m t service có th ch y trên background vô th i h n, ngay c khiắ ầ ộ ể ạ ờ ạ ả các thành ph n đó b t đ u nó b phá h y. Thông th ng, m t service b t đ u th c hi n m tầ ắ ầ ị ủ ườ ộ ắ ầ ự ệ ộ ho t đ ng đ n l và không tr l i k t qu cho ng i g i. Ví d , nó có th t i v ho c t i lênạ ộ ơ ẻ ả ạ ế ả ườ ọ ụ ể ả ề ặ ả m t t p tin qua m ng. Khi ho t đ ng đ c th c hi n, các service nên d ng l i b n thân.ộ ậ ạ ạ ộ ượ ự ệ ừ ạ ả Bound service là "bound" khi m t component ng d ng liên k t cho nó b ng cách g i bindService ().ộ ứ ụ ế ằ ọ M t service ràng bu c cung c p m t giao di n client-server cho phép các component t ng tácộ ộ ấ ộ ệ ươ v i các d ch v , g i các yêu c u, có đ c k t qu , và th m chí làm nh v y qua quá trìnhớ ị ụ ử ầ ượ ế ả ậ ư ậ giao ti p InterProcess (IPC). M t service bound ch ch y mi n là ng d ng component khác bế ộ ỉ ạ ễ ứ ụ ị ràng bu c vào nó. Nhi u thành ph n có th liên k t cho d ch v cùng m t lúc, nh ng khi t tộ ề ầ ể ế ị ụ ộ ư ấ c chúng unbind, service này b phá h y.ả ị ủ Các khái ni m c b n :ệ ơ ả Đ t o ra m t service, b n ph i t o m t l p d ch v (ho c m t trong các subclasses hi n t iể ạ ộ ạ ả ạ ộ ớ ị ụ ặ ộ ệ ạ c a nó). Trong implementation c a b n, b n c n cho ghi đè lên m t s method g i l i có thủ ủ ạ ạ ầ ộ ố ọ ạ ể x lý các khía c nh quan tr ng c a vòng đ i service và cung c p m t c ch cho cácử ạ ọ ủ ờ ấ ộ ơ ế component cho g n k t v i d ch v , n u thích h p. Các method quan tr ng nh t b n có nênắ ế ớ ị ụ ế ợ ọ ấ ạ ghi đè lên g i là:ọ
  • 11. onStartCommand() H th ng g i method này khi component nh là m t activity, yêu c u các service đ c started,ệ ố ọ ư ộ ầ ượ b ng cách g i startService (). Sau khi th c hi n ph ng pháp này, các service đ c kh i đ ngằ ọ ự ệ ươ ượ ở ộ và có th ch y trong background vô th i h n. N u b n có tri n khai đi u này, đó là tráchể ạ ờ ạ ế ạ ể ề nhi m c a b n đ d ng d ch v khi công vi c c a mình đ c th c hi n, b i stopSelf g iệ ủ ạ ể ừ ị ụ ệ ủ ượ ự ệ ở ọ đi n tho i () ho c stopService (). (N u b n có ch mu n cung c p ràng bu c, b n không c nệ ạ ặ ế ạ ỉ ố ấ ộ ạ ầ ph i tri n khai method này.)ả ể onBind() H th ng g i method này khi component mu n liên k t v i các service (ch ng h n nh choệ ố ọ ố ế ớ ẳ ạ ư th c hi n RPC), b ng cách g i bindService(). Trong implementation c a b n c a ph ngự ệ ằ ọ ủ ạ ủ ươ pháp này, b n có ph i cung c p m t giao di n đó khách hàng s d ng đ giao ti p v i d chạ ả ấ ộ ệ ử ụ ể ế ớ ị v , b ng cách tr l i m t IBinder. B n luôn luôn ph i tri n khai ph ng pháp này, nh ng n uụ ằ ả ạ ộ ạ ả ể ươ ư ế b n không mu n cho phép liên k t, sau đó b n nên tr v null.ạ ố ế ạ ở ề
  • 12. onCreate() H th ng g i method này khi service đ u tiên t o ra, đ th c hi n các th t c thi t l p m tệ ố ọ ầ ạ ể ự ệ ủ ụ ế ậ ộ l n (tr c khi cu c g i ho c là onStartCommand() ho c onBind()). N u service đang ch y,ầ ướ ộ ọ ặ ặ ế ạ ph ng pháp này không đ c g i.ươ ượ ọ onDestroy() H th ng g i method này khi service không còn đ c s d ng và đang đ c b phá h y.ệ ố ọ ượ ử ụ ượ ị ủ service c a b n nên tri n khai đi u này cho làm s ch b t c ngu n tài nguyên nh ch đ ,ủ ạ ể ề ạ ấ ứ ồ ư ủ ề ng i nghe đã đăng ký, nh n, vv Đây là các cu c g i qua d ch v này nh n đ c.ườ ậ ộ ọ ị ụ ậ ượ Giao di n ng i dùng trong Androidệ ườ Trong m t ng d ng Android, giao di n ng i dùng đ c xây d ng b ng cách s d ng Viewộ ứ ụ ệ ườ ượ ự ằ ử ụ và ViewGroup đ i t ng. Có nhi u lo i quan đi m và các nhóm view, m i m t trong s đó làố ượ ề ạ ể ỗ ộ ố h u du c a l p View. View objects là các đ n v c b n c a bi u hi n giao di n ng i dùngậ ệ ủ ớ ơ ị ơ ả ủ ể ệ ệ ườ trên n n t ng Android. Các class xem nh là c s ph c v cho class con đ c g i làề ả ư ơ ở ụ ụ ượ ọ "widget", trong đó cung c p đ y đ các đ i t ng th c hi n giao di n, gi ng nh các lĩnh v cấ ầ ủ ố ượ ự ệ ệ ố ư ự văn b n và nút. Class ViewGroup ph c v nh là c s cho l p con đ c g i là " layouts",ả ụ ụ ư ơ ở ớ ượ ọ cung c p các lo i khác nhau c a ki n trúc b trí, nh linear, tabular và relative.ấ ạ ủ ế ố ư • M t View object là m t c u trúc d li u có đ c tính l u tr các thông s b trí và n iộ ộ ấ ữ ệ ặ ư ữ ố ố ộ dung cho m t khu v c c th hình ch nh t c a màn hình.ộ ự ụ ể ữ ậ ủ • M t View object x lý đo l ng riêng c a mình, b trí, b n v thay đ i t p trung,, diộ ử ườ ủ ố ả ẽ ổ ậ chuy n, và phím/t ng tác c ch cho khu v c hình ch nh t c a màn hình.ể ươ ử ỉ ự ữ ậ ủ Là m t object trong giao di n ng i dùng, view cũng là m t đi m t ng tác cho ng i sộ ệ ườ ộ ể ươ ườ ử d ng và nh n các s ki n t ng tác.ụ ậ ự ệ ươ Xem Hierarchy Trên n n t ng Android, b n xác đ nh m t ho t đ ng c a giao di n ng i dùng b ng cách sề ả ạ ị ộ ạ ộ ủ ệ ườ ằ ử d ng m t h th ng phân c p c a View và ViewGroup, nh trong bi u đ d i đây.ụ ộ ệ ố ấ ủ ư ể ồ ướ Cây này có th đ c phân c p đ n gi n hay ph c t p nh b n c n nó đ c, và b n có thể ượ ấ ơ ả ứ ạ ư ạ ầ ượ ạ ể
  • 13. xây d ng nó lên b ng cách s d ng thi t l p Android c a widgets và layouts đ nh s n, ho cự ằ ử ụ ế ậ ủ ị ẵ ặ v i Views tùy ch nh mà b n t o ra cho mình.ớ ỉ ạ ạ Đ đính kèm v i cây phân c p xem màn hình cho rendering, Ho t đ ng c a b n ph i g iể ớ ấ ạ ộ ủ ạ ả ọ setContentView() Ph ng pháp và thông qua m t tham chi u đ n đ i t ng button g c.ươ ộ ế ế ố ượ ố H th ng Android nh n đ c t p tin này và s d ng nó đ làm m t hi u l c, đo l ng, và vệ ố ậ ượ ậ ử ụ ể ấ ệ ự ườ ẽ cây. Nút g c c a các yêu c u phân c p cho nó v các nút con - l n l t, m i nút view là nhóm ch uố ủ ầ ấ ẽ ầ ượ ỗ ị trách nhi m kêu g i m i l n view nút con riêng c a mình đ v có th yêu c u m t kíchệ ọ ỗ ầ ủ ể ẽ ể ầ ộ th c và v trí trong nút g c., Nh ng đ i t ng viewgroup có quy t đ nh cu i cùng v n i làmướ ị ố ư ố ượ ế ị ố ề ơ th nào, có th đ c cho m i nút con.ế ể ượ ỗ Android parses các y u t c a cách b trí c a b n trong th t (t phía trên cùng c a cây phânế ố ủ ố ủ ạ ứ ự ừ ủ c p), instantiating vi c xem và thêm chúng vào parent(s).ấ ệ B i vì đây là nh ng trích ra trong tr t t , n u có các y u t đó ch ng chéo nhau các v trí, m tở ữ ậ ự ế ế ố ồ ị ộ l n cu i đ đ c rút ra s n m trên đ u trang c a nh ng ng i khác tr c đây đ rút raầ ố ể ượ ẽ ằ ầ ủ ữ ườ ướ ể không gian đó. Giao di nệ Cách ph bi n nh t đ xác đ nh b trí c a b n và th hi n s phân c p view là v i m t t pổ ế ấ ể ị ố ủ ạ ể ệ ự ấ ớ ộ ậ tin XML layout. XML cung c p m t c c u có th đ c đ c cho b trí, gi ng nh HTML.ấ ộ ơ ấ ể ọ ượ ố ố ư M i ph n t trong XML là c m t View ho c đ i t ng ViewGroup (ho c h u du đó). Cácỗ ầ ử ả ộ ặ ố ượ ặ ậ ệ đ i t ng View là lá trong cây, ViewGroup đ i t ng là các nhánh trong cây.ố ượ ố ượ Tên c a m t ph n t XML là t ng ng v i l p h c Java mà nó đ i di n. Vì v y, m t y u tủ ộ ầ ử ươ ứ ớ ớ ọ ạ ệ ậ ộ ế ố <textview> t o ra m t TextView trong UI c a b n, và m t ph n tạ ộ ủ ạ ộ ầ ử <linearlayout> t o ra m tạ ộ LinearLayout viewgroup. Khi b n t i m t layout resource, h th ng Android kh i ch y th iạ ả ộ ệ ố ở ạ ờ gian các đ i t ng, t ng ng v i các y u t trong cách b trí c a b n. Ví d , m t b trí d cố ượ ươ ứ ớ ế ố ố ủ ạ ụ ộ ố ọ đ n gi n v i m t l n xem văn b n và m t nút s nh th này:ơ ả ớ ộ ầ ả ộ ẽ ư ế <? 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"> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView"/> <Button android:id="@+id/button" android:layout_width="wrap_content" android:layout_height="wrap_content"
  • 14. android:text="Hello, I am a Button" /> </LinearLayout> Chú ý r ng các ph n t LinearLayout ch a c TextView và Button. B n có th làm khácằ ầ ử ứ ả ạ ể LinearLayout (ho c các lo i hình xem nhóm) bên trong đây, đ kéo dài s phân c p xem vàặ ạ ở ể ự ấ t o ra m t b c c ph c t p h n. Đ bi t thêm v vi c xây d ng m t b c c UI, đ c Giaoạ ộ ố ụ ứ ạ ơ ể ế ề ệ ự ộ ố ụ ọ di n kê khai.ệ Có r t nhi u cách mà b n có th xem cách b trí c a b n. S d ng nhi u h n và các lo iấ ề ạ ể ố ủ ạ ử ụ ề ơ ạ khác nhau c a các view group, b n có th c u trúc views con và view groups trong vô s cách .ủ ạ ể ấ ố Xác đ nh các nhóm xem đ c cung c p b i Android (g i là layouts) bao g m LinearLayout,ị ượ ấ ở ọ ồ RelativeLayout, TableLayout, GridLayout và khác. M i cung c p m t b duy nh t c a cácỗ ấ ộ ộ ấ ủ thông s b trí đ c s d ng đ xác đ nh v trí c a views con và c c u layout Đ tìm hi uố ố ượ ử ụ ể ị ị ủ ơ ấ ể ể v m t s các lo i khác nhau c a các view group đ c s d ng cho m t layout, đ c Giaoề ộ ố ạ ủ ượ ử ụ ộ ọ di n đ i t ng th ng g p.ệ ố ượ ườ ặ Widgets Widget là m t object View ph c v nh m t giao di n đ t ng tác v i ng i dùng. Androidộ ụ ụ ư ộ ệ ể ươ ớ ườ cung c p m t t p các widgets th c hi n đ y đ , gi ng nh các button, Checkbox, và text-ấ ộ ậ ự ệ ầ ủ ố ư entry , do đó b n có th nhanh chóng xây d ng giao di n ng i dùng c a b n. M t s widgetsạ ể ự ệ ườ ủ ạ ộ ố đ c cung c p b i Android ph c t p h n, gi ng nh m t date picker, clock, và zoom controls.ượ ấ ở ứ ạ ơ ố ư ộ Nh ng nó không gi i h n trong các lo i widgets đ c cung c p b i các n n t ng Android.ư ớ ạ ạ ượ ấ ở ề ả N u b n mu n làm m t cái gì thêm cho tùy bi n và t o ra các y u t c a hành đ ng c a b n,ế ạ ố ộ ế ạ ế ố ủ ộ ủ ạ b n có th , b ng cách xác đ nh object view c a riêng b n ho c b ng cách m r ng và k t h pạ ể ằ ị ủ ạ ặ ằ ở ộ ế ợ các Widget hi n có. Đ c ti p t i Building Custom Components. Đ có m t danh sách các v tệ ọ ế ạ ể ộ ậ d ng đ c cung c p b i Android, xem gói android.widgetụ ượ ấ ở UI S ki nự ệ M t khi b n đã thêm m t s Views/widgets đ n giao di n, có th b n mu n bi t v s t ngộ ạ ộ ố ế ệ ể ạ ố ế ề ự ươ tác c a ng i dùng v i h , vì v y b n có th th c hi n hành đ ng.ủ ườ ớ ọ ậ ạ ể ự ệ ộ Đ đ c thông báo v UI events ng i dùng, b n c n ph i làm m t trong hai đi u:ể ượ ề ườ ạ ầ ả ộ ề • Xác đ nh m t s ki n nghe và đăng ký nó v i các View. Khác th ng h n không, đây làị ộ ự ệ ớ ườ ơ cách b n s l ng nghe cho các s ki n. Các class View có ch a m t t p h p các giaoạ ẽ ắ ự ệ ứ ộ ậ ợ di n l ng nhau đ t tênệ ồ ặ On<something>Listener, đ u có m t ph ng pháp g i l iề ộ ươ ọ ạ đ c g i làượ ọ On<something>() Ví d .ụ View.OnClickListener (đ x lý "nh p chu t"ể ử ấ ộ trên m t View),ộ View.OnTouchListener ( đ x lý các s ki n màn hình c m ngể ử ự ệ ả ứ trong m t View), vàộ View.OnKeyListener (đ x lý thi t b ép quan tr ng trong m tể ử ế ị ọ ộ View). Vì v y n u b n mu n View c a b n đ c thông báo khi nó là " clicked" (ch ngậ ế ạ ố ủ ạ ượ ẳ h n nh khi m t nút đ c ch n), th c hi n và xác đ nhạ ư ộ ượ ọ ự ệ ị OnClickListener c a nó g iủ ọ method onClick() (n i b n th c hi n các hành đ ng sau khi nh p chu t), và đăng ký nóơ ạ ự ệ ộ ấ ộ vào Xem v iớ setOnClickListener() • Ghi đè m t callback method hi n cho View. Đây là nh ng gì b n nên làm gì khi b n đãộ ệ ữ ạ ạ th c hi n l p View c a riêng b n và mu n l ng nghe cho các s ki n c th x y raự ệ ớ ủ ạ ố ắ ự ệ ụ ể ả
  • 15. trong nó. Ví d v các s ki n b n có th x lý bao g m màn hình là touchedụ ề ự ệ ạ ể ử ồ onTouchEvent() khi trackball là di chuy nể onTrackballEvent() ho c khi m t phím trênặ ộ thi t b đ c nh nế ị ượ ấ onKeyDown(). Đi u này cho phép b n xác đ nh các hành vi m cề ạ ị ặ đ nh cho t ng s ki n bên trong tuỳ ch nh View c a b n và xác đ nh xem s ki n nàyị ừ ự ệ ỉ ủ ạ ị ự ệ c n đ c thông qua ngày đ View con khác. M t l n n a, đây là nh ng callbacks Viewầ ượ ể ộ ầ ữ ữ class, do đó, c h i duy nh t c a b n đ xác đ nh đó là khi b n xây d ng m t ph n tùyơ ộ ấ ủ ạ ể ị ạ ự ộ ầ ch nh.ỉ Menus Menu đ n có m t ph n quan tr ng c a giao di n ng i dùng trong m t ng d ng. Menusơ ộ ầ ọ ủ ệ ườ ộ ứ ụ cung c p m t giao di n đáng tin c y cho th y r ng các ch c năng ng d ng và cài đ t. Trongấ ộ ệ ậ ấ ằ ứ ứ ụ ặ trình đ n ng d ng ph bi n nh t là ti t l b ng cách b m phím MENU trên thi t b . Tuyơ ứ ụ ổ ế ấ ế ộ ằ ấ ế ị nhiên, b n cũng có th thêm Context Menus, có th hi n th khi ng i s d ng máy nh n vàạ ể ể ể ị ườ ử ụ ấ n m gi phím trên m t m c. Th c đ n cũng đ c h th ng phân c p c u trúc b ng cách sắ ữ ộ ụ ự ơ ượ ệ ố ấ ấ ằ ử d ng m t xem, nh ng b n không xác đ nh c u trúc này cho mình.ụ ộ ư ạ ị ấ Thay vào đó, b n xác đ nhạ ị onCreateOptionsMenu() ho cặ onCreateContextMenu() g iọ method cho ho t đ ng c a b n và tuyên b các m c mà b n mu n bao g m trong menu c aạ ộ ủ ạ ố ụ ạ ố ồ ủ b n. Trong m t th i gian thích h p, Android s t đ ng t o ra h th ng View phân c p c nạ ộ ờ ợ ẽ ự ộ ạ ệ ố ấ ầ thi t cho menu, và rút ra m i trong m i menu items đó.ế ỗ ỗ Menus cũng x lý các s ki n riêng c a nó, do đó không c n ph i đăng ký s ki n listenersử ự ệ ủ ầ ả ự ệ trên các item trong menu c a b n. Khi m t item trong menu c a b n đ c ch n,ủ ạ ộ ủ ạ ượ ọ onOptionsItemSelected() ho cặ onOptionsItemSelected() onContextItemSelected() method onContextItemSelected() s đ c g i b ng framework. Và cũng gi ng nh layout c a b n,ẽ ượ ọ ằ ố ư ủ ạ b n có tùy ch n đ khai báo các menu item cho b n trong m t t p tin XML. Đ c T o Menusạ ọ ể ạ ộ ệ ọ ạ đ tìm hi u thêm.ể ể Adapters Th nh tho ng b n s mu n populate m t view group v i m t s thông tin mà không th hard-ỉ ả ạ ẽ ố ộ ớ ộ ố ể coded đ c, thay vào đó, b n mu n bind đ xem m t ngu n d li u bên ngoài. Đ làm đi uượ ạ ố ể ộ ồ ữ ệ ể ề này, b n s d ng m t AdapterView xem nh là view group c a b n và View con đ c kh iạ ử ụ ộ ư ủ ạ ượ ở t o và populated v i d li u t Adapter. Các đ i t ng AdapterView là m t implementationạ ớ ữ ệ ừ ố ượ ộ c a ViewGroup xác đ nh nh ng view con c a nó d a trên m t đ i t ng Adapter nh t đ nh.ủ ị ữ ủ ự ộ ố ượ ấ ị Adapter các hành vi nh là chuy n phát nhanh gi a các ngu n d li u c a b n (có l là m tư ể ữ ồ ữ ệ ủ ạ ẽ ộ m ng c a chu i bên ngoài) và AdapterView, hi n th nó trong đó. Có m t s hi n th c c aả ủ ỗ ể ị ộ ố ệ ự ủ class Adapter, cho nhi m v c th , ch ng h n nh CursorAdapter vi c đ c d li u c s dệ ụ ụ ể ẳ ạ ư ệ ọ ữ ệ ơ ở ữ li u t m t Cursor, ho c m t ArrayAdapter đ c t m t m ng tùy ý. Đ tìm hi u thêm v cáchệ ừ ộ ặ ộ ọ ừ ộ ả ể ể ề s d ng m t adapter cho populate views c a b n, hãy đ c đóng vào d li u v i AdapterView.ử ụ ộ ủ ạ ọ ữ ệ ớ Styles and Themes Có l b n không hài lòng v i dáng v c a các widgets tiêu chu n. Đ s a đ i chúng, b n cóẽ ạ ớ ẻ ủ ẩ ể ử ổ ạ th t o m t s style riêng và ch đ c a b n.ể ạ ộ ố ủ ề ủ ạ
  • 16. • M t Style là m t t p h p c a m t hay nhi u thu c tính đ nh d ng mà b n có th ápộ ộ ậ ợ ủ ộ ề ộ ị ạ ạ ể d ng nh m t đ n v đ n các y u t cá nhân trong layout c a b n. Ví d , b n có thụ ư ộ ơ ị ế ế ố ủ ạ ụ ạ ể xác đ nh m t Style ch đ nh m t văn b n kích th c và màu s c nh t đ nh, sau đó ápị ộ ỉ ị ộ ả ướ ắ ấ ị d ng nó đ ch các y u t View c th .ụ ể ỉ ế ố ụ ể • M t Theme là m t t p h p c a m t hay nhi u thu c tính đ nh d ng mà b n có th ápộ ộ ậ ợ ủ ộ ề ộ ị ạ ạ ể d ng nh m t đ n v đ n t t c các ho t đ ng trong m t ng d ng, ho c ch ho tụ ư ộ ơ ị ế ấ ả ạ ộ ộ ứ ụ ặ ỉ ạ đ ng đ n l . Ví d , b n có th đ nh nghĩa m t theme mà b màu s c c th cho khungộ ơ ẻ ụ ạ ể ị ộ ộ ắ ụ ể c a s và n n b ng, và đ t kích c ch và màu s c cho các menu. Theme này sau đó cóử ổ ề ả ặ ỡ ữ ắ th đ c áp d ng cho các ho t đ ng c th ho c ng d ng toàn b . Styles and themesể ượ ụ ạ ộ ụ ể ặ ứ ụ ộ là ngu n tài nguyên.ồ Android cung c p m t s ki u m c đ nh và style and themes mà b n có th s d ng, ho cấ ộ ố ể ặ ị ạ ể ử ụ ặ b n có th phát tri n riêng tài nguyên style and theme c a b n. Learn more about using stylesạ ể ể ủ ạ and themes in the Applying Styles and Themes document. Tìm hi u thêm v cách s d ngể ề ử ụ phong cách và ch đ trong các ng d ng Styles và tài li u đ .ủ ề ứ ụ ệ ề K thu t x lý b nh trong Android Mobileỹ ậ ử ộ ớ Android ng d ng, trên T-Mobile G1, đ c gi i h n ít nh t 16 MB c a heap. Đó là b nhứ ụ ượ ớ ạ ấ ủ ộ ớ cho đi n tho i và r t ít cho nh ng gì m t s nhà phát tri n mu n đ t đ c. Th m chí n uệ ạ ấ ữ ộ ố ể ố ạ ượ ậ ế b n không k ho ch s d ng t t c các b nh này, b n nên s d ng ít nh t có th cho cácạ ế ạ ử ụ ấ ả ộ ớ ạ ử ụ ấ ể ng d ng khác ch y mà không ph i đào th i chúng.ứ ụ ạ ả ả Các ng d ng khác Android có th gi trong b nh , nhanh h n, cho ng i s d ng đứ ụ ể ữ ộ ớ ơ ườ ử ụ ể chuy n đ i gi a các ng d ng c a mình.ể ổ ữ ứ ụ ủ Là m t ph n c a công vi c c a tôi, tôi ch y vào các v n đ rò r b nh trong các ng d ngộ ầ ủ ệ ủ ạ ấ ề ỉ ộ ớ ứ ụ Android và chúng tôi th y đ c ph n l n th i gian do các sai l m: gi quá lâu cho tham chi uấ ượ ầ ớ ờ ầ ữ ế đ n m t Context. Trên Android, m t Context đ c s d ng cho nhi u ho t đ ng, nh ng chế ộ ộ ượ ử ụ ề ạ ộ ư ủ y u là đ t i và truy c p tài nguyên. Đây là lý do t i sao t t c các widgets nh n đ c m t sế ể ả ậ ạ ấ ả ậ ượ ộ ố Context trong xây d ng c a h . Trong m t ng d ng bình th ng c a Android, b n th ng cóự ủ ọ ộ ứ ụ ườ ủ ạ ườ hai lo i Context Activity và Application. Nó th ng là m t trong nh ng cái đ u tiên mà nhàạ ườ ộ ữ ầ phát tri n đi đ n các classes và methods c n m t Context :ể ế ầ ộ @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad"); setContentView(label); } Đi u này có nghĩa là Views có m t tham chi u đ n toàn b ho t đ ng và do đó b t c đi u gìề ộ ế ế ộ ạ ộ ấ ứ ề đ n Activity đang n m gi ; th ng đ c View toàn b h th ng phân c p và t t c cácế ắ ữ ườ ượ ộ ệ ố ấ ấ ả ngu n tài nguyên c a nó. Vì v y, n u b n b rò r các Context ( "leak" có nghĩa là nh v y b nồ ủ ậ ế ạ ị ỉ ư ậ ạ gi m t tham chi u đ n nó, ngăn ch n các GC t thu th p), b n b rò r r t nhi u b nh . Ròữ ộ ế ế ặ ừ ậ ạ ị ỉ ấ ề ộ ớ
  • 17. r toàn b ho t đ ng có th th c s d dàng n u b n không c n th n. Khi đ nh h ng s thayỉ ộ ạ ộ ể ự ự ễ ế ạ ẩ ậ ị ướ ẽ đ i h th ng, theo m c đ nh, tiêu hu activity hi n t i và t o ra m t cái m i trong khi giổ ệ ố ặ ị ỷ ệ ạ ạ ộ ớ ữ tr ng thái.ạ Trong khi làm đi u đó, Android s t i l i giao di n c a ng d ng t các ngu n tàiề ẽ ả ạ ệ ủ ứ ụ ừ ồ nguyên. Bây gi hãy t ng t ng b n đã vi t m t ng d ng v i m t bitmap l n mà b nờ ưở ượ ạ ế ộ ứ ụ ớ ộ ớ ạ không mu n thay phiên t t c . Cách đ n gi n nh t đ gi cho nó xung quanh và không ph iố ấ ả ơ ả ấ ể ữ ả t i xoay vòng l i m i ngày nên đ nó trong static field:ả ạ ỗ ể private static Drawable sBackground; @Override protected void onCreate(Bundle state) { super.onCreate(state); TextView label = new TextView(this); label.setText("Leaks are bad"); if (sBackground == null) { sBackground = getDrawable(R.drawable.large_bitmap); } label.setBackgroundDrawable(sBackground); setContentView(label); } Mã này là r t nhanh và cũng r t sai, nó t o ra leak các ho t đ ng đ u tiên khi thay đ i đ nhấ ấ ạ ạ ộ ầ ổ ị h ng. Khi m t Drawable đ c đính kèm đ View, view đ c thi t l p nh là m t callbackướ ộ ượ ể ượ ế ậ ư ộ trên drawable. Trong đo n mã trên, đi u này có nghĩa là drawable có m t tham chi u đ nạ ề ộ ế ế TextView mà t nó có m t tham chi u đ n các ho t đ ng (trong Context mà l n l t có thamự ộ ế ế ạ ộ ầ ượ chi u khá nhi u đ n b t c đi u gì (tùy thu c vào mã c a b n.)ế ề ế ấ ứ ề ộ ủ ạ Ví d này là m t trong nh ng tr ng h p đ n gi n nh t leaking c a các Context và b n cóụ ộ ữ ườ ợ ơ ả ấ ủ ạ th xem th nào, chúng tôi đã làm vi c xung quanh nó trong mã ngu n c a các màn hình chể ế ệ ồ ủ ủ (tìm unbindDrawables() method) b ng cách thi t l p các callbacks drawables l u tr đ nullằ ế ậ ư ữ ể khi Activity này phá h y. Đi u thú v , có nh ng tr ng h p b n có th t o ra m t chu i cácủ ề ị ữ ườ ợ ạ ể ạ ộ ỗ hoàn c nh b rò r , và khó khăn. Nó làm cho b n h t b nh khá nhanh chóng.ả ị ỉ ạ ế ộ ớ Có hai cách d dàng đ tránh rò r b nh ng c nh có liên quan. The most obvious one is toễ ể ỉ ộ ớ ữ ả avoid escaping the context outside of its own scope. M t rõ ràng nh t là đ tránh b i c nh bênộ ấ ể ố ả ngoài ph m vi c a chính mình.ạ ủ Ví d trên cho th y tr ng h p c a m t tham chi u tĩnh nh ng bên trong classe và ti m nụ ấ ườ ợ ủ ộ ế ư ề ẩ reference cho class bên ngoài có th nguy hi m nh nhau. The second solution is to use theể ể ư Application context. Gi i pháp th hai là s d ng ng c nh Application.ả ứ ử ụ ữ ả Context này s không sao mi n là ng d ng c a b n v n ho t đ ng và không ph thu c vàoẽ ễ ứ ụ ủ ạ ẫ ạ ộ ụ ộ chu kỳ ho t đ ng c a activities. N u b n có k ho ch duy trì lâu dài s ng các đ i t ng màạ ộ ủ ế ạ ế ạ ố ố ượ
  • 18. c n m t b i c nh đó, nh đ i t ng áp d ng. B n có th có đ c nó m t cách d dàng b ngầ ộ ố ả ớ ố ượ ụ ạ ể ượ ộ ễ ằ cách g i Context.getApplicationContext() ho c Activity.getApplication()ọ ặ Tóm l i, đ tránh nh ng context có liên quan rò r b nh , xin hãy nh :ạ ể ữ ỉ ộ ớ ớ • Không gi tham chi u đ n context activity quá lâu(m t tham chi u đ n m t activityữ ế ế ộ ế ế ộ nên có chu kỳ s ng t ng t nh các ho t đ ng chính nó)ố ươ ự ư ạ ộ • Hãy th s d ng các context c a application thay vì context c a activityử ử ụ ủ ủ • Tránh non-static bên trong các classes c a m t activity n u b n không ki m soát vòngủ ộ ế ạ ể đ i c a nó, s d ng m t class static bên trong và th c hi n m t tham chi u y u đ nờ ủ ử ụ ộ ự ệ ộ ế ế ể activity bên trong. Các gi i pháp cho v n đ này là s d ng m t static class bên trongả ấ ề ử ụ ộ v i m t WeakReference cho class bên ngoài, nh th c hi n trong ViewRoot và l p đóớ ộ ư ự ệ ớ c a nó ch ng h nủ ẳ ạ • M t b thu rác không ph i là m t b o hi m ch ng rò r b nh .ộ ộ ả ộ ả ể ố ỉ ộ ớ Khai báo Layout trong Android Layout c a b n là ki n trúc cho các giao di n ng i dùng trong m t Activity. Nó xác đ nh củ ạ ế ệ ườ ộ ị ơ c u và n m gi các y u t xu t hi n cho ng i dùng th y. B n có th khai báo layout c aấ ắ ữ ế ố ấ ệ ườ ấ ạ ể ủ b n theo hai cách:ạ • Khai báo ph n t UI trong XML.ầ ử Android cung c p m t v n t v ng đ n gi n XMLấ ộ ố ừ ự ơ ả t ng ng v i các l p View và subclasses, ch ng h n nh widget và layout.ươ ứ ớ ớ ẳ ạ ư • Kh i t o các y u t layout trong th i gian ch y.ở ạ ế ố ờ ạ ng d ng c a b n th t o ra đ iỨ ụ ủ ạ ể ạ ố t ng View và ViewGroup (và thao tác các properties c a nó) theo ch ng trình.ượ ủ ươ Vi t XMLế S d ng v n t v ng c a Android XML, b n có h nhanh chóng thi t k UI layout và cácử ụ ố ừ ự ủ ạ ể ế ế thành ph n ch a chúng, gi ng nh cách b n t o các trang web trong HTML - v i m t lo t cácầ ứ ố ư ạ ạ ớ ộ ạ ph n t l ng nhau.ầ ử ồ M i t p tin layout ph i bao g m ph n t g c m t cách chính xác, và ph i là m t đ i t ngỗ ậ ả ồ ầ ử ố ộ ả ộ ố ượ View ho c ViewGroup. M t khi b n đã xác đ nh các ph n t g c, b n có th thêm đ i t ngặ ộ ạ ị ầ ử ố ạ ể ố ượ layout b sung ho c các widget nh là các ph n t con cho t ng b c xây d ng m t h th ngổ ặ ư ầ ử ừ ướ ự ộ ệ ố View đ nh nghĩa layout c a b n. Ví d , đây là có layout XML có s d ng m t LinearLayoutị ủ ạ ụ ử ụ ộ d c cho t ch c m t TextView và m t Button:ọ ổ ứ ộ ộ <?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" > <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Hello, I am a TextView" /> <Button android:id="@+id/button" android:layout_width="wrap_content"
  • 19. android:layout_height="wrap_content" android:text="Hello, I am a Button" /> </LinearLayout> Sau khi b n đã khai báo layout c a b n trong XML, l u t p tin v i ph n m r ng .xml, trongạ ủ ạ ư ậ ớ ầ ở ộ th m c res/layout/ d án Android c a b n, do đó, đ đúng cách biên d ch.ư ụ ự ủ ạ ể ị N p tài nguyên XMLạ Khi b n biên d ch ng d ng c a b n, m i t p tin XML layout là biên d ch vào m t ngu n tàiạ ị ứ ụ ủ ạ ỗ ậ ị ộ ồ nguyên View. B n c n ph i t i các ngu n tài nguyên layout t mã ng d ng c a b n, trongạ ầ ả ả ồ ừ ứ ụ ủ ạ Activity.onCreate() callback implementation c a b n. Làm nh v y b ng cách g iủ ạ ư ậ ằ ọ setContentView(), qua nó tham chi u cho tài nguyên layout c a b n trong các hình th c:ế ủ ạ ứ R.layout.layout_file_name Ví d :ụ n u XML layout c a b n đ c l u nhế ủ ạ ượ ư ư main_layout.xml, b n s t i nó cho Activityạ ẽ ả c a b n nh sau:ủ ạ ư public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main_layout); } Thu c tính c a Layout khai báo trong Androidộ ủ M i đ i t ng View và ViewGroup h tr đa d ng c a riêng nó các thu c tính XML. M t sỗ ố ượ ỗ ợ ạ ủ ộ ộ ố thu c tính đ c c th cho m t đ i t ng View (ví d , TextView h tr thu c tính textSize),ộ ượ ụ ể ộ ố ượ ụ ỗ ợ ộ nh ng các thu c tính này cũng đ c k th a b i b t c đ i t ng View có th m r ng l pư ộ ượ ế ừ ở ấ ứ ố ượ ể ở ộ ớ này. M t s đ c s d ng chung cho t t c đ i t ng View, b i vì nó đ c th a k t l pộ ố ượ ử ụ ấ ả ố ượ ở ượ ừ ế ừ ớ View g c(gi ng nh các thu c tính id). Và, các thu c tính khác đ c coi là "tham s layout",ố ố ư ộ ộ ượ ố mà đ c thu c tính mô t đ nh h ng layout nh t đ nh c a đ i t ng View, theo đ nh nghĩaượ ộ ả ị ướ ấ ị ủ ố ượ ị c a đ i t ng đó là đ i t ng ViewGroup parent.ủ ố ượ ố ượ ID B t kỳ đ i t ng View có th có ID s nguyên liên k t v i nó, đ nh n di n ra các View bênấ ố ượ ể ố ế ớ ể ậ ệ trong cây. Khi ng d ng biên d ch, ID này là tham chi u nh là m t s nguyên, nh ng IDứ ụ ị ế ư ộ ố ư th ng đ c giao trong layout các file XML nh m t chu i, trong thu c tính id. Đây là thu cườ ượ ư ộ ỗ ộ ộ tính chung cho t t c đ i t ng View (đ c đ nh nghĩa b i l p View) và b n s s d ng nóấ ả ố ượ ượ ị ở ớ ạ ẽ ử ụ r t th ng xuyên. Cú pháp c a có ID, bên trong th XML là:ấ ườ ủ ẻ android:id="@+id/my_button" T i bi u t ng (@) t i đ u c a chu i cho th y r ng cú pháp XML c n phân tích và m r ngạ ể ượ ạ ầ ủ ỗ ấ ằ ầ ở ộ ph n còn l i c a chu i ID và xác đ nh nó nh là m t ngu n tài nguyên ID. Các bi u t ngầ ạ ủ ỗ ị ư ộ ồ ể ượ c ng (+) có nghĩa r ng đây là m t tên tài nguyên m i ph i đ c t o ra và thêm đ ngu n tàiộ ằ ộ ớ ả ượ ạ ể ồ
  • 20. nguyên c a chúng tôi (trong file R.java). Có m t s tài nguyên ID khác đ c cung c p b i cácủ ộ ố ượ ấ ở khuôn kh Android.ổ android:id="@android:id/empty" Đ t o ra views và tham kh o chúng t ng d ng, m t mô hình ph bi n là:ể ạ ả ừ ứ ụ ộ ổ ế • Xác đ nh group/widget trong t p tin layout và gán cho nó m t mã s duy nh t:ị ậ ộ ố ấ <Button android:id="@+id/my_button" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/my_button_text"/> • Sau đó t o m t instance c a đ i t ng group và n m b t nó t layout (thông th ngạ ộ ủ ố ượ ắ ắ ừ ườ dùng trong method onCreate()): Button myButton = (Button) findViewById(R.id.my_button); Xác đ nh ID cho các đ i t ng group là quan tr ng khi t o ra m t RelativeLayout. Trong cáchị ố ượ ọ ạ ộ b trí t ng đ i, views sibling có th xác đ nh layout c a mình t ng đ i khác group sibling,ố ươ ố ể ị ủ ươ ố đó là tham chi u b i ID duy nh t.ế ở ấ M t ID không c n ph i là duy nh t trong su t toàn b cây, nh ng nó c n là duy nh t trongộ ầ ả ấ ố ộ ư ầ ấ m t ph n c a cây b n đang tìm ki m (th ng có th là toàn b cây, vì v y t t nh t cho làộ ầ ủ ạ ế ườ ể ộ ậ ố ấ hoàn toàn đ c nh t khi có th ).ộ ấ ể Layout Parameters layout các thu c tính có tên là XML đ nh nghĩa các thông s layout_something layout cho cácộ ị ố View thích h p cho các ViewGroup trong đó c trú.ợ ư M i l p ViewGroup th c hi n m r ng m t l p ViewGroup.LayoutParams l ng nhau. L pỗ ớ ự ệ ở ộ ộ ớ ồ ớ này có ch a các lo i properties xác đ nh kích th c và v trí cho t ng group child, nh thíchứ ạ ị ướ ị ừ ư h p cho nhóm group. Nh b n nhìn th y hình 1, các nhóm parent group thông s xác đ nhợ ư ạ ấ ở ố ị layout cho t ng group con(bao g m c nhóm group child).ừ ồ ả ( nh minh h a đ c s d ng t http://developer.android.com/images/layoutparams.png)Ả ọ ượ ử ụ ừ