AndroidX 程式庫的 Toolbar
可讓使用者以不同的方式與應用程式互動。「新增及處理動作」會說明如何定義動作 (可以是按鈕或選單項目)。本文說明如何新增兩種多功能元件:
- 動作檢視畫面是指在應用程式列中提供豐富功能的動作。舉例來說,使用搜尋動作檢視畫面,使用者不必變更活動或片段,就能在應用程式列中輸入搜尋文字。
- 「動作供應程式」是具有專屬自訂版面配置的動作。該動作最初會顯示為按鈕或選單項目,當使用者輕觸該動作時,動作供應器就會以您定義的方式控制動作的行為。舉例來說,動作供應程式可能會透過顯示選單來回應輕觸操作。
AndroidX 提供數種特殊動作檢視畫面和動作提供者小工具。舉例來說,SearchView
小工具會實作輸入搜尋查詢的動作檢視畫面。ShareActionProvider
小工具會實作動作供應程式,與其他應用程式共用資訊。您也可以定義自己的動作檢視畫面和動作供應程式。
新增動作檢視畫面
如要新增動作檢視畫面,請在工具列的選單資源中建立 <item>
元素,詳情請參閱「新增及處理動作」。將下列其中一個屬性新增至 <item>
元素:
actionViewClass
:實作該動作的小工具類別actionLayout
:描述動作元件的版面配置資源
將 showAsAction
屬性設為 "ifRoom|collapseActionView"
或 "never|collapseActionView"
。collapseActionView
旗標會指示如何在使用者未與應用程式互動時顯示小工具。如果小工具位於應用程式列,應用程式會將小工具顯示為圖示。如果小工具位於溢位選單中,應用程式會以選單項目的形式顯示小工具。當使用者與動作檢視畫面互動時,系統會展開選單來填滿應用程式列。
例如,以下程式碼會在應用程式列中加入 SearchView
小工具:
<item android:id="@+id/action_search" android:title="@string/action_search" android:icon="@drawable/ic_search" app:showAsAction="ifRoom|collapseActionView" app:actionViewClass="androidx.appcompat.widget.SearchView" />
如果使用者沒有與小工具互動,應用程式會將小工具顯示為 android:icon
指定的圖示。如果應用程式列沒有空間,應用程式會將動作新增至溢位選單。
當使用者輕觸圖示或選單項目時,小工具會展開來填滿工具列,方便使用者與其互動。
如要設定動作,請在活動的 onCreateOptionsMenu()
回呼中進行。您可以呼叫 getActionView()
方法,取得動作檢視畫面的物件參照。例如,以下程式碼會取得上一個程式碼範例中定義的 SearchView
小工具的物件參照:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.main_activity_actions, menu) val searchItem = menu?.findItem(R.id.action_search) val searchView = searchItem?.actionView as SearchView // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu) }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.main_activity_actions, menu); MenuItem searchItem = menu.findItem(R.id.action_search); SearchView searchView = (SearchView) searchItem.getActionView(); // Configure the search info and add any event listeners. return super.onCreateOptionsMenu(menu); }
對動作檢視畫面展開情形做出回應
如果動作的 <item>
元素有 collapseActionView
旗標,則應用程式會在使用者與動作檢視畫面互動之前,將動作檢視畫面顯示為圖示。當使用者輕觸圖示時,onOptionsItemSelected()
的內建處理常式會展開動作檢視畫面。如果活動子類別覆寫 onOptionsItemSelected()
方法,覆寫方法必須呼叫 super.onOptionsItemSelected()
,讓父類別可展開動作檢視畫面。
如果您想在展開或收合操作時執行操作,可以定義實作 MenuItem.OnActionExpandListener
的類別,並將該類別的成員傳遞至 setOnActionExpandListener()
。舉例來說,您可能會想根據動作檢視畫面已展開或收合來更新活動。下列程式碼片段說明如何定義並傳遞事件監聽器:
Kotlin
override fun onCreateOptionsMenu(menu: Menu?): Boolean { menuInflater.inflate(R.menu.options, menu) // Define the listener. val expandListener = object : MenuItem.OnActionExpandListener { override fun onMenuItemActionCollapse(item: MenuItem): Boolean { // Do something when the action item collapses. return true // Return true to collapse the action view. } override fun onMenuItemActionExpand(item: MenuItem): Boolean { // Do something when it expands. return true // Return true to expand the action view. } } // Get the MenuItem for the action item. val actionMenuItem = menu?.findItem(R.id.myActionItem) // Assign the listener to that action item. actionMenuItem?.setOnActionExpandListener(expandListener) // For anything else you have to do when creating the options menu, // do the following: return true }
Java
@Override public boolean onCreateOptionsMenu(Menu menu) { getMenuInflater().inflate(R.menu.options, menu); // Define the listener. OnActionExpandListener expandListener = new OnActionExpandListener() { @Override public boolean onMenuItemActionCollapse(MenuItem item) { // Do something when the action item collapses. return true; // Return true to collapse action view. } @Override public boolean onMenuItemActionExpand(MenuItem item) { // Do something when it expands. return true; // Return true to expand the action view. } }; // Get the MenuItem for the action item. MenuItem actionMenuItem = menu.findItem(R.id.myActionItem); // Assign the listener to that action item. MenuItemCompat.setOnActionExpandListener(actionMenuItem, expandListener); // For anything else you have to do when creating the options menu, // do the following: return true; }
新增動作供應程式
如要宣告動作供應器,請按照「新增及處理動作」一文所述,在工具列的選單資源中建立 <item>
元素。新增 actionProviderClass
屬性,並設為動作提供者類別的完整類別名稱。
舉例來說,以下程式碼會宣告 ShareActionProvider
,這是 AndroidX 程式庫中定義的小工具,可讓應用程式與其他應用程式共用資料:
<item android:id="@+id/action_share" android:title="@string/share" app:showAsAction="ifRoom" app:actionProviderClass="androidx.appcompat.widget.ShareActionProvider"/>
在此情況下,您不需要為小工具宣告圖示,因為 ShareActionProvider
會提供專屬的圖形。如果您使用自訂動作,請宣告圖示。
其他資源
- 如需在頂端應用程式列中加入分享動作的範例,請參閱
ShareActionProvider
。 - 如要進一步瞭解如何建立自訂動作供應程式,請參閱
ActionProvider
。