Android入門筆記(七)
七、工具欄的使用
7.1 工具欄選單的建立
(1)在 res/menu 中建立資源型別為 Menu 且命名同所在佈局檔案保持一致。
(2)在 選單資原始檔中使用 xmlns 標籤定義全新的 app 名稱空間,並在 showAsAction 屬性中使用,這主要是出於相容性考慮。
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/add_article" android:icon="@drawable/ic_menu_add" android:title="@string/new_article" app:showAsAction="ifRoom|withText"/> </menu>
(3)可以使用 Android Studio 內建的 Android Asset Studio 工具來為工具欄一次性建立或定製多種不同型別大小的圖片。
(4)在 fragment 中重寫 onCreateOptionsMenu 方法,並使用 MenuInflater.Inflate 方法來將佈局檔案中定義的選單專案填充到 Menu 例項中。
@Override public void onCreateOptionsMenu(Menu menu, MenuInflater inflater) { super.onCreateOptionsMenu(menu, inflater); inflater.inflate(R.menu.fragment_article_list, menu); }
(5)在 fragment 的 onCreate 方法中呼叫 setHasOptionsMenu 來告訴 FragmentManager 當 activity 接收到作業系統的 onCreateOptionsMenu 方法的回撥請求時,應使用其管理的 fragment 來就收方法的呼叫指令。
@Override public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()){ case R.id.add_article: add(); return true; default: return super.onOptionsItemSelected(item); } }
(6)重寫 onOptionsItemSelected 方法,通過 switch( item.getItemId() ) 來判斷被點選的選單專案,並在分別使用不同的處理方法,注意該方法的返回值為 Boolean 型別,即當事件被正確分發處理時,應返回 true 否則預設呼叫超類的方法。
@Override
public void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setHasOptionsMenu(true);
}
7.2工具欄子標題的設定
(1)首先獲取當前 fragment 的託管 activity ,並將其轉換為 AppCompatActivity 型別,之後呼叫其 getSupportActionBar().setSubtitle() 方法來設定工具欄的之標題即可。
(2)可使用 MenuItem.findItem 方法來獲取工具欄的子標題,並呼叫其 setTitle 方法來對子標題進行更新。
7.3 invalidateOptionsMenu ()
此方法將使原填充的選單項無效,當用戶再次訪問選單時,再次呼叫 onCreateOptionsMenu 方法,從而達到更新子標題的目的。