轉載請註明出處: 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。