Trình đơn dùng để hiển thị các hành động thường ít dùng hơn và không hiển thị trực tiếp lên màn hình. Trong Android có 2 loại trình đơn :
➤ Trình đơn chính (Options menu) – hiển thị các hành động liên quan đến toàn bộ Activity hiện tại. Trong Android, để kích hoạt trình đơn này, ta bấm nút Menu của thiết bị (phím cứng hoặc phím ảo trên màn hình)
➤ Trình đơn ngữ cảnh (Context Menu) – hiển thị các hành động liên quan đến một view cụ thể trên màn hình, trình đơn này được kích hoạt bằng cách bấm và giữ ngón tay (long tap) trên view cần kích hoạt trình đơn ngữ cảnh.
Hình dưới đây minh họa trình đơn chính (bên trái) và trình đơn ngữ cảnh khi bấm và giữ trên ảnh (bên phải) của ứng dụng Browser (trình duyệt web):
Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang
94 Về mặt lập trình, 2 loại menu này sử dụng cùng một lớp (android.view.Menu) và chứa các đối tượng giống nhau (android.view.MenuItem), vì vậy ta tạo sẵn 2 phương thức để dùng chung cho 2 loại menu này để tạo menu với các item bên trong và xử lý sự kiện bấm vào từng item như dưới đây:
Hàm CreateMenu dùng để thêm 7 items vào menu có sẵn (được truyền vào dạng tham số):
private void CreateMenu(Menu menu)
{
menu.setQwertyMode(true);
MenuItem mnu1 = menu.add(0, 0, 0, "Item 1"); {
mnu1.setAlphabeticShortcut('a'); mnu1.setIcon(R.drawable.ic_launcher); }
MenuItem mnu2 = menu.add(0, 1, 1, "Item 2"); {
mnu2.setAlphabeticShortcut('b'); mnu2.setIcon(R.drawable.ic_launcher); }
MenuItem mnu3 = menu.add(0, 2, 2, "Item 3"); {
mnu3.setAlphabeticShortcut('c'); mnu3.setIcon(R.drawable.ic_launcher); }
MenuItem mnu4 = menu.add(0, 3, 3, "Item 4"); { mnu4.setAlphabeticShortcut('d'); } menu.add(0, 4, 4, "Item 5"); menu.add(0, 5, 5, "Item 6"); menu.add(0, 6, 6, "Item 7"); }
Hàm MenuChoice để xử lý sự kiện tương ứng với menu item được lựa chọn (truyền vào dạng tham số). Với mục đích minh họa, khi một menu item được chọn, ta chỉ đơn gian hiển thị tên của item đó dưới dạng Toast.
private boolean MenuChoice(MenuItem item)
{
switch (item.getItemId()) { case 0:
Toast.makeText(this, "You clicked on Item 1", Toast.LENGTH_LONG).show();
return true; case 1:
Toast.makeText(this, "You clicked on Item 2", Toast.LENGTH_LONG).show();
return true; case 2:
Toast.makeText(this, "You clicked on Item 3", Toast.LENGTH_LONG).show();
return true; case 3:
Toast.makeText(this, "You clicked on Item 4", Toast.LENGTH_LONG).show();
return true; case 4:
Toast.makeText(this, "You clicked on Item 5", Toast.LENGTH_LONG).show();
return true; case 5:
Toast.makeText(this, "You clicked on Item 6", Toast.LENGTH_LONG).show();
return true; case 6:
Toast.makeText(this, "You clicked on Item 7", Toast.LENGTH_LONG).show();
return true; }
return false; }
Trình đơn chính
Để hiển thị trình đơn chính, ta nạp chồng hàm onCreateOptionMenu(Menu menu) và thêm các menu item vào đối tượng menu (trong tham số của hàm):
@Override
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu);
CreateMenu(menu); return true; }
Để hiển thị menu này lúc chạy ứng dụng, ta bấm phím MENU của thiết bị.
Để xử lý sự kiện chọn một item trong menu hiện ra, ta cần nạp chồng hàm onOptionsItemSelected(MenuItem item):
@Override
public boolean onOptionsItemSelected(MenuItem item) {
return MenuChoice(item); }
Hình bên dưới minh họa menu chính được tạo ở trên trong trường hợp thiết lập SDK nhỏ nhất được hỗ trợ trong AndroidManifest.xml >=10 (hình bên trái) và < 10 (hình bên phải) (<uses-sdkandroid:minSdkVersion=“10” />).
Phát triển ứng dụng cho thiết bị di động Hồ Thị Thảo Trang
96
Trình đơn ngữ cảnh
Để hiển thị trình đơn ngữ cảnh, ta nạp chồng hàm onCreateContextMenu(Menu menu) và thêm các menu item vào đối tượng menu (trong tham số của hàm):
@Override
public void onCreateContextMenu(ContextMenu menu, View view, ContextMenuInfo menuInfo)
{
super.onCreateContextMenu(menu, view, menuInfo); CreateMenu(menu);
}
Để xử lý sự kiện chọn một item trong menu hiện ra, ta cần nạp chồng hàm onContextItemSelected (MenuItem item):
@Override
public boolean onContextItemSelected (MenuItem item) {
return MenuChoice(item); }
Để gắn menu ngữ cảnh này vào nút bấm button1, ta thêm code sau vào hàm onCreate của activity:
Button btn = (Button) findViewById(R.id.button1); btn.setOnCreateContextMenuListener(this);
Để hiển thị menu này lúc chạy ứng dụng, ta bấm và giữ ngón tay lên trên nút bấm button1, trình đơn hiện ra như hình bên dưới: