2019独角兽企业重金招聘Python工程师标准>>>

最近一直在搞自定义的AlertDialog,先贴一下图。


这几种都是自定义的AlertDialog,还支持从Service弹出。好了,话不多说,看使用方法:

CustomDialogBuilder.With(this)//上下文.load(R.layout.dialog_loading)//自定义的布局文件.setDimAmount(0.5f)//设置背景透明度.setCancelable(true)//是否点击区域外隐藏.setHeigh(DensityUtil.dip2px(this,100))//设置高度.setWidth(DensityUtil.dip2px(this,100))//设置宽度.setWidth(0.5f)//设置宽度,以屏幕宽度为基准,取百分比.InitView(null)//初始化View.InitEvent(null)//初始化事件.show();//显示

是不是觉得简单好多,我们关心的只有,我们该关心的,至于其他的繁琐的东西,我们不关心好伐。

我们这里看一下是怎么写的,下面会贴出GitHub链接

CustomDialogBuilder.java

import android.app.Activity;
import android.app.Fragment;
import android.content.Context;
import android.support.annotation.LayoutRes;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AlertDialog;import com.xiaolei.easyfreamwork.R;
import com.xiaolei.easyfreamwork.application.ApplicationBreage;
import com.xiaolei.easyfreamwork.utils.Log;/**
* Created by xiaolei on 2017/10/9.
*/public class CustomDialogBuilder
{private boolean isBackNet = false;private AlertDialog.Builder builder;private Context context;private CustomDialogBuilder(Context context){this.context = context;if (Activity.class.isInstance(context)|| FragmentActivity.class.isInstance(context)){if ((Activity.class.isInstance(context) && !((Activity) context).isFinishing())|| (FragmentActivity.class.isInstance(context) && !((FragmentActivity) context).isFinishing())){builder = new AlertDialog.Builder(context);} else{Log.e("LOG", "不是activity,或者activity已关闭");}} else{builder = new AlertDialog.Builder(ApplicationBreage.getInstance().getContext(),R.style.Base_Theme_AppCompat_Light_Dialog);isBackNet = true;}}public static CustomDialogBuilder With(Activity activity){return new CustomDialogBuilder(activity);}public static CustomDialogBuilder With(FragmentActivity activity){return new CustomDialogBuilder(activity);}public static CustomDialogBuilder With(Fragment fragment){return new CustomDialogBuilder(fragment.getActivity());}public static CustomDialogBuilder With(android.support.v4.app.Fragment fragment){return new CustomDialogBuilder(fragment.getActivity());}public static CustomDialogBuilder With(Context context){return new CustomDialogBuilder(context);}/*** 加载布局文件** @param layout*/public DialogInitConfig load(@LayoutRes int layout){return new DialogInitConfig(layout,builder,isBackNet,context);}public Context getContext(){return context;}
}

DialogInitConfig.java

import android.content.Context;
import android.graphics.Color;
import android.graphics.drawable.ColorDrawable;
import android.support.annotation.FloatRange;
import android.support.annotation.LayoutRes;
import android.support.v7.app.AlertDialog;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;/*** * Created by xiaolei on 2017/10/9.*/public class DialogInitConfig
{private DialogInitCallBack initCallBack;private DialogEventCallBack eventCallBack;private int width = -1, heigh = -1;private float dimAmount = 0f;@LayoutResprivate int layout = -1;private AlertDialog.Builder builder;private boolean isBackNet = false;private boolean cancelable = true;private Context context;public DialogInitConfig(@LayoutRes int layout, AlertDialog.Builder builder, boolean isBackNet, Context context){this.layout = layout;this.builder = builder;this.isBackNet = isBackNet;this.context = context;}/*** 获取上下文* @return*/public Context getContext(){return context;}/*** 初始化UI* @param callBack* @return*/public DialogInitConfig InitView(DialogInitCallBack callBack){initCallBack = callBack;return this;}/*** 初始化事件* @param callBack* @return*/public DialogInitConfig InitEvent(DialogEventCallBack callBack){eventCallBack = callBack;return this;}/*** 设置宽度,绝对的值* @param width* @return*/public DialogInitConfig setWidth(int width){this.width = width;return this;}/*** 设置宽度,屏幕的百分比的* @param widthPercent* @return*/public DialogInitConfig setWidth(@FloatRange(from = 0.0,to = 1.0) double widthPercent){WindowManager wm = (WindowManager) getContext().getSystemService(Context.WINDOW_SERVICE);this.width = (int) (wm.getDefaultDisplay().getWidth() * widthPercent);return this;}/*** 设置高度* @param heigh* @return*/public DialogInitConfig setHeigh(int heigh){this.heigh = heigh;return this;}/*** 设置背景透明度* @param dimAmount* @return*/public DialogInitConfig setDimAmount(@FloatRange(from = 0.0,to = 1.0) float dimAmount){this.dimAmount = dimAmount;return this;}/*** 设置是否可以点击侧边取消* @param cancelable* @return*/public DialogInitConfig setCancelable(boolean cancelable){this.cancelable = cancelable;return this;}/*** 显示出来* @return  返回一个dialog,方便dismiss*/public AlertDialog show(){if (builder == null){return null;}builder.setTitle("");builder.setMessage("");builder.setCancelable(cancelable);AlertDialog alertDialog = builder.create();if (alertDialog == null){return null;}Window window = alertDialog.getWindow();if (window != null){WindowManager.LayoutParams params = window.getAttributes();// 去除四角黑色背景  window.setBackgroundDrawable(new ColorDrawable(Color.TRANSPARENT));if (isBackNet){window.setType(WindowManager.LayoutParams.TYPE_TOAST);}window.setAttributes(params);}alertDialog.show();try{View view = View.inflate(alertDialog.getContext(), layout, null);alertDialog.setContentView(view);if (initCallBack != null){initCallBack.onInit(alertDialog, view);}if (eventCallBack != null){eventCallBack.initEvent(alertDialog, view);}window = alertDialog.getWindow();if (window != null){WindowManager.LayoutParams params = window.getAttributes();window.setGravity(Gravity.CENTER);DisplayMetrics dm = new DisplayMetrics();window.getWindowManager().getDefaultDisplay().getMetrics(dm);if (width != -1){params.width = width;}if (heigh != -1){params.height = heigh;}// 设置周围的暗色系数  params.dimAmount = dimAmount;window.setAttributes(params);}} catch (Exception e){e.printStackTrace();}return alertDialog;}public interface DialogInitCallBack{public void onInit(AlertDialog alertDialog, View view);}public interface DialogEventCallBack{public void initEvent(AlertDialog alertDialog, View view);}
}

好吧其实我也知道你们根本不会看这些代码的,我就是要贴出来。

这里贴GitHub链接 :https://github.com/xiaolei123/EasyFreamTest


The End

转载于:https://my.oschina.net/xiaolei123/blog/1548009

使用这个,自定义AlertDialog在你手里都不是问题相关推荐

  1. Android自定义AlertDialog的控件获取操作

    Android自定义AlertDialog的控件获取操作 在自定义的AlertDialog布局虽然可以显示,但是试过很多方法都不能获得其中的控件进行操作,找了很多方法最后这种方法可以. dialog的 ...

  2. 创建自定义AlertDialog

    没什么特别的地方,只是自定义弹出一个简单的对话框. 效果图: 首先定义一个布局文件 custom_dialog.xml: <?xml version="1.0" encodi ...

  3. 自定义AlertDialog控件的使用(AndroidStudio)

    自定义AlertDialog控件的使用(AndroidStudio) AlertDialog 第一种:可随意自定义控件 第一步:自定义弹出的页面 ,新建一个XML页面 如下图  不需要Activity ...

  4. android activity传值到dialog,android 自定义AlertDialog 与Activity相互传递数据

    **主要实现功能:** 1.从Activity的TextView中获取字符串设置到AlertDialog的TextView和EditText中 2.将AlertDialog的EditText中的值设置 ...

  5. Android 自定义AlertDialog类

    还是先从最简单的开始吧,然后一步一步的扩展. 为了保证软件上所谓的低耦合度和可重用性,这里不得不需要单独建立一个类CustomerDialog,然后继承AlertDialog public class ...

  6. Android微信小尾巴,微信骚操作,微信聊天小尾巴这样自定义设置,安卓苹果都支持...

    原标题:微信骚操作,微信聊天小尾巴这样自定义设置,安卓苹果都支持 前段时间,在大家"拍一拍"玩得不亦乐乎的时候,有小伙伴问我微信聊天的小尾巴怎么实现? 当时,给我发来一张效果图,当 ...

  7. 自定义AlertDialog.Builder对话框

    在工作中,原生态的AlertDialog已经远远不能满足我们工作的需求,这时候,就需要使用自定义的AlertDialog.Builder: 在自定义之前,我们先了解下, **原生态的AlertDial ...

  8. 外贸三个月不出单就没工资,手里都是长线客户,是离职还是熬

    公司规定的三个月不出单就没有工资了,建议滚蛋. 上半年还好,我几乎隔一个月出一个一万多美金的单.但从 7 月份开始到现在就没出单,老板已经给财务下通知了,严格遵守发工资的规定. 也就是说我这个月开始已 ...

  9. Android之自定义AlertDialog无法监听控件

    参考:http://www.cnblogs.com/511mr/archive/2011/10/21/2220253.html 要做一个自定义的弹出框,以前都是用一个Activity来实现,总觉得不是 ...

最新文章

  1. 关于虚拟空间与物理空间思想的解析
  2. 院士领衔,大咖云集!航天智慧物流单项赛决赛倒计时2天!
  3. error: jump to label ‘XXXX’ [-fpermissive]
  4. Apache NIO 框架 Mina 使用中出现 too many open files 有关...
  5. HDU 1059 Dividing 多重背包
  6. SpringBoot实战(十四):Spring Boot Admin 集成安全模块
  7. 从git仓库获取源码_微软开源Scalar,提升操作巨型Git仓库的速度
  8. 10种软件滤波方法的示例程序
  9. SREng 使用指南(五)扩展的解说
  10. 计算器计算反三角函数或三角函数的时候结果不对
  11. python输出图形效果的代码_python打印图形大全(详解)
  12. 线代复习小结 矩阵等价、相似、合同的区别以及向量组等价 2019/09/13
  13. php图片上传存储源码,可实现预览
  14. QQ邮箱设置企业邮箱别名邮箱
  15. 买台式计算机看属性,买电脑配置怎么看好坏,怎么看电脑配置好坏-
  16. 单片机定时器和计数器的实验C语言,(单片机原理与应用)定时器/计数器设计实验...
  17. DELPHI的BPL使用
  18. 是什么使Slider Revolution成为最好的WordPress Slider插件?
  19. 海词alpha版本上线,邀请测试。
  20. 邮件代收代发软件操作说明

热门文章

  1. Ubuntu安装报错E: Could not get lock /var/lib/dpkg/lock-frontend
  2. 虚拟机安装VMware ESXi 6.7安装过程介绍
  3. phpredis 报错 “Function Redis::setTimeout() is deprecated” 解决方法
  4. Linux系统中提示/usr/bin/ld: cannot find -lxxx错误的通用解决方法
  5. TortoiseGit拉取或推送,输入账号密码后提示 HTTP Basic: Access denied fatal: Authentication failed 解决方案
  6. 什么是JavaScript垃圾回收?
  7. Angular:带* ngClass的条件类
  8. Scala 2.8馆藏图书馆是“历史上最长的遗书”吗? [关闭]
  9. axure html尺寸,Axure 原型 | 教你使用自适应视图构建界面
  10. 圆弧构型机器人轮直径校准