注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好。

原文链接:http://developer.android.com/training/sharing/shareaction.html


想要在你的ActionBar中实现一个高效和用户友好的分享行为,这在Android 4.0(API Level 14)及以上中通过引入ActionProvider而变得更加简单。一个ActionProvider,一旦被添加至ActionBar中的一个项目,那么它就能处理它的外观和行为。在ShareActionProvider的例子时,你只要提供一个分享的Intent,然后剩下的事情就交给它了。

Note:

ShareActionProvider在API Level 14及更高的平台上可以使用。

图1. 在图库应用中的ShareActionProvider

一). 更新菜单声明

ShareActionProvider入手,在你的menu resource文件中,为对应的<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。当然你需要告诉它你要分享什么内容。

二). 设置分享Intent

为了让ShareActionProvider起作用,你必须提供给它一个分享的Intent。这个分享Intent应该和课程:Sending Simple Data to Other Apps(博客链接:http://www.cnblogs.com/jdneo/p/3473170.html)中所讨论的一样,设置行为为ACTION_SEND,然后通过extras(比如:EXTRA_TEXTEXTRA_STREAM等)设置额外的数据集。为了交付一个分享的Intent,首先当你在Activity或Fragment中填充你的菜单资源时,找到对应的MenuItem。然后,调用MenuItem.getActionProvider()来获得一个ShareActionProvider实例。使用setShareIntent()和该项相关联的分享的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);
}
}

在创建你的菜单阶段,你可能只需要设置你的分享Intent一次,或者你可能希望设置它之后,随着UI的改变而更新它。例如,当你在图库应用中全屏查看照片,分享Intent会随着你切换照片而改变。

可以在文档:Action Bar中,获得更多关于ShareActionProvider对象的讨论。

【Android Developers Training】 34. 添加一个简单的分享行为(Action)的更多相关文章

  1. 【Android Developers Training】 9. 覆盖于布局之上的Action Bar

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  2. Android - 分享内容 - 添加一个简单的分享操作

    在ActionBar上使用ActionProvider实现一个高效的友好的分享操作在Android 4.0(API等级14)上更容易了.一个ActionProvider,一旦附加到action bar ...

  3. 【Android Developers Training】 31. 序言:共享简单数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  4. 【Android Developers Training】 5. 序言:添加Action Bar

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  5. 【Android Developers Training】 3. 构建一个简单UI

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  6. 【Android Developers Training】 72. 缩放一个视图

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  7. 【Android Developers Training】 66. 添加动画

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  8. 【Android Developers Training】 62. 搭建一个OpenGL ES环境

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

  9. 【Android Developers Training】 32. 向其它应用发送简单数据

    注:本文翻译自Google官方的Android Developers Training文档,译者技术一般,由于喜爱安卓而产生了翻译的念头,纯属个人兴趣爱好. 原文链接:http://developer ...

随机推荐

  1. .net Ajax与后台一般处理程序(ashx) 交互

    本文主要实现无动态刷新查询后台数据功能,主要用到ajax+ashx+sqlserver进行交互. 首先需要引用Jquery: <script language="javascript& ...

  2. Eclipse常用的6个Debug技巧

    1. Ctrl+Shift+i: Person father = new Person(); father.setName("father"); System.out.printl ...

  3. 多线程编程-- part 2 线程的生命周期和优先级

    线程的创建到消亡的历程: java多线程的5种状态: (1)New(新建) new Thread(run()) 该线程还没开始运行,状态是new,在程序运行前还有一些基础工作要做 (2)runnabl ...

  4. 用2D动画做遮罩

    <!DOCTYPE html><html><head lang="en"> <meta charset="UTF-8" ...

  5. VOD, TVOD, SVOD FVOD的区别(转)

    VOD: Video On Demand 视频点播 TVOD: True Video On Demand 即点即播 按次付费点播,付费后,观众一般有48小时的时间可以观看该片,48小时后需要再次付费才 ...

  6. Cohort Analysis and LifeCycle Grids mixed segmentation with R(转)

    This is the third post about LifeCycle Grids. You can find the first post about the sense of LifeCyc ...

  7. web socket教程

    web socket是一种网络通信协议,很多网页应用中都会使用到它,比如聊天室,选票等等. 一.为什么需要WebSocket? HTTP是无连接(无连接的含义是限制每次连接只处理一个请求.服务器处理完 ...

  8. linux压缩及vi操作

    一:Linux的压缩方式 1.tar cvf 对文件进行压缩,tar cvf+压缩文件完成的命名+需要压缩的文件 2,tar -tf +命名的压缩文件:表示查看目录里面的内容 3,tar -xf 解压 ...

  9. python基础 - 01

    python 变量名 在python中的变量命名,与其他语言大体相似,变量的命名规则如下: 变量名是数字.字母.下划线的任意组合 变量名的第一个字符不能是数字 系统的关键字不能设置为变量名    Ti ...

  10. python内置的全局变量

    print(__doc__) # 文件注释print(__file__) # 当前文件的绝对路径print(__package__) # 当前文件所在的包 当前文件: None 导入其他的文件:指定文 ...