Dù sao đi nữa thì điều đáng mừng đó là ngày càng có nhiều người dùng được tiếp cận với những phiên bản Android hiện đại hơn.Trích từ http://www.tinhte.vn/threads/so-luong-thiet-bi-dung-a
Trang 1KHOA CÔNG NGHỆ THÔNG TIN VÀ TRUYỀN THÔNG
Trang 2LỜI CẢM ƠN
Lời nói đầu tiên, xin chân thành gửi lời cảm ơn đến GVHD thầy Đoàn Hòa Minh, cám ơn thầy đã cho em cơ hội thực hiện đề tài và đã nhiệt tình hướng dẫn trong suốt thời gian làm đề tài
Xin cám ơn các thầy cô khoa CNTT-TT đã giảng dạy và truyền đạt những kiến thức quý báu trong suốt những năm học qua Cám ơn tất cả bạn bè đã ủng hộ, giúp đỡ, chia sẻ và đóng góp những ý tưởng để hoàn thành đề tài
Cuối cùng, xin gửi lời cám ơn sâu sắc đến ba, mẹ và các người thân trong gia đình đã tạo điều kiện, môi trường học tập tốt nhất để hoàn thành đề tài
Mặc dù đã cố gắng hết sức mình, tuy nhiên đề tài sẽ không tránh khỏi những thiếu sót Rất mong quý Thầy Cô thông cảm và góp ý để đề tài hoàn thiện hơn !
Cần Thơ, ngày 17 tháng 4 năm 2013
Người viết
Hồ Minh Triết
Trang 3MỤC LỤC
MỤC LỤC 2
DANH MỤC HÌNH 5
DANH MỤC BẢNG 5
KÝ HIỆU VÀ VIẾT TẮT 6
TỪ KHÓA 6
TÓM TẮT 7
ABSTRACT 8
CHƯƠNG I : TỔNG QUAN 9
1.1 ĐẶT VẤN ĐỀ 9
1.2 LỊCH SỬ VẤN ĐỀ 9
1.3 MỤC TIÊU VÀ NHIỆM VỤ 9
1.4 PHẠM VI ĐỀ TÀI 10
1.5 PHƯƠNG PHÁP NGHIÊN CỨU 10
CHƯƠNG II : TÌM HIỂU HỆ ĐIỀU HÀNH ANDROID 11
2.1 SƠ LƯỢC ANDROID 11
2.2 CÁC PHIÊN BẢN HỆ ĐIỀU HÀNH ANDROID 11
2.2.1 Android 1.0 11
2.2.2 Android 1.1 11
2.2.3 Android 1.5: Cupcake 12
2.2.4 Android 1.6: Donut 12
2.2.5 Android 2.0: Eclair 12
2.2.6 Android 2.2: Froyo 13
2.2.7 Android 2.3: Gingerbread 13
2.2.8 Android 3.0: Honeycomb 13
2.2.9 Android 4.0: Ice Cream Sandwich 14
2.2.10 Android 4.1: Jelly Bean 14
2.2.11 Android 4.2: vẫn là Jelly Bean 14
2.3 CÁC THÀNH PHẦN CHÍNH CỦA ANDROID 15
2.3.1 ACTIVITY 15
Trang 42.3.2 SERVICE 20
2.3.3 CONTENT PROVIDER 22
2.3.4 INTENT 23
2.3.5 BROADCAST RECEIVER 27
2.3.6 NOTIFICATION 28
2.4 THƯ VIỆN HỔ TRỢ LẬP TRÌNH ỨNG DỤNG CỦA ANDROID 28
2.5 LẬP TRÌNH GIAO DIỆN MỨC CAO 29
2.5.1 Tổng quan 29
2.5.2 Bố cục giao diện người dùng 29
2.5.3 LinearLayout 30
2.5.4 FrameLayout 32
2.5.5 Button 33
2.5.6 ImageButton 34
2.5.7 Dialog 34
2.5.8 Toast 36
2.5.9 Gallery 37
2.6 LẬP TRÌNH GIAO DIỆN MỨC THẤP 39
2.6.1 Bitmap 39
2.6.2 Canvas 41
2.6.3 Paint 42
2.6.4 Path 42
2.6.5 Phương thức onTouchEvent(MotionEvent event) 43
CHƯƠNG III: NỘI DUNG KẾT QUẢ NGHIÊN CỨU 46
3.1 PHÁT TRIỂN ỨNG DỤNG 46
3.1.1 Sơ đồ chức năng 46
3.1.2 Xây dựng giao diện 47
3.1.3 Chức năng chọn nét vẽ, hình dạng muốn vẽ 48
3.1.4 Chức năng thay đổi nét độ lớn nét vẽ 52
3.1.5 Chức thay đổi màu sắc nét vẽ 55
3.1.6 Chức năng phục hồi 57 3.1.7 Chức năng chọn hình kèm theo ứng dụng, phát âm tiếng anh ứng với nội dung hình đã chọn 59
Trang 53.1.8 Chức năng chọn hình từ máy 63
3.1.9 Chức năng lưu hình ảnh 65
3.1.10 Chức năng chia sẻ 65
3.1.11 Chức năng tạo mới 67
3.1.12 Chức năng xóa (Eraser) 67
3.1.13 Chức năng tô màu 67
3.1.14 Chức năng tải hình lên bức vẽ 72
KẾT LUẬN VÀ ĐỀ NGHỊ 75
I KẾT QUẢ ĐẠT ĐƯỢC 75
II CÁC MẶT CHƯA ĐẠT ĐƯỢC VÀ HẠN CHẾ 75
III HƯỚNG PHÁT TRIỂN 75
TÀI LIỆU THAM KHẢO 77
MỘT SỐ HÌNH ẢNH TỪ ỨNG DỤNG 78
Trang 6DANH MỤC HÌNH
Hình 1 Vòng đời của Activity
Hình 2 Vòng đời của Service
Hình 3 Sơ đồ hoạt động của Intent
Hình 4 Sơ đồ phân cấp bố cục giao diện người dùng
Hình 5 Minh họa LinearLayout
Hình 6 Minh họa FrameLayout
Hình 7 Minh họa Toast
Hình 8 Sơ đồ chức năng
Hình 9 Thiết kế giao diện
Hình 10 Giao diện sau khi hoàn thành
Hình 17 Hình ảnh minh họa fillCircle() và fillCircle_gradient()
Hình 18 Dialog chọn hình tải lên
Bảng 1 Bảng thuộc tính của Intent
Bảng 2 Bảng Action được xây dựng sẵn
Trang 7KÝ HIỆU VÀ VIẾT TẮT
1 GVHD Giáo viên hướng dẫn
2 SVTH Sinh viên thực hiện
3 CNTT-TT Công nghệ thông tin và truyền thông
4 Smartphone Điện thoại thông minh
5 API Application Programming Interface
Trang 8TÓM TẮT
Trong những năm gầy đây, cùng với sự phát triển của khoa học và công nghệ, ngày càng có nhiều hệ điều hành cho các thiết bị di động được phát triển Trong số đó Android đang chiếm lĩnh thị trường và ngày càng phát triển mạnh mẽ hơn
Trong xu hướng phát triển đó, nghiên cứu và phát triển các ứng dụng trên hệ điều Android đang thu hút nhiều sinh viên và hứa hẹn mang lại nhiều cơ hội việc làm trong tương lai Vì thế, tôi đã lựa chọn đề tài “Ứng dụng tô màu cho bé” nhằm mục đích nghiên cứu hệ điều hành Android và cũng nhằm phát triển một ứng dụng được dự đoán
sẽ phát triển mạnh mẽ trong những năm sắp tới Ứng dụng tô màu cho bé hổ trợ các chức năng sau :
Vẽ, tô màu lên hình do người dùng tự sáng tạo
Vẽ, tô màu lên hình có sẵn kèm theo ứng dụng
Vẽ, tô màu lên hình tải lên từ thẻ nhớ
Thay đổi nét vẽ, độ lớn và màu sắc của nét vẽ
Tải hình kèm ứng dụng lên hình đang vẽ
Phát âm tiếng anh, dịch nghĩa cơ bản các hình kèm theo ứng dụng
Lưu trữ, chia sẻ các hình đã vẽ
Với phương pháp nghiên cứu lý thuyết và thực hành trên máy ảo, sau một thời gian tôi đã phát triển thành công ứng dụng tô màu cho bé Ứng dụng cơ bản đã đáp ứng được việc vẽ, tô màu của bé nhằm phát huy tính sáng tạo và trí tuệ của bé
Trang 9ABSTRACT
In recent years, with the development of science and techonology, there has been more and more operating systems developed for handheld devices Among of those, Android, is dominating the market and growing strongly
In the trend of development, the application research and development on the Android operating system is attracting more students and promises to bring more job
opportunities in the future Therefore, I chose the topic “Coloring Application for Kids” for the purpose of studying the Android operating system and developing an application that is expected to be strongly developed in the following years. Coloring Application for Kids supports:
Drawing and painting on self-creative pictures
Drawing and painting on pictures available in the application
Drawing and painting on pictures uploaded from card reader
Adjusting brushwork's color and size
Downloading pictures with the application on current drawing
Translating and pronouncing English definition of current picture with the application
Storing and sharing complete picture
With the method of theoretical study and virtual-machine practice, I have
successfully developed the coloring application for the kids The application has met the basic drawing and coloring capacity of the kids so that they can improve their
creativity and intelligence
Trang 10CHƯƠNG I : TỔNG QUAN 1.1 ĐẶT VẤN ĐỀ
Ngày nay, khi khoa học và công nghệ đang phát triển mạnh mẽ dẫn đến giá cả các smartphone đang giảm dần đã tạo điều kiện cho nhiều người dùng tiếp cận smartphone
và dần thay thế các sản phẩm điện thoại phổ thông Trong số các smartphone đó, điện thoại sử dụng hệ điều hành Android đang chiếm lĩnh thị trường Các ứng dụng trên Android ngày càng phong phú và hấp dẫn người dùng, góp phần làm cho cuộc sống thêm tiện ích và năng động hơn Trong các ứng dụng đó, ứng dụng tô, vẽ trên màn hình điện thoại ngày càng phát triển và thu hút nhiều người dùng, đặc biệt là trẻ nhỏ
Mỗi đứa trẻ khi sinh ra và lớn lên, đều trải qua quá trình tìm tòi và học hỏi Trong những năm tháng đầu đời bé bắt đầu tiếp cận cuộc sống qua những âm thanh và hình ảnh Qua năm tháng bé dần lớn lên và đến lúc bé biết vẽ, biết viết Đó cũng chính là thời điểm “Ứng dụng tô màu cho bé” phát huy tác dụng Qua ứng dụng tô màu,bé có thể nhận dạng được những màu sắc, hình dạng cơ bản Trong quá trình tô vẽ, bé có thể phát huy tính sáng tạo trong việc lựa chọn màu sắc, kết hợp cách hình dạng có sẵn để tạo nên những bức vẽ độc đáo Bên cạnh ứng dụng cũng giúp cho bố, mẹ của bé giảm được thời gian sắp xếp các vật dụng khi bé tô màu theo cách truyền thống
Với mong muốn đó, tôi đã quyết định thực hiện đề tài “Ứng dụng tô màu cho bé” nhằm mục đích góp phần làm phong phú cho các ứng dụng tô, vẽ trên điện thoại Android, đồng thời cũng là cơ hội nghiên cứu và phát triển ứng dụng di động cho Android, một lĩnh vực hứa hẹn sẽ phát triển mạnh trong những năm sắp tới
- Nâng cao khả năng báo cáo, thuyết trình và khả năng tự nghiên cứu
- Phát triển phần mềm hữu ích trên điện thoại và máy tính bảng sử dụng hệ điều hành Android, giúp cho bé vừa chơi vừa học
Trang 11 Tải hình để tô, vẽ kèm theo với ứng dụng
Tô màu vào vùng giới hạn, tô màu theo bán kính định sẵn
Tải một số hình ảnh lên màn hình
Phục hồi những nét vẽ, tô trước đó
Lưu lại hình ảnh vẽ hoặc tô
Chia sẻ hình vẽ lên các mạng xã hội và hoặc đính kèm vào mail thông qua các ứng dụng tương ứng được cài đặt trên điện thoại
1.5 PHƯƠNG PHÁP NGHIÊN CỨU
Để hoàn thành đề tài, tôi thực hiện các phương pháp sau :
Tìm hiểu lập trình android, nghiên cứu các API android hổ trợ việc phát triển ứng dụng
Nghiên cứu các giải thuật
Phát triển ứng dụng
Trang 12CHƯƠNG II : TÌM HIỂU HỆ ĐIỀU HÀNH ANDROID
2.1 SƠ LƯỢC ANDROID
Android là một hệ điều hành dựa trên nền tảng Linux được thiết kế dành cho các thiết bị di động có màn hình cảm ứng như điện thoại thông minh và máy tính bảng Ban đầu, Android được phát triển bởi Android Inc Sau đó được Google mua lại vào năm
2005 Kể từ đó, Google đã có những quyết định đầu tư, phát triển cho hệ điều hành này
Đến năm 2007, Liên minh thiết bị di động mã nguồn mở (Open Handset Alliance) được thành lập nhằm phát triển một chuẩn cho các thiết bị cầm tay mã nguồn mở Và như vậy, Android trở thành nền tảng chính của Liên minh thiết bị cầm tay mã nguồn mở đồng thời Google đã công bố việc họ bắt tay phát triển hệ điều hành mã nguồn mở cho thiết bị di động nhằm cạnh tranh với Symbian, Windows Mobile và các đối thủ khác
Từ tháng 10/2008, hệ điều hành Android đã chính thức trở thành phần mềm mã nguồn mở Theo đó, các công ty thứ ba được phép thêm những ứng dụng trên hệ điều hành Android và bán chúng mà không cần sự cho phép của Google Cũng trong khoảng thời gian này, chiếc điện thoại đầu tiên chạy Android được bán ra thị trường
Đến năm 2010, số lượng smartphone nền tảng Android tăng trưởng mạnh mẽ Hàng loạt nhà sản xuất hàng đầu đã bắt tay sản xuất smartphone như Samsung, HTC, Motorola Hệ điều hành Android đã giúp cho nhiều công ty công nghệ bước sang một trang mới trong việc cải thiện doanh số, bán hàng có lãi sau một thời gian dài trì trệ, tiêu biểu là Motorola
2.2 CÁC PHIÊN BẢN HỆ ĐIỀU HÀNH ANDROID
2.2.1 Android 1.0
Ra mắt: ngày 23-11-2008
HTC Dream là dòng smartphone thương mại dùng Android đầu tiên với kiểu dáng trượt kèm bàn phím vật lý Phiên bản Android 1.0 chưa được Google định hình tên
mã, dù trước đó tên gọi Astro Boy hay Bender được gán cho thế hệ đầu tiên này
Android 1.0 rất nguyên sơ, tích hợp sẵn khả năng đồng bộ dữ liệu với các dịch vụ trực tuyến của Google như Gmail, Google Calendar và Contacts, một trình phát media,
hỗ trợ Wi-Fi và Bluetooth, thanh trạng thái hiển thị các thông báo ứng dụng và một ứng dụng chụp ảnh (camera) tuy chưa cho phép thay đổi độ phân giải và chất lượng ảnh
2.2.2 Android 1.1
Ra mắt: ngày 9-2-2009
Bên cạnh con số, Google rục rịch đưa hệ thống tên gọi (tên mã) vào các phiên bản Android Tuy chưa chính thức áp dụng nhưng Android 1.1 đã có tên Petit Four Không
Trang 13bao gồm nhiều tính năng, phiên bản này bổ sung một số chức năng mới cho Google Maps hiển thị chi tiết hơn, bàn phím ảo gọi điện thoại đã có thể hiển thị hoặc ẩn khi gọi, chương trình SMS cho phép người dùng lưu tập tin đính kèm Android 1.1 sửa một số lỗi trong Android 1.0
2.2.3 Android 1.5: Cupcake
Ra mắt: ngày 30-4-2009
Cupcake, tên mã đầu tiên áp dụng cho phiên bản Android Cupcake mang nhiều tính năng mới như bàn phím ảo có khả năng dự đoán từ đang gõ, từ điển từ ngữ do người dùng đặt ra, hỗ trợ widget trên giao diện chủ, quay phim và phát lại video clip, lược sử thời gian cuộc gọi, chế độ tự động xoay màn hình theo hướng sử dụng (screen rotation) Trình duyệt web trong Cupcake có thêm khả năng sao chép/ dán (copy/paste)
Ngoài ra, phiên bản này cho phép người dùng hiển thị hình ảnh trong danh bạ, một điểm thú vị mà hầu hết người dùng điện thoại di động muốn có Màn hình chuyển đổi và hình ảnh khi khởi động máy được làm mới
Hệ thống hoạt động ổn định hơn, cải thiện khả năng xử lý, hỗ trợ kết nối Bluetooth tốt hơn, đặc biệt tùy chọn đồng bộ nhiều tài khoản Một điểm thuận tiện được đánh giá cao lúc bấy giờ là giao diện danh bạ cho phép nhấn chọn vào một ảnh danh
bạ để gọi, nhắn tin hay email đến họ Giao diện ứng dụng lịch biểu (Calendar) cũng thay đổi
Eclair là phiên bản Android đầu tiên hỗ trợ ảnh nền động (live wallpaper) dù tùy chọn này tiêu tốn khá nhiều pin
Trang 142.2.6 Android 2.2: Froyo
Ra mắt: ngày 20-5-2010
Từ phiên bản 2.0 trở đi, Android dần hoàn thiện hơn Phiên bản 2.2 (Froyo) mang Adobe Flash đến Android, kéo theo hàng loạt ứng dụng và game trên nền Flash Người dùng cũng có thể xem video clip nền Flash như YouTube và "ra lệnh" thực hiện cuộc gọi qua Bluetooth
Một chức năng mới trong Froyo được nhóm người dùng lưu động yêu thích
là USB Tethering và Wi-Fi Hotspot, biến chiếc smartphone Android thành thiết bị phát sóng Wi-Fi từ kết nối 3G Tính năng này được sử dụng rất phổ biến đến ngày nay
Lần đầu tiên Android cho phép cài đặt ứng dụng (app) lên thẻ nhớ SD thay vì mặc định cài ngay vào bộ nhớ trong của thiết bị Điểm "đầu tiên" nữa trong Froyo bao gồm mật khẩu đã hỗ trợ số và chữ số Thiết bị đầu tiên mang nhãn Froyo ra mắt thị trường là HTC Nexus One
2.2.7 Android 2.3: Gingerbread
Ra mắt ngày: 6-12-2010
Đến cuối năm 2012, Gingerbread vẫn đang "phủ sóng" trên rất nhiều thiết bị dùng Android, chiếm đến hơn phân nửa (54%) Google hợp tác Samsung trình làng dòng smartphone đầu tiên sử dụng Gingerbread mang tên Nexus S, hỗ trợ công nghệ giao tiếp tầm gần NFC
Gingerbread đưa vào hệ thống một công cụ quản lý tải tập tin, cho phép theo dõi
và truy xuất đến các tập tin đã tải về máy Hệ thống này hỗ trợ nhiều camera cho các thiết bị có camera mặt sau và trước, quản lý nguồn pin hiệu quả hơn, tiết kiệm thời lượng pin Phiên bản này khắc phục khá nhiều lỗi từ Froyo, kèm theo một số điều chỉnh trong giao diện người dùng (UI)
có bề mặt được trau chuốt, phần lõi hệ thống có các cải tiến tương thích với phần cứng như hỗ trợ chip xử lý (CPU) đa lõi, tăng tốc phần cứng
Android 3.0 đặt nền móng quan trọng cho thế hệ Android 4.x hợp nhất, khắc phục
sự phân mảng của Android (có các phiên bản riêng dành cho smartphone và tablet)
Trang 152.2.9 Android 4.0: Ice Cream Sandwich
Ra mắt: ngày 19-10-2011
"Bánh kem sandwich" (ICS) là thế hệ Android được mong đợi nhất đến nay, ra đời cùng dòng smartphone "bom tấn" Samsung Galaxy Nexus, thế hệ smartphone đầu tiên trang bị ICS
Android 4.0 đưa chức năng truy xuất nhanh các ứng dụng thường dùng vào phần bên dưới giao diện chủ, tùy biến widget, dễ sắp xếp và duyệt danh sách ứng dụng hơn Các ứng dụng đã có thể truy xuất nhanh từ màn hình khóa thiết bị (Lock screen), hiện các hãng sản xuất thiết bị chỉ mới cho phép Camera có thể chọn nhanh từ Lock screen
Ice Cream Sandwich hoạt động mượt mà, nhanh và đẹp hơn
2.2.10 Android 4.1: Jelly Bean
Ra mắt: 9-7-2012
Máy tính bảng Nexus 7, sản phẩm hợp tác giữa Google và Asus, là thiết bị dùng Jelly Bean đầu tiên ra mắt Android 4.1 nâng tầm hoạt động cho hệ điều hành của Google, trở thành hệ điều hành cho thiết bị di động hàng đầu hiện nay, đe dọa cả "ông lớn" Windows
Khả năng sắp xếp giao diện chủ và widget trong Jelly Bean rất tùy biến và linh hoạt Hệ thống hỗ trợ dịch vụ ví điện tử Google Wallet, đặc biệt trình duyệt web mặc định trong Android được thay thế bởi đại diện tên tuổi: Chrome, với khả năng đồng bộ
dữ liệu theo tài khoản với bản Chrome trên máy tính
Jelly Bean giới thiệu Google Now, dịch vụ trực tuyến mới hiện chỉ dành cho Android, một phụ tá ảo đắc lực cho công việc sắp xếp lịch trình, tìm kiếm thông tin, xác định vị trí Rất đa năng và được xem như lời đáp trả của Google với "phụ tá ảo" Apple Siri trong iOS
2.2.11 Android 4.2: vẫn là Jelly Bean
từ rất hay trong bàn phím ảo Chức năng "bom tấn" hỗ trợ nhiều tài khoản người dùng
(multi-user profile) lần đầu tiên được áp dụng trong Android 4.2 nhưng chỉ có người
dùng máy tính bảng thừa hưởng chức năng này.(Trích từ http://nhipsongso.tuoitre.vn/Kien-thuc-Cong-nghe/519360/Luoc-su-Android-qua-cac-phien-ban.html)
Trang 16Theo số liệu mới nhất từ Google , hiện Android 4.0 Ice Cream Sandwich đang chiếm 28,6% tổng số thiết bị Android được kích hoạt, còn Android 4.1/4.2 Jelly Bean thì chiếm 16,5% Như vậy, tỉ trọng của Android 4.x hiện là 45,1% Đây là lần đầu tiên trong hơn một năm trở lại đây Android 4.x vượt qua thế hệ Android cũ kĩ 2.3.x, vốn đang hiện diện trên 44,2% tổng số máy Android được kích hoạt Tuy nhiên, nếu chỉ tính riêng từng phiên bản của các đợt cập nhật lớn thì Android 2.3 x vẫn đang là miếng bánh to nhất
Trong thời gian qua, nhiều nhà sản xuất đã tích cực cập nhật thiết bị của mình từ 2.3 lên 4.0, hoặc từ 4.0 lên 4.1 nên dẫn đến kết quả trên Trong đó, tốc độ update từ 4.0 lên 4.1 nhanh hơn đáng kể so với từ 2.3 lên 4.0 Cũng cần phải nói thêm rằng Google chỉ ghi nhận thiết bị có truy cập vào Google Play trong vòng 14 ngày tính từ thời điểm xem số liệu (cụ thể là từ 19/2 đến 4/3), do đó nó chỉ phản ánh một phần thị trường Dù sao đi nữa thì điều đáng mừng đó là ngày càng có nhiều người dùng được tiếp cận với những phiên bản Android hiện đại hơn.(Trích từ http://www.tinhte.vn/threads/so-luong-thiet-bi-dung-android-4-x-lan-dau-tien-vuot-qua-ban-2-3.1941033/)
2.3 CÁC THÀNH PHẦN CHÍNH CỦA ANDROID
2.3.1 ACTIVITY
Activity là một thành phần chính của ứng dụng Android cung cấp một màn hình
mà người dùng có thể tương tác để làm điều gì đó, chẳng hạn như như quay số, chụp hình, xem bản đồ hay nhắn tin… Một ứng dụng có thể có một hoặc nhiều activity Trong
đó có một activity chính, nó được hiển thị trước tiên khi người dùng khởi động ứng dụng Mỗi activity có thể khởi động một activity khác để thực hiện những hành động khác nhau Khi một activity mới được bắt đầu, activity trước đó sẽ được dừng lại, nhưng
hệ thống vẫn duy trì activity đó trong một ngăn xếp Khi một activity mới được bắt đầu,
nó được đưa lên đỉnh của ngăn xếp và người dùng có thể tương tác được với nó Khi người dùng hoàn tất công việc với activity hiện tại và bấm nút trở về, activity hiện tại sẽ được đưa ra khỏi ngăn xếp và bị hủy Khi đó, các activity trước trong ngăn xếp được phục hồi lại
Tạo một activity :
Để tạo một activity ta phải tạo một lớp con của lớp Activity Trong lớp con này,ta phải thực thi các phương thức gọi lại, đây là các phương thức hệ thống sẽ gọi khi chuyển đổi giữa các trạng thái của activity, hai phương thức quan trọng là :
onCreate(): Ta phải thực thi phương thức này Hệ thống sẽ gọi nó khi tạo activity Trong phương thức này, ta nên khởi tạo các thành phần thiết
Trang 17yếu của activity Quan trọng nhất đó là phải gọi phương thức setContentView() để định nghĩa cách bố trí giao diện của activity
onPause(): Phương thức này được gọi khi ta rời khỏi activity Trong phương thức này ta nên ghi chép lại một số thay đổi mà vẫn còn tiếp tục phục vụ cho phiên làm việc của người dùng
Bạn có thể tắt một activity bằng cách gọi phương thức finish()
Vòng đời của một activity
Một activity có các trạng thái chính: Active, Running, Paused, Stopped
Khi chuyển giữa các trạng thái, ứng dụng sẽ gọi các phương thức ứng với các bước chuyển: void onCreate(Bundle savedInstanceState), void onStart(), void onRestart(), void onResume(), void onPause(), void onStop(), void onDestroy()
Biểu đồ miêu tả:
Trang 18Hình 1 Vòng đời của Activity Các phương thức của chu kỳ sống:
Phương thức onCreate():
- Được gọi khi Activity lần đầu tiên được tạo
- Ở đây ta làm tất cả các cài đặt tĩnh như tạo các widget, kết nối dữ liệu đến list,…
- Tham số truyền vào của phương thức này là một đối tượng Bundle chứa đựng các trạng thái trước đó của Activity
- Thường theo sau bởi onStart()
Phương thức onStart():
Trang 19- Được gọi trước khi một Activity hiển thị (Visible) với người dùng
- Theo sau bởi onResume() nếu Activity đến trạng thái foreground hoặc onStop() nếu nó trở nên ẩn
- Được gọi trước khi Activity bắt đầu tương tác với người dùng
- Tại thời điểm này Activity ở trên đỉnh của stack Activity
- Thường theo sau bởi onPause()
Phương thức onPause():
- Được gọi khi hệ thống đang resuming Activity khác
- Phương thức này là điển hình việc giữ lại không đổi dữ liệu
- Nó nên được diễn ra một cách nhanh chóng bởi vì Activity kế tiếp sẽ không được resumed ngay cho đến khi nó trở lại
- Theo sau bởi onResume() nếu Activity trở về từ ở trước hoặc bởi onStop() nếu nó trở nên visible với người dùng
- Trạng thái của Activity có thể bị giết bởi hệ thống
Phương thức onStop():
- Được gọi khi Activity không thuộc tầm nhìn của người dùng
- Nó có thể diễn ra bởi vì nó đang bị hủy hoặc bởi vì Activity khác vừa được resumed và bao phủ nó
- Được theo sau bởi onRestart() nếu Activity đang tương tác với người dùng hoặc onDestroy() nếu Activity đang bị hủy bỏ
- Trạng thái của Activity có thể bị giết bởi hệ thống
Trang 20 Phương thức onDestroy():
- Được gọi trước khi Activity bị hủy
- Đó là lần gọi cuối cùng mà Activity này được nhận
- Nó được gọi bởi vì Activity đang hoàn thành hoặc bị hệ thống hủy để tiết kiệm vùng nhớ
- Bạn có thể phân biệt giữa hai kịch bản với phương thức isFinshing()
Thời gian sống của một Activity diễn ra giữa lần đầu tiên gọi onCreate() đến trạng thái cuối cùng gọi onDestroy() Một Activity khởi tạo toàn bộ trạng thái trong onCreate() và giải phóng các tài nguyên đang tồn tại trong onDestroy()
Entire lifetime: Từ phương thức onCreate() cho tới onDestroy() Toàn bộ vòng đời của Activity từ lúc khởi tạo đến lúc kết thúc;
Visible lifetime: Từ phương thức onStart() cho tới onStop() Diễn ra giữa lần gọi một onStart() cho đến khi gọi onStop() Trong suốt khoảng thời gian này người dùng có thể thấy Activity trên màn hình Giữa hai phương thức này tài nguyên vẫn được duy trì để hiển thị Activity đến người dùng;
Foreground lifetime: Từ phương thức onResume() cho tới onPause()
Một ứng dụng ngoài Activity chính còn có thể có nhiều Activity khác Các Activity bổ sung thêm phải được khai báo trong tập tin AndroidManifest.xml, để có thể gọi các Activity này thì cách phổ biến là sử dụng Intent Ví dụ về tập tin AndroidManifest.xml có hai Activity, trong đó phần tô đậm là Activity được bổ sung thêm:
</intent-filter>
Trang 21mở rộng từ lớp cơ sở là Service trong gói android.app Có thể kết nối tới hoặc kích hoạt một Service thông qua interface mà Service đưa ra
Một Service có thể được sử dụng theo 2 cách:
Nó có thể được bắt đầu và được cho phép hoạt động cho đến khi một người nào đó dừng nó lại hoặc nó tự ngắt Ở chế độ này, nó được bắt đầu bằng cách gọi Context.startService() và dừng bằng lệnh Context.stopService() Nó có thể tự ngắt bằng lệnh Service.stopSelf() hoặc Service.stopSelfResult() Chỉ cần một lệnh stopService() để ngừng Service lại cho dù lệnh startService() được gọi ra bao nhiêu lần
Service có thể được vận hành theo như đã được lập trình việc sử dụng một Interface
mà nó định nghĩa Các người dùng thiết lập một đường truyền tới đối tượng Service và
sử dụng đường kết nói đó để thâm nhập vào Service Kết nối này được thiết lập bằng cách gọi lệnh Context.bindService() và được đóng lại bằng cách gọi lệnh Context.unbindService() Nhiều người dùng có thể kết nối tới cùng một thiết bị Nếu Service vẫn chưa được khởi chạy, lệnh bindService() có thể tùy ý khởi chạy nó Hai chế độ này thì không tách biệt toàn bộ Bạn có thể kết nối với một Service mà nó đã được bắt đầu với lệnh startService() Ví dụ, một Service nghe nhạc ở chế độ nền có thể được bắt đầu bằng cách gọi lệnh startService() cùng với một đối tượng Intent mà định dạng được âm nhạc để chơi Chỉ sau đó, có thể là khi người sử dụng muốn kiểm soát trình chơi nhạc hoặc biết thêm thông tin về bài hát hiện tại đang chơi, thì sẽ có một Activity tạo lập một đường truyền tới Service bằng cách gọi bindService() Trong trường hợp như thế này, stopService() sẽ không thực sự ngừng Service cho đến khi liên kết cuối cùng được đóng lại
Giống như một Activity, một Service cũng có các phương thức chu kỳ thời gian mà bạn có thể cài đặt để kiểm soát những sự thay đổi trong trạng thái của nó Những những phương thức
Trang 22của Service thì ít hơn là của Activity – chỉ có 3- và chúng thì được sử dụng rộng rãi, không được bảo vệ
ra một luồng và bắt đầu chơi nhạc onCreate() và sau đó luồng chơi nhạc sẽ dừng lại ở onCreate()
Active lifetime của một Service bắt đầu bằng một lệnh tới onStart() Đâylà phương thức được chuyển giao đối tượng Intent mà đã được thông qua để tới startService() Service
âm nhạc sẽ mở đối tượng Intent để quyết định xem sẽ chơi loại nhạc nào và bắt đầu phát nhạc Các phương thức onCreate() và onDestroy() được gọi cho tất cả các Service dù chúng có được bắt đầu bằng Context.startService() hoặc Context.bindService() hay không Tuy nhiên thì, onStart() chỉ được gọi ra đối với các Service bắt đầu bằng startService()
Vòng đời của một service:
Trang 23Hình 2 Vòng đời của Service Service cũng cần phải được khai báo trong thẻ <application> của AndroidManifest.xml mới có thể sử dụng
<service android:name="ViduService" />
2.3.3 CONTENT PROVIDER
Một Content Provider cung cấp một tập chi tiết dữ liệu ứng dụng đến các ứng dụng khác Thường được sử dụng khi chúng ta muốn tạo cơ sở dữ liệu dưới dạng public (các ứng dụng khác có thể truy xuất ) Là kho dữ liệu chia sẻ, Content Provider được sử dụng để quản
lý và chia sẻ dữ liệu giữa các ứng dụng Dữ liệu thường được lưu trữ ở file hệ thống, hoặc trong một SQLite database Ví dụ: danh bạ, call log, cấu hình cài đặt trên điện thoại là dữ liệu dưới dạng Content Provider
Content Provider hiện thực một tập phương thức chuẩn mà các ứng dụng khác có thể truy xuất và lưu trữ dữ liệu của loại nó điều khiển Tuy nhiên, những ứng dụng không thể gọi các phương thức trực tiếp Hơn thế chúng dùng lớp Content Resolver và gọi những phương
Trang 24thức đó Một Content Resolver có thể giao tiếp đến nhiều content provider; nó cộng tác với các provider để quản lý bất kỳ giao tiếp bên trong liên quan Một Content Provider tạo ra một tập các dữ liệu cụ thể nào đó của ứng dụng cung cấp cho các ứng dụng khác Các lớp Content Provider thừa kế từ cơ sở ContentProvider để cài đặt một số hàm tiêu chuẩn cho phép ứng dụng khác nhận và lưu trữ dữ liệu
Trong một ứng dụng thì để có thể sử dụng, Content Provider cần phải được khai báo trong thẻ <application> của tập tin AndroidManifest.xml Ví dụ:
<provider android:name = "ViduContent"
1 activity mới hiển thị trang web đó
Hình 3 Sơ đồ hoạt động của Intent
Các thuộc tính của Intent:
action
Tên (string ) của action mà Intent
sẽ yêu cầu thực hiện
Có thể là action được Android
định nghĩa sẵn(built-in standard
action) hoặc do người lập trình tự
Activity B (pick up one pls!) Intent: action +data
Intent: code + result
Trang 25 Khi được xác định, các thuộc tính khác trở thành không bắt buộc (optional)
extras
Chứa tất cả các cặp (key, value) do ứng dụng thêm vào để truyền qua Intent (cấu trúc Bundle)
http://developer.android.com/reference/android/content/Intent.html
Bảng 1 Bảng thuộc tính của Intent
action: là hành động được thực hiện, VD : ACTION_VIEW, ACTION_MAIN
Built-in Standard Actions
Bảng 2 Bảng Action được xây dựng sẵn
data: là dữ liệu sẽ được xử lý trong action, thường được diễn tả là một Uri (Uniform
Resource Identifier)
Trang 26ACTION_DIAL tel:1800 - Hiển thị màn hình gọi với số gọi là 1800
Ngoài ra còn có 1 số thuộc tính mà ta có thể bổ sung vào Intent:
category: bổ sung thêm thông tin cho action của Intent VD: CATEGORY_LAUNCHER thông báo sẽ thêm vào Launcher như là một ứng dụng top-level;
type: chỉ rõ kiểu của data;
component: chỉ rõ thành phần sẽ nhận và xử lý intent Khi thuộc tính này được xác định thì các thuộc tính khác sẽ trở thành thuộc tính phụ;
extras: mang theo đối tượng Bundle chứa các giá trị bổ sung
Ví dụ:
ACTION_MAIN và CATEGORY_HOME: trở về màn hình Home của Android (khi bấm nút Home của di động)
Phân loại Intent: (Intent được chia làm 2 loại)
Explicit Intents: intent đã được xác định thuộc tính component, nghĩa là đã chỉ rõ thành phần sẽ nhận và xử lý intent Thông thường intent dạng này sẽ không bổ sung thêm các thuộc tính khác như action, data Explicit Intent thương được sử dụng để khởi chạy các activity trong cùng 1 ứng dụng
Implicit Intents: Intent không chỉ rõ component xử lý, thay vào đó nó bổ sung thông tin trong các thuộc tính Khi intent được gửi đi, hệ thống sẽ dựa vào những thông tin này
để quyết định component nào thích hợp nhất để xử lý nó
Ví dụ:
ACTION_DIAL tel:1800 thông thường sẽ được hệ thống giao cho activity Phone Dialer mặc định của Android xử lý
Một số action thường sử dụng trong Intent:
ACTION_ANSWER - mở Activity để xử lý cuộc gọi tới, thường là Phone Dialer của Android
ACTION_CALL - mở 1 Phone Dialer (mặc định là PD của Android) và ngay lập tức thực hiện cuộc gọi dựa vào thông tin trong data URI
Trang 27ACTION_DELETE - mở Activity cho phép xóa dữ liệu mà địa chỉ của nó chứa trong data URI
ACTION_DIAL - mở một Phone Dialer (mặc định là Phone Dialer của Android) và điền thông tin lấy từ địa chỉ chứa trong data URI
ACTION_EDIT - mở một Activity cho phép chỉnh sửa dữ liệu mà địa chỉ lấy từ data URI ACTION_SEND - mở một Activity cho phép gửi dữ liệu lấy từ data URI, kiểu của dữ liệu xác định trong thuộc tính type
ACTION_SENDTO - mở một Activity cho phép gửi thông điệp tới địa chỉ lấy từ data URI
ACTION_VIEW - action thông dụng nhất, khởi chạy activity thích hợp để hiển thị dữ liệu trong data URI
ACTION_MAIN - sử dụng để khởi chạy một Activity
Intent Filter:
Activity, Service và BroadCast Receiver sử dụng Intent Filter để thông báo cho hệ thống biết các dạng Implicit Intent mà nó có thể xử lý Nói cách khác, Intent Filter là bộ lọc Intent, chỉ cho những Intent được phép đi qua nó
Intent Filter mô tả khả năng của component định nghĩa nó Khi hệ thống bắt được một Implicit Intent (chỉ chứa một số thông tin về action, data và category ), nó sẽ sử dụng những thông tin trong Intent này, kiểm tra đối chiếu với Intent Filter của các component các ứng dụng, sau đó quyết định khởi chạy ứng dụng nào thích hợp nhất để xử lý Intent bắt được Nếu
có hai hay nhiều hơn ứng dụng thích hợp, người dùng sẽ được lựa chọn ứng dụng mình muốn
Mặc định mỗi ứng dụng đều đã khai báo Intent Filter, nếu muốn bổ sung thêm Intent Filter khác thì cũng phải khai báo thêm trong AndroidManifest.xml Ví dụ: (phần in đậm là Intent Filter được bổ sung thêm)
Trang 28BR không có giao diện nhưng nó có thể thực hiện gọi một Activity hay là sử dụng NotificationManager để thông báo cho người dùng
Một số broadcast thường gặp của hệ thống như báo hệ thống khởi động hoàn tất, báo pin có sự thay đổi, thông báo tin nhắn tới, thông báo cắm, rút thẻ nhớ,…
Thực ra chu kỳ sống của BR chỉ có duy nhất một phương thức onReceive() Khi
có sự kiện mà BR đã đăng ký nhận được phát đi, thì phương thức onReceive() của BR
đó sẽ được gọi Sau khi thực thi xong phương thức này, chu kỳ của Receiver kết thúc Một BR chỉ được coi là active (đang chạy) khi nó đang thực thi phương onReceive() của mình Khi onReceive() kết thúc, receiver quay lại trạng thái inactive Lúc này, hệ thống sẽ xem như receiver đã không còn hoạt động và có thể kill process chứa receiver này bất cứ lúc nào Mỗi broadcast receiver có đúng một callback method là void onReceive (Context context, Intent broadcastMsg) Khi một broadcast message được gửi đến receiver, Android gọi phương thức onReceive() của receiver đó và truyền cho
nó đối tượng Intent chứa message
Trang 29Có hai lớp broadcast chính:
Normal broadcast (được gửi bằng Context.sendBroadcast) hoàn toàn không đồng bộ (asynchronous) Tất cả các receiver của broadcast được chạy theo thứ tự không xác định, thường là chạy cùng lúc
Ordered broadcast (được gửi bằng Context.sendOrderedBroadcast) được gửi lần lượt đến cho từng receiver một Khi đến lượt một receiver thực thi, nó có thể chuyển tiếp kết quả cho receiver tiếp theo, hoặc nó có thể hủy toàn bộ broadcast (abortBroadcast())
để broadcast đó sẽ không được gửi đến cho các receiver khác Thứ tự thực thi của các receiver được kiểm soát bởi thuộc tính android:priority của intent-filter tương ứng; các receiver có cùng priority (độ ưu tiên) sẽ được chạy theo thứ tự bất kì
Khai báo trong thẻ <application> của tập tin AndroidManifest.xml:
2.4 THƯ VIỆN HỔ TRỢ LẬP TRÌNH ỨNG DỤNG CỦA ANDROID
Android cung cấp một số các APIs cho phát triển ứng dụng Danh sách các API cơ bản sau được cung cấp bởi tất cả các thiết bị trên nền Android:
android.util: Gói tiện ích cơ bản bao gồm nhiều lớp mức thấp như là các lớp
quản lý (List, Stack…) lớp xử lý chuỗi, lớp xử lý XML
android.os: Gói hệ điều hành cung cấp truy cập đến các dịch vụ cơ bản như là
chuyển tin nhắn, thông tin chéo, đồng hồ và gỡ lỗi
android.graphics: Cung cấp các lớp đồ họa mức thấp thực hiện các chức năng
đồ họa, màu, vẽ cơ bản
android.text: Công cụ hiển thị và xử lý văn bản
android.database: Cung cấp các lớp mức thất bắt buộc cho việc điều khiển
cursor khi làm việc với các cơ sở dữ liệu
Trang 30 android.content: Các giao tiếp lập trình nội dungđược dùng để quản lý truy cập
dữ liệu và xuất bản bằng cách cung cấp các dịch vụ thao tác với tài nguyên, Content Provider và các gói
android.view: View là lớp giao diện người dùng cơ bản nhất Tất cả giao diện
người dùng được tạo ra đều phải sử dụng một tập các View để cung cấp cho các thành phần tương tác người dùng
android.widget: Xây dựng dựa trên gói View Những lớp Widget là những
thành phần giao diện được tạo sẵn được sử dụng để tạo nên giao diện người dùng Các Widget bao gồm danh sách, nút bấm, hộp nhập, các kiểu trình bày(layout)
com.google.android.maps: bộ API mức cao cung cấp truy cập đến điều khiển
bản đồ sẵn trong Android từ ứng dụng được xây dựng Bao gồm cả lớp MapView cũng như Overlay và MapController để tương tác với bản đồ bên trong ứng dụng
android.app: Một gói thư viện bậc cao, cung cấp truy cập đến dữ liệu của ứng
dụng Gói ứng dụng cũng bao gồm lớp Activity và Service là thành phần cơ bản của mọi ứng dụng Android
android.provider : Để tạo thuận lợi cho người phát triển truy cập đến các
Content Provider tiêu chuẩn (như là dữ liệu danh bạ), gói Cung cấp (Provider) bao gồm các lớp cho phép truy cập đến cơ sở dữ liệu chuẩn trong tất cả các bản phân phối Android
android.telephony : Các API điện đàm cung cấp khả năng tương tác trực tiếp
với tầng điện thoại trong các thiết bị, cho phép tạo, nhận, theo dõi các cuộc gọi, tình trạng các cuộc gọi và tin nhắn SMS
android.webkit : Gói WebKit cung cấp các API để làm việc với các nội dung
Web-based bao gồm một lớp WebView để tạo ra giao diện web, nhúng trong ứng dụng và một trình quản lý cookie
2.5 LẬP TRÌNH GIAO DIỆN MỨC CAO
2.5.2 Bố cục giao diện người dùng
Giao diện người dùng cho mỗi thành phần của ứng dụng được xác định bởi
hệ thống có cấp bậc của đối tượng View và ViewGroup, được thể hiện như hình bên dưới Mỗi ViewGroup là một thành phần không nhìn thấy chứa đựng các đối
Trang 31tượng con là các view, trong khi đó các view có thể là các điều khiển nhập hoặc
là các widgets khác mà nó vẽ một vài phần của giao diện người dùng
Hình 4 : Sơ đô phân cấp bố cục giao diện người dùng
Để khai báo bố cục, ta có thể khai báo đối tượng View bên trong code, tuy nhiên cách đơn giản và hiệu quả nhất là khai báo bố cục trong một file XML Tên của một thẻ XML cho một đối tượng view tương ứng với một lớp Android thể hiện nó Ví dụ, thẻ <TextView> tạo ra một đối tượng thuộc lớp TextView trong giao diện người dùng
2.5.3 LinearLayout
LinearLayout được dùng để bố trí các thành phần giao diện theo chiều ngang hoặc chiều dọc LinearLayout làm cho các thành phần trong nó không bị phụ thuộc vào kích thước của màn hình Các thành phần trong LinearLayout được dàn theo những tỷ lệ cân xứng dựa vào các ràng buộc giữa các thành phần
LinearLayout có thuộc tính cần chú ý đó là android:orientation, thuộc tính này sẽ xác định cách bố trí của layout Nếu khai báo android:orientation=“vertical” thì layout
sẽ bố trí theo chiều dọc hoặc android:orientation=“horizontal” thì bố trí theo chiều ngang
Trang 332.5.4 FrameLayout
FrameLayout được dùng để bố trí các đối tượng theo kiểu giống như là các Layer trong Photoshop Những đối tượng nào thuộc Layer bên dưới thì sẽ bị che khuất bởi các đối tượng thuộc Layer nằm trên FrameLayer thường được sử dụng khi muốn tạo ra các đối tượng có khung hình bên ngoài Có thể thêm nhiều FrameLayout chồng lên nhau và layout mới sẽ đè lên layout trước nó
Trang 342.5.5 Button
Đây là một trong những widget phổ biến được sử dụng trong hầu hết ứng dụng Android Lớp của button là android.widget.Button
<Button android:id="@+id/button"
Để khai báo một Button trong code ta làm như sau:
Button button = new Button(this);
button.setText(“Nhan vao day!”);
buton.setOnClickListener(…);
Nếu button đã được khai báo trong file XML ta làm như sau :
Button button = (Button)findViewById(R.layout.id.button);
Để xử lý các sự kiện khi ta nhấn vào button, ta có thể định nghĩa một phương thức trong đó bao gồm cách hành động ta muốn thực hiện Sau đó trong file XML, ứng với thẻ chứa button ta muốn bắt sự kiện người dùng nhấn vào ta thêm vào thuộc tính android:onClick=“Ten_phuong_thuc” Lưu ý phương thức này phải được xây dựng giống định dạng như sau, chỉ có duy nhất một tham số truyền vào là một đối tượng thuộc lớp View
public void Ten_phuong_thuc(View view) {
//Các hành động muốn thực hiện ; }
Hoặc trong file code ta có thể làm như sau:
@Override public void onClick(View v) {
// TODO Auto-generated method stub
Trang 35//Các hành động muốn thực hiện khi bt_ok được nhấn
} });
2.5.6 ImageButton
Là button có hỗ trợ hiển thị hình ảnh và không hiển thị văn bản Cách khai báo cũng tương tự button chỉ thêm thuộc tính android:src = “@drawable/ic_launcher” để thêm hình ảnh vào
<ImageButton android:layout_width="wrap_content"
AlertDialog : Dialog có thể thể hiện tiêu đề, danh sách các danh mục
có thể lựa chọn, hoặc một bố cục tùy chỉnh
DatePickerDialog hoặc TimePickerDialog : Dialog với với giao diện xác định trước cho phép người dùng lựa chọn ngày hoặc giờ
Ví dụ : Tạo và hiển thị một AlertDialog
AlertDialog.Builder builder = new
Trang 36// Create the AlertDialog
AlertDialog dialog = builder.create();
dialog.show();
Ngoài ra ta có thể tạo một dialog tùy chỉnh với cách sau:
Xây dựng bố cục của dialog trong một file XML
Tạo ra một class mới
{
}
Khai báo một thuôc tính kiểu Context
{
Context context;
}
Xây dựng phương thức khởi tạo cho lớp vừa tạo
{
Context context;
public ShapeDialog(Context c) { super();
// TODO Auto-generated constructor stub context = c;
}}
Xây dựng một phương thức để hiển thị dialog lên màn hình
public void ChooseShape(final MyView mv)
Trang 37}
Cấu trúc hoàn chỉnh để tạo một dialog tùy chỉnh:
{
Context context;
public ShapeDialog(Context c) { super();
// TODO Auto-generated constructor stub context = c;
2.5.8 Toast
Toast hiển thị phản hồi đơn giản về một hoạt động trên một cửa sổ nhỏ Nó chỉ chiếm không gian vừa đủ cho nội dung cần hiển thị và activity hiện tại vẫn hiển thị và tương tác được Toast sẽ tự động biến mất sau một thời gian
Toast.makeText(getApplicationContext(), "Noi dung can hien thi ” , Toast.LENGTH_SHORT).show();
Trang 38Hình 7: Minh họa Toast Mặc định toast được hiển thị ở giữa, gần dưới cùng của màn hình Ta có thể thay đổi vị trí này bằng cách sử dụng phương thức setGravity(int, int, int)
Trong file code :
Khai báo đối tượng gallery thuộc lớp Gallery:
Liên kết đến đối tượng gallery được khai báo trong file XML
gallery = (Gallery)findViewById(R.id.gallery);
Trang 39Để thêm các hình ảnh vào gallery, ta dùng phương thức setAdapter().Ta cần xây dựng một lớp con của lớp BaseAdapter, lớp này có chức năng chèn các hình ảnh vào gallery Tham số truyền vào của phương thức setAdapter(BaseAdapter
public class ImageAdapter extends BaseAdapter{
}
else{
imageView=(ImageView) convertView;
} imageView.setImageResource(images[position]);
return imageView;
} }
Trước khi xây dựng lớp trên, ta cần tạo một file XML trong thư mục values của project để ta định nghĩa giao diện cho gallery
<resources>