添加share按钮

添加share按钮的主要步骤:

1. 在ActionBar中添加share按钮

2. 从item中获取ShareActionProvider



ShareActionProvider

mShareActionProvider=(ShareActionProvider) MenuItemCompat.getActionProvider(shareItem);



3. 向ShareActionProvider中添加itent

<menu xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:support="http://schemas.android.com/apk/res-auto"> <item
android:id="@+id/share_item"
android:title="@string/menu_share" support:actionProviderClass="android.support.v7.widget.ShareActionProvider"
support:showAsAction="always"
/>
</menu>
/MainActivity.java

@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main_menu,menu); MenuItem shareItem=menu.findItem(R.id.share_item); mShareActionProvider=(ShareActionProvider) MenuItemCompat.getActionProvider(shareItem); int currentViewPagerItem=((ViewPager)findViewById(R.id.viewPager)).getCurrentItem();
setShareItem(currentViewPagerItem);
return super.onCreateOptionsMenu(menu);
} public void setShareItem(int i){
if(mShareActionProvider!=null){
ContentItem item=mItems.get(i); Intent intent=item.getShareIntent(this); mShareActionProvider.setShareIntent(intent);
}
}
public Intent getShareIntent(Context context){
Intent intent=new Intent(Intent.ACTION_SEND); switch (contentType) {
case CONTENT_TYPE_IMAGE:
intent.setType("image/jpg");
intent.putExtra(Intent.EXTRA_STREAM, getContentUri()); break; case CONTENT_TYPE_TEXT:
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, context.getString(contentResourceId));
break;
} return intent;
}
\ContentItem
public Uri getContentUri(){
if(!TextUtils.isEmpty(contentAssetFilePath)){
return Uri.parse(ShareProvider.CONTENT_URI+contentAssetFilePath);
}else{
return null;
}
}

注意点

确保ShareActionProvider和所在的ViewPager的CurrentItem()对应

很容易被onCreateOptionsMenu()中下列代码迷惑, 以为ShareActionProvider已经和CurrentItem()对应了.

int currentViewPagerItem=((ViewPager)findViewById(R.id.viewPager)).getCurrentItem();
setShareItem(currentViewPagerItem);

事实上并没有, onCreateOptionsMenu方法只会在初始ActionBar时调用, 且也不会设置监听. 所以ShareActionProvider总是设置在了第一个item的intent中.

所以需要添加以下代码, 确保切换页面后, ShareActionProvider和item仍是正确对应的.

mViewPager.setOnPageChangeListener(new ViewPager.OnPageChangeListener() {
@Override
public void onPageScrolled(int position, float positionOffset, int positionOffsetPixels) {
}
@Override
public void onPageSelected(int position) {
setShareItem(position);
}
@Override
public void onPageScrollStateChanged(int state) {
}
});

如何获取图片uri

获取/res/drawable中图片的uri可以使用以下方法:

java

Uri imageUri = Uri.parse(ContentResolver.SCHEME_ANDROID_RESOURCE +

"://" + getResources().getResourcePackageName(R.drawable.ic_launcher)

+ '/' + getResources().getResourceTypeName(R.drawable.ic_launcher) + '/'

+ getResources().getResourceEntryName(R.drawable.ic_launcher) );

等价于



Uri uri = Uri.parse("android.resource://your.package.here/drawable/image_name");

如果不正确,可以调用第一个方法,再使用Log自行查看准确的字符串.

ActionBar ShareActionProvider的更多相关文章

  1. ActionBar官方教程(8)ShareActionProvider与自定义操作项提供器

    Adding an Action Provider Similar to an action view, an action provider replaces an action button wi ...

  2. Android中通过ActionBar为标题栏添加搜索以及分享视窗

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...

  3. ActionBar详解

    转: 一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和 ...

  4. Android中ActionBar的使用

    简介 从Android3.0开始(targetSdkVersion或者minSdkVersion为11或者更高),ActionBar被包括在了所有主题为Theme.holo(或者子类)的主题当中. 使 ...

  5. Android ActionBar

    ActionBar 在android3.0中就加入了,但是android3.0适用于平板电脑的,在手机不能使用.android 4.0之后也开始有AndroidBar.所以说要想使用androidBa ...

  6. ActionBar使用

    在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果. 一.添加A ...

  7. android中的ActionBar和ToolBar

    一.ToolBar 1.概述 Google在2015的IO大会上发布了系列的Material Design风格的控件.其中ToolBar是替代ActionBar的控件.由于ActionBar在各个安卓 ...

  8. 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解

    一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...

  9. Android ActionBar 一步一步分析 (转)

    原文摘自:http://blog.csdn.net/android2me/article/details/8874846 1.Action Bar 介绍 我们能在应用中看见的actionbar一般就是 ...

随机推荐

  1. 【转】Android 服务器之SFTP服务器上传下载功能

    原文网址:http://blog.csdn.net/tanghua0809/article/details/47056327 本文主要是讲解Android服务器之SFTP服务器的上传下载功能,也是对之 ...

  2. 嵌入式 hi3518平台检测网线是否插上

    /********************************** (C) COPYRIGHT ******************************* * File Name        ...

  3. poj 2185(二维kmp)

    题意:让你求一个最小的覆盖子矩阵. 分析:首先第一点是确定的:那就是这个子矩阵肯定位于左上角,然后按行考虑,求出每一行可能的重复子串的长度,然后取所有行都存在并且长度最短的长度最为最小子矩阵的宽, 最 ...

  4. [转载]C++异常机制的实现方式和开销分析

    原文章网址:http://baiy.cn/doc/cpp/inside_exception.htm C++异常机制的实现方式和开销分析 白杨 http://baiy.cn 在我几年前开始写<C+ ...

  5. 【转】从外行的视角尝试讲解为什么这回丰田栽了【全文完】【v1.01】

    转自:http://club.tgfcer.com/thread-6817371-1-1.html  [第一部分]背景简介 前几年闹得沸沸扬扬的丰田刹不住事件最近又有新进展.十月底俄克拉荷马的一次庭审 ...

  6. java中的Switch case语句

    java中的Switch case 语句 在Switch语句中有4个关键字:switch,case break,default. 在switch(变量),变量只能是整型或者字符型,程序先读出这个变量的 ...

  7. hadoop是什么?

    在如今这个信息高速发展的今天,hadoop也越来越火了,那么到底是什么原因让hadoop如此的火,接下来新霸哥将详细的为了介绍,并让你快速的任何hadoop是什么? hadoop思想起源:Google ...

  8. 配置spring管理的bean的作用域

    .singleton 在每一个spring Ioc容器中一个bean定义只有一个对象实例.默认情况下会在容器启动时初始化bean,但我们可以指定bean节点的lazy-init = "tru ...

  9. erlang 常用函数

    os:getpid() 获得erl.exe的进程表示符 application:start(appname,    Type), Type == permanent 表示一个应用死了,其它应用全部死掉 ...

  10. Ruiy自我识人做事领悟录ing

    是坑总需要人去踩,谁踩谁收获! 做人做事分层分次,后方能至始及终不乱; 做人做事切记诚记信,宁他人负我,我定不负他人! 做人做事做力求清心寡欲; 安静做工,沉静学道;