SỰ KIEN ANDROID Điều khiến sự kiện Event - Handling Sự kiện là một cách hữu ích đề thu thập dữ liệu về tương tác của người dùng với các thành phần tương tác của Ứng dụng.. Có 3 khái ni
Trang 1[ee
TRUONG DAI HOC THU DAU MOT
VIEN KY THUAT CONG NGHE
tôn với
2009 THU DAU MOT UNIVERSITY
BAI TAP THUC HANH LAP TRINH DI DONG
GV: Nguyễn Hữu Vĩnh
Trang 2
IL Pan thi€t KE Layout: a5 —°——# 5
1 LinearLayout trong ANCroid .ceeeeesseeeseeseceseeseesseeeseesneesseeseecneessessaeeseessecaeeasessnecaeeseeesaeeaeesseeeaees 5
2 RelativeLayout trong AndrỌC «xxx HH TH HT Hà nh HH HH Hà và 13
IIR300415)1Ẽ7.))05):19 1012255 .ƠỊỎ 22
1 Xử lý sự kiện trong Layout (Handle event in LayOut c:cccsesesssssesesecsesseseseesessesesessesseeseeseeseases 24
2 Xử lí sự kiện bằng lớp nặc danh (Inline anonymous listerner + csccccrsecrerxcrrxererrereerrrree 25 3 Kế thừa Interface OnClickListeFi@r -:-scsst+t xxx Errrkre 29
Bài tập 15: s s2 L2 1121211 1T HH1 E1 gx nàn Hưng ng 48
V._ Kết nối cơ sở dữ liỆU - - c2 33k SH SH SH TH TH TH HH HH HH HH TH TH TH Tờ LH 55
1 Tạo lớp java cĩ tên là Notify.java cài đặt phương thức cảnh báo khi thốt Activity 55
2 Cai dat Activity dang nhap như hình 5U: - Gv HH KH HH HH Hà Hà hà nh 55
3 Cài đặt Activity quản lý sinh viên như hình SaU: .- - + - 5n 2S v vn vn HH ng ghnưrrưy 59
4 _ Cài đặt Activity danh sách lớp học như hình saU: -. - 5s tk TH HH Hưng rưy 61
6 _ Cài đặt Activity thêm lớp hỌC: tt HH TH HH HH Hà Hà hà hy 69
7 _ Cài đặt Activity chỉnh sửa lớp học như hình saU: c2 3c + 3+ EEEEiterkrksreserkrrsrerrrerrrrsee 73
8 _ Cài đặt Activity hiển thị danh sách sinh viên như hình saU: ¿c5 cccscsrsrrerrrrrrsree 79
9 Cài đặt Activity thêm sinh viên như hình 5U: - L2 11 HH HH ng kg ng re 88
10 Cai dat Activity chinh stra sinh vién nhur hinh Sau: .cccecessecseceessecsecesseeeeceeeseeeeceeeseeeecessseeaees 95
VI DANH SÁCH BÀI TẬP LỚN - 5-1 2222 SE2E31311E51321E111E1E115EE115TEE51EE1ETEEETETEEEEEEEELEErkree 103
Trang 3Bài tập 2: Xây dựng ứng dụng di động quản lý cửa hàng thời trang - -cccccteisersrssrerrererrree 103 Bài tập 3: Xây dựng ứng dụng di động quản lí cửa hàng bán đĩa CD - : c cv srerersersrrerrrr 103
Bài tập 4: Xây dựng ứng dụng di động quản lí học sinh tiểu học - 7+ 5czStsecxsxerrrererrrrrrs 103
Bài tập 5: Xây dựng ứng dụng di động quản lí việc sử dụng phòng học trong trường ĐH 103
Bài tập 6: Xây dựng ứng dụng di động thi trắc nghiệm bằng lái xe 2 bánh . .-cccccccccc+ 103 Bài tập 7: Xây dựng ứng dụng di động quản lí cửa hàng bán xe gắn máy -c-ccccccccccercer 104 Bài tập 8: Xây dựng ứng dụng di động quản lí nhân sự - c1 St nh rererrike 104 Bài tập 9: Xây dựng ứng dụng di động quản lý dịch vụ cho thuê Xe St seiirrerirerirrerie 104 Bài tập 10: Xây dựng ứng dụng di động quản lí cửa hàng bán xẵng óc cv niirirrsrererrerrer 104 Bài tập 11 Xây dựng ứng dụng di động quản lí khách sạn - c5: S‡y + ‡eEvxkvertersrrerersrrsrrre 104 Bài tập 12 Xây dựng ứng dụng di động món ăn - - n1 HT HH HH HH HH 104 Bài tập 13 Xây dựng ứng dụng di động quản lí câu lạc bộ bóng đá: : 5c cv srsererrererrsee 104 Bài tập 14: Xây dựng ứng dụng di động ghi nhớ địa điểm và thời gian: - -cccccccccccccecee 105 Bài tập 15: Xây dung ung dung di dOng quan ly Anh cscssesesessessescsecsesseseseesesesessesseseescessseseesseeses 105 Bài tập 16: Xây dựng ứng dụng di động chat cho Android Yêu cầu các chức năng sau: 105
Bài tập 17: Xây dựng ứng dụng di động quản lý chỉ tiêu, thu nhập - c ccceseirerererrerrerre 105 Bài tập 18: Xây dựng ứng dụng di động hướng dẫn du lịch TPHCM cho người nước ngoài 106
Bài tập 19: Xây dựng ứng dụng di động quản lý nhật ký đa phương tiện trên nền Android 106
Bài tập 20: Xây dựng ứng dụng di động tra cứu thông tin xe bus trên nền Android - 106
Bài tập 21: Xây dựng ứng dụng di động quản lý Pin trên điện thoại Android (Battery Saver) 107
Bài tập 22: Xây dựng ứng dụng di động từ điển ảnh đa phương tiện - -ccccccecccrecrreree 107 Bài tập 23: Xây dựng ứng dụng di động nghe đài trực tUyẾn -¿-¿-: c2 tt the 107 Bài tập 24: Xây dựng ứng dụng COTIEACE HH TH HT HH HH Hà hy 108 Bài tập 25: Xây dựng ứng dụng thời tiết dựa theo một nhà cung cấp dịch vụ thời tiết 108
Bài tập 26: Viết chương trình thực hiện -¿-¿- cv tt SH H111 11111111 HH ch 108 Bài tập 28: Viết chương trình đọc tin tức tổng hợp từ các báo -s-++ccxcrzrercrererrreserereree 108 Bài tập 29: Xây dựng ứng dụng có tính năng tương tự như Skim trên android - «+: 109
Bài tập 30: Xây dựng ứng dụng nhận dạng biển số xe máy và xe ô tÔ -ccccccererrrererrrree 109 Bài tập 31: Xây dựng ứng dụng thông báo thời tiẾt - tt và T11 re, 109 Bài tập 33: Xây dựng ứng dụng điểm danh sinh viên qua mã vạch trên thẻ sinh viên 109
THỰC HÀNH TẠI LỚPP - 525 S233 EEEEEEEEEEEEEEEE TT T1 TT TH TT TT TT TT TT TT HE Tàn rệc 110 Buổi 1: Layout và sự kiện Android .-.- + + + + x33 33 1H HE TT TH TH 110 Buổi 2: ANDROID WIDGETS 2c 2t E111 110
Trang 4Buổi 4: Kết nối cơ sở dữ liệu
Trang 5I Tạo một ứng dụng Android
Trong bài chúng ta biết cách tạo 1 ứng dụng Hello trong Android đầu tiên Chúng ta sẽ tạo một ứng dụng đơn giản xuất Hello ra màn hình sử dụng công cụ Eclipse IDE Các bước thực hiện:
« Chon File > New > Project
e Chon android project and click next
iS Android Project from Existing Code
iS Android Sample Project
Je Android Test Project
a Android XML File
di Android XML Layout File
@ Android XML Values File
Ju Template Development Wizard
Trang 6
New Android Application
GQ, The prefix 'com.example.’ is meant as a placeholder and should net be used
| Application Name:@| Hello ]
Đrcject Name:đẽ Eiellc 1
Package Name: | com.example.heilo ]
Minimum Required SDK:9 API 6: Android 2-2 (Froyo} ~
Target SDK:@ APE 21: Ansiroid 4.X {L Preview) =
Compile With: @ | API 25: Andreid 7.1.1 x
Choose the base theme to use for the application
c2) < Back Next > Finist Cancel
o_ Compile with: Là mức API tối đa ứng dụng cú thờ chạy
o Theme: Giao diện cho ứng dụng
ôệ - Chọn nơi lưu trữ ProJect
= New Android Application
Trang 2/110
Trang 7Chon Icon, Clipart hoặc Text cho Project, click Next
Configure Launcher Icon
Configure the attributes of the icon set
< Back Next > Finish Cancel
« Chon template Avtivity cho Project trong vi du nay chung t6i1 chon Blank Activity, click Next
[ Activity NameS| MainActivity
Layout Nome®| octivity_main
O The name of the activity class to create
Trang 3/110
Trang 8Bay gid m6t project android da duoc tạo ra Bạn có thé xem chuong trinh don gian sau:
Í PackageExplorer Z‡ | Ct || BD Mainactivity.jewa Sf | cl activity_mainom! © || Bl tasktist 22 oa}
Sele : ^ || c-Rel elk
3 oppeompat_v? aa
v © Helto
~ @ ac a Al >} All > Ac!
~ BH come anes hello 6 Saport ae arena
aM public class MainActivity extends RETawEey ¢
BA Android Private Libranes 13 protected void | SHCEEREE (Buncie = cate SE Outline = =:Ð)
RA Android Dependencies enpexon o (say SR Ae Ne (> assets carcaucencvaenltn: XeZdGEc activity main)È 2
> Iibs CO com.examplehele A |
i res 1% sOverrade ~ @ MaiaActity
CÍ AndiroidM*a nagfes*t xenl ra public boolean onCreateOptionsMenu (Men me) { - ~ enCreate(Bandl
ic launcher-web.png 1 Inflate the menu; this adds items to the action Bry @ onCresteOption y |
import android view.Menu;
import android view.Menultem;
import android widget TextView;
public class MainActivity extends Activity {
@ Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceS tate);
TextView txtHello = new TextView(this);
txtHello.setText("Hello Hiep Si IT");
Trang 9
¬ L Phần thiết kế Layout:
1 LinearLayout trong Android
LinearLayout LinearLayout là ViewGroup được sử dụng khá phô biến cùng
FrameLayout va RelativeLayout, LinearLayout duoc dinh nghĩa trong xml boi cap thé dong mo <LinearLayout> va thé dong </LinearLayout>
Điểm đặc biệt của LinearLayout là có thể chia layout theo các tỉ lệ khác nhau Chúng ta
sẽ cùng nhau tìm hiểu ở dưới đây
Quy tắc layout
LinearLayout sắp sếp các view con theo hai hướng:
- Vertical: Sap sép view con theo chiéu doc
Trang 5/110
Trang 10Các view được thêm vào sau sẽ được sắp xếp theo hướng mũi tên từ trên xuông, và
không có view nao sé nam đẻ lên view nao
- Horizontal: Sap sép cac view con theo chiêu ngang:
không có view nao sé nam đẻ lên view nao
Đề xác định hướng mà LinearLayout sẽ layout các phần tử con
theo vertical hay horizontal ta st dụng thuộc tính sau:
+ Vertical:
android:orientation="vertical"
+ Horizontal:
Trang 11
<?xml version="1.0" encoding="utf-8" ?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android: layout_width="match_parent"
Kết quả xuât ra giao diện
— for perconsl use ~ Custom Phone - 44
a
Trang 7/110
Trang 12Và với đoạn mã tiếp theo thay đôi orientation thành: android:orientatfion="horizontal"
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_ width=”match_ parent”
android:layout_ height=”match_ parent”
Trang 13Ngoài cách sử dung LinearLayout thông thường thì LinearLayout thường được sử dụng đề phân chia tỉ lệ layout bằng cách sử dụng thuộc
tinh layout_weight va weightSum
« weightSum: Xac dinh trong số của LinearLayout hiện tại
« layou(_ weight: Trọng số mà view con trong LinearLayout chiếm giữ
Chia tỉ lệ không có weightSum
Cùng xem xét đoạn mã sau:
Chúng ta không đánh trọng số weightSum cho LinearLayout nén téng trong số của nó
sẽ được tính bằng tổng trọng số (layout_weight) các view con cộng lại
Ở đây weightSum = 1 + 4 + 2 = 7 Có nghĩa là LinearLayout này sẽ chia thành 7 phần:
View thứ nhất có android:layout_weight="1" sẽ chiếm 1/7
View thứ hai có android:layout_weight=''4'"' sẽ chiếm 4/7
Trang 14
View thứ ba có android:layout_weigh(='"'2'' sẽ chiếm 2/7
Kết quả chúng ta thấy như sau
@ Genymotion for personal use - Custom Phene «44.4
Trang 15Kết quả xuất ra màn hình
Chúa tỉ lệ có weightSum
Khác với cách trên weightSum được tính toán bằng tổng của cách layout_weight của
các view con Thì chúng ta có thê xác định giá trị weightSum cụ thê như sau:
Vidu: Trong LinearLayout ta co thuéc tinh android: weightSum="'10"
Trang 16Chúng ta xác định weightSum có giá trị là 10, có nghĩa là chia layout này thành 10 phần
+ Thiết kế được các giao diện phức tạp
+ Chia tỉ lệ layout, phù hợp với việc phát triên UI trên nhiều device có kích thước màn hình khác nhau
Nhược điểm
+ Thời gian tính toán và layout view con tốn chỉ phí hơn so với FrameLayout và RelativeLayout Đây là ViewGroup tính toán phức tạp nhất trong bộ ba ViewGroup thường xuyên được sử dụng (FrameLayout, RelativeLayout, LinearLayout)
Trang 12 / 110
Trang 172 RelativeLayout trong Android
RelativeLayout cho phép sap xép cac control theo vị trí tương đối giữa các control khác trên giao diện (kê cả control chứa nó) Thường nó dựa vào Id của các control khác để sắp xếp theo vị trí tương đối Do đó khi làm RelativeLayout bạn phải chú ý là đặt [d control cho chuẩn xác, nếu sau khi Layout xong mà bạn lại đối Id của các control thì giao diện sẽ
bị xáo trộn (do đó nếu đôi ID thì phải đôi luôn các tham chiếu khác sao cho khớp với Id
bạn mới đổi)
RelativeLayout là ViewGroup cũng được sử dụng khá nhiều trong
android, RelativeLayout được định nghĩa trong xml bdi cap the dong
mo <RelativeLayout> va the dong </RelativeLayout>
Quy tac layout
Quy tac layout cua RelativeLayout khá giống như FrameLayout, nhưng có một số điểm
đặc biệt là các view có thê xác định bằng vị trí tương đối (relative) với các view
khác thông qua id
Các vị trí tương đối này như sau:
« android:layout_above=”1d_ name": view hiện tại sẽ nằm phía trên view có thuộc tính ¡d là ¡d_ name
« android:layout_below="id_name": view hién tai sé nam phía dưới view có thuộc tính ¡d là Id_ name
« android:layou(_toLeftOf="'id_name'': view hiện tại sẽ nằm bên trái dưới view
có thuộc tính ¡d là ¡d_ name
« android:layout_toRightOf="id_name": view hién tai sé nam phia bén phai view c6 thudc tinh id 1a id_name
Trang 18
Bài tập thực hành phát triển ứng dụng di động Nguyễn Hữu Vĩnh
Ví dụ 1: Để hiệu sâu hơn về RelativeLayout
Ta thay rang EditText username nam dưới TextView username Và tương
tu TextView password nam dưới Editext username, EdifText password sẽ nằm
dudi TextView password Chu y cac dong chir dam: 16, 22, 29
Mã nguôn sẽ như sau:
- <?xml version="1.0" encoding= 8"2>
<RelativeLayout
xmins:android="http://schemas.android.com/apk/res/android" android: layout_width="match_parent"
mà android: layout_height="match_parent">
android: layout_height="wrap_ content”
29 android: layout below-"@id/tv password"
android: inputTvpe="textPassword" />
</RelativeLayout>
Trang 19
Ví dụ 2: Xem hình sau:
EditText username sé nam bén phai Text View username
EditText password sé nam bén phai Text View password
TextView password va Edit'Text password sé nam phia duéi TextView username Chú ý các dong in đậm: 17, 23, 24 31, 32
@:layouvt vwidch="sacch parent™
@:leyout height="“rap_ content"
android:layout alignBaseline~"@id/edt_ password”
24 android:layout below-"@id/edt username”
android:text="pessword” />
<EcGittextc
ST cố
ang 21đG:1ayotr _ idth="msatch parent”
ané@roid:leycout _~-fi- wrap _content"|
android:ilayout _below="¢id/tv_ username”
android:layout toRightOf~"814/tv password"
android: inputType="texcPassword* />
f/RelativeLayour
Trang 15/110
Trang 20Một số thuộc tính khác thường xuyên sử dụng với RelativeLayout:
« android:layout_alignParentBottom="boolean'': Căn dưới phần tử hiện theo phân tử cha nếu set là true
+ android:layout_alignParentTop="boolean": Can trén phan hién tai theo phan tir cha nét set 1a true
+ android:layout_alignParentRight="boolean": Can phái phần tử hiện tai theo phân tử cha nếu set là true
¢ android:layout_alignParentLeft="'boolean": Can trai phan tử hiện tại theo phần
tử cha nêu set là true
xm1ns: android="http: //schemas android com/apk/res/android”
android: layout_width="match_ parent”
Trang 21[Quick Access | feo | |G tava +> Debug
ES Package Explorer 23 == OG activity_mai @ my-activity_ 23 | 0 = © || GF Outline 22 eerra
¬»%|#œ vị: Palette gì x N x -= v ~ [hij Relativelayout
€Ở LayoutD :
&@= Layoutemo > Form Widgets r
8 LifeCircle [Ab] Textvi =| We Apptheme v (#8) tv_password (TestView) -
GS Lineartayout = +1 - edt password (EditText)
v & Relativelayout [Ab} Large Text @ MainActivity ~| @ ~
x (8 src \Ab) Medium Te
YB hiepsiit.com AB] Small Text ”— -
(2) MainActivityja fox) Button
@® gen [Generated Java Fi : la] Œi | ao
BA Android 7.1.1 sais Send Bistion 5
BA Android Private Librari |=j ToggleButton a:
BA Android Dependencie: (4) CheckBox †
Gy assets (@ RadioButton v = o 2 &
% - [ Properties || 'I me
_- Go Text Fi aisle + woes =
> libs
v Gores ———
& drawable-hdpi () Composite
@& drawable-idpi \) Images & Media
& drawable-mdpi CƠ Time & Date
tawable-xehdpi ) Advanced = Align Left | @+id/edt_username 9 š
{2 activity_main.n 2 Other w | Align Right
iO) My_activity_vid Ry () Custom & Library Views < > Align Bott
° TƯ hư (J Graphical Layout =| my_activity_vidul xml sik -
Uu diém
+ Thiết kế được các giao diện phức tạp
Nhược điểm
+ Thời gian tính toán và layout các view con khá lâu so với FrameLayout
+ Muốn sử dụng các thuộc tính như android:layout_above, android:layout_toLeftOf thi
phải đặt ¡d cho các view mà view hiện tại xác định vị trí tương đối đối với các view đó
Trang 22TableLayout trong Android
Kết hợp với thẻ TableRow để tạo ra các hàng các cột cho layout Cách sử dụng cũng khá đơn gián Khi dùng TableLayout, mặc định sẽ tạo ra các đường viền xung quanh các ô Các ô có thể chứa nội dung là bất kỳ thành phần view nào khác (có thê chứa
LinearLayout, FrameLayout hoặc TableLayout cũng được)
Mỗi thẻ TableRow nằm trong thẻ TableLayout tạo ra một hàng Thẻ này sẽ thực sự sẽ chứa đựng các thành phần view khác
TableLayout sẽ xem dòng nào có số lượng control nhiều nhất để xác định rằng nó có bao nhiêu cột (lấy dòng có số lượng control nhiều nhất làm số cột chuẩn)
Trang 23
rags android: layout_columns="2"
Các bước tạo LayoutTable như mô tả trên:
Bước 1: Sau khi tạo project, Thay đôi Layout RelativeLayout sang TableLayout : Click - Right lên Avtivity
Trang 24= Change Layout oO >
Change from RelativeLayout
Bước 2: Thêm các dong vao TableLayout > Add
Row, chon Tablelayout trén Activity
~ ES tet AB) Edit 1Ð Alt+ Shift+R
& Edit StretchColummns
~ Ee tat Edit ShrinkColumns
= TableLayou Paste Ctrtev
Stretch C Baier aie
Trang 26Ket qua cua vi dụ trên:
II SỰ KIEN ANDROID
Điều khiến sự kiện (Event - Handling)
Sự kiện là một cách hữu ích đề thu thập dữ liệu về tương tác của người dùng với các
thành phần tương tác của Ứng dụng Ví dụ: các nút nhắn hoặc màn hình cảm ứng v.v Framewordk Android quản lý các sự kiện vào trong một hàng đợi (queue), sự kiện nào vào trước sẽ ra trước (FIFO) Chúng ta có thê bắt những sự kiện này trong chương trình
của chúng ta và thực hiện một số yêu cầu thích hợp
Có 3 khái niệm liên quan đến quán lý sự kiện:
Event Listeners: Là một giao diện trong một View, View này chứa một phương thức duy nhất là callback Phương thức này được gọi bởi Frameword Android, khi View đã được đăng ký sự kiện và người dùng tác động lên View trong UI (giao dién người dùng) Event Listeners Registration: Event Registration la mét qua trinh ma mét Event Handler da duoc dang ky voi Event Listener dé ma Handler nay dugc goi khi Event
Listener kích hoạt sự kiện
Event Handlers: Khi một Event xảy ra, và chúng ta đã đăng ký một Event LIstener cho
sự kiện, thì Event Listener gọi Event Handler, là phương thức mà thực sự xử lý sự kiện
đó
Event Handler Event Listener Name
Trang 22 / 110
Trang 27sử dụng phương onClick() để xử lý sự kiện
OnLongClickListener()
Đăng ký sự kiện khi người dùng hoặc click hoac cham (touche)
hoặc focus trên bất ký widget như button, text, image vv trong một hoặc
nhiều giây Chúng ta sẽ sử dụng phương onLongClickQ đề xử lý sự kiện
OnFocusChangeListener()
Sự kiện phát sinh khi widget mat focus
OnFocusChangeListener()
Sự kiện phát sinh khi người dùng focus trén widget va nhan (presse)
hoặc thả (release) một phím trên thiết bị
(Context Menu) Đăng ký Event Listener trong Android
Đăng ký Event là tiến trình mà bởi đó một Event Handler duoc đăng ký với một Event
Listener để mà handler được gọi khi Event Listener kích hoạt sự kiện Dưới đây là một số
cách đề đăng ký Event Handler, chúng ta sẽ demo từng cách một trong các trang tiếp
theo:
Xu ly su kién trong Layout (Handle event in Layout)
Xử lí sy kiện bằng lớp nặc danh (Inline anonymous listener)
Ké thira Interface OnClickListener (Implements OnClickListener Interface)
Sur dung bién (Event Listener using Variable)
Bất sự kiện thông qua lớp lắng nghe (Listener Class)
PerformClick method
Trang 28
1 Xử lý sự kién trong Layout (Handle event in Layout)
Khi ban tao mét View trong layout, bat ky layout nao citing sé có thuộc tính như
sau: android:onClick=”EventName“ , EventName ở đây chính là tên sự kiện, khi
người dùng tương tác với view và nó sẽ bắt sự kiện tương ứng với view đó dựa vào ID.Đây là một view định nghĩa trong layout:
O file layout minh đã khai báo một sy kién onClick co tén la “clickMe* lu6n, va trong
class MainActivity minh khai báo một phương thức có tên public void clickMe(View v),
ở đây các bạn muôn no bat su kién cho nut button thi bắt buộc phương thức khai bao phải
trùng tên với tên onClick trong ñle layout.Ở đây mình đã khi báo giống nhau rồi nhé, nhớ tham số truyền vào phương thức là View nhé chứ không có là lỗi ngay.Ngoài ra trong trường hợp có nhiều nút View gán cùng tên sự kiện thì bạn sẽ bắt theo ID như sau:
Trang 29Và đây là các bắt sự kiện cho 2 nút button có chung tên sự kiện clickMe:
// Thêm sự kiện tại đây có tham số là View
public void clickMe(View v){
// kiem tra bằng dùng phương thức getID() của view so sánh với id của button
switch(v.getId()){
case R.id.btnLogin:
// Hiện thị thông báo trong vòng vài giây
Toast.makeText(getApplication(), "Hiệp Sĩ TT: Bạn đang Click vao Button Login", Toast.LENGTH_LONG) show();
Kết quả khi click vào button Login:
Hiép Si HT: Bon dang Click yao Button Login
2 Xử lí sự kiện bằng lớp nặc danh (Inline anonymous listener)
Ở đây thì Activity sẽ kế thừa interface OnClickListener, interface này phương thức
onClick sẽ có nhiệm vụ là lắng nghe các sự kién click vào View, nếu có phương thức này
sẽ được gọi đến
Dinh nghĩa nut Button 6 xml nhu sau:
Trang 25 / 110
Trang 30Bài tập thực hành phát triển ứng dụng di động Nguyễn Hữu Vĩnh
Trang 3110 public class MainActivity extends Activity implements OnClickListener {
public void onClick(View v) {
// TODO Auto-generated method stub
// Lay id ttng button
switch(v.getId()){
case R.id.btnLogin:
// Hiện thị thông báo trong vòng vài giây
Toast.makeText(getApplication(), "Hiệp Sĩ TT: Bạn đang Click vao Button Login", Toast.LENGTH_LONG) show();
Trang 32package hiepsiit com;
//Xử lý sự kiện cho 2 button
btnLogin setonC1ickListener (this);
btnLogout.setOnClickListener(this);
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
break;
case R.id.btnLogout:
Toast.makeText(getApplication(), "Hiệp Sĩ TT: Bạn dang Click vao Button Logout", Toast.LENGTH_LONG) show();
break;
}
Trang 33
Kết quả khi click vao button Login:
DI 7U 7 AC 0 06a
3 Kế thừa Interface OnClickListener
Ở day thi Activity sẽ ké thira interface OnClickListener, interface này phương thức
onClick sẽ có nhiệm vụ là lắng nghe các sự kiện click vào View, nếu có phương thức nay
xm1ns: android="http: //schemas android com/apk/res/android”
xm1ns : tools="http: //schemas android com/tools”
android: layout_width="match_ parent”
Trang 29 / 110
Trang 34Sau đó ở MainActivity bạn sẽ implement Interface OnClickListener va override lai
phuong thirc onClick cua interface này
public void onClick(View v) {
// TODO Auto-generated method stub
// Lấy id từng button
switch(v.getId()){
case R.id.btnLogin:
// Hiện thị thông báo trong vòng vài giây
Toast.makeText(getApplication(), "Hiệp Sĩ TT: Bạn đang Click vao Button Login", Toast.LENGTH_LONG) show() ;
Trang 30 / 110
Trang 35Kết quả khi click vào button Login:
Hiep Si IT: Ban dang Click vao Button Login
Higp STIT: Ban Gang Click vac Button Logout
IV ANDROID WIDGETS
Bài tập 1 : Toast và tùy chinh Toast trong Android
Trong Android, Toast dùng đề hiển thị thông tin trong khoảng thời gian ngắn.nó giống như một thông báo nổi trên ứng dụng, không ngăn cản tương tác người dùng chúng ta có thê tùy biến lại Toast
Trang 36
Simple Toast In Android =
Lớp android.widget.Toast là lớp con của lớp java.lang.Object.Chúng ta không thể tùy
java.lang.Object
bién Toast trong tap tin xml
Các phương quan trong cua Toast
*ˆ makeText(Context context, CharSequence text, int duration): Phương thức
này thường sử dụng đề hiện thị thông báo Phương thức này có 3 tham số:
Context context: thuong la YourActitivty.this cia ban vao néu nhu ban dang sir dung 6 Activity, nếu như bạn sử dung & Fragment thì điền vào đó là getActivity()
CharSequenee text: đây chính là nội dung bạn muốn show lên, ở đây là kiểu String
int duration: Khoang thoi gian Toast can hiển thị, nó là hằng số
Hằng số của Toast: Dưới đây là các hằng số của Toast được sử dụng đề thiết lập thời
gian cho Toast
v¥ LENGTH_LONG: Toast sé hién thị trong 3,5 giây
v¥ LENGTH_SHORT: Toast sé hiển thị trong 2 giây
Ví dụ sau chúng ta dùng phương thức makeText để hiện thị thông báo, thiết lập thời gian
hiên thị là 3,5 giây:
Toast toast = Toast.makeText(getApplicationContext(), "Ví dụ Toast",
Toast.LENGTH LONG); // khởi tạo một Toast gồm 1 ngữ cảnh, nội dung, thời gian hiển thị
* show(): phương thức này hiện thị thông báo ra màn hình Phương pháp này hiển
thị thông báo bằng cách sử dụng phương thức makeText() của Toast
Trang 32 / 110
Trang 37Ví dụ: Trước tiên chúng ta khởi tạo Toast và sau đó hiện thị nó bằng cách sử dụng
phương thức show ()
Toast toast = Toast.makeText(getApplicationContext(), "Vi du vé Toast",
Toast.LENGTH_LONG); // Khởi tạo Toast, thông tin hiển thị, thời gian 3,5
giây
toast.show(); // Hiển thị Toast
Ví dụ về Toast
Bài tập 2: Alert Dialog (Hộp thoại cảnh báo) trong Android
Ví dụ: Trong ví dụ này chúng ta sẽ làm ứng dụng gồm I Button Khi người sử click
vào Button '"Thoát'' sẽ xuất hiện một Alert Dialog Tién hanh tao project, vao thu
mục res /layout -> acfivity_main.xml thiết kế giao điện sau:
«> Form Widgets
Ad) TextView
Ab) Large Text mis -
Ab] Medium Text
te AppTheme +| @ MainActvity + @ + v [8 activity moin (Relative
lex, button - “Thost*
| Images & Media
_) Time & Date
| Transitions
_) Advanced
Click vào Nút Thoát 4
Bước 1: Tao m6t project tén la AlertDialog: File->New->Android Application
Project điền các thông tin ->Next ->Finish
Trang 38
Bài tập thực hành phát triển ứng dụng di động Nguyễn Hữu Vĩnh
Bước 2: Mở res -> layout -> xml (hoặc) activity_ main.xml và thêm code, chúng fa sẽ
tạo các đối tượng Buton trong Relative Layout
Trang 39import android view.Menultem;
import android view View;
import android.widget Toast;
public class MainActivity extends Activity {
public void exit(View view){
AlertDialog.Builder alertDialogBuilder = new AlertDialog.Builder(this);
// Setting Alert Dialog Title
alertDialogBuilder.setTitle("Xdc nhan dé thodt !!!");
// Icon Of Alert Dialog
alertDialogBuilder.setIcon(R.drawable question) ;
// Setting Alert Dialog Message
alertDialogBuilder.setMessage("Ban cé muén thoát?");
public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, "Bạn đã click vào nút
không đồng ý”, Toast.LENGTH_ SHORT) show() ;
});
AlertDialog alertDialog = alertDialogBuilder.create();
alertDialog.show();
Trang 40
Thast chirena trinh
Mỗi lần click chuột vào các Button thì sẽ thực hiện phép toán tương ứng: ví dụ khi
click chuột vào Tông 2 số thì kết quả ở trên là 113
Riêng nút Thoát chương trình: cho phép đóng chương trình
KK Tổng 2 số viết theo Onclick In KML Hiệu 2 số viết theo >Inline anonymous listener
Tích 2 số viết theo > Activity is listener
Thương 2 số viết theo~>Listener in variable
Ước số chung lớn nhất viét theo >Explicit listener class
Và Thoát chương trình viết theo > View Subclassing
Hướng dẫn:
- _ Để lấy số a: EditText edita=(EditTexÐfindViewById(R.id.edi/soa);
Trang 36 / 110