CustomDialog——一个多功能、通用、可自定义的Dialog

 依赖

compile 'com.github.SiberiaDante:CustomDialog:v1.0.1'

 说明
[CustomDialog]
一、一个万能的通用支持多功能的Dialog,简单三步即可实现:

1.只需要传入自定义的CustomDialog布局和需要设置点击事件的控件的id即可

CustomDialog customDialog=new CustomDialog(this,
  R.layout.dialog_layout,
  new int[]{R.id.dialog_sure});

2.CustomDialog按钮的监听

customDialog.setOnDialogItemClickListener(new CustomDialog.OnCustomDialogItemClickListener() {
    @Override
    public void OnCustomDialogItemClick(CustomDialog dialog, View view) {
      switsh(view.getId()){
        case:R.id.dialog_sure:
          Toast.makeText(MainActivity.this, "确定按钮被点击了", Toast.LENGTH_LONG).show();
          break;
      }
    }
  });

3.CustomDialog显示与隐藏

customDialog.show();

customDialog.dismiss();

二、如果你想改变CustomDialog的显示位置、动画、控制按钮点击是否取消显示CustomDialog,可以使用以下构造
1.改变CustomDialog动画

/**
* @param context
* @param layoutResID 自己定义的布局
* @param listenedItems 需要设置点击事件的资源id
* @param animationResId dialog 动画,如果不使用自己的,则传0
*/
public CustomDialog(Context context, int layoutResID, int[] listenedItems, int animationResId) {
  super(context, R.style.Custom_Dialog_Style); //dialog的样式
  this.context = context;
  this.mLayoutResId = layoutResID;
  this.mListenedItems = listenedItems;
  this.mAnimationResId = animationResId;
}

2. 控制点击CustomDialog后是否自动取消显示CustomDialog

/**
* @param context
* @param layoutResID 自己定义的布局
* @param listenedItems 需要设置点击事件的资源id
* @param isDismiss 按钮点击后是否默认取消dialog {@code true}取消 {@code false} 不取消
*/
public CustomDialog(Context context, int layoutResID, int[] listenedItems, boolean isDismiss) {
  super(context, R.style.Custom_Dialog_Style); //dialog的样式
  this.context = context;
  this.mLayoutResId = layoutResID;
  this.mListenedItems = listenedItems;
  this.mIsDismiss = isDismiss;
}

3.改变CustomDialog的显示位置,同时可以控制点击CustomDialog后是否自动取消显示CustomDialog

/**
* @param context
* @param layoutResID 自己定义的布局
* @param listenedItems 需要设置点击事件的资源id
* @param isDismiss 按钮点击后是否默认取消dialog {@code true}取消 {@code false} 不取消
* @param position dialog 显示位置,默认CENTER,不设置时可以传0
*/
public CustomDialog(Context context, int layoutResID, int[] listenedItems, boolean isDismiss, int position) {
  super(context, R.style.Custom_Dialog_Style); //dialog的样式
  this.context = context;
  this.mLayoutResId = layoutResID;
  this.mListenedItems = listenedItems;
  this.mPosition = position;
}

4.可以同时改变CustomDialog动画、显示位置、按钮点击是否取消显示CustomDialog

/**
* 满足你各种需求
*
* @param context
* @param layoutResID 自己定义的布局
* @param listenedItems 需要设置点击事件的资源id
* @param animationResId dialog 动画,如果不使用自己的,则传0
* @param isDismiss 按钮点击后是否默认取消dialog {@code true}取消 {@code false} 不取消
* @param position dialog 显示位置,默认CENTER,不设置时可以传0
*/
public CustomDialog(Context context, int layoutResID, int[] listenedItems, int animationResId, boolean isDismiss, int position) {
  super(context, R.style.Custom_Dialog_Style); //dialog的样式
  this.context = context;
  this.mLayoutResId = layoutResID;
  this.mListenedItems = listenedItems;
  this.mAnimationResId = animationResId;
  this.mIsDismiss = isDismiss;
  this.mPosition = position;
}

其他几个常用Dialog,可以直接拿来用,不需要单独写布局

1.[EnsureDialog]:确认Dialog

EnsureDialog ensureDialog = new EnsureDialog(this).builder()
                    .setGravity(Gravity.CENTER)//默认居中,可以不设置
                    .setTitle("这里是一个标题", getResources().getColor(R.color.black))//可以不设置标题颜色,默认系统颜色
                    .setCancelable(false)
                    .setSubTitle("这是一个副标题")
                    .setIncon(R.mipmap.tip_icon)//不设置图标,默认没有图标
                    .setNegativeButton("取消", new View.OnClickListener() {//可以选择设置颜色和不设置颜色两个方法
                          @Override
                          public void onClick(View view) {                             }
                          })
                    .setPositiveButton("确认", getResources().getColor(R.color.red), new View.OnClickListener() {//可以选择设置颜色和不设置颜色两个方法
                          @Override
                          public void onClick(View view) {
                              ensureDialog.dismiss();                               }
                          }); ensureDialog.show();

2.[BottomPopupWindow]:仿IOS底部弹窗Dialog

new BottomPopupWindow(this).builder()
      .setTitle("选择").setCancelable(false).setCanceled(true)
      .addSheetItem("相机", BottomPopupWindow.SheetItemColor.Blue, new BottomPopupWindow.OnSheetItemClickListener() {
      @Override
      public void onClick(int which) {
        }
      })
      ...//可以addSheetItem多个item
      .addSheetItem("相册", BottomPopupWindow.SheetItemColor.Blue, new BottomPopupWindow.OnSheetItemClickListener() {
      @Override
      public void onClick(int which) {
        }
      }).show();

*[EditDialog]:带EditText确认Dialog

final EditDialog dialog = new EditDialog(this).builder();
dialog.setTitle("可编辑Dialog");
dialog.setCancelable(false);
dialog.setNegativeButton("取消", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      }
    });
dialog.setPositiveButton("确定", new View.OnClickListener() {
    @Override
    public void onClick(View view) {
      final String msg = dialog.getMsg();
      Toast.makeText(MainActivity.this, "输入内容为:" + msg, Toast.LENGTH_LONG).show();
      dialog.dismiss();
      }
    });
dialog.show();

堆码不易,star支持,万分感谢
欢迎关注:
Github 地址:https://github.com/SiberiaDante/CustomDialog
[TitleLayout——一个轻松实现标题栏的]
[Android开发必备经典收藏集(整理中)]
[Android开发常备工具整理中]

CustomDialog——一个多功能、通用、可自定义的Dialog的更多相关文章

  1. 一个漂亮而强大的自定义view

    代码地址如下:http://www.demodashi.com/demo/13502.html 简介 主要提供一个漂亮而强大的自定义SeekBar,进度变化由提示牌 (sign)展示,具有强大的属性设 ...

  2. 一个简单的通用Makefile实现

    一个简单的通用Makefile实现   Makefile是Linux下程序开发的自动化编译工具,一个好的Makefile应该准确的识别编译目标与源文件的依赖关系,并且有着高效的编译效率,即每次重新ma ...

  3. YII框架开发一个项目的通用目录结构

    YII框架开发一个项目的通用目录结构: 3 testdrive/ 4 index.php Web 应用入口脚本文件 5 assets/ 包含公开的资源文件 6 css/ 包含 CSS 文件 7 ima ...

  4. 一个方便且通用的导出数据到 Excel 的类库

    一个方便且通用的导出数据到 Excel 的类库 起源: 之前在做一个项目时,客户提出了许多的导出数据的需求: 导出用户信息 导出业务实体信息 各种查询都要能导出 导出的数据要和界面上看到的一致 可以分 ...

  5. Office365开发系列——开发一个全功能的Word Add-In

    2016年10月我参加了在北京举行的DevDays Asia 2016 - Office 365应用开发”48小时黑客马拉松“,我开发的一个Word Add-In Demo——WordTemplate ...

  6. Android自定义view(一):制作一个最最最简单的自定义view

    转载:https://blog.csdn.net/wsyizmao/article/details/78491422 浅谈安卓自定义view(一):制作一个最最最简单的自定义view 对于安卓程序员来 ...

  7. 用MVC5+EF6+WebApi 做一个小功能(三) 项目搭建

    一般一个项目开始之前都会有启动会,需求交底等等,其中会有一个环节,大讲特讲项目的意义,然后取一个高大上的项目名字,咱这是一个小功能谈不上项目,但是名字不能太小气了.好吧,就叫Trump吧.没有任何含义 ...

  8. Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能。

    作者:程序员小冰,CSDN博客:http://blog.csdn.net/qq_21376985 Android开发之清除缓存功能实现方法,可以集成在自己的app中,增加一个新功能. 下面是一个效果图 ...

  9. OpenResty 是一个全功能的 Web 应用服务器

    OpenResty (也称为 ngx_openresty)是一个全功能的 Web 应用服务器.它打包了标准的 Nginx 核心,很多的常用的第三方模块,以及它们的大多数依赖项. 通过众多进行良好设计的 ...

随机推荐

  1. PCA主成分分析

    特征降维就是降低特征矩阵维数,减少噪声和冗余,减少过度拟合. Principal factor analysis简称PCA,其思想是将n维特征映射到k维上(k<n),这k维是全新的正交特征.这k ...

  2. 如何快速禁用约束 (解决ORA-O2266问题)

    业务场景: 某天truncate大量表时遇到错误ORA-O2266:表中的唯一/主键被启用的外键引用,不想看ER图来禁用大量复杂约束,所以研发了三种套路...   一. 最偷懒套路 如果要一次性导出很 ...

  3. js 页面之间的跳转、传参以及返回上一页

    js实现html 页面之间的跳转传参以及返回上一页的相关知识点 一.页面之间的跳转传参 1.在页面之间跳转的方式有两种: window.location.href="test.html?nu ...

  4. Fatal error: Class 'LearningPHP1\mysqli' not found

    在php文件的头部使用了namespace 结果报错mysqli不在LearningPHP1中, 结论:如果定义了命名空间,在使用mysqli做连接的时候就要指明mysqli所在的命名空间. < ...

  5. servlet请求编码与响应编码问题(编码不一致可能会导致乱码)

    html中的编码 <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"&g ...

  6. jQuery绑定事物处理器

    绑定与移除1..bind() 绑定事件可以有2个或者3个参数:第一个参数为事件类型 第二个参数为处理函数 第三个为布尔类型 on()事件代替2..delegate() 事件委托,三个参数,第一个为选择 ...

  7. Spring MVC控制层传递对象后在JSP页面中的取值方法

    List<Order> orders = new ArrayList<Order>(); for (int i = 0; i < 3; i++) { Order t = ...

  8. 深度学习在 CTR 中应用

    欢迎大家前往腾讯云技术社区,获取更多腾讯海量技术实践干货哦~ 作者:高航 一. Wide&&Deep 模型 首先给出Wide && Deep [1] 网络结构: 本质上 ...

  9. 图标字体库(用CSS样式生成搜索、购物车等图标)

    参考网址:http://fontawesome.dashgame.com/ 基本图标: 您可以将Font Awesome图标使用在几乎任何地方,只需要使用CSS前缀 fa ,再加上图标名称. Font ...

  10. 关于样式选择器:hover出现忽闪现象

    有时候在做项目的时候会想给一个元素添加一个遮罩效果,然后鼠标划过去的时候,遮罩消失,一般最简单的方法就是使用样式选择器:hover,但是经历过才知道恶心,有种灯泡快要坏的感觉,闪瞎自己的眼睛,于是诞生 ...