1. 程式人生 > >Android入門筆記(七)

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 方法,從而達到更新子標題的目的。