Tài nguyên trình đơn

Tài nguyên trình đơn xác định một trình đơn ứng dụng (Trình đơn tuỳ chọn, Trình đơn ngữ cảnh hoặc trình đơn phụ) có thể được tăng cường bằng MenuInflater.

Để xem hướng dẫn sử dụng trình đơn, vui lòng xem hướng dẫn dành cho nhà phát triển về Trình đơn.

vị trí tệp:
res/menu/filename.xml
Tên tệp sẽ được dùng làm mã nhận dạng tài nguyên.
loại dữ liệu tài nguyên được biên dịch:
Con trỏ tài nguyên đến một tài nguyên Menu (hoặc lớp con).
mã tham chiếu tài nguyên:
Trong Java: R.menu.filename
Trong XML: @[package:]menu.filename
cú pháp:
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:id="@[+][package:]id/resource_name"
          android:title="string"
          android:titleCondensed="string"
          android:icon="@[package:]drawable/drawable_resource_name"
          android:onClick="method name"
          android:showAsAction=["ifRoom" | "never" | "withText" | "always" | "collapseActionView"]
          android:actionLayout="@[package:]layout/layout_resource_name"
          android:actionViewClass="class name"
          android:actionProviderClass="class name"
          android:alphabeticShortcut="string"
          android:alphabeticModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:numericShortcut="string"
          android:numericModifiers=["META" | "CTRL" | "ALT" | "SHIFT" | "SYM" | "FUNCTION"]
          android:checkable=["true" | "false"]
          android:visible=["true" | "false"]
          android:enabled=["true" | "false"]
          android:menuCategory=["container" | "system" | "secondary" | "alternative"]
          android:orderInCategory="integer" />
    <group android:id="@[+][package:]id/resource name"
           android:checkableBehavior=["none" | "all" | "single"]
           android:visible=["true" | "false"]
           android:enabled=["true" | "false"]
           android:menuCategory=["container" | "system" | "secondary" | "alternative"]
           android:orderInCategory="integer" >
        <item />
    </group>
    <item >
        <menu>
          <item />
        </menu>
    </item>
</menu>
phần tử:
Bắt buộc. Đây phải là nút gốc. Chứa các phần tử <item> và/hoặc <group>.

thuộc tính:

xmlns:android
Không gian tên XML. Bắt buộc. Xác định không gian tên XML phải là "http://schemas.android.com/apk/res/android".
<item>
Một mục trong trình đơn. Có thể chứa phần tử <menu> (cho một Trình đơn phụ). Phải là phần tử con của phần tử <menu> hoặc <group>.

thuộc tính:

android:id
Mã nhận dạng tài nguyên. Mã nhận dạng tài nguyên duy nhất. Để tạo mã nhận dạng tài nguyên mới cho mục này, hãy sử dụng biểu mẫu: "@+id/name". Biểu tượng dấu cộng cho biết mã này phải được tạo dưới dạng mã nhận dạng mới.
android:title
Tài nguyên chuỗi. Tiêu đề trình đơn dưới dạng một tài nguyên chuỗi hoặc chuỗi thô.
android:titleCondensed
Tài nguyên chuỗi. Tiêu đề ngắn gọn dưới dạng một tài nguyên chuỗi hoặc chuỗi thô. Tiêu đề này được dùng trong các trường hợp mà tiêu đề thông thường quá dài.
android:icon
Tài nguyên có thể vẽ. Một hình ảnh được dùng làm biểu tượng mục trong trình đơn.
android:onClick
Tên phương thức. Phương thức gọi khi mục này trong trình đơn được nhấp vào. Phương thức phải được khai báo trong hoạt động dưới dạng công khai và chấp nhận MenuItem là tham số duy nhất, cho biết mục đã nhấp vào. Phương thức này được ưu tiên hơn lệnh gọi lại chuẩn đến onOptionsItemSelected(). Hãy xem ví dụ ở dưới cùng.

Cảnh báo: Nếu bạn làm rối mã nguồn của mình bằng cách sử dụng ProGuard (hoặc một công cụ tương tự), hãy đảm bảo loại trừ phương thức mà bạn chỉ định trong thuộc tính này khỏi việc đổi tên, vì nó có thể phá vỡ chức năng đó.

Ra mắt trong API cấp 11.

android:showAsAction
Từ khoá. Thời điểm và cách thức mục này xuất hiện dưới dạng một mục hành động trên thanh ứng dụng. Một mục trong trình đơn chỉ có thể xuất hiện dưới dạng một mục hành động khi hoạt động có chứa một thanh ứng dụng. Giá trị hợp lệ:
Giá trịMô tả
ifRoomChỉ đặt mục này vào thanh ứng dụng nếu vẫn còn chỗ. Nếu không có chỗ cho tất cả các mục được đánh dấu là "ifRoom", thì các mục có giá trị orderInCategory thấp nhất sẽ hiển thị dưới dạng hành động, và các mục còn lại sẽ hiển thị trong trình đơn mục bổ sung.
withTextNgoài ra, hãy thêm văn bản tiêu đề (do android:title xác định) bằng mục hành động. Bạn có thể bao gồm giá trị này cùng với một trong các giá trị khác dưới dạng bộ cờ bằng cách phân tách các giá trị này bằng dấu gạch đứng |.
neverĐừng bao giờ đặt mục này vào thanh ứng dụng. Thay vào đó, hãy liệt kê mục này trong trình đơn mục bổ sung của thanh ứng dụng.
alwaysLuôn đặt mục này vào thanh ứng dụng. Tránh sử dụng mục này trừ tình huống quan trọng là mục đó luôn xuất hiện trong thanh thao tác. Việc đặt nhiều mục luôn xuất hiện dưới dạng các mục hành động có thể khiến các mục đó bị trùng lặp với giao diện người dùng khác trong thanh ứng dụng.
collapseActionViewChế độ xem hành động liên kết với mục hành động này (như được khai báo bởi android:actionLayout hoặc android:actionViewClass) có thể được thu gọn.
Ra mắt trong API cấp 14.

Vui lòng xem lớp đào tạo về nội dung Thêm thanh ứng dụng để biết thêm thông tin.

Ra mắt trong API cấp 11.

android:actionLayout
Tài nguyên bố cục. Bố cục để sử dụng làm chế độ xem hành động.

Vui lòng xem Chế độ xem hành động và Trình cung cấp hành động để biết thêm thông tin.

Ra mắt trong API cấp 11.

android:actionViewClass
Tên lớp. Tên lớp đủ điều kiện để View sử dụng dưới dạng chế độ xem hành động. Ví dụ: "android.widget.SearchView" để sử dụng SearchView làm chế độ xem hành động.

Vui lòng xem Chế độ xem hành động và Trình cung cấp hành động để biết thêm thông tin.

Cảnh báo: Nếu bạn làm rối mã nguồn của mình bằng cách sử dụng ProGuard (hoặc một công cụ tương tự), hãy đảm bảo loại trừ lớp mà bạn chỉ định trong thuộc tính này khỏi việc đổi tên, vì nó có thể phá vỡ chức năng đó.

Ra mắt trong API cấp 11.

android:actionProviderClass
Tên lớp. Tên lớp đủ điều kiện để ActionProvider sử dụng thay cho mục hành động. Ví dụ: "android.widget.ShareActionProvider" để sử dụng ShareActionProvider.

Vui lòng xem Chế độ xem hành động và Trình cung cấp hành động để biết thêm thông tin.

Cảnh báo: Nếu bạn làm rối mã nguồn của mình bằng cách sử dụng ProGuard (hoặc một công cụ tương tự), hãy đảm bảo loại trừ lớp mà bạn chỉ định trong thuộc tính này khỏi việc đổi tên, vì nó có thể phá vỡ chức năng đó.

Ra mắt trong API cấp 14.

android:alphabeticShortcut
Ký tự. Một ký tự cho phím tắt dạng chữ cái.
android:numericShortcut
Số nguyên. Một số cho phím tắt dạng số.
android:alphabeticModifiers
Từ khoá. Công cụ sửa đổi phím tắt chữ cái của mục trong trình đơn. Giá trị mặc định tương ứng với phím Control. Giá trị hợp lệ:
Giá trịMô tả
META Tương ứng với phím meta Meta
CTRL Tương ứng với phím meta Control
ALT Tương ứng với phím meta Alt
SHIFT Tương ứng với phím meta Shift
SYM Tương ứng với phím meta Sym
FUNCTION Tương ứng với phím meta Function

Lưu ý: Bạn có thể chỉ định nhiều từ khoá trong một thuộc tính. Ví dụ: android:alphabeticModifiers="CTRL|SHIFT" cho biết rằng để kích hoạt mục trong trình đơn tương ứng, người dùng cần nhấn cả hai phím meta ControlShift cùng với phím tắt.

Bạn có thể sử dụng phương thức setAlphabeticShortcut() để đặt giá trị thuộc tính theo phương thức lập trình. Để biết thêm thông tin về thuộc tính alphabeticModifier, hãy truy cập vào alphabeticModifiers.

android:numericModifiers
Từ khoá. Công cụ sửa đổi phím tắt dạng số của mục trong trình đơn. Giá trị mặc định tương ứng với phím Control. Giá trị hợp lệ:
Giá trịMô tả
META Tương ứng với phím meta Meta
CTRL Tương ứng với phím meta Control
ALT Tương ứng với phím meta Alt
SHIFT Tương ứng với phím meta Shift
SYM Tương ứng với phím meta Sym
FUNCTION Tương ứng với phím meta Function

Lưu ý: Bạn có thể chỉ định nhiều từ khoá trong một thuộc tính. Ví dụ: android:numericModifiers="CTRL|SHIFT" cho biết rằng để kích hoạt mục trong trình đơn tương ứng, người dùng cần nhấn cả hai phím meta ControlShift cùng với phím tắt.

Bạn có thể sử dụng phương thức setNumericShortcut() để đặt giá trị thuộc tính theo phương thức lập trình. Để biết thêm thông tin về thuộc tính numericModifier, hãy truy cập vào numericModifiers.

android:checkable
Boolean. "đúng" nếu mục đó có thể đánh dấu.
android:checked
Boolean. "đúng" nếu mục được chọn theo mặc định.
android:visible
Boolean. "đúng" nếu mục đó hiển thị theo mặc định.
android:enabled
Boolean. "đúng" nếu mục được bật theo mặc định.
android:menuCategory
Từ khoá. Giá trị tương ứng với các hằng số Menu CATEGORY_*. Các hằng số này sẽ xác định mức độ ưu tiên của mục. Giá trị hợp lệ:
Giá trịMô tả
containerĐối với các mục là một phần của vùng chứa.
systemĐối với các mục do hệ thống cung cấp.
secondaryĐối với các mục là tuỳ chọn phụ do người dùng cung cấp (không thường xuyên sử dụng).
alternativeĐối với các mục là hành động thay thế trên dữ liệu đang hiển thị.
android:orderInCategory
Số nguyên. Thứ tự "quan trọng" của mục trong một nhóm các mục.
<group>
Một nhóm trình đơn (để tạo một tập hợp các mục có chung đặc điểm, chẳng hạn như các mục đó có hiển thị, được bật hay có thể đánh dấu hay không). Chứa một hoặc nhiều phần tử <item>. Phải là phần tử con của phần tử <menu>.

thuộc tính:

android:id
Mã nhận dạng tài nguyên. Mã nhận dạng tài nguyên duy nhất. Để tạo mã nhận dạng tài nguyên mới cho mục này, hãy sử dụng biểu mẫu: "@+id/name". Biểu tượng dấu cộng cho biết mã này phải được tạo dưới dạng mã nhận dạng mới.
android:checkableBehavior
Từ khoá. Loại hành vi có thể đánh dấu cho nhóm. Giá trị hợp lệ:
Giá trịMô tả
noneKhông thể đánh dấu
allBạn có thể đánh dấu vào tất cả các mục (sử dụng hộp đánh dấu)
singleChỉ có thể chọn một mục (sử dụng các nút chọn)
android:visible
Boolean. "đúng" nếu nhóm hiển thị.
android:enabled
Boolean. "đúng" nếu nhóm được bật.
android:menuCategory
Từ khoá. Giá trị tương ứng với các hằng số Menu CATEGORY_*. Các hằng số này sẽ xác định mức độ ưu tiên của nhóm. Giá trị hợp lệ:
Giá trịMô tả
containerĐối với các nhóm là một phần của vùng chứa.
systemĐối với các nhóm do hệ thống cung cấp.
secondaryĐối với các nhóm là tuỳ chọn phụ do người dùng cung cấp (không thường xuyên sử dụng).
alternativeĐối với các nhóm là hành động thay thế trên dữ liệu đang hiển thị.
android:orderInCategory
Số nguyên. Thứ tự mặc định của các mục trong danh mục.
ví dụ:
Tệp XML được lưu vào res/menu/example_menu.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">
    <item android:id="@+id/item1"
          android:title="@string/item1"
          android:icon="@drawable/group_item1_icon"
          app:showAsAction="ifRoom|withText"/>
    <group android:id="@+id/group">
        <item android:id="@+id/group_item1"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item1"
              android:icon="@drawable/group_item1_icon" />
        <item android:id="@+id/group_item2"
              android:onClick="onGroupItemClick"
              android:title="@string/group_item2"
              android:icon="@drawable/group_item2_icon" />
    </group>
    <item android:id="@+id/submenu"
          android:title="@string/submenu_title"
          app:showAsAction="ifRoom|withText" >
        <menu>
            <item android:id="@+id/submenu_item1"
                  android:title="@string/submenu_item1" />
        </menu>
    </item>
</menu>

Mã xử lý ứng dụng sau đây sẽ tăng cường trình đơn từ lệnh gọi lại onCreateOptionsMenu(Menu), ngoài ra còn khai báo lệnh gọi lại khi nhấp vào hai trong số các mục:

Kotlin

override fun onCreateOptionsMenu(menu: Menu): Boolean {
    menuInflater.inflate(R.menu.example_menu, menu)
    return true
}

fun onGroupItemClick(item: MenuItem) {
    // One of the group items (using the onClick attribute) was clicked
    // The item parameter passed here indicates which item it is
    // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
}

Java

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

public void onGroupItemClick(MenuItem item) {
    // One of the group items (using the onClick attribute) was clicked
    // The item parameter passed here indicates which item it is
    // All other menu item clicks are handled by <code><a href="/reference/android/app/Activity.html#onOptionsItemSelected(android.view.MenuItem)">onOptionsItemSelected()</a></code>
}