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

前言

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

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

效果图

代码分析

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

使用步骤

一、项目组织结构图

注意事项:

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

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

二、导入步骤

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

package com.why.project.sharedialogdemo.dialog;

import android.content.Context;
import android.graphics.drawable.ColorDrawable;
import android.os.Bundle;
import android.support.v4.app.DialogFragment;
import android.util.DisplayMetrics;
import android.util.Log;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.TextView; import com.why.project.sharedialogdemo.R; /**
* Used 分享底部对话框【按常理来讲,应该extends BottomSheetDialog】
* 但是,因为这个分享对话框有可能需要请求接口,所以最终还是继承DialogFragment
*/ public class ShareDialog extends DialogFragment {
private static final String TAG = ShareDialog.class.getSimpleName(); /**View实例*/
private View myView;
/**context实例*/
private Context mContext;
/**标记:用来代表是从哪个界面打开的这个对话框*/
private String mTag; /**QQ分享*/
private TextView shareQQ;
/**QQ空间分享*/
private TextView shareQZone;
/**微信分享*/
private TextView shareWX;
/**朋友圈分享*/
private TextView shareWXCircle;
/**新浪微博分享*/
private TextView shareSina; public static ShareDialog getInstance(Context mContext, Bundle bundle)
{
ShareDialog shareDialog = new ShareDialog();
shareDialog.mContext = mContext; return shareDialog;
} @Override
public View onCreateView(LayoutInflater inflater, ViewGroup container,
Bundle savedInstanceState) {
getDialog().getWindow().setBackgroundDrawable(new ColorDrawable(0));//设置背景为透明,并且没有标题
getDialog().requestWindowFeature(Window.FEATURE_NO_TITLE);// 去掉标题栏,否则点击正上方一定高度的范围内不会消失
myView = inflater.inflate(R.layout.dialog_share, container, false);
return myView;
} @Override
public void onActivityCreated(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onActivityCreated(savedInstanceState);
//初始化控件以及设置
initView();
//初始化数据
initDatas();
//初始化事件
initEvents();
} /**
* 设置宽度和高度值,以及打开的动画效果
*/
@Override
public void onStart() {
super.onStart();
//设置对话框的宽高,必须在onStart中
DisplayMetrics metrics = new DisplayMetrics();
this.getActivity().getWindowManager().getDefaultDisplay().getMetrics(metrics);
Window window = this.getDialog().getWindow();
window.setLayout(metrics.widthPixels, this.getDialog().getWindow().getAttributes().height);
window.setGravity(Gravity.BOTTOM);//设置在底部
//打开的动画效果
//设置dialog的 进出 动画
getDialog().getWindow().setWindowAnimations(R.style.sharebottomsheetdialog_animation);
} /**实例化控件*/
private void initView() {
shareQQ = (TextView) myView.findViewById(R.id.share_qq);
shareQZone = (TextView) myView.findViewById(R.id.share_qzone);
shareWX = (TextView) myView.findViewById(R.id.share_weixin);
shareWXCircle = (TextView) myView.findViewById(R.id.share_wxcircle);
shareSina = (TextView) myView.findViewById(R.id.share_sina);
} /**
* 初始化数据:tag标记、标题
*/
private void initDatas() {
mTag = this.getTag();
Log.e(TAG, "mTag=" + mTag);
} /**
* 初始化监听事件
*/
private void initEvents() { //QQ分享
shareQQ.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if(mOnShareClickLitener != null){
mOnShareClickLitener.onShareToQQ();
}
}
}); //QQ空间分享
shareQZone.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if(mOnShareClickLitener != null){
mOnShareClickLitener.onShareToQZone();
}
}
}); //微信分享
shareWX.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if(mOnShareClickLitener != null){
mOnShareClickLitener.onShareToWX();
}
}
}); //朋友圈分享
shareWXCircle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if(mOnShareClickLitener != null){
mOnShareClickLitener.onShareToWXCircle();
}
}
}); //新浪微博分享
shareSina.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
dismiss();
if(mOnShareClickLitener != null){
mOnShareClickLitener.onShareToSina();
}
}
});
} /*=====================添加OnShareClickLitener回调================================*/
public interface OnShareClickLitener
{
void onShareToQQ();
void onShareToQZone();
void onShareToWX();
void onShareToWXCircle();
void onShareToSina();
} private OnShareClickLitener mOnShareClickLitener; public void setOnShareClickLitener(OnShareClickLitener mOnShareClickLitener)
{
this.mOnShareClickLitener = mOnShareClickLitener;
}
}

ShareDialog.java

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

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

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

<?xml version="1.0" encoding="utf-8"?>
<!-- 分享对话框布局文件 -->
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/share_root"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#EFEFF4"
> <LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_marginTop="15dp"
android:layout_marginBottom="15dp"
android:orientation="horizontal" > <!-- QQ分享 -->
<TextView
android:id="@+id/share_qq"
android:layout_width="0.0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:drawableTop="@drawable/share_logo_qq"
android:drawablePadding="5dp"
android:text="@string/share_qq"
android:textSize="14sp"
android:gravity="center" /> <!-- QQ空间分享 -->
<TextView
android:id="@+id/share_qzone"
android:layout_width="0.0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:drawableTop="@drawable/share_logo_qq_friend"
android:drawablePadding="5dp"
android:text="@string/share_qzone"
android:textSize="14sp"
android:gravity="center" /> <!-- 微信分享 -->
<TextView
android:id="@+id/share_weixin"
android:layout_width="0.0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:drawableTop="@drawable/share_logo_weixin"
android:drawablePadding="5dp"
android:text="@string/share_wx"
android:textSize="14sp"
android:gravity="center" /> <!-- 朋友圈分享 -->
<TextView
android:id="@+id/share_wxcircle"
android:layout_width="0.0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:drawableTop="@drawable/share_logo_weixin_friend"
android:drawablePadding="5dp"
android:text="@string/share_wx_circle"
android:textSize="14sp"
android:gravity="center" /> <!-- 新浪微博分享 -->
<TextView
android:id="@+id/share_sina"
android:layout_width="0.0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:adjustViewBounds="true"
android:drawableTop="@drawable/share_logo_sina"
android:drawablePadding="5dp"
android:text="@string/share_sina"
android:textSize="14sp"
android:gravity="center" /> </LinearLayout>
</RelativeLayout>

dialog_share.xml

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

<resources>
<string name="app_name">ShareDialogDemo</string> <!-- 分享对话框 -->
<string name="share_qq">QQ</string>
<string name="share_qzone">QQ空间</string>
<string name="share_wx">微信</string>
<string name="share_wx_circle">朋友圈</string>
<string name="share_sina">新浪</string>
</resources>

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

<resources>

    <!-- Base application theme. -->
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
</style> <!-- 分享对话框动画 -->
<style name="sharebottomsheetdialog_animation">
<item name="android:windowEnterAnimation">@anim/sharebottomsheetdialog_bottom_in</item>
<item name="android:windowExitAnimation">@anim/sharebottomsheetdialog_bottom_out</item>
</style> </resources>

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

三、使用方法

package com.why.project.sharedialogdemo;

import android.content.Context;
import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Toast; import com.why.project.sharedialogdemo.dialog.ShareDialog; public class MainActivity extends AppCompatActivity { private Context mContext; @Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main); mContext = this; findViewById(R.id.btn_open).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
//显示分享底部区域
Bundle bundle = new Bundle();
ShareDialog shareDialog = ShareDialog.getInstance(mContext,bundle);
shareDialog.setOnShareClickLitener(new ShareDialog.OnShareClickLitener() {
@Override
public void onShareToQQ() {
openShare("QQ");
}
@Override
public void onShareToQZone() {
openShare("QZone");
}
@Override
public void onShareToWX() {
openShare("WX");
}
@Override
public void onShareToWXCircle() {
openShare("WXCircle");
}
@Override
public void onShareToSina() {
openShare("Sina");
}
});
shareDialog.show(getSupportFragmentManager(), "Share");
}
});
} //在这里可以配合友盟分享,通过switch语句,根据type判断平台。执行分享代码
private void openShare(String type){
Toast.makeText(mContext, type, Toast.LENGTH_SHORT).show();
}
}

混淆配置

参考资料

暂时空缺

项目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. scoring_criteria.go

    package types // 评分规则通用接口 type ScoringCriteria interface {     // 给一个文档评分,文档排序时先用第一个分值比较,如果     // 分 ...

  2. 关于extern的用法

    extern表示该变量或者函数时在另一个地方定义了. 在C++编程中,如果将程序分为多个文件,则需要有在文件间共享代码的方法,这时如果一个变量或者函数需要在多个文件中使用,则可以使用extern来声明 ...

  3. centos7系统服务管理

    systemd是RH7系列操作系统开始启用新的系统和服务管理器.它被设计为与sysv init脚本向后兼容,并提供了一些功能,例如在引导时并行启动系统服务,按需激活守护程序或基于依赖关系的服务控制逻辑 ...

  4. Postman-----将 A 请求中 response Body 中的参数值传入到下一个请求 B 的 request body 中作为参数发送请求

    问题:将A接口中response body的"id"传入到B接口的request body中. 解决办法: 1.在A接口的test中设置环境变量. 代码:var data = JS ...

  5. hive新建分区表

    hive新建分区表语句如下: create table table_name (col1_name string comment '备注1', col2_name string comment '备注 ...

  6. jdk源码阅读笔记-HashSet

    通过阅读源码发现,HashSet底层的实现源码其实就是调用HashMap的方法实现的,所以如果你阅读过HashMap或对HashMap比较熟悉的话,那么阅读HashSet就很轻松,也很容易理解了.我之 ...

  7. javascript深入理解-从作用域链理解闭包

    一.概要 红宝书(P178)对于闭包的定义:闭包就是有权访问另外一个函数作用域中变量的函数. MDN,对于闭包的定义:闭包就是指能够访问自由变量的函数. 那么什么是自由变量?自由变量就是在函数中使用, ...

  8. 创建一个 Spring Boot 项目,你会几种方法?

    我最早是 2016 年底开始写 Spring Boot 相关的博客,当时使用的版本还是 1.4.x ,文章发表在 CSDN 上,阅读量最大的一篇有 42W+,如下图: 2017 年由于种种原因,就没有 ...

  9. Python:基于MD5的文件监听程序

    前述 写了一个基于MD5算法的文件监听程序,通过不同的文件能够生成不同的哈希函数,来实现实现判断文件夹中的文件的增加.修改.删除和过滤含有特定字符的文件名的文件. 需求说明 需要实现对一个文件夹下的文 ...

  10. 【Java】几道常见的秋招面试题

    前言 只有光头才能变强 Redis目前还在看,今天来分享一下我在秋招看过(遇到)的一些面试题(相对比较常见的) 0.final关键字 简要说一下final关键字,final可以用来修饰什么? 这题我是 ...