自己定义ShareSDK分享平台界面



执行效果图:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ2FvX2NodW4=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" width="400" height="700" alt="">

微信朋友圈分享成功效果图:

注:微信朋友圈分享有两种:一种是为绕过审核,即图中所显示的方式,一种为不绕过审核。两种方式在朋友圈中显示的方式不一样,且分享时弹出的界面也不一样。在shareSDK.xml中设置BypassApproval="true",即BypassApproval是绕过审核的标记,设置为true后AppId将被忽略

1.弹出分享提示九宫格类:SharePopupWindow.java

  1. package com.example.sharesdk;
  2.  
  3. import android.content.Context;
  4. import android.graphics.drawable.ColorDrawable;
  5. import android.view.LayoutInflater;
  6. import android.view.View;
  7. import android.view.View.OnClickListener;
  8. import android.view.ViewGroup.LayoutParams;
  9. import android.widget.AdapterView;
  10. import android.widget.AdapterView.OnItemClickListener;
  11. import android.widget.Button;
  12. import android.widget.GridView;
  13. import android.widget.PopupWindow;
  14. import cn.sharesdk.framework.Platform;
  15. import cn.sharesdk.framework.Platform.ShareParams;
  16. import cn.sharesdk.framework.PlatformActionListener;
  17. import cn.sharesdk.framework.ShareSDK;
  18.  
  19. /**
  20. * TODO<分享工具>
  21. * @data: 2014-7-21 下午2:45:38
  22. * @version: V1.0
  23. */
  24.  
  25. public class SharePopupWindow extends PopupWindow {
  26.  
  27. private Context context;
  28. private PlatformActionListener platformActionListener;
  29. private ShareParams shareParams;
  30.  
  31. public SharePopupWindow(Context cx) {
  32. this.context = cx;
  33. }
  34.  
  35. public PlatformActionListener getPlatformActionListener() {
  36. return platformActionListener;
  37. }
  38.  
  39. public void setPlatformActionListener(
  40. PlatformActionListener platformActionListener) {
  41. this.platformActionListener = platformActionListener;
  42. }
  43.  
  44. public void showShareWindow() {
  45. View view = LayoutInflater.from(context).inflate(R.layout.share_layout,null);
  46. GridView gridView = (GridView) view.findViewById(R.id.share_gridview);
  47. ShareAdapter adapter = new ShareAdapter(context);
  48. gridView.setAdapter(adapter);
  49.  
  50. Button btn_cancel = (Button) view.findViewById(R.id.btn_cancel);
  51. // 取消button
  52. btn_cancel.setOnClickListener(new OnClickListener() {
  53.  
  54. public void onClick(View v) {
  55. // 销毁弹出框
  56. dismiss();
  57. }
  58. });
  59.  
  60. // 设置SelectPicPopupWindow的View
  61. this.setContentView(view);
  62. // 设置SelectPicPopupWindow弹出窗口的宽
  63. this.setWidth(LayoutParams.FILL_PARENT);
  64. // 设置SelectPicPopupWindow弹出窗口的高
  65. this.setHeight(LayoutParams.WRAP_CONTENT);
  66. // 设置SelectPicPopupWindow弹出窗口可点击
  67. this.setFocusable(true);
  68. // 设置SelectPicPopupWindow弹出窗口动画效果
  69. this.setAnimationStyle(R.style.AnimBottom);
  70. // 实例化一个ColorDrawable颜色为半透明
  71. ColorDrawable dw = new ColorDrawable(0xb0000000);
  72. // 设置SelectPicPopupWindow弹出窗口的背景
  73. this.setBackgroundDrawable(dw);
  74.  
  75. gridView.setOnItemClickListener(new ShareItemClickListener(this));
  76.  
  77. }
  78.  
  79. private class ShareItemClickListener implements OnItemClickListener {
  80. private PopupWindow pop;
  81.  
  82. public ShareItemClickListener(PopupWindow pop) {
  83. this.pop = pop;
  84. }
  85.  
  86. @Override
  87. public void onItemClick(AdapterView<?> parent, View view, int position,
  88. long id) {
  89. share(position);
  90. pop.dismiss();
  91.  
  92. }
  93. }
  94.  
  95. /**
  96. * 分享
  97. *
  98. * @param position
  99. */
  100. private void share(int position) {
  101.  
  102. if (position == 1) {
  103. qq();
  104. } else if (position == 4) {
  105. qzone();
  106. } else if(position==5){
  107. shortMessage();
  108. }else{
  109. Platform plat = null;
  110. plat = ShareSDK.getPlatform(context, getPlatform(position));
  111. if (platformActionListener != null) {
  112. plat.setPlatformActionListener(platformActionListener);
  113. }
  114.  
  115. plat.share(shareParams);
  116. }
  117. }
  118.  
  119. /**
  120. * 初始化分享參数
  121. *
  122. * @param shareModel
  123. */
  124. public void initShareParams(ShareModel shareModel) {
  125. if (shareModel != null) {
  126. ShareParams sp = new ShareParams();
  127. sp.setShareType(Platform.SHARE_TEXT);
  128. sp.setShareType(Platform.SHARE_WEBPAGE);
  129.  
  130. sp.setTitle(shareModel.getText());
  131. sp.setText(shareModel.getText());
  132. sp.setUrl(shareModel.getUrl());
  133. sp.setImageUrl(shareModel.getImageUrl());
  134. shareParams = sp;
  135. }
  136. }
  137.  
  138. /**
  139. * 获取平台
  140. *
  141. * @param position
  142. * @return
  143. */
  144. private String getPlatform(int position) {
  145. String platform = "";
  146. switch (position) {
  147. case 0:
  148. platform = "Wechat";
  149. break;
  150. case 1:
  151. platform = "QQ";
  152. break;
  153. case 2:
  154. platform = "SinaWeibo";
  155. break;
  156. case 3:
  157. platform = "WechatMoments";
  158. break;
  159. case 4:
  160. platform = "QZone";
  161. break;
  162. case 5:
  163. platform = "ShortMessage";
  164. break;
  165. }
  166. return platform;
  167. }
  168.  
  169. /**
  170. * 分享到QQ空间
  171. */
  172. private void qzone() {
  173. ShareParams sp = new ShareParams();
  174. sp.setTitle(shareParams.getTitle());
  175. sp.setTitleUrl(shareParams.getUrl()); // 标题的超链接
  176. sp.setText(shareParams.getText());
  177. sp.setImageUrl(shareParams.getImageUrl());
  178. sp.setComment("我对此分享内容的评论");
  179. sp.setSite(shareParams.getTitle());
  180. sp.setSiteUrl(shareParams.getUrl());
  181.  
  182. Platform qzone = ShareSDK.getPlatform(context, "QZone");
  183.  
  184. qzone.setPlatformActionListener(platformActionListener); // 设置分享事件回调 //
  185. // 运行图文分享
  186. qzone.share(sp);
  187. }
  188.  
  189. private void qq() {
  190. ShareParams sp = new ShareParams();
  191. sp.setTitle(shareParams.getTitle());
  192. sp.setTitleUrl(shareParams.getUrl()); // 标题的超链接
  193. sp.setText(shareParams.getText());
  194. sp.setImageUrl(shareParams.getImageUrl());
  195. sp.setComment("我对此分享内容的评论");
  196. sp.setSite(shareParams.getTitle());
  197. sp.setSiteUrl(shareParams.getUrl());
  198. Platform qq = ShareSDK.getPlatform(context, "QQ");
  199. qq.setPlatformActionListener(platformActionListener);
  200. qq.share(sp);
  201. }
  202.  
  203. /**
  204. * 分享到短信
  205. */
  206. private void shortMessage() {
  207. ShareParams sp = new ShareParams();
  208. sp.setAddress("");
  209. sp.setText(shareParams.getText()+"这是网址《"+shareParams.getUrl()+"》非常给力哦!
  210.  
  211. ");
  212.  
  213. Platform circle = ShareSDK.getPlatform(context, "ShortMessage");
  214. circle.setPlatformActionListener(platformActionListener); // 设置分享事件回调
  215. // 运行图文分享
  216. circle.share(sp);
  217. }
  218.  
  219. }

2.显示九宫格的ShareAdapter .java

  1. /*
  2. * @Title: ShareAdapter.java
  3. * @Copyright: XXX Co., Ltd. Copyright YYYY-YYYY, All rights reserved
  4. * @data: 2014-7-21 下午2:30:32
  5. * @version: V1.0
  6. */
  7.  
  8. package com.example.sharesdk;
  9.  
  10. import android.content.Context;
  11. import android.view.LayoutInflater;
  12. import android.view.View;
  13. import android.view.ViewGroup;
  14. import android.widget.BaseAdapter;
  15. import android.widget.ImageView;
  16. import android.widget.TextView;
  17.  
  18. /**
  19. * TODO< 分享弹出框Adapter >
  20. * @data: 2014-7-21 下午2:30:32
  21. * @version: V1.0
  22. */
  23.  
  24. public class ShareAdapter extends BaseAdapter {
  25.  
  26. private static String[] shareNames = new String[] {"微信", "QQ", "微博","朋友圈", "QQ空间", "短信"};
  27. private int[] shareIcons = new int[] {R.drawable.sns_weixin_icon, R.drawable.sns_qqfriends_icon, R.drawable.sns_sina_icon,R.drawable.sns_weixin_timeline_icon,
  28. R.drawable.sns_qzone_icon,R.drawable.short_message_nor};
  29.  
  30. private LayoutInflater inflater;
  31.  
  32. public ShareAdapter(Context context)
  33. {
  34. inflater = LayoutInflater.from(context);
  35. }
  36.  
  37. @Override
  38. public int getCount()
  39. {
  40. return shareNames.length;
  41. }
  42.  
  43. @Override
  44. public Object getItem(int position)
  45. {
  46. return null;
  47. }
  48.  
  49. @Override
  50. public long getItemId(int position)
  51. {
  52. return 0;
  53. }
  54.  
  55. @Override
  56. public View getView(int position, View convertView, ViewGroup parent)
  57. {
  58. if (convertView == null){
  59. convertView = inflater.inflate(R.layout.share_item, null);
  60. }
  61. ImageView shareIcon = (ImageView) convertView.findViewById(R.id.share_icon);
  62. TextView shareTitle = (TextView) convertView.findViewById(R.id.share_title);
  63. shareIcon.setImageResource(shareIcons[position]);
  64. shareTitle.setText(shareNames[position]);
  65.  
  66. return convertView;
  67. }
  68. }

3.别忘记了加入微信回调

注:包名别搞错了

演示样例源代码下载链接:http://download.csdn.net/detail/gao_chun/8264873

自己定义ShareSDK分享平台界面的更多相关文章

  1. ShareSDK分享失败的原因

    关于分享估计很多都用的是ShareSDK的社会化分享,简单方便,支持的种类很多,但是一般的话都还是QQ,微信,新浪微博,腾讯微博为主. 最近需要导入一个分享的模块,失败了几次之后最终成功,分享给大家, ...

  2. 使用ShareSDK分享-图片的链接

    微信中使用ShareSDK分享,需要申请微信开放平台账号,并且以微信中的声明的应用签名打包程序. private void showShare(String url, String title, St ...

  3. android 项目学习随笔十五(ShareSDK开放平台)

    ShareSDK开放平台http://www.mob.com/#/

  4. HTML5学堂 全新的HTML5/前端技术分享平台

    HTML5学堂 全新的HTML5/前端技术分享平台 HTML5学堂是做什么的? HTML5学堂~http://www.h5course.com~由多名热爱H5的讲师们组成的一个组织.致力于构建一个前端 ...

  5. 使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台

    www.gbtags.com 使用javascript开发的视差滚动效果的云彩 阅读全文:使用javascript开发的视差滚动效果的云彩 极客标签 - 做最棒的极客知识分享平台

  6. 原创工具14Finger-全能web指纹识别与分享平台

    14Finger 功能齐全的Web指纹扫描和分享平台,基于vue3+django前后端分离的web架构,并集成了长亭出品的rad爬虫的功能,内置了一万多条互联网开源的指纹信息. Github:http ...

  7. iOS更改ShareSDK默认的分享功能界面

    ShareSDK的集成这里就不详细介绍了, 官网的都已经够详细了.. 官方的默认分享样式如下: 贴上我的源代码: // 创建分享图片 NSString *imageURLString = @" ...

  8. Android使用Mob ShareSDK 分享不同平台

    Share分享,要注意的是,如果不能调用起微信相关,看看微信开发者平台是否添加正式,微信开发者正式之后,打正式包进行分享调用 /*分享弹框*/ private void showShare2() { ...

  9. 28、shareSDK分享以及 QQ应用平台申请遇到的问题

    第一点:菜单列表没出来 未添加白名单 第二点: QQ平台申请,和安卓共用一个APP名字,出现的 问题 第三点

随机推荐

  1. [Contest Hunter#17-C] 舞动的夜晚

    [题目链接] http://contest-hunter.org:83/contest/CH%20Round%20%2317/%E8%88%9E%E5%8A%A8%E7%9A%84%E5%A4%9C% ...

  2. 267C

    二分+高斯消元 我们利用物理里的势能来表示,每个点有一个势能h,再由流量守恒可以得到deg[x]*h[x]=sigma(h[y]) 如果x,y之间有边.这个式子是由流量守恒推出的,所以当x=1或n是不 ...

  3. 最短路径问题(floyd)

    http://acm.sdut.edu.cn/sdutoj/problem.php?action=showproblem&problemid=1867 #include<stdio.h& ...

  4. Servlet初始化与异步支持

    Shared libraries(共享库) / runtimes pluggability(运行时插件能力) 1.Servlet容器启动会扫描,当前应用里面每一个jar包的 ServletContai ...

  5. A - Word

    Problem description Vasya is very upset that many people on the Net mix uppercase and lowercase lett ...

  6. # Nginx设置浏览器缓存

    配置语法 在location或if段里,来写. 格式 expires 30s; expires 30m; expires 2h; expires 30d; (注意:服务器的日期要准确,如果服务器的日期 ...

  7. 【sqli-labs】 less18 POST - Header Injection - Uagent field - Error based (基于错误的用户代理,头部POST注入)

    这次username和password都进行了输入校验 但是ip和uagent没有校验 当我们用admin admin登陆成功后,就会一条插入语句 由于程序无条件的信任了浏览器的header信息,那么 ...

  8. python自动发邮件库yagmail(转)

    一般发邮件方法 我以前在通过Python实现自动化邮件功能的时候是这样的: import smtplib from email.mime.text import MIMEText from email ...

  9. 单链表每k个节点一组进行反转(最后不足k个也反转)

    一道面试题,第一次碰到这道题的时候 要求10分钟之内手写代码实现,当时没写出来,后来花点时间把过程梳理一遍,也挺简单的....... 思路就是在原来单链表反转的基础上,加几个控制参数,记录几个关键节点 ...

  10. 肯德基收银系统java

    参考肯德基官网的信息模拟肯德基快餐店的收银系统,合理使用C++或Java或Python结合设计模式(2种以上)至少实现系统的以下功能: 1.正常餐品结算和找零. 2.基本套餐结算和找零. 3.使用优惠 ...