本篇文章主要内容来自于Android医生,我翻译之后又做了些加工,英文好的朋友也可以直接去读原文。
http://developer.android.com/guide/topics/ui/actionbar.html
限于篇幅的原因,在上篇文章中我们只学习了ActionBar基础部分的知识,那么本篇文章我们将接着上一章的内容继续学习,探究一下ActionBar更加高级的知识。如果你还没有看过前面一篇文章的话,建议先去阅读<强> Android ActionBar完全解析,使用官方推荐的最佳导航栏(上)强>。
添加行动提供者
和行动的观点有点类似,行动提供者也可以将一个行动按钮替换成一个自定义的布局。但不同的是,行动提供者能够完全控制事件的所有行为,并且还可以在点击的时候显示子菜单。
为了添加一个行动提供者,我们需要在& lt; item>标签中指定一个actionViewClass属性,在里面填入行动提供者的完整类名。我们可以通过继承ActionProvider类的方式来创建一个自己的行动提供者,同时,Android也提供好了几个内置提供者的行动,比如说ShareActionProvider。
由于每个行动提供者都可以自由地控制事件响应,所以它们不需要在onOptionsItemSelected()方法中再去监听点击事件,而是应该在onPerformDefaultAction()方法中去执行相应的逻辑。
那么我们就先来看一下ShareActionProvider的简单用法吧,编辑菜单资源文件,在里面加入ShareActionProvider的声明,如下所示:
& lt;菜单xmlns: android=" http://schemas.android.com/apk/res/android " xmlns:工具=" http://schemas.android.com/tools " 工具:上下文=" com.example.actionbartest。祝辞MainActivity”; & lt;项目 android: id=癅 + id/action_share” android: actionProviderClass=" android.widget.ShareActionProvider " android: showAsAction=" ifRoom " android: title=癅string/action_share”/比; …… & lt;/menu>>之前注意,ShareActionProvider会自己处理它的显示和事件,但我们仍然要记得给它添加一个标题,以防止它会在溢出当中出现。
接着剩下的事情就是通过意图来定义出你想分享哪些东西了,我们只需要在onCreateOptionsMenu()中调用菜单项的getActionProvider()方法来得到该ShareActionProvider对象,再通过setShareIntent()方法去选择构建出什么样的一个目的就可以了。代码如下所示:
@Override 公共布尔alt=" Android ActionBar完全解析使用官方推荐的最佳导航栏(下)">细心的你一定观察到了,这个ShareActionProvider点击之后是可以展开的,有点类似于溢出的效果,这就是行动提供者的子菜单。除了使用ShareActionProvider之外,我们也可以自定义一个行动提供者,比如说如果想要建立一个拥有两项子菜单供应商的行动,就可以这样写:
公开课MyActionProvider延伸ActionProvider { 公共MyActionProvider(上下文语境){ 超级(上下文); } @Override 公众视野> & lt;菜单xmlns: android=" http://schemas.android.com/apk/res/android " xmlns:工具=" http://schemas.android.com/tools " 工具:上下文=" com.example.actionbartest。祝辞MainActivity”; & lt;项目 android: id=癅 + id/action_share” android: actionProviderClass=" com.example.actionbartest.MyActionProvider " android:图标=" @drawable/ic_launcher” android: showAsAction=" ifRoom " android: title=癅string/action_share”/比; …… & lt;/menu>>之前现在重新运行一下代码,结果如图所示:
Android ActionBar完全解析使用官方推荐的最佳导航栏(下)