Menu trong Android (Bài 9)

Menu trong android là một trong những thành phần giao diện quan trọng, cung cấp cho người dùng một vài lựa chọn cho những hành động cụ thể. Trong bài học này, chúng tôi sẽ trình bày hai loại menu là options menu và context menu.

Menu trong android – Định nghĩa menu trong XML

Android cung cấp một định dạng XML chuẩn để định nghĩa menu (bao gồm options menu và context mneu).

Thay vì xây dựng menu sử dụng code trong activity, chúng ta nên định nghĩa menu trong XML sau đó ứng dụng sẽ load các menu này vào activity.

Để định nghĩa menu, chúng ta tạo tập tin XML trong thư mục menu (nếu thư mục này chưa tồn tại, bạn phải tạo nó trong thư mục res) và xây dựng menu với các thành phần sau:

<menu>: Định nghĩa một Menu, cái mà chứa menu items. Thành phần <menu> phải là root của tập tin XML và có thể chứa một hoặc nhiều <item> và <group>.

<item>: Tạo một MenuItem, cái mà sẽ hiển thị trong menu. Thành phần này có thể chứa <menu> bên trong để tạo ra submenu.

<group>: Không bắt buộc, được sử dụng để nhóm các menu

Ví dụ định nghĩa một menu tên menu_game.xml

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@+id/new_game"
    android:icon="@drawable/ic_new_game"
    android:title= "New Game"
 <item android:id="@+id/help"
   android:icon="@drawable/ic_help"
   android:title= " Help" />
</menu>

Menu trong android – Options menu

Options menu là nơi bạn nên bao gồm các hành động và các tùy chọn khác có liên quan đến ngữ cảnh hoạt động hiện tại, chẳng hạn như “Tìm kiếm”, “Soạn email” và “Cài đặt”.

Vị trí mà options menu hiển thị trên màn hình thiết bị phụ thuộc vào phiên bản của hệ điều hành android đang chạy trên thiết bị người dùng.

Đối với Android 2.3.x hoặc cũ hơn, options menu sẽ hiển thị ở bên dưới màn hình khi người dùng nhấn nút Menu.

menu trong android

Tuy nhiên đối với Android 3.0 hoặc cao hơn, vị trị menu sẽ xuất hiện là ở app bar của ứng dụng.

Menu trong android – Context menu

Context menu xuất hiện khi người dùng tác động lên một view nào đó. Chẳng hạn khi người dùng long click vào Listview, một vài thao tác được hiển thị để người dùng lựa chọn (context menu).

Menu trong android – Các bước tạo Options menu

Bước 1: Định nghĩa menu (tạo tập tin XML trong thư mục menu) và tạo menu item.

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
 <item android:id="@+id/new_game"    
    android:title= "New Game"
 <item android:id="@+id/help"
   android:title= " Help" />
</menu>

Bước 2: Chỉ định options menu cho một activity

Để chỉ định options menu cho một activity, chúng ta override phương thức onCreateOptionsMenu().

Ví dụ:

@Override
public boolean onCreateOptionsMenu(Menu menu) {
 MenuInflater inflater = getMenuInflater();
 inflater.inflate(R.menu.menu_game, menu);
 return true;
}

Bước 3: Xử lý sự kiện

Khi người dùng chọn một item từ options menu, hệ thống sẽ gọi phương thức onOptionsItemSelected() . Phương thức này truyền menu item nào được chọn. Chúng ta có thể xác định menu item nào được chọn sử dụng phương thức getItemId().

@Override
public boolean onOptionsItemSelected(MenuItem item) {
switch (item.getItemId()) {
 case R.id.new_game:
   newGame();
   return true;
 case R.id.help:
   showHelp();
   return true;
 default:
   return super.onOptionsItemSelected(item);
 }
}

Menu trong android – Các bước tạo context menu

Bước 1: Định nghĩa menu sử dụng XML

Bước 2: Cài đặt phương thức onCreateContextMenu() để chỉ định menu

@Override
public void onCreateContextMenu(ContextMenu menu, View v,ContextMenuInfo menuInfo) {
   super.onCreateContextMenu(menu, v, menuInfo);
   MenuInflater inflater = getMenuInflater();
   inflater.inflate(R.menu.context_menu, menu);
}

Bước 3: Xử lý sự kiện

Cài đặt xử lý cho phương thức onContextItemSelected()

@Override
public boolean onContextItemSelected(MenuItem item) {
 AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo();
 switch (item.getItemId()) {
  case R.id.edit:
    
  case R.id.delete:
    
 default:
    return super.onContextItemSelected(item);
 }
}

Bước 4: Đăng ký context menu cho các item

view.registerForContextMenu()

Menu trong android – Bài tập thực hành

Giao diện ứng dụng khi chạy

Thêm mới một môn thể thao

Màn hình nhập tên môn thể thao được hiển hị khi người dùng chọn Add

Xoá một môn thể thao (long click vào tên môn thể thao muốn xoá -> chọn Delete)

Thay đổi tên môn thể thao (long click vào tên môn thể thao muốn thay đổi -> chọn Edit -> Hiển thị màn hình cho phép thay đổi tên). Lưu ý tên môn thể thao mà người dùng đã chọn trước đó sẽ được hiển thị ở màn hình thay đổi.

Lưu ý:

Tên môn thể thao phải được nhập trươc khi chọn ‘Save & Exit’

Hiển thị màn hình xác nhận khi người dùng chọn xử lý ‘Delete’. Nếu người dùng chọn ‘Yes’, xoá tên môn thể thao được chọn.

Trả lời