(三)高级篇____5、内容分享——增加一个简单的分享功能
分任务链接地址:http://docs.eoeandroid.com/training/sharing/shareaction.html
作者:carl
完成时间:2012-8-28
在ActionBar中添加分享功能会使得应用更加高效友好。Android4.0(API等级14)引入的ActionProvider类使得分享功能变得更加的简单。一旦ActionProvider被绑定到Action Bar的一个菜单中,它就能处理那一项的显示和反应。在ShareActionProvider的实例中,只需提供分享的Intent,其他的会被ShareActionProvider自行处理。
注意:ShareActionProvider出现在API等级14或者更高版本的SDK中
更新菜单项

图像-1 Gallery应用中的ShareActionProvider
从ShareActionProvider开始。在menu resource 文件对应的<item>中定义<item> android:actionProviderClass属性。
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <item android:id="@+id/menu_item_share" android:showAsAction="ifRoom" android:title="Share" android:actionProviderClass="android.widget.ShareActionProvider" /> ... </menu>
这就将菜单项的外观和功能委托给了ShareActionProvider,但是应该告知ShareActionProvider那些是要被分享的。
设置分享Intent
为了使ShareActionProvider发挥功能,必须提供一个分享的Intent.这个Intent必须和在Sending Content to Other Apps中描述的Intent一致(使用ACTION SEND,通过EXTRA TEXT、EXTRA STREAM添加数据)。部署一个分享的Intent,首先填充菜单时,要在Activity或者Fragment中找到对应的菜单项,然后调用MenuItem.getActionProvider()获得ShareActionProvider的实例。使用setShareIntent()更新和活动项相关的分享Intent。示例如下:
private ShareActionProvider mShareActionProvider; ... @Override public boolean onCreateOptionsMenu(Menu menu) { //填充菜单 getMenuInflater().inflate(R.menu.share_menu, menu); //定位使用ShareActionProvider的菜单项 MenuItem item = menu.findItem(R.id.menu_item_share); // 获取和存储 ShareActionProvider mShareActionProvider = (ShareActionProvider) item.getActionProvider(); //返回true,显示菜单 return true; } // 更新 分享Intent private void setShareIntent(Intent shareIntent) { if (mShareActionProvider != null) { mShareActionProvider.setShareIntent(shareIntent); } }
也许只要当创建菜单是需要设置分享Intent,或者当UI发生变化时设置并更新分享Intent。比如在Gallery应用中全屏观看图片,当在图片之间点击是,分享Intent就会发生变化。
关于ShareActionProvider的进一步讨论,查看Action Bar。

浙公网安备 33010602011771号