在Android 4.0 (API Level 14)中引入的ActionProvider方便了在ActionBar中添加share action,一个ActionProvider一旦和ActionBar中的某个菜单项绑定起来,它就会负责该菜单项的界面绘画更新和事件处理。借助于ShareActionProvider,您只需要设置一个share intent就可以了,其余的事情都交给ShareActionProvider来处理。 注意:ShareActionProvider 要求最低 API Level 14
更新菜单声明
要想使用ShareActionProviders,您需要在菜单资源文件( menu resource)的Share菜单项<item>中声明android:actionProviderClass属性,示例如下
<menu xmlns:android="<a href="http://schemas.android.com/apk/res/android">http://schemas.android.com/apk/res/android</a>"> <item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="Share" android:actionProviderClass="android.widget.ShareActionProvider" /> ... </menu>
通过如上的定义,就把该菜单项的界面显示和消息事件处理委托给ShareActionProviders,不过具体要显示的内容还是需要您来指定。
设置 Share Intent
为了使 ShareActionProvider 可以正常工作,您还必须要设置Share Intent。这个Share Intent和第一节课《Android 信息共享专题之内容发布》中讲解的Intent一样,需要设置其Action为 ACTION_SEND,要发送的内容通过键值 EXTRA_TEXT 或者EXTRA_STREAM设置到该Intent中。具体步骤如下,您首先需要在Activity 或者 Fragment中inflating(加载)菜单资源文件,找到上文中声明的那个菜单项MenuItem(如menu_item_share),接着呼叫方法MenuItem.getActionProvider()来获得一个ShareActionProvider实例,最后调用setShareIntent()把Share Intent和该菜单项关联起来。 示例代码:
private ShareActionProvider mShareActionProvider; ... @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate menu resource file. getMenuInflater().inflate(R.menu.share_menu, menu); // Locate MenuItem with ShareActionProvider MenuItem item = menu.findItem(R.id.menu_item_share); // Fetch and store ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); // Return true to display menu return true; } // Call to update the share intent private void setShareIntent(Intent shareIntent) { if (mShareActionProvider != null) { mShareActionProvider.setShareIntent(shareIntent); } }
您可能会选择只有在第一次创建菜单的时候设置share intent一次,其余菜单界面刷新的时候都不会再改变intent的设置了,或者也会选择每次菜单刷新的时候就重新设置intent一次,随着UI界面的改变会更新不同的intent。例如,您在Gallery app中全屏幕浏览图片的时候和滚动浏览图片的时候可能会设置不同的sharing intent。 想了解更多的关于ShareActionProvider 方面的知识,请参照Action Bar指南。 参考文摘: http://developer.android.com/training/sharing/shareaction.html