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()
,讓父類別展開動作檢視畫面。
如果您想要在展開或收合動作時執行操作,可以定義一個類別
implements
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
: 進一步瞭解如何建立自訂動作供應程式。