Các thành phần chính của ứng dụng Activities Tầng thể hiện của ứng dụng Mỗi màn hình của ứng dụng là 1 Activity Sử dụng View để hiển thị giao diện người dùng Activity View Hàm xử
Trang 1Công nghệ mới trong phát triển hệ thống thông
tin
Chuyên đề: Phát triển ứng dụng
trên môi trường Android
Bài 3: Tạo ứng dụng cơ bản
TS Trần Minh Triết Khoa Công nghệ Thông tin Trường ĐH Khoa học Tự nhiên
Trang 2Tham khảo
Nội dung của bài giảng có sử dụng:
Tài liệu, bài giảng của ThS Nguyễn Trung Hiếu, Trung tâm Tin học trường ĐH Khoa học Tự nhiên, ĐHQG-
Trang 3Các thành phần chính của ứng dụng
Activities
Tầng thể hiện của ứng dụng
Mỗi màn hình của ứng dụng là 1 Activity
Sử dụng View để hiển thị giao diện người dùng
Activity
View
Hàm xử lý
Trang 5 Đón nhận các thông điệp broadcast bởi Intent
Khởi động ứng dụng để phản hồi một thông điệp Intent
Trang 6Các thành phần chính của ứng dụng
Services
Chạy ở chế độ background để cập nhật các dữ liệu
nguồn, Activity và gửi Notification
Widgets
Thành phần ứng dụng được thêm ở màn hình chính
Notifications
Báo hiệu cho người dùng biết trong trường hợp tin
nhắn hay cuộc gọi
Trang 8Manifest của ứng dụng
Trang 11Manifest của ứng dụng
Ví dụ: ứng dụng hỗ trợ finger touchscreen, bàn phím QWERTY
<uses-configuration
android : reqTouchScreen =["finger"]
android : reqNavigation =["trackball"]
android : reqHardKeyboard =["true"]
android : reqKeyboardType =["qwerty"] />
Trang 14Chu kỳ sống của ứng dụng Android
Mỗi ứng dụng Android chạy trong một tiến trình (process)
Mỗi tiến trình chạy trên một máy ảo Dalvik
Ứng dụng có độ ưu tiên thấp sẽ bị đóng mà không cần thông báo để nhường tài nguyên cho ứng dụng có độ ưu tiên cao hơn.
Trang 15Chu kỳ sống của ứng dụng Android
Source: http://mobworld.wordpress.com/2010/07/05/memory-management-in-android/
Trang 16Chu kỳ sống của ứng dụng Android
Started Service process
Service vừa mới được khởi tạo
Background process
Process mà các activity không hiển thị với người dùng
Empty process
Trang 17Sử dụng lớp Activity
Mỗi màn hình giao diện kế thừa từ Activity
Sử dụng View để tạo giao diện
Thêm các hàm xử lý tương tác người dùng
Trong một ứng dụng, có thể có nhiều Activity
và có thể chuyển đổi giữa các Activity
Trang 18Sử dụng lớp Activity
Cách tạo một Activity đơn giản
Gọi trực tiếp Activity đã định nghĩa
Intent intent = new Intent (this, MyActivity.class);
startActivity (intent);
Trang 19Sử dụng lớp Activity
Source: http://stuffthathappens.com/blog/wp-content/uploads/2008/11/activity_lifecycle.png
Trang 20Sử dụng lớp Activity
Các trạng thái của Activity
Active/Resumed: Activity đang hiển thị ở ‘Foreground’
của màn hình, và đang được ‘focus’.
Paused: Activity khác đang hiển thị ở ‘Foreground’,
đang được ‘focus’, nhưng vẫn có thể thấy được
Stopped: không còn nhìn thấy ở màn hình, đang ở chể
độ ‘Background’ Vẫn có thể sống lại được, nhưng có thể bị tắt bởi hệ thống
Trang 21Sử dụng lớp Activity
Thời gian sống của Activity
Full life time
Visible life time
Active life time
Trang 23Tạo và sử dụng Resource
Sự cần thiết cung cấp tài nguyên để lựa chọn cho cấu hình đặc thù của thiết bị, ví dụ ngôn ngữ, kích thước màn hình
Để tương thích với những cấu hình khác nhau, cần tổ chức tài nguyên trong đường dẫn /res của ứng dụng
Bất cứ loại tài nguyên nào,có thể chỉ ra loại mặc định và tài nguyên được lựa chọn cho ứng dụng
Trang 24Tạo và sử dụng Resource
Trang 26Tạo và sử dụng Resource
Animation Resources - res/anim/, định nghĩa animation
Color State List Resource - res/color/, định nghĩa màu
Drawable Resources - res/drawable/, định nghĩa đồ họa khác nhau với bitmap,xml
Layout Resource - res/layout/, định nghĩa layout của ứng dụng
Menu Resource - res/menu/, định nghĩa nội dụng của Menu
String Resources - res/values/, định nghĩa string , mảng string
Style Resource - res/values/, định nghĩa kiểu, định dạng thành phần UI
More Resource Types - res/values/, định nghĩa boolean, integers, dimensions, colors, …
Trang 28 string: là loại tài nguyên,
hello : là tên tài nguyên
Trang 29Tạo và sử dụng Resource
Simple values
String
<string name="message"> Hello </string>
<string name="message"> <b> Hello </b> </string>
Color
<color name="transparent_green">#7700FF00</color>
<color name="opaque_blue">#00F</color>
Trang 30Tạo và sử dụng Resource
Dimension
<dimen name="standard_border">5dp</dimen>
px (pixels) in (inches) pt (points)
mm (milimeters) dp (pixel/160dpi screen)
sp (scale independent pixels)
String array, integer array
<array>
<item> </item>
…
Trang 32<item name="android:textSize"> 14sp </item>
<item name="android:textColor"> #111 </item>
Trang 33Tạo và sử dụng Resource
Minh họa việc sử dụng Resources trong ứng dụng To-Do List
1 Thêm icon add và remove (16x16)
2 Thêm các string add, remove, cancel
3 Tạo theme cho ứng dụng, sử dụng theme chuẩn
android
4 Sử dụng font chữ 12
Trang 34Color State List Resource
Dùng để miêu tả danh sách trạng thái trong xml tập tin Mỗi màu được định nghĩa trong 1 thành phần.
Vị trí tập tin: res/color/filename.xml
Tham chiếu tài nguyên:
Java code: R.color.filename
XML tập tin: @[package:]color/filename
Trang 35Color State List Resource
Cú Pháp:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" > <item
Trang 36Color State List Resource
Ví dụ: res/color/button_text.xml:
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"
Trang 37Drawable Resource
Là khái niệm chung cho đồ họa mà có thể vẽ trên màn hình và có thể lấy lại với việc sử dụng getDrawable(int) hoặc gắn vào tài nguyên XML khác với thuộc tính android:drawable, android:icon
Có vài loại Drawable khác nhau:
Trang 38Resources res = getResources();
Drawable drawable = res.getDrawable(R.drawable.myimage);
Trang 39XML Bitmap
Là tài nguyên được định nghĩa trong XML, trỏ đến tập tin Bitmap XML có thể chỉ ra các thuộc tính thêm vào cho Bitmap
android:gravity=["top" | "bottom" | "left" | "right" | "center_vertical" |
"fill_vertical" | "center_horizontal" | "fill_horizontal" |
"center" | "fill" | "clip_vertical" | "clip_horizontal"]
android:tileMode=["disabled" | "clamp" | "repeat" | "mirror"] />
Trang 40android:tileMode="repeat" />
Trang 41Nine Patch
Là loại tập tin Bitmap có thể định nghĩa vùng kéo dãn ra, khi nội dung trong View vượt trội giới hạn của một ảnh bình thường.
Trang 44Layer List
Ví dụ: XML tập tin được lưu res/drawable/layers.xml:
<layer-list xmlns:android="http://schemas.android.com/apk/res/android"> <item>
Trang 45State List
Là drawable định nghĩa trong XML vài hình ảnh khác nhau để trình bày cho chỉ một hình đồ họa, phụ thuộc vào trạng thái của đối tượng đó.
Trang 46State List
Ví dụ XML được lưu như res/drawable/button.xml
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android"> <item android:state_pressed="true"
android:drawable="@drawable/button_pressed" /> <! pressed > <item android:state_focused="true"
android:drawable="@drawable/button_focused" /> <! focused > <item android:drawable="@drawable/button_normal" /> <! default >
Trang 47android:drawable="@drawable/drawable_resource"
android:maxLevel="integer"
android:minLevel="integer" />
</level-list>
Trang 48Level List
Ví dụ
<?xml version="1.0" encoding="utf-8"?>
<level-list xmlns:android="http://schemas.android.com/apk/res/android" > <item
Trang 50Transition Drawable
Ví dụ: tập tin được lưu res/drawable/transition.xml
<?xml version="1.0" encoding="utf-8"?>
<transition xmlns:android="http://schemas.android.com/apk/res/android"> <item android:drawable="@drawable/on" />
ImageButton button = (ImageButton) findViewById(R.id.button);
TransitionDrawable drawable = (TransitionDrawable) button.getDrawable();drawable.startTransition(500);
Trang 52Inset Drawable
Ví dụ
<?xml version="1.0" encoding="utf-8"?>
<inset xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/background"
android:insetTop="10dp"
android:insetLeft="10dp" />
Trang 54Clip Drawable
Ví dụ res/drawable/clip.xml
<?xml version="1.0" encoding="utf-8"?>
<clip xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/android"
Trang 56Scale Drawable
Ví dụ
<?xml version="1.0" encoding="utf-8"?>
<scale xmlns:android="http://schemas.android.com/apk/res/android" android:drawable="@drawable/logo"
android:scaleGravity="center_vertical|center_horizontal"
android:scaleHeight="80%"
android:scaleWidth="80%" />
Trang 59 <stroke>: mô tả đường kẻ ngoài của khối
<padding>: đặt vị trí của khối trên canvas
<solid>: màu background