现在的位置: 首页 > 移动开发> 正文
Android 信息共享专题之ActionBar添加分享动作
2012年01月08日 移动开发 暂无评论 ⁄ 被围观 5,422+

在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

给我留言

留言无头像?


×
腾讯微博