版权声明:本文为HaiyuKing原创文章,转载请注明出处!

前言

整理项目中经常用到的分享对话框的实现。

这里只是一个分享对话框,不涉及分享功能的实现。

效果图

代码分析

ShareDialog.java:分享对话框,继承DialogFragment【按常理来讲,应该继承BottomSheetDialog,但是考虑到可能需要请求接口获取分享缩略图,所以继承DialogFragment】

使用步骤

一、项目组织结构图

注意事项:

1、  导入类文件后需要change包名以及重新import R文件路径

2、  Values目录下的文件(strings.xml、dimens.xml、colors.xml等),如果项目中存在,则复制里面的内容,不要整个覆盖

二、导入步骤

1、将ShareDialog.java文件复制到项目中

  1. package com.why.project.sharedialogdemo.dialog;
  2.  
  3. import android.content.Context;
  4. import android.graphics.drawable.ColorDrawable;
  5. import android.os.Bundle;
  6. import android.support.v4.app.DialogFragment;
  7. import android.util.DisplayMetrics;
  8. import android.util.Log;
  9. import android.view.Gravity;
  10. import android.view.LayoutInflater;
  11. import android.view.View;
  12. import android.view.ViewGroup;
  13. import android.view.Window;
  14. import android.widget.TextView;
  15.  
  16. import com.why.project.sharedialogdemo.R;
  17.  
  18. /**
  19. * Used 分享底部对话框【按常理来讲,应该extends BottomSheetDialog】
  20. * 但是,因为这个分享对话框有可能需要请求接口,所以最终还是继承DialogFragment
  21. */
  22.  
  23. public class ShareDialog extends DialogFragment {
  24. private static final String TAG = ShareDialog.class.getSimpleName();
  25.  
  26. /**View实例*/
  27. private View myView;
  28. /**context实例*/
  29. private Context mContext;
  30. /**标记:用来代表是从哪个界面打开的这个对话框*/
  31. private String mTag;
  32.  
  33. /**QQ分享*/
  34. private TextView shareQQ;
  35. /**QQ空间分享*/
  36. private TextView shareQZone;
  37. /**微信分享*/
  38. private TextView shareWX;
  39. /**朋友圈分享*/
  40. private TextView shareWXCircle;
  41. /**新浪微博分享*/
  42. private TextView shareSina;
  43.  
  44. public static ShareDialog getInstance(Context mContext, Bundle bundle)
  45. {
  46. ShareDialog shareDialog = new ShareDialog();
  47. shareDialog.mContext = mContext;
  48.  
  49. return shareDialog;
  50. }
  51.  
  52. @Override
  53. public View onCreateView(LayoutInflater inflater, ViewGroup container,
  54. Bundle savedInstanceState) {
  55. getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));//设置背景为透明,并且没有标题
  56. getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏,否则点击正上方一定高度的范围内不会消失
  57. myView = inflater.inflate(R.layout.dialog_share, container, false);
  58. return myView;
  59. }
  60.  
  61. @Override
  62. public void onActivityCreated(Bundle savedInstanceState) {
  63. // TODO Auto-generated method stub
  64. super.onActivityCreated(savedInstanceState);
  65. //初始化控件以及设置
  66. initView();
  67. //初始化数据
  68. initDatas();
  69. //初始化事件
  70. initEvents();
  71. }
  72.  
  73. /**
  74. * 设置宽度和高度值,以及打开的动画效果
  75. */
  76. @Override
  77. public void onStart() {
  78. super.onStart();
  79. //设置对话框的宽高,必须在onStart中
  80. DisplayMetrics metrics = new DisplayMetrics();
  81. this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
  82. Window window = this.getDialog().getWindow();
  83. window.setLayout(metrics.widthPixels, this.getDialog().getWindow().getAttributes().height);
  84. window.setGravity(Gravity.BOTTOM);//设置在底部
  85. //打开的动画效果
  86. //设置dialog的 进出 动画
  87. getDialog().getWindow().setWindowAnimations(R.style.sharebottomsheetdialog_animation);
  88. }
  89.  
  90. /**实例化控件*/
  91. private void initView() {
  92. shareQQ = (TextView) myView.findViewById(R.id.share_qq);
  93. shareQZone = (TextView) myView.findViewById(R.id.share_qzone);
  94. shareWX = (TextView) myView.findViewById(R.id.share_weixin);
  95. shareWXCircle = (TextView) myView.findViewById(R.id.share_wxcircle);
  96. shareSina = (TextView) myView.findViewById(R.id.share_sina);
  97. }
  98.  
  99. /**
  100. * 初始化数据:tag标记、标题
  101. */
  102. private void initDatas() {
  103. mTag = this.getTag();
  104. Log.e(TAG, "mTag=" + mTag);
  105. }
  106.  
  107. /**
  108. * 初始化监听事件
  109. */
  110. private void initEvents() {
  111.  
  112. //QQ分享
  113. shareQQ.setOnClickListener(new View.OnClickListener() {
  114. @Override
  115. public void onClick(View v) {
  116. dismiss();
  117. if(mOnShareClickLitener != null){
  118. mOnShareClickLitener.onShareToQQ();
  119. }
  120. }
  121. });
  122.  
  123. //QQ空间分享
  124. shareQZone.setOnClickListener(new View.OnClickListener() {
  125. @Override
  126. public void onClick(View v) {
  127. dismiss();
  128. if(mOnShareClickLitener != null){
  129. mOnShareClickLitener.onShareToQZone();
  130. }
  131. }
  132. });
  133.  
  134. //微信分享
  135. shareWX.setOnClickListener(new View.OnClickListener() {
  136. @Override
  137. public void onClick(View v) {
  138. dismiss();
  139. if(mOnShareClickLitener != null){
  140. mOnShareClickLitener.onShareToWX();
  141. }
  142. }
  143. });
  144.  
  145. //朋友圈分享
  146. shareWXCircle.setOnClickListener(new View.OnClickListener() {
  147. @Override
  148. public void onClick(View v) {
  149. dismiss();
  150. if(mOnShareClickLitener != null){
  151. mOnShareClickLitener.onShareToWXCircle();
  152. }
  153. }
  154. });
  155.  
  156. //新浪微博分享
  157. shareSina.setOnClickListener(new View.OnClickListener() {
  158. @Override
  159. public void onClick(View v) {
  160. dismiss();
  161. if(mOnShareClickLitener != null){
  162. mOnShareClickLitener.onShareToSina();
  163. }
  164. }
  165. });
  166. }
  167.  
  168. /*=====================添加OnShareClickLitener回调================================*/
  169. public interface OnShareClickLitener
  170. {
  171. void onShareToQQ();
  172. void onShareToQZone();
  173. void onShareToWX();
  174. void onShareToWXCircle();
  175. void onShareToSina();
  176. }
  177.  
  178. private OnShareClickLitener mOnShareClickLitener;
  179.  
  180. public void setOnShareClickLitener(OnShareClickLitener mOnShareClickLitener)
  181. {
  182. this.mOnShareClickLitener = mOnShareClickLitener;
  183. }
  184. }

ShareDialog.java

2、将sharebottomsheetdialog_bottom_in.xml、sharebottomsheetdialog_bottom_out.xml复制到项目中

3、将图片资源复制到项目中

4、将dialog_share.xml复制到项目中

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <!-- 分享对话框布局文件 -->
  3. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  4. android:id="@+id/share_root"
  5. android:layout_width="match_parent"
  6. android:layout_height="wrap_content"
  7. android:background="#EFEFF4"
  8. >
  9.  
  10. <LinearLayout
  11. android:layout_width="match_parent"
  12. android:layout_height="wrap_content"
  13. android:layout_marginTop="15dp"
  14. android:layout_marginBottom="15dp"
  15. android:orientation="horizontal" >
  16.  
  17. <!-- QQ分享 -->
  18. <TextView
  19. android:id="@+id/share_qq"
  20. android:layout_width="0.0dp"
  21. android:layout_weight="1"
  22. android:layout_height="wrap_content"
  23. android:adjustViewBounds="true"
  24. android:drawableTop="@drawable/share_logo_qq"
  25. android:drawablePadding="5dp"
  26. android:text="@string/share_qq"
  27. android:textSize="14sp"
  28. android:gravity="center" />
  29.  
  30. <!-- QQ空间分享 -->
  31. <TextView
  32. android:id="@+id/share_qzone"
  33. android:layout_width="0.0dp"
  34. android:layout_weight="1"
  35. android:layout_height="wrap_content"
  36. android:adjustViewBounds="true"
  37. android:drawableTop="@drawable/share_logo_qq_friend"
  38. android:drawablePadding="5dp"
  39. android:text="@string/share_qzone"
  40. android:textSize="14sp"
  41. android:gravity="center" />
  42.  
  43. <!-- 微信分享 -->
  44. <TextView
  45. android:id="@+id/share_weixin"
  46. android:layout_width="0.0dp"
  47. android:layout_weight="1"
  48. android:layout_height="wrap_content"
  49. android:adjustViewBounds="true"
  50. android:drawableTop="@drawable/share_logo_weixin"
  51. android:drawablePadding="5dp"
  52. android:text="@string/share_wx"
  53. android:textSize="14sp"
  54. android:gravity="center" />
  55.  
  56. <!-- 朋友圈分享 -->
  57. <TextView
  58. android:id="@+id/share_wxcircle"
  59. android:layout_width="0.0dp"
  60. android:layout_weight="1"
  61. android:layout_height="wrap_content"
  62. android:adjustViewBounds="true"
  63. android:drawableTop="@drawable/share_logo_weixin_friend"
  64. android:drawablePadding="5dp"
  65. android:text="@string/share_wx_circle"
  66. android:textSize="14sp"
  67. android:gravity="center" />
  68.  
  69. <!-- 新浪微博分享 -->
  70. <TextView
  71. android:id="@+id/share_sina"
  72. android:layout_width="0.0dp"
  73. android:layout_weight="1"
  74. android:layout_height="wrap_content"
  75. android:adjustViewBounds="true"
  76. android:drawableTop="@drawable/share_logo_sina"
  77. android:drawablePadding="5dp"
  78. android:text="@string/share_sina"
  79. android:textSize="14sp"
  80. android:gravity="center" />
  81.  
  82. </LinearLayout>
  83. </RelativeLayout>

dialog_share.xml

5、 在strings.xml中添加以下代码

  1. <resources>
  2. <string name="app_name">ShareDialogDemo</string>
  3.  
  4. <!-- 分享对话框 -->
  5. <string name="share_qq">QQ</string>
  6. <string name="share_qzone">QQ空间</string>
  7. <string name="share_wx">微信</string>
  8. <string name="share_wx_circle">朋友圈</string>
  9. <string name="share_sina">新浪</string>
  10. </resources>

6、在styles.xml文件中添加以下代码

  1. <resources>
  2.  
  3. <!-- Base application theme. -->
  4. <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
  5. <!-- Customize your theme here. -->
  6. <item name="colorPrimary">@color/colorPrimary</item>
  7. <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
  8. <item name="colorAccent">@color/colorAccent</item>
  9. </style>
  10.  
  11. <!-- 分享对话框动画 -->
  12. <style name="sharebottomsheetdialog_animation">
  13. <item name="android:windowEnterAnimation">@anim/sharebottomsheetdialog_bottom_in</item>
  14. <item name="android:windowExitAnimation">@anim/sharebottomsheetdialog_bottom_out</item>
  15. </style>
  16.  
  17. </resources>

至此,ShareDialog就集成到项目中了。

三、使用方法

  1. package com.why.project.sharedialogdemo;
  2.  
  3. import android.content.Context;
  4. import android.os.Bundle;
  5. import android.support.v7.app.AppCompatActivity;
  6. import android.view.View;
  7. import android.widget.Toast;
  8.  
  9. import com.why.project.sharedialogdemo.dialog.ShareDialog;
  10.  
  11. public class MainActivity extends AppCompatActivity {
  12.  
  13. private Context mContext;
  14.  
  15. @Override
  16. protected void onCreate(Bundle savedInstanceState) {
  17. super.onCreate(savedInstanceState);
  18. setContentView(R.layout.activity_main);
  19.  
  20. mContext = this;
  21.  
  22. findViewById(R.id.btn_open).setOnClickListener(new View.OnClickListener() {
  23. @Override
  24. public void onClick(View view) {
  25. //显示分享底部区域
  26. Bundle bundle = new Bundle();
  27. ShareDialog shareDialog = ShareDialog.getInstance(mContext,bundle);
  28. shareDialog.setOnShareClickLitener(new ShareDialog.OnShareClickLitener() {
  29. @Override
  30. public void onShareToQQ() {
  31. openShare("QQ");
  32. }
  33. @Override
  34. public void onShareToQZone() {
  35. openShare("QZone");
  36. }
  37. @Override
  38. public void onShareToWX() {
  39. openShare("WX");
  40. }
  41. @Override
  42. public void onShareToWXCircle() {
  43. openShare("WXCircle");
  44. }
  45. @Override
  46. public void onShareToSina() {
  47. openShare("Sina");
  48. }
  49. });
  50. shareDialog.show(getSupportFragmentManager(), "Share");
  51. }
  52. });
  53. }
  54.  
  55. //在这里可以配合友盟分享,通过switch语句,根据type判断平台。执行分享代码
  56. private void openShare(String type){
  57. Toast.makeText(mContext, type, Toast.LENGTH_SHORT).show();
  58. }
  59. }

混淆配置

参考资料

暂时空缺

项目demo下载地址

https://github.com/haiyuKing/ShareDialogDemo

ShareDialogDemo【分享对话框】的更多相关文章

  1. UmengShareDemo【友盟分享SDK集成,基于V6.9.3版本】

    版权声明:本文为HaiyuKing原创文章,转载请注明出处! 前言 这里简单记录下友盟分享SDK集成的步骤. 如果想要使用自定义分享对话框实现,请参考<ShareDialogDemo[分享对话框 ...

  2. web 分享到facebook

    利用meta 使自己的页面变为一种富媒体文件,利用facebook的 open Graph 比如你的html页面想要以图片的形式被分享 <meta property="og:image ...

  3. Android 微信分享解疑

    from:http://blog.csdn.net/freesonhp/article/details/10756663 1.建立自己的应用 TestShareWX (1)应用包名是com.frees ...

  4. facebook 分享

    在 Android 平台分享 本指南详细介绍如何通过 Android 应用将内容分享到 Facebook.用户通过您的应用分享时,相关内容会在其时间线上显示,并且可能在其好友的动态消息中显示. 用户还 ...

  5. Android 中实现分享和第三方登陆---以新浪微博为例

    第三方登陆和分享功能在目前大部分APP中都有,分享功能可以将自己觉得有意义的东西分享给身边的朋友,而第三方登陆可以借助已经有巨大用户基础的平台(如QQ和新浪微博)的账号,让用户在使用自己APP的时候不 ...

  6. 自定义弹窗 VS AlertDialog分享弹窗

    一.摘要 弹窗通常用于提示用户进行某种操作,比如:点击分享按钮,弹窗分享对话框:双击返回按钮,弹窗退出对话框:下载文件,提示下载对话框等等,分享对话框/退出对话框/下载对话框,都可以直接使用Alert ...

  7. Android快速开发常用知识点系列目录

    项目构建 Android项目目录结构模板以及简单说明[简单版] Android Studio配置统一管理依赖版本号引用 Android多Module下的Application引用方式 APP开篇 An ...

  8. 手游接入Facebook的那些坑

    之前工作须要在手游中接入了facebook,并以此写了<手游接入Facebook功能>的博文.当时facebook sdk的版本号还是3.x.代码集成度比較低.集成起来也比較麻烦.文中仅仅 ...

  9. Facebook的一些基本操作(网页版)

    前期准备 1,注册一次Facebook账号,新建一个应用取到应用id 2,引进Facebook的SDK到页面中: 在js中引进以下代码,初始化 // facebook window.fbAsyncIn ...

随机推荐

  1. java中Collection容器

    1.容器(Collection)也称为集合, 在java中就是指对象的集合. 容器里存放的都只能是对象. 实际上是存放对象的指针(头部地址): 这里对于八种基本数据类型,在集合中实际存的是对应的包装类 ...

  2. 解锁 vmware esxi 6.7 并安装 mac os 10.13

    1.安装 esxi 6.7 2.下载 unlocker 2.1.1.zip 3.上传 unlocker 2.1.1.zip esxi的磁盘中 4.开启esxi的ssh登录 5.使用 ssh 登录 es ...

  3. [HNOI2015]菜肴制作 拓扑序

    逆序最大字典序拓扑序 反向建边,逆序字典序最大.. #include<cstdio> #include<cstring> #include<iostream> #i ...

  4. react-navigation android 导航标题居中

    先贴下代码供参考: 安卓默认导航的titile 是在左侧的,为了和iOS保持一致,需要添加 alignSelf:'center',这个 属性 但是会遇到title有点偏右的情况 添加headerRig ...

  5. 基于Orangpi Zero和Linux ALSA实现WIFI无线音箱(二)

    作品已经完成,先上源码: https://files.cnblogs.com/files/qzrzq1/WIFISpeaker.zip 全文包含三篇,这是第二篇,主要讲述发送端程序的原理和过程. 第一 ...

  6. SpringBoot(二)_项目属性配置

    修改端口 在main/resources/application.properties修改端口 server.port=8088 此时启动访问localhost:8088/hello 就会看到 Hel ...

  7. ReentrantLock之公平锁源码分析

    本文分析的ReentrantLock所对应的Java版本为JDK8. 在阅读本文前,读者应该知道什么是CAS.自旋. 本文大纲 1.ReentrantLock公平锁简介 2.AQS 3.lock方法 ...

  8. MIP技术进展月报第3期:MIP小姐姐听说,你想改改MIP官网?

    一. 官网文档全部开源 MIP 是一项永久的开源的项目,提供持续优化的解决方案,当然官网也不能例外.从现在开始,任何人都可以在 MIP 官网贡献文档啦! GitHub 上,我们已经上传了 <官网 ...

  9. JAVA使用POI获取Excel的列数与行数

    Apache POI 是用Java编写的免费开源的跨平台的 Java API,Apache POI提供API给Java程式对Microsoft Office格式档案读和写的功能. 下面这篇文章给大家介 ...

  10. Nginx 安装详细(一)

    1.  老规矩,来点开场白:Nginx简单介绍 Nginx是一款自由的.开源的.高性能的HTTP服务器和反向代理服务器:同时也是一个IMAP.POP3.SMTP代理服务器:Nginx可以作为一个HTT ...