android program 6167

20
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 lp ữậ 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. ế ơ ướ

Upload: phongspkt

Post on 11-Aug-2015

23 views

Category:

Engineering


4 download

TRANSCRIPT

Page 1: Android program 6167

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.ả ế ơ ướ

Page 2: Android program 6167

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.ơ ế ầ ượ ế ở ườ ử ụ

Page 3: Android program 6167

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 .ữ ượ ể ị ạ ồ ụ

Page 4: Android program 6167

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)

Page 5: Android program 6167

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:ướ ắ ủ ừ ạ

Page 6: Android program 6167

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ớ ộ ị ậ ạ ạ ể ơ ể ườ

Page 7: Android program 6167

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.ặ ặ ươ ứ

Page 8: Android program 6167

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:

Page 9: Android program 6167

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áầ ế ọ ủ ặ ơ ả ế ế

Page 10: Android program 6167

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:ộ ơ ả ể ứ

Startedservice 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.ộ ậ ạ ạ ộ ượ ự ệ ừ ạ ả

Boundservice 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à:ọ

Page 11: Android program 6167

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.ạ ố ế ạ ở ề

Page 12: Android program 6167

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ể ượ ấ ơ ả ứ ạ ư ạ ầ ượ ạ ể

Page 13: Android program 6167

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"

Page 14: Android program 6167

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ự ệ ớ ủ ạ ố ắ ự ệ ụ ể ả

Page 15: Android program 6167

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.ể ạ ộ ố ủ ề ủ ạ

Page 16: Android program 6167

• 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 :ể ế ầ ộ

@Overrideprotected 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òữ ộ ế ế ặ ừ ậ ạ ị ỉ ấ ề ộ ớ

Page 17: Android program 6167

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;

@Overrideprotected 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àạ ộ ủ ế ạ ế ạ ố ố ượ

Page 18: Android program 6167

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"

Page 19: Android program 6167

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ộ ằ ộ ớ ả ượ ạ ể ồ

Page 20: Android program 6167

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)Ả ọ ượ ử ụ ừ