Upload
ninh-nguyen-ke
View
233
Download
0
Embed Size (px)
Citation preview
Menu trong android
Giới thiệu về Menu
• Package: android.view.Menu• Trước đây android có nút menu cứng, là một
trong 3 nút cơ bản cùng với home và back• Tuy nhiên sau này nút menu đó được bỏ đi và
chuyển lên tích hợp vào actionbar hoặc toolbar
Giới thiệu về Menu
• Mỗi activity sẽ được liên kết với 1 Activity menu
• Trong menu có các MenuItem và SubMenu
Cấu trúc và quan hệ
MenuItem
• Các thuộc tính- ID- Name- GroupID- Sort Order: Giá trị được sử dụng để sắp xếp
thứ tự các menuItem trong menu.
Giá trị sort order• Android đưa ra một số giá trị mặc định là- CATEGORY_CONTAINER = 0x00010000 (65536)- CATEGORY_SYSTEM = 0x00020000 (131072)- CATEGORY_SECONDARY = 0x00030000(196608)- CATEGORY_ALTERNATIVE = 0x00040000(262144)Sẽ thể hiện cho sự quan trọng của từng menuItem,
ALTERNATIVE > SECONDARY > CONTAINER > SYSTEM (?)• Bình thường chúng ta hay đặt order là 0,1,2 và thấy 0 sẽ ở
trên(ưu tiên hơn) 1, 1 ở trên 2- Nhìn ở đây thì có vẻ sẽ thấy CONTAINER > SYSTEM >
SECONDARY > ALTERNATIVE.- Nhưng thực tế thì lại là ALTERNATIVE > SECONDARY >
CONTAINER > SYSTEM
Giải thích
• Đầu tiên android quy định sẵn 1 list index
• Sau đó với giá trị order ta truyền vào, nó sẽ thực hiện một loạt tính toán như sau
Giải thích
• Trong đó:CATEGORY_MASK = 0xffff0000CATEGORY_SHIFT = 16USER_MASK = 0x0000ffff
Kết quả
• Tính toán thử
Kết quả
• Cuối cùng thì sẽ được:• (Độ ưu tiên) <-> (Khoảng giá trị sort order) 0 – 65535 <-> ALTERNATIVE + 65536 -> ALTERNATIVE +
65536 + 6553565536 – 131071 <-> 0 – 65535131072 – 196607 <-> ALTERNATIVE -> ALTERNATIVE +
65535196608 – 262143 <-> SECONDARY -> SECONDARY + 65535262144 – 327679 <-> CONTAINER -> CONTAINER + 65536327680 – 393215 <-> SYSTEM - > SYSTEM + 65535
Tạo menu
Có 2 cách là tạo bằng code hoặc inflate từ XML-Vì 1 activity sẽ chỉ có 1 menu nên có sẵn hàm onCreateOptionsMenu, chỉ cần Override lại•Cách 1:
Tạo menu
• Cách 2: inflate từ XML- Tạo 1 file menu, nếu không khai báo order thì
mặc định sẽ = 0
Tạo menu
• Sau đó viết code inflate vào trong onCreateOptionsMenu() ở activity, có thể kết hợp cả 2 cách để tạo menu:
Kết quả
Group
• Có thể nhóm một số các menuItem thành một group để dễ điều khiển cả group, chứ thực ra thì về giao diện cũng ko có gì thay đổi
• Một số method cho group:- removeGroup(int groupId) - setGroupCheckable(int groupId, boolean
checkable, boolean exclusive); - setGroupEnabled(int groupId, boolean enabled)- setGroupVisible(int groupId, boolean visible)
SubMenu
• Extend từ Menu• Được add vào bằng xml hoặc code:
SubMenu
• Bằng code:
* Khi chọn 1 menuItem sẽ hiển thị 1 subMenu tùy ý với những lựa chọn khác, không hiển thị trong Menu chính
Expanded Menus
• Nếu có quá nhiều menu mà không hiển thị hết được, Android sẽ tự động tạo 1 MenuItem để người dùng click vào đó sẽ hiển thị những menuItem còn lại
MenuItem Choose Event
• Lắng nghe sự kiện chọn của Menu - Có 3 cách:C1: bằng cách override lại hàm
onOptionsItemSelected()
MenuItem Choose Event
• Cách 2: Tự tạo Listener rồi set cho các menuItem
MenuItem Choose Event
• Cách 3: setIntent vào menuItem. Cách này có độ ưu tiên thực hiện thấp hơn 2 cách trên, nếu 2 cách trên return true thì lời gọi intent ở đây sẽ không được thực hiện, nếu không sẽ tự động có 1 lời gọi startActivity(intent)
Context Menu
• Extend từ Menu• Được liên kết với mỗi View trên layout• View cần phải register trước khi sử dụng
Context Menu
• Code:
Context Menu
• Trong trường hợp set cả onLongClick thì sự kiện onLongClick sẽ được gọi trước
Choose Event
• Để lắng nghe sự kiện menuItem trong ContextMenu được chọn, sử dụng hàm:
Result
• Kết quả:
Tóm tắt
• Giới thiệu về Menu• Hiểu kỹ về sort order tránh nhầm lẫn• Cách tạo menu• Các cách Handle menuItem Click• Context menu
Tìm hiểu thêm
• Menu in fragment• Alternative menu• Popup menu