转载请注明出处: 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。