Được truy cập bởi lớp R.menu raw/ Chứa các file gốc, cần gọi Resources.openRawResource kèm với resource ID – tương ứng R.raw.filename để mở file... File XXX .xml sẽ được truy cập bởi
Trang 3Giới thiệu Android OS
Source: GNU General Public License
Mobile OS được sử dụng nhiều nhất (1 tỉ thiết bị, khắp gần 200 quốc gia)
Trang 4Giới thiệu
Trang 6Kiến trúc
Trang 8Libraries
Open-source Web browser engine WebKit
SQLite database
Play and record audio and video
SSL responsible for Internet security
Trang 11Applications
Viết
Cài đặt
Trang 12Đặc điểm
Beautiful UI: beautiful and intuitive
Connectivity: GSM/EDGE, IDEN, CDMA, EV-DO, UMTS, Bluetooth, Wi-Fi, LTE, NFC and WiMAX
Storage: SQLite
Media support: H.263, H.264, MPEG-4 SP, AMR, AMR-WB, AAC, HE-AAC, AAC 5.1, MP3, MIDI, Ogg Vorbis, WAV, JPEG, PNG, GIF, and BMP
Messaging: SMS and MMS
Web browser: WebKit layout engine, Chrome's JavaScript engine (HTML5, CSS3)
Trang 15Phiên bản
Trang 16Ứng dụng Android
Trang 18Eclipse IDE for Java Developers (optional)
Android Development Tools (ADT) Eclipse Plug-in (optional)
Trang 19Android 4.4W 20 KITKAT_WATCH Android 4.4 19 KITKAT
Android 4.3 18 JELLY_BEAN_MR
2 Android 4.2, 4.2.2 17 JELLY_BEAN_MR
1 Android 4.1, 4.1.1 16 JELLY_BEAN
Android 4.0.3, 4.0.4 15 ICE_CREAM_SAN
DWICH_MR1
Trang 201 Android 3.0.x 11 HONEYCOMB
Trang 21Environment Setup
Cho nhiều nền tảng
Từ Microsoft Windows XP
Từ Mac OS X 10.5.8 (Intel chip)
Linux theo GNU C Library 2.7 trở đi
Trang 22Bài 2: Các thành phần ứng dụng Android
Trang 23OS và applications
Trang 24Activities
Single screen with a user interface
shows a list of new emails
Trang 26Broadcast Receivers
thống
download và sẵn sàng cho việc sử dụng
{
}
Trang 27Content Providers
dụng khác theo yêu cầu
Trang 28Hello World Example
Eclipse IDE
Application
Trang 29Workspace
Trang 30Explorer
Trang 31Explorer
1 src: java file chứa activity class (MainActivity.java)
R file do trình biên dịch tạo ra
3 bin:
5 res/layout: user interface
Trang 32MainActivity.java
package com example helloworld ;
import android os Bundle ;
import android app Activity ;
import android view Menu ;
import android view MenuItem ;
import android support v4 app NavUtils ;
public class MainActivity extends Activity {
@Override public void onCreate ( Bundle savedInstanceState ) {
super onCreate ( savedInstanceState );
setContentView ( R layout activity_main );
}
@Override public boolean onCreateOptionsMenu ( Menu menu )
return true ;}
}
Trang 34The Manifest File
Thuộc thư mục root của ứng dụng
Chứa khai báo các thành phần ứng dụng
Giao tiếp giữa android OS và ứng dụng
Trang 35The Manifest File
Trang 36Strings File
strings.xml thuộc res/values
Chứa các chuỗi liên quan ứng dụng: tên button, label, default text,
Ex: file strings.xml mặc định
<resources>
<string name = "app_name" > HelloWorld </string>
<string name = "hello_world" > Hello world! </string>
<string name = "menu_settings" > Settings </string>
<string n ame = "title_activity_main" > MainActivity </string>
</resources>
Trang 37package com example helloworld ;
public final class R {
public static final class attr { }
public static final class dimen {
public static final int padding_large = 0x7f040002 ;
public static final int padding_medium = 0x7f040001 ;
public static final int padding_small = 0x7f040000 ;
}
public static final class drawable {
public static final int ic_action_search = 0x7f020000 ;
public static final int ic_launcher = 0x7f020001 ; }
}
Trang 38Layout File
Thư mục res/layout
Được tham chiếu đến ứng dụng
Chứa định nghĩa nhiều control
Trang 39Running the Application
Tạo AVD
Trang 40Tạo project với Android Studio
Select Start a new Android Studio
project/File -> New -> New Project
Trang 41Tạo project với Android Studio
Trang 43Tổ chức và truy cập resource
Resource: bitmap, color, layout, string,
animation,
Chứa trong thư mục con của res\
Trong eclipse và trong android studio?
Trang 44Tổ chức và truy cập resource
Trang 45Tổ chức và truy cập resource
Directory Resource Type
anim/ XML - animations Truy cập bởi lớp R.anim
color/ XML - colors Truy cập bởi lớp R.color
drawable/ png, jpg, gif / XML -> bitmaps, state list, shapes,
animation Được truy cập bởi lớp R.drawable
layout/ XML, truy cập bởi lớp R.layout
menu/ XML (Options Menu, Context Menu, Sub Menu)
Được truy cập bởi lớp R.menu raw/ Chứa các file gốc, cần gọi
Resources.openRawResource() kèm với resource
ID – tương ứng R.raw.filename để mở file
Trang 46Tổ chức và truy cập resource
Directory Resource Type
values/ •XML: strings, integers, colors File XXX xml
sẽ được truy cập bởi lớp R.XXX
xml/ XML – có thể được đọc tại lúc thực thi với
Resources.getXML(): lưu trữ các file config cho ứng dụng
Trang 47Các resource lựa chọn/thay thế
đáp ứng tốt các yêu cầu
nhiều loại màn hình (khác nhau độ phân giải/ cung cấp nhiều resource chuỗi (string) cho nhiều ngôn ngữ
yêu cầu resource phù hợp
Trang 48Các resource lựa chọn/thay thế
Trang 49Truy cập resource
Code
Tạo ra lớp R – chứa các ID cho các resource (res/)
ImageView imageView = ( ImageView )
findViewById ( R id myimageview );
Truy cập resource thông qua tên/id của resource imageView setImageResource ( R drawable myimage );
EX: Thiết lập giá trị TextView
TextView msgTextView = ( TextView )
findViewById ( R id msg );
msgTextView setText ( R string hello );
Trang 50Truy cập resource
Layout
res/values/strings.xml
Layout file
Trang 51Activity
Biểu diễn một màn hình (tương tự của sổ/khung)
Con của lớp ContextThemeWrapper
Android khởi động chương trình với
activity bắt đầu với hàm onCreate()
Trang 53Service
Thành phần chạy bên dưới (background)
Thời gian thực thi dài
Không cần tương tác với người dùng
Tồn tại ngay cả khi ứng dụng không còn hoạt động
Trang 54Trạng thái
Started: Bắt đầu khi thành phần ứng dụng (như activity) gọi startService()
Bound: Khi ứng dụng kết lại bởi
dạng client – server cho phép các thành
phần (component) tương tác với dịch vụ, gởi yêu cầu, lấy kết quả
Trang 56 Khi một component khác muốn kết đên dịch vụ bởi bindService()
Nếu hiện thực, phải cung cấp giao diện cho người dùng giao tiếp với dịch vụ bằng cách trả vê đối tượng IBinder
Trang 57Các bước
MainActivity.java
liên quan đến service
<service /> (một ứng dụng có thể có một hoặc nhiều service)
<service android:name = ".MyService" />
Trang 58Bài 3: User Interface
Layout
View - control
Event handling
Custom component
Trang 59Layout
Các thành phần nhỏ là các View (button, text field, )
Các View có thể được nhóm vào
ViewGroup (ViewGroup cũng có thể chứa các ViewGroup khác) và định nghĩa layout riêng
Trang 60Các loại layout
liên hệ nhau
phần
single view
lưới
Trang 61Linear Layout
Sắp xếp theo chiều ngang/dọc
Trang 62thể dùng các màu khác nhau như "#rgb",
"#argb", "#rrggbb", "#aarrggbb"
bottom, left, right, center, center_vertical, center_horizontal,
Trang 63Ví dụ
<? 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"
Trang 64android:orientation="horizontal" android:orientation=“vertical"
Trang 65Relative Layout
Các thành phần có liên hệ nhau
Trang 66RelativeLayout Attributes
Thuộc tính Mô tả
Giá trị: top, bottom, left, right, center, center_vertical, center_horizontal,
Trang 67<EditText android:id = "@+id/name" android:layout_width = "fill_parent"
android:layout_height = "wrap_content" android:hint = "@string/reminder" />
<LinearLayout android:orientation = "vertical"
android:layout_width = "fill_parent" android:layout_height = "fill_parent"
android:layout_alignParentStart = "true"
android:layout_below = "@+id/name" >
<Button android:layout_width = "wrap_content"
android:layout_height = "wrap_content" android:text = "New Button"
android:id = "@+id/button" />
<Button android:layout_width = "wrap_content"
android:layout_height = "wrap_content" android:text = "New Button"
android:id = "@+id/button2" />
</LinearLayout>
</RelativeLayout>
Trang 68Demo
Trang 69Table Layout
Trang 70s
Tập các chỉ mục cho các cột được chia nhỏ hơn
Trang 73View
Là đối tượng được vẽ lên màn hình cho phép nhận các tương tác từ người dùng cũng như hiển thị các thông tin cần thiết
2 dạng:
View: các điều khiển đơn lẻ
ViewGroup: tập hợp nhiều điều khiển đơn lẻ
Trang 74View
Thể hiện:
diện như một hình chữ nhật tuỳ thuộc vị trí, kích thước, màu sắc và nhận vào cũng như xử lý các tương tác có liên quan
Xây dựng view theo 2 cách:
Kéo thả và tuỳ chỉnh thuộc tính trong xml
Thiết lập thông số và truy xuất trực tiếp trong Java Code (activity_main.java)
Trang 76Log.i(“Event Handling”, “Being onClick”); }
});
Trang 77View
Thuộc tính Id được đi kèm với đối tượng View khi khai báo trong xml cho phép truy xuất trong code Java
Trang 78View
giao diện (tuỳ thuộc vào thuộc tính của đối
Trang 79View
cao của một đối tượng View
Trang 83textView.setText(“Đối tượng TextView”);
android:text=“Đối tượng TextView”
Trang 86Button
Cho phép thể hiện các nội dung văn bản, hình ảnh – nhận và phản hồi tương tác nhấn từ người dùng
Trang 87Button
Lắng nghe sự kiện nhấn trong Java-Code:
button.setOnCLickListener(new OnClickLisntener() {
@Override public void onClick(View v) {
Log.i(“Event Handling”, “Being onClick”); }
});
Lắng nghe sự kiện nhấn trong XML:
android:onClick=“MethodName”
Trang 88Button
Checkbox: hai trạng thái “được chọn” và “bỏ chọn”
Phương thức lắng nghe sự kiện thay đổi trạng thái:
checkBox.setOnCheckedChangeListener(new
OnCheckedChangeLisntener() {
@Override public void onCheckedChangeListener (CompoundButton v, boolean isChecked) {
Log.i( “Event Handling”, “Being onClick” );
} });
Trang 89Button
RadioButton: hai trạng thái “được chọn” và “bỏ chọn”, không thể “bỏ chọn” khi đã “được chọn”
Thường xử lý trên nhóm nút nhiều trạng thái
Phương thức lắng nghe sự kiện thay đổi trạng thái trên nhóm nút
radioGroup.setOnCheckedChangeListener(new
OnCheckedChangeLisntener() {
@Override public void onCheckedChangeListener
(RadioGroup group, int checkedId) { Log.i(“Event Handling”, “Checked at id:” +
checkedId);
} });
Trang 90Button
ToggleButton: hai trạng thái “bật” và “tắt”, thể hiện trạng thái trên đối tượng
Thuộc tính quan trọng:
textOn: trạng thái nút đang bật
textOff: trạng thái nút đang tắt
Phương thức lắng nghe sự kiện thay đổi trạng thái
toggleButton.setOnCheckedChangeListener(new
OnCheckedChangeLisntener() {
@Override public void onCheckedChangeListener(CompoundButton
v, boolean isChecked) { Log.i(“ Event Handling ”, “Being onChecked”);
} });
Trang 91Button
Switch: hai trạng thái “bật” và “tắt”, có thể thao tác
bằng cách trượt ngón tay trên đối tượng
Thuộc tính quan trọng:
textOn: trạng thái nút đang bật
textOff: trạng thái nút đang tắt
Phương thức lắng nghe sự kiện thay đổi trạng thái trên nhóm nút
switchButton.setOnCheckedChangeListener(new
OnCheckedChangeLisntener() {
@Override public void onCheckedChangeListener(CompoundButton v,
boolean isChecked) { Log.i(“Event Handling”, “Being onChecked”);
} });
Trang 93Các khái niệm
phương thức Phương thức sẽ được gọi khi người dùng “hành động” với view có listener
đã được đăng kí tương ứng
quản lý sự kiện (Event Handler) lấy các đăng
kí với Event Listener
đăng kí listener thì listener gọi bộ quản lý sự kiện là một phương thức quản lý dự kiện
Trang 94Event Listeners & Event Handlers
Event Handler Event Listener & Description
onClick() OnClickListener(): clicks/touches/focuses
onLongClick() OnLongClickListener(): clicks/touches/focuses từ 1 giây
trở lên
onFocusChange() OnFocusChangeListener():mất focus
onKey() OnFocusChangeListener(): item được focus và ấn/thả
phím
onTouch() OnTouchListener(): ấn/thả phím hoặc bất kì cử động nào
trên màn hình onMenuItemClick() OnMenuItemClickListener(): chọn mục trong menu
onCreateContextMenu() onCreateContextMenuItemListener(): context menu
được tạo ra
Trang 95Event Listeners Registration
Quá trình Event Handler lấy các đăng kí với Event Listener
Các các đăng kí event listener
Sử dụng lớp nội Anonymous
Lớp Activity kế thừa giao diện Listener
Sử dụng activity_main.xml để xác định trực tiếp event handler
Trang 96Event Handling Examples Using an Anonymous Inner Class
Thêm vào file src/MainActivity.java click
event listener và bộ quản lý sự kiện
Hiệu chỉnh res/layout/activity_main.xml file
chứa các control
b1 setOnClickListener ( new View OnClickListener () {
@Override public void onClick ( View v ) {
TextView txtView = ( TextView ) findViewById ( R id textView );
txtView setTextSize ( 25 );
} });
Trang 98Custom Components
thuộc tính và dữ liệu tương ứng
LinearLayout
thức khởi tạo có tham số AttributeSet
đối tượng cho thành phần với các thuộc tính mặc định và các thuộc tính mới
Trang 99Bài 4: Tài nguyên
Trang 100Giới thiệu
yêu cầu về hiển thị: hình ảnh, âm thanh, văn bản, layout,…tương thích cho từng thiết bị
riêng biệt
phạm vi toàn ứng
dụng, dễ dàng thay đổi theo ngữ cảnh
của thiết bị hoặc không có tài nguyên để lựa chọn
biệt thông qua các từ hạn định và đường dẫn
Trang 101Vị trí và các loại tài nguyên thông dụng
Trang 102Định nghĩa tài nguyên
Vấn đề về định nghĩa tài nguyên
Có quá nhiều thiết bị có cấu hình khác nhau về kích thước màn hình, độ phân giải, phím vật lý…
Mỗi thiết bị có thể hoạt động ở nhiều chế độ khác nhau: nằm ngang, nằm đứng, thay đổi ngôn ngữ…
Từ hạn định: dùng để tạo ra các tài nguyên khác nhau cho nhiều thiết bị có cấu hình khác nhau hoạt động ở các chế độ khác nhau
Trang 103Định nghĩa tài nguyên
Trang 104Định nghĩa tài nguyên
Cách tạo tài nguyên:
Tạo thưmục mới trong thưmục resvới định dạng:
<tên tài nguyên>-<từhạn định>
Ví dụ:
drawable-vi-rVN
Trang 105Định nghĩa tài nguyên
Qui tắc đặt tên cho thưmục tài nguyên
Có thể có nhiều từ hạn định cho một thư mục tài nguyên cách nhau bằng dấu gạch ngang (“-”)
Các từ hạn định phải theo thức tự ưu tiên
Các thư mục tài nguyên không được chứa thư mục tài nguyên khác
Không cho phép hai từ hạn định giống nhau trên cùng một thư mục
Trang 106Truy xuất tài nguyên
thông qu
cho tài nguyên (ID) thông qua AAPT (Android
Application Project Tool)
lớp tĩnh
o Java code: R.drawable.ic_launcher
o xml: @drawable/ic_launcher lớp R
Trang 107Tài nguyên Alias
Tạo ra tài nguyên từ tài nguyên có sẵn
Phục vụ cho nhiều cấu hình thiết bị nhưng không phải là tài nguyên mặc định
Ví dụ: Tạo biểu tượng ứng dụng khác nhau cho các ngôn ngữ khác nhau đối với tiếng Anh và tiếng Việt thì cùng biểu tượng
Giải quyết vấn đề (không dùng Alias)
hạn định en và vi có hình ảnh giống nhau
Giải quyết vấn đề (dùng Alias)
Trang 108Các tài nguyên cơbản
Các tài nguyên cơ bản được lưu trữ trong thư mục
res/values
Định danh tài nguyên được khởi tạo thông qua
thuộc tính name, không phải tên tập tin
Có thể lưu trữ nhiều tài nguyên vào trong một tập tin
Trang 111 string_array_name: định danh dùng để truy xuất trong XML và Java Code
text_string: nội dung lưu trữ cho từng item
Truy xuất trong Java Code:
Resources res = getResources();
String[] androidCourses = res.getStringArray(R.array.android_courses);
Trang 112String
Quantity: được sử dụng cùng bộ số đếm tùy thuộc vào qui ước của từng ngôn ngữ, bao gồm các bộ đếm: