28
Menu trong android

Menu in Android

Embed Size (px)

Citation preview

Page 1: Menu in Android

Menu trong android

Page 2: Menu in 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

Page 3: Menu in Android

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

Page 4: Menu in Android

Cấu trúc và quan hệ

Page 5: Menu in Android

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.

Page 6: Menu in Android

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

Page 7: Menu in Android

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

Page 8: Menu in Android

Giải thích

• Trong đó:CATEGORY_MASK = 0xffff0000CATEGORY_SHIFT = 16USER_MASK = 0x0000ffff

Page 9: Menu in Android

Kết quả

• Tính toán thử

Page 10: Menu in Android

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

Page 11: Menu in Android

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:

Page 12: Menu in Android

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

Page 13: Menu in Android

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:

Page 14: Menu in Android

Kết quả

Page 15: Menu in Android

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)

Page 16: Menu in Android

SubMenu

• Extend từ Menu• Được add vào bằng xml hoặc code:

Page 17: Menu in Android

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

Page 18: Menu in Android

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

Page 19: Menu in Android

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()

Page 20: Menu in Android

MenuItem Choose Event

• Cách 2: Tự tạo Listener rồi set cho các menuItem

Page 21: Menu in Android

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)

Page 22: Menu in Android

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

Page 23: Menu in Android

Context Menu

• Code:

Page 24: Menu in Android

Context Menu

• Trong trường hợp set cả onLongClick thì sự kiện onLongClick sẽ được gọi trước

Page 25: Menu in Android

Choose Event

• Để lắng nghe sự kiện menuItem trong ContextMenu được chọn, sử dụng hàm:

Page 26: Menu in Android

Result

• Kết quả:

Page 27: Menu in Android

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

Page 28: Menu in Android

Tìm hiểu thêm

• Menu in fragment• Alternative menu• Popup menu