ActionBar ShareActionProvider
添加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的更多相关文章
- ActionBar官方教程(8)ShareActionProvider与自定义操作项提供器
Adding an Action Provider Similar to an action view, an action provider replaces an action button wi ...
- Android中通过ActionBar为标题栏添加搜索以及分享视窗
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果.Action ...
- ActionBar详解
转: 一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和 ...
- Android中ActionBar的使用
简介 从Android3.0开始(targetSdkVersion或者minSdkVersion为11或者更高),ActionBar被包括在了所有主题为Theme.holo(或者子类)的主题当中. 使 ...
- Android ActionBar
ActionBar 在android3.0中就加入了,但是android3.0适用于平板电脑的,在手机不能使用.android 4.0之后也开始有AndroidBar.所以说要想使用androidBa ...
- ActionBar使用
在Android3.0之后,Google对UI导航设计上进行了一系列的改革,其中有一个非常好用的新功能就是引入的ActionBar,他用于取代3.0之前的标题栏,并提供更为丰富的导航效果. 一.添加A ...
- android中的ActionBar和ToolBar
一.ToolBar 1.概述 Google在2015的IO大会上发布了系列的Material Design风格的控件.其中ToolBar是替代ActionBar的控件.由于ActionBar在各个安卓 ...
- 【Android UI设计与开发】8.顶部标题栏(一)ActionBar 奥义·详解
一.ActionBar介绍 在Android 3.0中除了我们重点讲解的Fragment外,Action Bar也是一个非常重要的交互元素,Action Bar取代了传统的tittle bar和men ...
- Android ActionBar 一步一步分析 (转)
原文摘自:http://blog.csdn.net/android2me/article/details/8874846 1.Action Bar 介绍 我们能在应用中看见的actionbar一般就是 ...
随机推荐
- final修饰符,finally,finalize区别
1.final 如果一个类被声明为final,意味着它不能再派生出新的子类,不能作为父类被继承.因此,一个类不能即被声明为abstract,又被声明为final.将变量或方法声明为final,可以保证 ...
- Python 获得命令行参数的方法
如果想对python脚本传参数,python中对应的argc, argv(c语言的命令行参数)是什么呢?需要模块:sys参数个数:len(sys.argv)脚本名: sys.argv[0]参数1 ...
- slidingMenu默认显示菜单
关键词:slidingmenu 默认 显示 打开 菜单 showMenu toggle 问题:要在Activity一打开就显示slidingmenu. 解决: 搜索“slidingmenu 默认打开” ...
- git/github初级运用自如(zz)
----//git/github环境配置 一 . github上创建立一个项目 用户登录后系统,在github首页,点击页面右下角“New Repository” 填写项目信息: project n ...
- Delphi中实现MDI子窗体(转)
Delphi中实现MDI子窗体 用MDI实现浏览子窗口,具有窗口管理功能,同屏观看多个网页的内容 ① 多文档窗体(MDI) MDI窗体是一种具有主子结构的窗体体系,微软的Word便是其中的一 ...
- hdu5248 序列变换
百度之星的题.其实最简单的方法是二分答案,我竟然没想到,直接去想O(n)的去了,最后导致滚粗... 题意就是给一个数列,要求把它处理成递增序列. 首先我想到了O(n^2)的算法,然后再优化成O(n)过 ...
- Linux基本命令(6)线上查询的命令
线上查询的命令 命令 功能 man 查询和解释一个命令的使用方法,以及这个命令的说明事项 locate 定位文件和目录 whatis 寻找某个命令的含义 6.1 man命令 man命令用来查询和解释一 ...
- JS方式调用本地的可执行文件
看到一个方法,有些用,先存下来,有用的时候再用. 前几天,在IE,FIREFOX中实现了用JS方式调用本地的可执行文件.地址:www.yihaomen.com/article/js/211.htm , ...
- JDK - Tomcat - JSP - Servlet 配置运行全攻略(转)
http://www.cnblogs.com/myqiao/archive/2005/08/29/225497.html 花了将近两个月的时间,从 JDK 开始一步一步摸索,历经千辛万苦,终于让第一个 ...
- DOM笔记(八):JavaScript执行环境和垃圾收集
一.执行环境 在有关于JavaScript对象或者this的指向问题时,脱离不了的另外一个概念就是执行环境,即上下文环境.执行环境在JavaScript是一个 很重要的概念,因为它定义了变量或函数有权 ...