Beginning Android for Application - Chapter 3: Android User Interface

Chương 3 gồm có:

- Những ViewGroups khác nhau mà bạn có thể sử dụng để hiển thị.

- Làm thế nào để thích ứng và quản lý sự thay đổi sự định hướng màn hình.

- Cách tạo ra UI

- Cách lắng nghe UI notification.

Trong chương 2, bạn đã tìm hiểu về Activity class và vòng đời của nó. Bạn biết rằng một

activity là một phương tiện để người dùng tương tác với application. Tuy nhiên, một activity

không thể tự hiển thị trên màn hình, mà nó phải được vẽ trên màn hình sử dụng Views và

ViewGroups. Trong chường này, bạn sẽ học chi tiết cách tạo ra user interface trong Android, và

cách người dùng tương tác với chúng. Thêm vào đó, bạn sẽ tìm hiểu cách để xử lý thay đổi trên

màn hình Android khi người dùng thay đổi chiều của nó.

pdf48 trang | Chuyên mục: Android | Chia sẻ: dkS00TYs | Lượt xem: 2070 | Lượt tải: 2download
Tóm tắt nội dung Beginning Android for Application - Chapter 3: Android User Interface, để xem tài liệu hoàn chỉnh bạn click vào nút "TẢI VỀ" ở trên
view. Khi đó, bất cứ text nào nằm trong EditText view sẽ tồn tại và được restored tự động khi 
activity đó được tạo lại. Ngược lại, nếu bạn không đặt tên EditText view sử dụng thuộc tính 
android:id, thì activity sẽ không cho phép text đi cùng EditText đó được tiếp tục tồn tại. 
Lưu trữ thông tin trạng thái trong quá trình thay đổi ở Configuration. 
Bây giờ, bạn đã học được việc thay đổi định hướng màn hình sẽ destroy một activity và 
recreate lại nó. Hãy nhớ rằng, khi một activity được tạo lại, trạng thái hiện tại của nó sẽ bị mất. 
Khi một activity bị kill, nó sẽ fire một hoặc cả 2 method: 
Thangit14.blogspot.com Thangit14@gmail.com 
30 
- onPause(): Method này luôn luôn được fire bất cứ khi nào một activity được kill hoặc 
đưa vào trạng thái background. 
- onSaveInstanceState(): method này được fire khi một activity được kill hoặc đưa vào 
trạng thài background(giống method onPause()). Tuy nhiên, không giống như method 
onPause(), method này không fire khi một activity được unload từ stack( giống như 
khi người dùng nhấn back button), bởi vì nó không cần restore trạng thái trước của nó. 
Nói ngắn gọi hơn, để duy trì sự tồn tại trạng thái của activity, bạn luôn luôn phải 
implement onPause() method. Và sau đó sử dụng cách của bạn để lưu dữ thông tin bạn muốn của 
activity, có thể là database, internal or external file … 
Nếu bạn chỉ đơn giản là muốn lưu giữ trạng thái của activity để nó có thể được phục hồi 
sau khi activity được tạo lại( như khi thiết bị thay đổi định hướng), một cách đơn giản hơn nhiều 
là implement onSaveInstanceState() method, vì nó cung cấp một Bundle object như một tham số 
mà bạn có thể sử dụng nó để lưu trữ trạng thái của activity. Đoạn mã sau đây chỉ cho bạn thấy 
bạn có thể lưu một chuỗi ID vào Bundle object trong method onSaveInstanceState(): 
Khi activity được tái tạo, phương thức onCreate được fire đầu tiên, sau đó là method 
onRestoreInstanceState(), method này sẽ cho phép bạn lấy về trạng thái mà bạn đã lưu trước đấy 
thông qua Bundle object. 
Mặc dù bạn có thể sử dụng phương thức onSaveInstanceState() để lưu trữ thông tin trạng 
thái, nhưng chú ý nhưng hạn chế của việc này đó là bạn chỉ có thể lưu thông tin trạng thái của 
bạn trong Bundle object. Nếu bạn cần lưu những cấu trúc dữ liệu phức tạp hơn, thì đây không 
phải là một giải pháp thích hợp. 
Một method khác mà bạn có thể sử dụng là onRetainNonConfigurationInstance(). 
Phương thức này được fire khi một activity sắp bị destroy do có sự thay đổi configuration (giống 
như sự thay đổi định hướng của màn hình, keyboard được availability …). Bạn có thể lưu trạng 
thái của dữ liệu bằng cách return chúng trong method này: 
Thangit14.blogspot.com Thangit14@gmail.com 
31 
Chú ý: Khi màn hình có sự thay đổi định hướng, sự thay đổi này là một phần của thay 
đổi configuration. Một sự thay đổi configuration sẽ làm cho các activity hiện thời của bạn bị 
destroy. 
Cần chú ý rằng method onRetainNonConfigurationInstance trả về một Object type, điều 
này cho phép bạn trả về gần như bất kì loại dữ liệu nào. Để lấy về dữ liệu đã lưu này, bạn có thể 
sử dụng method getLastNonConfigurationInstance() đặt trong method onCreate(). 
Các phương thức này rất hữu dụng khi bạn cần duy trì data trong thời gian ngắn, giống 
như khi bạn download dữ liệu trên internet và người dùng thay đổi định hướng màn hình. Khi đó 
sử dụng 2 method trên để lưu data sẽ tốt hơn nhiều việc tải lại data đó. 
Thangit14.blogspot.com Thangit14@gmail.com 
32 
Nhận biết sự thay đổi định hướng màn hình. 
Đôi khi bạn cần biết khi nào thì thiết bị của bạn thay đổi định hướng. Để xác định điều 
đó, bạn có thể sử dụng WindowManager Class. 
Phương thức getDefaultDisplay() trả về một Display đại diện cho màn hình của thiết bị. 
Bạn có thể lấy về chiều rộng, cao của nó để xác định màn hình đang ở dạng nào. 
Điều khiển sự thay đổi định hướng của Activity. 
Bạn có thể muốn đảm bảo rằng ứng dụng của bạn được hiển thị trên một định hướng nào 
đó của màn hình. Ví dụ, bạn có thể viết một game mà chỉ có thể view ở landscape mode. Trong 
trường hợp này, bạn có thể lập trình để bắt buộc có một sự thay đổi ở màn hình, sử dụng method 
setRequestOrientation() của class Activity. 
Để thay đổi sang sạng portrait mode, bạn sử dụng 
Bên cạnh việc sử dụng method setRequestOrientation(), bạn còn có thể sử dụng attribute 
android:screenOrientation trong thẻ trong file AndroidManifest.xml 
Thangit14.blogspot.com Thangit14@gmail.com 
33 
Ví dụ trên làm ngăn chặn activity chuyển sang trạng thái định hướng nào đó (ở đây là 
landscape mode) và ngăn không cho activity bị destroyed; vì thế activity sẽ không bị destroyed 
và method onCreate() sẽ không bị fired khi định hướng màn hình bị thay đổi. 
Có 2 giá trị khác nữa của android:screenOrientation đó là 
- portrait : Potrait mode 
- senser: Dựa theo cảm biến của máy (mặc định). 
Sử dụng Action Bar 
Bên cạnh fragments, một tính nắng mới được cung cấp trong Android3 và 4 đó là Action 
Bar. Ở vị trí của title bar cũ nằm ở trên cùng của màn hình, Action Bar hiển thị icon của 
application và title của activity cùng nhau. Ở phía bên phải của ActionBar là action items. 
Ví dụ dưới đây bạn có thể lập trình để ẩn hay hiển thị Action Bar. 
Thangit14.blogspot.com Thangit14@gmail.com 
34 
Thangit14.blogspot.com Thangit14@gmail.com 
35 
Chú ý rằng nếu bạn đã set attribute android:name để turn off the ActionBar thì khi 
getActionBar() method được gọi sẽ trả về null. Vì thế việc sử dụng ActionBar class được khuyến 
khích hơn. 
Thêm Action Items vào ActionBar 
Bên cạnh việc hiển thị application icon và activity title ở bên trái của ActionBar, bạn còn 
có thể hiển thị thêm những items trên thanh ActionBar. Những items này được gọi là action 
items. Action items là những shortcuts cho những hành động thường được thực hiện trong ứng 
dụng. Ví dụ, bạn có thể xây dựng một ứng dụng đọc RSS, một số action item sẽ có thể là 
“Refresh feed”, “Delete feed” và “Add new feed”. 
Thangit14.blogspot.com Thangit14@gmail.com 
36 
Thangit14.blogspot.com Thangit14@gmail.com 
37 
Thangit14.blogspot.com Thangit14@gmail.com 
38 
Thangit14.blogspot.com Thangit14@gmail.com 
39 
Thangit14.blogspot.com Thangit14@gmail.com 
40 
Để đảm bảo menu item sẽ xuất hiện giống như action item, bạn gọi phương thức 
setShowAsAction() sử dụng SHOW_AS_ACTION_IF_ROOM . 
Tùy chỉnh ActionItems và Application Icon 
Trong ví dụ trước, menu items được hiển thị mà không có text. Nếu bạn muốn hiển thị 
text cho action item cùng với icon, bạn sử dụng kí tự “|” cùng với 
MenuItem.SHOW_AS_ACTION_WITH_TEXT 
Thangit14.blogspot.com Thangit14@gmail.com 
41 
Ngoài việc click vào action item, người dùng còn có thể clik vào application icon trên 
Action Bar. Khi application icon được click, method onOptionItemSelected() được gọi. Để xác 
định application icon nào đang gọi, bạn check item ID gắn với android.R.id.home 
 Application icon thường được sử dụng để quay về main activity của ứng dụng. Ví dụ, app 
của bạn có thể có một vài activities, và bạn muốn sử dụng app icon như một shortcut cho người 
dùng quay về activity chính của ứng dụng. 
Intent.FLAG_ACTIVITY_CLEAR_TOP đảm bảo rằng các activities ở trong back stack 
được clear khi người dùng click vfo Action Bar. Bằng cách này, nếu người dùng click vào back 
button, các activities khác trong ứng dụng sẽ không được hiển thị. 
Tạo UI bằng code. 
Cho đến nay, tất cả Uis mà bạn tạo ra đều sử dụng XML. Như ddax đề cập trước đó, bên 
cạnh việc sử dụng XML bạn còn có thể tạo UI sử dụng code. Cách này rất hữu dụng nếu UI cần 
được tạo ra một cách tự động. Ví dụ, giả sử bạn đang xây dựng một hệ thống đặt vé xim phim và 
ứng dụng của bạn sẽ hiển thị ghế của mỗi rạp sử dụng các button. Trong trường hợp này, bạn sẽ 
cần tự động tạo ra các UI dựa trên các rạp chiếu được chọn bởi người dùng. 
Thangit14.blogspot.com Thangit14@gmail.com 
42 
Thangit14.blogspot.com Thangit14@gmail.com 
43 
Bạn cần tạo một LayoutParams object để xác định layout parameter để sử dụng trong các 
views. 
Như bạn thấy, việc tạo UI bằng code khá là mất thời gian. Do đó, tự động tạo UI sử dụng 
code chỉ nên dùng khi cần thiết. 
Thangit14.blogspot.com Thangit14@gmail.com 
44 
Lắng nghe Notifications 
Người dùng tương tác với UI ở 2 level: activity level và view level. Ở activity level, 
Activity cung cấp các method để bạn có thể override. Một vài những method thông thường mà 
bạn cần biết đó là 
- onKeyDown : Được gọi ra khi một key được nhấn và không được xử lý bởi 
bất kì view nào chứa bên trong activity. 
- onKeyUp: Được gọi khi một key được thả ra và không được xử lý bởi bất kì 
view nào chứa bên trong activity. 
- onMenuItemSelected: Được gọi ra khi mọt panel của menu item được chọn 
bởi người dùng (được đề cập trong chương 5). 
- onMenuOpened: Được gọi ra khi một panel được opened bởi người 
dùng(được đề cập trong chương 5). 
Overriding method được định nghĩa trong một Activity 
Thangit14.blogspot.com Thangit14@gmail.com 
45 
Thangit14.blogspot.com Thangit14@gmail.com 
46 
Đăng kí Events for Views. 
View có thể fire event khi người dùng tương tác với chúng. Ví dụ, khi người dùng nhấn 
vào một Button view, bạn cần viết code trong event để hành động thích hợp được thực hiện. Để 
làm như vậy, bạn cần đăng kí một cách rõ ràng các event cho view. 
Sử dụng ví dụ đã làm ở trên, bạn có thể đăng kí event cho button khi nó được click sử 
dụng một anonymous class. 
Thangit14.blogspot.com Thangit14@gmail.com 
47 
Anonymous class: (lớp nặc danh): Là lớp không có tên. 
Ở đây btnListener chỉ là biến còn lớp nặc danh được tạo ra từ new onClickListener(){}; 
Bên cạnh việc định nghĩa một anonymous class để sử lý event, bạn còn có thể định nghĩa 
một anonymous inner class để xử lý event. Anonymous inner class là lớp nặc danh được định 
nghĩa bên trong một method. 
Thangit14.blogspot.com Thangit14@gmail.com 
48 
Bạn cũng có thể sử dụng Anonymous inner class cho Button như sau: 

File đính kèm:

  • pdfBeginning Android for Application - Chapter 3 Android User Interface.pdf
Tài liệu liên quan