Android 7.0 Gallery圖庫源碼分析5 - Menu(菜單欄)顯示

轉載請註明出處: http://blog.csdn.net/lb377463323/article/details/70255599

Menu的顯示是通過Activity的onCreateOptionsMenu方法管理的,Gallery項目的Menu管理是在AbstractGalleryActivity類中,Gallery的啓動Activity是GalleryActivity,它繼承自AbstractGalleryActivity。

首先看一下AbstractGalleryActivity類中的onCreateOptionsMenu方法,它是調用StateManager()的createOptionsMenu(menu)方法

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        super.onCreateOptionsMenu(menu);
        return getStateManager().createOptionsMenu(menu);
    }

    public boolean createOptionsMenu(Menu menu) {
        if (mStack.isEmpty()) {
            return false;
        } else {
            //調用棧頂的ActivityState的onCreateActionBar方法
            return getTopState().onCreateActionBar(menu);
        }
    }

當從桌面第一次進入Gallery中,它的棧頂ActivityState是AlbumSetPage頁面,後續講解也都使用AlbumSetPage爲例,別的頁面自行查看相應的代碼。現在我們看一下AlbumSetPage頁面的onCreateActionBar方法

@Override
    protected boolean onCreateActionBar(Menu menu) {
        ......
        MenuInflater inflater = getSupportMenuInflater();

        if (mGetContent) {
            //加載menu的xml文件,所有菜單欄的顯示的條目都在這xml裏設置
            inflater.inflate(R.menu.pickup, menu);
            ......
            //設置ActionBar的名稱
            mActionBar.setTitle(GalleryUtils.getSelectionModePrompt(typeBits));
        } else  if (mGetAlbum) {
            ......
        } else {
            ......
        }
        return true;
    }

mActionBar是什麼樣的呢?它是在AlbumSetPagede onCreate()方法中初始化的。

    mActionBar = mActivity.getGalleryActionBar();

    public GalleryActionBar getGalleryActionBar() {
        if (mActionBar == null) {
            mActionBar = new GalleryActionBar(this);
        }
        return mActionBar;
    }

最終也就是使用GalleryActionBar。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章