選單是多種應用程式常見的使用者介面元件。目的地:
來提供使用者熟悉且一致的體驗
將 Menu
API 套用至
會在活動中顯示使用者動作和其他選項。
本文件說明如何建立三種基本類型的選單 所有 Android 版本的動作簡報:
- 選項選單和應用程式列
- 選項選單是
活動。請在這裡放置對全球影響力
例如「搜尋」「撰寫電子郵件」和「設定」
請參閱建立選項選單 專區。
- 內容選單及關聯動作模式
- 內容選單是一種浮動式選單
這個對話方塊會在使用者輕觸畫面後顯示會保留元素這項服務
提供的操作會影響所選的內容或內容畫面。
關聯動作模式會顯示會 會影響畫面頂端列中所選的內容 使用者選取多個項目
請參閱建立內容選單 專區。
- 彈出式選單
- 彈出式選單顯示項目垂直清單,固定在
就會看到叫用選單的檢視畫面很適合提供動作溢位
或提供第二部分的選項
加上指令在彈出式選單中的動作,不會直接影響
這就是關聯動作的目的相反地
彈出式選單適合用來擴充與
您的活動。
請參閱「建立彈出式選單」一節。
以 XML 定義選單
對於所有選單類型,Android 都提供標準的 XML 格式來定義選單
項目。與其在活動程式碼中建構選單,不如定義選單和
XML 中的所有項目
選單資源。你可以
接著加載選單資源,以 Menu
形式載入該資源
物件) 檔案。
使用選單資源是很好的做法,原因如下:
- 在 XML 中可以更簡單明暸地看到選單結構。
- 可將選單內容與應用程式行為分開 再也不是件繁重乏味的工作
- 可讓你為不同平台建立替代選單設定 版本、螢幕大小和其他設定 應用程式資源 這個架構的重點在於
如要定義選單,請在專案的
res/menu/
目錄,並使用以下程式碼建構選單
元素:
<menu>
- 定義一個
Menu
,這是選單項目使用的容器。A 罩杯<menu>
元素必須是檔案的根節點, 可包含一或多個<item>
和<group>
元素。 <item>
- 建立
MenuItem
, 代表選單中的單一項目這個元素可包含巢狀結構<menu>
元素:建立子選單。 <group>
<item>
的隱藏容器 (非必要) 元素。可用來分類選單項目,使其可以共用下列屬性: 設為啟用狀態與瀏覽權限詳情請參閱 建立菜單群組專區。
以下是名為 game_menu.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="@string/new_game" app:showAsAction="ifRoom"/> <item android:id="@+id/help" android:icon="@drawable/ic_help" android:title="@string/help" /> </menu>
<item>
元素支援多種可用屬性
定義項目的外觀和行為。上一個選單中的項目
包含下列屬性:
android:id
- 項目專屬的資源 ID,可讓應用程式 識別此項目 使用者選取該專案
android:icon
- 可繪項目的參照,用來作為項目的圖示。
android:title
- 字串的參照,用來作為項目標題。
android:showAsAction
- 指定此項目顯示為操作項目的時間和方式規格 。
這些是最重要的屬性 廣告。如需所有支援屬性的詳細資訊,請參閱 選單資源 說明文件。
如果要在任一選單的項目中加入子選單,只要新增
<menu>
元素做為 <item>
的子項。
應用程式有很多功能可供整理時,最適合使用子選單
轉換為主題,例如電腦應用程式選單列中的項目,例如「檔案」
[編輯] 和 [檢視]。請參閱以下範例:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/file" android:title="@string/file" > <!-- "file" submenu --> <menu> <item android:id="@+id/create_new" android:title="@string/create_new" /> <item android:id="@+id/open" android:title="@string/open" /> </menu> </item> </menu>
如要在活動中使用選單,請「inflate」選單資源,然後進行轉換
將 XML 資源傳入可程式化的物件
MenuInflater.inflate()
。
以下各節將說明如何為每種選單類型加載選單。
建立選項選單
選項選單 (例如圖 1 所示的選項選單) 包含 與目前活動內容相關的動作和其他選項 例如「搜尋」「撰寫電子郵件」和「設定」
![這張圖片顯示 Google 試算表應用程式的應用程式列](https://developer.android.google.cn/static/images/training/appbar/appbar_sheets_2x.png?authuser=19&hl=zh-tw)
如要在選項選單中宣告項目,請前往:
Activity
子類別或
Fragment
子類別。如果您的活動和片段都宣告了
選項選單,那麼這些項目就會在 UI 中合併顯示。系統會顯示活動項目
,接著是各個片段的這些片段,按照片段的順序
都會新增到活動中。如有需要,你可以使用
每個屬性的 android:orderInCategory
屬性
您需要移動 <item>
。
若要指定活動的選項選單,請覆寫
onCreateOptionsMenu()
。
片段
onCreateOptionsMenu()
回呼。使用這個方法時,您可以加載選單資源
在 XML 中定義的,包含在Menu
回呼。例如:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.game_menu, menu) return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { MenuInflater inflater = getMenuInflater(); inflater.inflate(R.menu.game_menu, menu); return true; }
您也可以使用
add()
並擷取
findItem()
使用 MenuItem
API 修改屬性。
處理點擊事件
使用者從選項選單中選取項目 (包括操作項目)
系統會在應用程式列中呼叫活動的
onOptionsItemSelected()
方法。此方法會傳遞所選的 MenuItem
。您可以找出
呼叫
getItemId()
,
會傳回選單項目的專屬 ID,由
選單資源中的 android:id
屬性,或以整數指定
加入 add()
方法您可以將這個 ID 與已知選單進行比對
執行適當的動作。
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { // Handle item selection. return when (item.itemId) { R.id.new_game -> { newGame() true } R.id.help -> { showHelp() true } else -> super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { // Handle item selection. switch (item.getItemId()) { case R.id.new_game: newGame(); return true; case R.id.help: showHelp(); return true; default: return super.onOptionsItemSelected(item); } }
成功處理選單項目後,將 true
傳回。如果發生以下情況:
使用者不必處理選單項目,請呼叫
onOptionsItemSelected()
。預設導入方式會傳回
false。
如果活動包含片段,系統會先呼叫
用於活動的 onOptionsItemSelected()
,接著針對每個片段
依序排列,直到片段傳回 true
或
所有片段都會呼叫這個方法。
在執行階段變更選單項目
當系統呼叫 onCreateOptionsMenu()
後,它會保留
您填入且未呼叫的 Menu
例項
除非選單失效,否則再次 onCreateOptionsMenu()
。
不過,只使用 onCreateOptionsMenu()
建立初始選單
而非在活動生命週期期間進行變更
若要根據
您可以前往活動生命週期
onPrepareOptionsMenu()
方法。這個方法會傳遞目前 Menu
物件給您
,因此您可以新增、移除或停用項目等,進行修改。
片段也提供
onPrepareOptionsMenu()
回呼。
以下列方式顯示選單項目時,選項選單會一律開啟
應用程式列。當事件發生且您想更新選單時,請呼叫
invalidateOptionsMenu()
要求系統呼叫 onPrepareOptionsMenu()
。
建立內容選單
![顯示浮動內容選單的圖片](https://developer.android.google.cn/static/develop/ui/views/images/context_menu_no_icons.png?authuser=19&hl=zh-tw)
內容選單可提供會影響特定項目或情境的操作
使用者介面的影格速率您可以為任何檢視畫面提供內容選單,但大多數
通常用於
RecylerView
或
使用者可以在當中直接對各項資源執行動作的其他檢視畫面集合
項目。
提供內容關聯操作的方法有兩種:
- 在浮動內容選單中。選單 會以浮動清單的形式顯示選單項目,類似於對話方塊。 使用者進行觸控後保留可宣告結構定義支援的檢視畫面 或前往 Google 試算表選單使用者一次可以對一個項目執行內容關聯操作。
- 在關聯動作模式中。這個模式是系統
實作
ActionMode
會在網頁頂端顯示關聯動作列 (簡稱 CAB) 顯示影響所選項目的操作項目。何時處於這個模式 有效,使用者可以一次對多個項目執行一項操作 (如果您 但應用程式都支援這項功能
注意: 內容選單不支援項目捷徑和項目圖示。
建立浮動內容選單
如要提供浮動內容選單,請執行下列步驟:
- 註冊與內容選單相關聯的
View
撥號中registerForContextMenu()
然後傳送View
。如果您的活動使用
RecyclerView
,而您想為每個活動個別設定 項目來提供相同的內容選單,請為內容註冊所有項目 方法是將RecyclerView
傳遞至registerForContextMenu()
。 - 實作
onCreateContextMenu()
Activity
或Fragment
中的方法。註冊的檢視畫面收到觸控和保留事件時,系統會呼叫 您的
onCreateContextMenu()
方法。您可以在這個檔案中 加載選單資源,如下所示 範例:Kotlin
override fun onCreateContextMenu(menu: ContextMenu, v: View, menuInfo: ContextMenu.ContextMenuInfo) { super.onCreateContextMenu(menu, v, menuInfo) val inflater: MenuInflater = menuInflater inflater.inflate(R.menu.context_menu, menu) }
Java
@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); }
MenuInflater
可讓您從選單資源加載內容選單。回呼方法 參數包括使用者選取的View
和ContextMenu.ContextMenuInfo
物件,提供選取項目之額外資訊。如果 您的活動有多個檢視畫面,每個檢視畫面提供不同的內容選單 您可以利用這些參數 決定要在 加載。 導入設定
onContextItemSelected()
, 如以下範例所示當使用者選取選單項目時, 系統會呼叫這個方法,讓您可以執行適當的動作。Kotlin
override fun onContextItemSelected(item: MenuItem): Boolean { val info = item.menuInfo as AdapterView.AdapterContextMenuInfo return when (item.itemId) { R.id.edit -> { editNote(info.id) true } R.id.delete -> { deleteNote(info.id) true } else -> super.onContextItemSelected(item) } }
Java
@Override public boolean onContextItemSelected(MenuItem item) { AdapterContextMenuInfo info = (AdapterContextMenuInfo) item.getMenuInfo(); switch (item.getItemId()) { case R.id.edit: editNote(info.id); return true; case R.id.delete: deleteNote(info.id); return true; default: return super.onContextItemSelected(item); } }
getItemId()
方法會查詢所選選單項目的 ID,您指派給每個選單項目 在 XML 中透過android:id
屬性使用選單項目,如 以 XML 定義選單。成功處理選單項目後,將
true
傳回。如果 您不需要處理選單項目,請將選單項目傳遞至父類別 。如果活動含有片段,活動會收到 這個回呼。在未處理的情況下呼叫父類別 會將該事件傳遞至每個片段中相應的回呼方法, 時間,依每個片段的新增順序,直到true
或 傳回false
。Activity
和android.app.Fragment
退貨false
,因此在未處理時,一律呼叫父類別。
使用關聯動作模式
關聯動作模式是系統實作
ActionMode
:著重於使用者互動以提高成效
關聯動作當使用者選取某個項目啟用這個模式時,
關聯動作列:
可對選取的項目執行的操作。啟用這個模式後
使用者可以選取多個項目 (前提是應用程式支援這項功能),然後
項目,並繼續在活動中瀏覽。動作模式已停用
當使用者取消選取所有項目時,關聯動作列就會消失
輕觸「返回」按鈕,或輕觸畫面左側的「完成」動作
。
針對提供內容關聯操作的檢視畫面,您通常會叫用內容相關動作 動作模式。
- 使用者執行觸控與停留在檢視畫面上
- 使用者在檢視畫面中選取核取方塊或類似的 UI 元件。
應用程式如何叫用關聯動作模式及 每個動作的行為都取決於您的設計。目前有兩種設計:
- 用於個別任意檢視畫面的內容關聯操作。
- 針對項目中的一組項目,執行批次關聯操作
RecyclerView
:可讓使用者選取多個項目, 執行特定動作
以下章節介紹了各個情境所需的設定。
為個別檢視畫面啟用關聯動作模式
如果希望只在使用者選取 請執行下列步驟:
- 實作
ActionMode.Callback
介面,如 範例。在回呼方法中,您可以指定 關聯動作列、回應操作項目的點擊事件,以及 處理動作模式的其他生命週期事件。Kotlin
private val actionModeCallback = object : ActionMode.Callback { // Called when the action mode is created. startActionMode() is called. override fun onCreateActionMode(mode: ActionMode, menu: Menu): Boolean { // Inflate a menu resource providing context menu items. val inflater: MenuInflater = mode.menuInflater inflater.inflate(R.menu.context_menu, menu) return true } // Called each time the action mode is shown. Always called after // onCreateActionMode, and might be called multiple times if the mode // is invalidated. override fun onPrepareActionMode(mode: ActionMode, menu: Menu): Boolean { return false // Return false if nothing is done } // Called when the user selects a contextual menu item. override fun onActionItemClicked(mode: ActionMode, item: MenuItem): Boolean { return when (item.itemId) { R.id.menu_share -> { shareCurrentItem() mode.finish() // Action picked, so close the CAB. true } else -> false } } // Called when the user exits the action mode. override fun onDestroyActionMode(mode: ActionMode) { actionMode = null } }
Java
private ActionMode.Callback actionModeCallback = new ActionMode.Callback() { // Called when the action mode is created. startActionMode() is called. @Override public boolean onCreateActionMode(ActionMode mode, Menu menu) { // Inflate a menu resource providing context menu items. MenuInflater inflater = mode.getMenuInflater(); inflater.inflate(R.menu.context_menu, menu); return true; } // Called each time the action mode is shown. Always called after // onCreateActionMode, and might be called multiple times if the mode // is invalidated. @Override public boolean onPrepareActionMode(ActionMode mode, Menu menu) { return false; // Return false if nothing is done. } // Called when the user selects a contextual menu item. @Override public boolean onActionItemClicked(ActionMode mode, MenuItem item) { switch (item.getItemId()) { case R.id.menu_share: shareCurrentItem(); mode.finish(); // Action picked, so close the CAB. return true; default: return false; } } // Called when the user exits the action mode. @Override public void onDestroyActionMode(ActionMode mode) { actionMode = null; } };
這些事件回呼與 選項選單,除了上述任一選項之外 也會傳遞與事件相關聯的
ActionMode
物件。 您可以使用ActionMode
API 對 例如將標題和子標題setTitle()
和setSubtitle()
, 這適用於表示已選取的項目數量。上述範例會將
actionMode
變數設為 刪除動作模式時為null
。在下一個步驟中,請參閱 初始化方式,以及如何在活動或活動中儲存成員變數 片段很實用。 - 致電
startActionMode()
何時 (例如使用者輕觸, 停留在檢視畫面上Kotlin
someView.setOnLongClickListener { view -> // Called when the user performs a touch & hold on someView. when (actionMode) { null -> { // Start the CAB using the ActionMode.Callback defined earlier. actionMode = activity?.startActionMode(actionModeCallback) view.isSelected = true true } else -> false } }
Java
someView.setOnLongClickListener(new View.OnLongClickListener() { // Called when the user performs a touch & hold on someView. public boolean onLongClick(View view) { if (actionMode != null) { return false; } // Start the CAB using the ActionMode.Callback defined earlier. actionMode = getActivity().startActionMode(actionModeCallback); view.setSelected(true); return true; } });
當您呼叫
startActionMode()
時,系統會傳回 已建立「ActionMode
」。將此項目儲存至成員變數中 變更關聯動作列以回應其他事件。 在上述範例中,ActionMode
是用來確保 如果ActionMode
執行個體已存在,系統不會重新建立該執行個體 啟用,方法是先檢查成員是否為空值,再開始操作 模式。
建立彈出式選單
![這張圖片顯示 Gmail 應用程式的彈出式選單,選單固定在右上方的溢位按鈕上。](https://developer.android.google.cn/static/images/ui/popupmenu.png?authuser=19&hl=zh-tw)
PopupMenu
是固定在 View
的強制回應選單。會顯示在錨定標記下方
看看是否有空間,或位於檢視畫面上方。這項功能非常實用
包括:
- 為相關的動作提供溢位樣式選單 例如 Gmail 的電子郵件標頭等特定內容,如圖 4 所示。
- 提供指令語句的第二部分,例如標示有 新增,以產生具有不同「Add」的彈出式選單 只要設定成「自動重新啟動」 和「在主機維護期間」選項即可
- 提供與
Spinner
不會保留永久選項
如果您以 XML 定義選單,以下是顯示 彈出式選單:
- 利用其建構函式將
PopupMenu
例項化,此函式會採用 目前使用的應用程式Context
和 選單錨定位置的View
。 - 使用
MenuInflater
將選單資源加載至Menu
物件由 傳回PopupMenu.getMenu()
。 - 呼叫
PopupMenu.show()
。
例如,以下是顯示彈出式選單的按鈕:
<ImageButton android:id="@+id/dropdown_menu" android:layout_width="wrap_content" android:layout_height="wrap_content" android:contentDescription="@string/descr_overflow_button" android:src="@drawable/arrow_drop_down" />
這項活動隨即會顯示如下的彈出式選單:
Kotlin
findViewById<ImageButton>(R.id.dropdown_menu).setOnClickListener { val popup = PopupMenu(this, it) val inflater: MenuInflater = popup.menuInflater inflater.inflate(R.menu.actions, popup.menu) popup.show() }
Java
findViewById(R.id.dropdown_menu).setOnClickListener(v -> { PopupMenu popup = new PopupMenu(this, v); popup.getMenuInflater().inflate(R.menu.actions, popup.getMenu()); popup.show(); });
當使用者選取某個項目,或輕觸選單以外的位置時,選單就會關閉
您可以使用以下項目來監聽關閉事件:
PopupMenu.OnDismissListener
。
處理點擊事件
如要在使用者選取選單項目時執行動作,請實作
PopupMenu.OnMenuItemClickListener
並呼叫PopupMenu
setOnMenuItemclickListener()
。
當使用者選取某個項目時,系統會呼叫
onMenuItemClick()
回呼。
例如:
Kotlin
fun showMenu(v: View) { PopupMenu(this, v).apply { // MainActivity implements OnMenuItemClickListener. setOnMenuItemClickListener(this@MainActivity) inflate(R.menu.actions) show() } } override fun onMenuItemClick(item: MenuItem): Boolean { return when (item.itemId) { R.id.archive -> { archive(item) true } R.id.delete -> { delete(item) true } else -> false } }
Java
public void showMenu(View v) { PopupMenu popup = new PopupMenu(this, v); // This activity implements OnMenuItemClickListener. popup.setOnMenuItemClickListener(this); popup.inflate(R.menu.actions); popup.show(); } @Override public boolean onMenuItemClick(MenuItem item) { switch (item.getItemId()) { case R.id.archive: archive(item); return true; case R.id.delete: delete(item); return true; default: return false; } }
建立選單群組
選單群組是指一組共用特定特色的選單項目集合。內建 群組,可以執行下列作業:
- 使用下列工具來顯示或隱藏所有項目:
setGroupVisible()
。 - 透過以下方式啟用或停用所有項目:
setGroupEnabled()
。 - 指定是否可使用以下選項檢查所有項目:
setGroupCheckable()
。
您可以在內部建立 <item>
元素的巢狀結構,藉此建立群組
在您的選單資源中新增 <group>
元素,或指定
群組 ID
add()
方法。
以下是含有群組的選單資源範例:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_save" android:icon="@drawable/menu_save" android:title="@string/menu_save" /> <!-- menu group --> <group android:id="@+id/group_delete"> <item android:id="@+id/menu_archive" android:title="@string/menu_archive" /> <item android:id="@+id/menu_delete" android:title="@string/menu_delete" /> </group> </menu>
群組中的項目會與第一個項目顯示相同的層級
項目—選單中全部三個項目皆為同層級。不過,您可以
找出群組內兩個項目的特性,方法是參照群組 ID,並使用
上述方法。系統也不會將群組的項目分開。適用對象
舉例來說,如果您為每個值宣告 android:showAsAction="ifRoom"
兩個項目都會出現在動作列中,或同時顯示在動作列中
溢位
使用可勾選的選單項目
選單可做為開啟和關閉選項的介面, 核取方塊,或用於共同選項群組的圓形按鈕 獨家選項圖 5 顯示的子選單包含可勾選項目的項目 圓形按鈕。
您可以使用
<item>
中的 android:checkable
屬性
元素,或是以 android:checkableBehavior
定義整個群組
屬性加入 <group>
元素中。例如,
這個選單群組可透過圓形按鈕勾選:
<?xml version="1.0" encoding="utf-8"?> <menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:checkableBehavior="single"> <item android:id="@+id/red" android:title="@string/red" /> <item android:id="@+id/blue" android:title="@string/blue" /> </group> </menu>
android:checkableBehavior
屬性接受以下其中一項:
包括:
single
- 只能勾選群組中的一個項目 (產生圓形按鈕) 按鈕。
all
- 所有項目均可勾選,產生核取方塊。
none
- 沒有可勾選的項目。
您可以使用
<item>
元素中的 android:checked
屬性
然後使用
setChecked()
方法。
選取可勾選項目時,系統會呼叫相應的
所選項目的回呼方法,例如 onOptionsItemSelected()
。
請在這裡設定核取方塊狀態
按鈕不會自動變更狀態。您可以查詢目前的狀態
就像使用者選取商品之前一樣
isChecked()
然後使用 setChecked()
設定已勾選狀態顯示位置:
範例:
Kotlin
override fun onOptionsItemSelected(item: MenuItem): Boolean { return when (item.itemId) { R.id.vibrate, R.id.dont_vibrate -> { item.isChecked = !item.isChecked true } else -> super.onOptionsItemSelected(item) } }
Java
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.vibrate: case R.id.dont_vibrate: if (item.isChecked()) item.setChecked(false); else item.setChecked(true); return true; default: return super.onOptionsItemSelected(item); } }
如果您未以這種方式設定勾選狀態, 核取方塊或圓形按鈕不會因使用者選取而改變。操作時間 設定狀態時,活動會保留已勾選的項目狀態, 使用者稍後開啟選單時,您設定的已勾選狀態 顯示。
根據意圖新增選單項目
有時候,您可能想讓選單項目使用
Intent
,
做為應用程式或其他應用程式的活動當您
瞭解您要使用的意圖,並透過特定選單項目來啟動該意圖
您就能使用
startActivity()
適當的回呼方法,例如
onOptionsItemSelected()
回呼。
然而,如果您不確定使用者裝置是否含有 系統處理意圖,然後新增會叫用該意圖的選單項目,可能會導致 選單項目無法運作,因為意圖可能無法解析為活動。 為此,Android 可讓您以動態方式將選單項目加入選單 Android 會在裝置上尋找處理意圖的活動。
如要根據可接受意圖的活動新增選單項目,請 包括:
- 按照類別定義意圖
CATEGORY_ALTERNATIVE
或CATEGORY_SELECTED_ALTERNATIVE
, 或兩者,以及任何其他規定 - 致電
Menu.addIntentOptions()
。 Android 接著會搜尋任何可執行意圖的應用程式 即可將方案加入選單
如果沒有任何安裝的應用程式符合這項意圖,則不會顯示選單 已新增 個項目。
例如:
Kotlin
override fun onCreateOptionsMenu(menu: Menu): Boolean { super.onCreateOptionsMenu(menu) // Create an Intent that describes the requirements to fulfill, to be // included in the menu. The offering app must include a category value // of Intent.CATEGORY_ALTERNATIVE. val intent = Intent(null, dataUri).apply { addCategory(Intent.CATEGORY_ALTERNATIVE) } // Search and populate the menu with acceptable offering apps. menu.addIntentOptions( R.id.intent_group, // Menu group to which new items are added. 0, // Unique item ID (none). 0, // Order for the items (none). this.componentName, // The current activity name. null, // Specific items to place first (none). intent, // Intent created above that describes the requirements. 0, // Additional flags to control items (none). null) // Array of MenuItems that correlate to specific items (none). return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu){ super.onCreateOptionsMenu(menu); // Create an Intent that describes the requirements to fulfill, to be // included in the menu. The offering app must include a category value // of Intent.CATEGORY_ALTERNATIVE. Intent intent = new Intent(null, dataUri); intent.addCategory(Intent.CATEGORY_ALTERNATIVE); // Search and populate the menu with acceptable offering apps. menu.addIntentOptions( R.id.intent_group, // Menu group to which new items are added. 0, // Unique item ID (none). 0, // Order for the items (none). this.getComponentName(), // The current activity name. null, // Specific items to place first (none). intent, // Intent created above that describes the requirements. 0, // Additional flags to control items (none). null); // Array of MenuItems that correlate to specific items (none). return true; }
針對每個找到提供符合意圖的意圖篩選器的活動
系統會使用意圖篩選器的值
android:label
做為選單項目標題,並以應用程式圖示做為選單
項目圖示。addIntentOptions()
方法會傳回
已新增菜單品項。
允許將活動新增至其他選單
您可以為其他應用程式提供活動服務,讓您的應用程式 ,透過還原先前所述的角色。
照常定義意圖篩選器,並加入其他應用程式的選單中
但包含 CATEGORY_ALTERNATIVE
或
意圖的 CATEGORY_SELECTED_ALTERNATIVE
值 (或兩者皆是)
篩選類別。例如:
<intent-filter label="@string/resize_image"> ... <category android:name="android.intent.category.ALTERNATIVE" /> <category android:name="android.intent.category.SELECTED_ALTERNATIVE" /> ... </intent-filter>
如要進一步瞭解如何在 中編寫意圖篩選器,請參閱 意圖和意圖 篩選器。