官方教程:
Android studio下使用ShareSDK
Android_快速集成指南
Android ShareSDK完整的集成文档
Android 不同平台分享内容的详细说明
[开源代码] 快捷分享——不同平台分享不同内容
高级自定义功能
ShareSDK自定义界面+仿搜狐视频弹窗分享详解
1.无界面直接分享:
其实就是隐藏分享图文编辑页面,包括分享到微信好友和QQ好友;
oks.setSilent(true); 隐藏编辑页面
oks.setSilent(false); 显示编辑页面
- 1
- 2
- 3
- 1
- 2
- 3
2.有界面分享:
①调整界面图标顺序:
只需要手动更新数组的顺序即可,SortId属性控制平台图标的排列顺序,从“1”开始,越大越后面,九宫格按照左到右,上到下顺序排列.
<SinaWeibo
Id="1"
SortId="1"
AppKey="568898243"
AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
RedirectUrl="http://www.sharesdk.cn"
ShareByAppClient="true"
Enable="true" />
<TencentWeibo
Id="2"
SortId="2"
AppKey="801307650"
AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"
RedirectUri="http://"
Enable="true" />
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
②调整分享平台个数:
打开这个文件PlatformGridView
,定位到这个方法calPageSize
③调整密度分布,行列个数:
打开这个文件PlatformGridView
,定位到这个方法calPageSize
④自定义九宫格和编辑框
可以自己设计UI,不显示我们的分享菜单和编辑框
a.可以调用快捷分享代码实现
b指定单独平台的分享(无九宫格界面).
⑤自定义分享菜单项
OnekeyShare oks = new OnekeyShare();
// 参考代码配置章节,设置分享参数
// 构造一个图标
Bitmap enableLogo = BitmapFactory.decodeResource(context.getResources(), R.drawable.ssdk_oks_logo_qq);
String label = "ShareSDK";
OnClickListener listener = new OnClickListener() {
public void onClick(View v) {
}
};
oks.setCustomerLogo(enableLogo, label, listener);
oks.show(context);
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
这样的代码可以多次使用,以添加任意数量的自定义图标。快捷分享默认会将自定义图标放在九宫格的最后位置,如果您需要放在它在其他地方,可以到PlatformGridView.PlatformAdapter中修改代码,找到这行就可以了:
logos.addAll(customers);
例如修改为:
logos.addAll(0,customers);,就可以将自定义的平台加到前面去
⑥为不同平台定义差异化分享内容
快捷分享允许开发者设置了统一的分享模板以后,为不同平台设置差别化的分享内容。为了实现这个功能,需要为快捷分享提供一个ShareContentCustomizeCallback的实例,并参考下面的伪代码设置到快捷分享中:
OnekeyShare oks = new OnekeyShare();
// 参考代码配置章节,设置分享参数
//通过OneKeyShareCallback来修改不同平台分享的内容
oks.setShareContentCustomizeCallback(new ShareContentCustomizeDemo());
oks.show(context);
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
ShareContentCustomizeCallback是一个接口,使用时需要实现其onShare(Platform, ShareParams)方法。此方法被回调的时候会传递一个即将执行分享的平台实例和即将被分享的分享内容(ShareParams)。开发者可以通过修改这个ShareParams参数完成分享内容根据平台的差异化。
/**
* 快捷分享项目现在添加为不同的平台添加不同分享内容的方法。
*本类用于演示如何区别Twitter的分享内容和其他平台分享内容。
*/
public class ShareContentCustomizeDemo implements ShareContentCustomizeCallback {
public void onShare(Platform platform, ShareParams paramsToShare) {
// 改写twitter分享内容中的text字段,否则会超长,
// 因为twitter会将图片地址当作文本的一部分去计算长度
if (Twitter.NAME.equals(platform.getName())) {
String text = platform.getContext().getString(R.string.share_content_short);
paramsToShare.setText(text);
}
}
}
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
⑦自定义九宫格背景颜色和文字颜色
自定义平台头像和描述文字的设置,找到这个文件PlatformGridView
,找到设置文字颜色和大小的地方,也就值这个地方:getView
更多的一键分析那个弹出框的UI修改参考下面这个demo,比如弹出时背后Activity变半透明,文字大小颜色设置、图标的边距、间距,弹出框的位置,弹出时的动画等;
点击下载一键分享弹出框UI自定义demo(内附说明文档)
九宫格的背景颜色可以在src下cn.sharesdk.onekeyshare.theme.classic包下PlatformListPage.Java类改背景图片即可;
A.自定义图标:找到onekeyshare
这个包,找到里面的drawable文件夹,把自己的图片放进去,替换掉就可以了,图标的命名规则一般是这样的:logo_qq
等,将自己的图片改成这个名字替换进去就可以了.
B.自定义图标下方文字:
找到sharesdk
这个包,找到里面的strings
文件,找到像这样的描述:
<string name="sinaweibo">新浪微博</string>
<string name="tencentweibo">腾讯微博</string>
<string name="qzone">QQ空间</string>
- 1
- 2
- 3
- 1
- 2
- 3
将里面的文字改为自己想要的名字就可以,自己自定义的平台就更简单,直接再设置平台的时候,设置lable就可以了
C.自定义图标下方文字大小:找到这个文件PlatformGridView
,找到getView
方法,在462行左右,找到如下代码,就可以更改文字大小了.
TextView tv = new TextView(context);
tv.setTextColor(0xff888C8F);
tv.setTextSize(TypedValue.COMPLEX_UNIT_DIP, 10);
tv.setSingleLine();
tv.setIncludeFontPadding(false);
- 1
- 2
- 3
- 4
- 5
- 1
- 2
- 3
- 4
- 5
⑧复制链接怎么做?
如上图最后一个,这个是属于自定义平台的范围了,跟第一个第二个的快照功能类似.
几行代码就可以实现:
ClipboardManager cmb = (ClipboardManager) context.getSystemService(Context.CLIPBOARD_SERVICE);
cmb.setText(share.getTitleUrl());
String result = cmb.getText().toString();
if (result.equals(share.getTitleUrl())) {
Toast.makeText(context, "复制链接成功", Toast.LENGTH_SHORT).show();
}
- 1
- 2
- 3
- 4
- 5
- 6
- 1
- 2
- 3
- 4
- 5
- 6
同理,其他界面的复制链接的功能也可以这样写,比如获取一个EditText中用户输入的链接或者文字,放到粘贴板,以后可以在整个系统中使用.
⑨新浪微博报错
12-19 17:21:31.383 4239-6788/com.fenqile.licai W/System.err: java.lang.NoSuchMethodError: No virtual method show(Landroid/content/Context;Landroid/content/Intent;Z)V in class Lcn/sharesdk/sina/weibo/a; or its super classes (declaration of 'cn.sharesdk.sina.weibo.a' appears in /data/app/com.fenqile.licai-2/base.apk)
12-19 17:21:31.383 4239-6788/com.fenqile.licai W/System.err: at cn.sharesdk.sina.weibo.g.a(Unknown Source)
12-19 17:21:31.383 4239-6788/com.fenqile.licai W/System.err: at cn.sharesdk.sina.weibo.SinaWeibo.doShare(Unknown Source)
12-19 17:21:31.383 4239-6788/com.fenqile.licai W/System.err: at cn.sharesdk.framework.f.b(Unknown Source)
12-19 17:21:31.383 4239-6788/com.fenqile.licai W/System.err: at cn.sharesdk.framework.g.run(Unknown Source)
12-19 17:21:32.213 4239-4239/com.fenqile.licai I/Choreographer: Skipped 60 frames! The application may be doing too much work on its main thread.
12-19 17:21:33.853 4239-6824/com.fenqile.licai D/skia: --- SkImageDecoder::Factory returned null
12-19 17:21:33.873 4239-6831/com.fenqile.licai D/skia: --- SkImageDecoder::Factory returned null
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9