在 Android 日常的开发中,Dialog 使用是比较广泛的。无论是提示一个提示语,还是确认信息,还是有一定交互的(弹出验证码,输入账号密码登录等等)对话框。

而我们去看一下原生的对话框,虽然随着 Android 版本的更新,变得比较好看了,但是,一个 App 往往都会有自己的风格,都会定义一个或几个和 App 整体风格保持一致的 Dialog,这样显得好看一点。也比较令人赏心悦目,下面就来看看怎么自定义一个 Dialog。

Android 原生的 Dailog 的创建是以建造者的模式进行的,需要什么就往上面加,这样可以很灵活的定义自己所需要的,但在这里,我们采用一个自定义的 XML 布局文件,给Dialog设置相应的 View 来起到最大程度的自定义 Dialog 。

下面就来看一下最简单的提示性Dialog怎么写吧!

就先来看看布局文件

布局文件写的比较简单,整体是一个相对布局,上面一个标题,标题右侧一个关闭的图标,然后中间是提示内容的TextView,下面是确定和取消两个按钮。

这里只是最简单的一个对话框,自己可以根据项目的需要自定义出自己想要的,这里写布局文件就好像写Activity的布局文件一样。这里我比较懒惰,整体的背景是一个圆角的 .9 的图片,还有确认和取消都是以 .9 的图片作为背景。实际项目中,有 .9 的可以使用,没有可以自己自定义一个 Drawable 也可以实现圆角,当然,自己自定义的话写的时候麻烦一点,后期想怎么改就怎么改,自由度会比 .9 会高很多很多。

布局文件看完来看看代码怎么写:

代码不多,总共不超过 100 行,也有零星的注释可看,下面就整体的解释一下代码。

首先这是一个Dialog,那么首先要继承自Dialog。

19-29行是前面 xml 布局文件上的一些控件,以及他们需要设的值,还有一个 Dialog 的确定取消的监听的回调接口,这个监听的回调接口具体可以看100-111行,里面注释也写的比较明白了。

31行和36行是构造函数。31行的构造函数没什么。直接调用super去执行父类的构造方法。36行的构造方法就完全自定义的了,里面分别接收了标题、提示内容、确定和取消按钮的字样,最后是一个确定和取消的监听的回调。

47行开始是onCreate()函数,开始是 setTheme() 设置整个 Dialog 的主题,然后是 setContentVIew() 设置其对应的 View。然后是初始化 Dialog 上的各个控件,具体看79行的这个初始化的方法,方法体里面的东西写的很简单了,不再解释。接下来是 Dialog 上几个可点击的按钮对应的点击事件。关闭按钮就直接关闭了,确定和取消就执行回调,这里需要补充的是:执行listener.onSure() 和 listener.onCancel() 的时候先要判断一下 listener 是不是空的,如果不是空才去调用它,这点在写代码的时候忘了加上去。整体就是这样,没什么了。

前面代码涉及到一个Theme,下面看一下Theme的内容:

这里可以根据自己的需要去设置不同的属性,其中标题这些是肯定不需要的了,因为我们整个都自定义,标题自然就不要了。

具体还有什么属性可以加的,自己去探索一下吧!

最后来看看怎么使用,写完了就得用,看不到效果谁知道会是怎样,对吧。

就这样用,其实第一行(已被注释掉)那种用法对应的就是第一个构造函数的用法。也可以先看看效果如何。

然后第二种用法就是对应我们的第二个构造函数的,这里有一个回调,当我们点击确定的时候弹一个toast,取消也相应的弹一个,其他没什么了。

这里为什么要采取回调的方式呢?

用回调就是为了可以高度的自定义,如果你写死在 Dialoag 类中的话,就显得单一性了,要对不同的 Dialog 做不同的操作的时候就GG了。所以,这就是为什么要采取回调的方式来做。

整个Dialog写完了,来看看效果图:

整个 Dialog 到此结束!

2016-10-21

Android—自定义Dialog的更多相关文章

  1. Android自定义 Dialog 对话框

    Android自定义Dialoghttp://www.cnblogs.com/and_he/archive/2011/09/16/2178716.html Android使用自定义AlertDialo ...

  2. Android自定义Dialog(美化界面)

    前言:在做项目的时候,发现dialog界面太丑陋,从csdn上下载了一份自定义dialog的源码,在他的基础上对界面进行美化...有需要的朋友可以直接拿走 效果图如下: 主要代码: /** * 自定义 ...

  3. Android自定义Dialog及其布局

     实际项目开发中默认的Dialog样式无法满足需求,需要自定义Dialog及其布局,并响应布局中控件的事件. 上效果图: 自定义Dialog,LogoutDialog: 要将自定义布局传入构造函数中, ...

  4. android 自定义Dialog背景透明及显示位置设置

    先贴一下显示效果图,仅作参考: 代码如下: 1.自定义Dialog public class SelectDialog extends AlertDialog{ public SelectDialog ...

  5. Android自定义Dialog

    Android开发过程中,常常会遇到一些需求场景——在界面上弹出一个弹框,对用户进行提醒并让用户进行某些选择性的操作, 如退出登录时的弹窗,让用户选择“退出”还是“取消”等操作. Android系统提 ...

  6. android 自定义Dialog去除黑色边框

    在自定义Dialog时显示的界面中老是有黑色的边框,下面就介绍使用style去除黑色边框方法. 首先在values/styles定义自定义样式: <style name="MyDial ...

  7. Android 自定义Dialog类,并在Activity中实现按钮监听。

      实际开发中,经常会用到Dialog,比如退出时候会弹出是否退出,或者还有一些编辑框也会用Dialog实现,效果图如下: 开发中遇到的问题无非在于如果在Activity中监听这个Dialog中实现的 ...

  8. Android 自定义Dialog 去除阴影

    自定义Dialog中添加下列代码: window.clearFlags( WindowManager.LayoutParams.FLAG_DIM_BEHIND);

  9. android自定义dialog布局

    dialog使用系统自带的有时候不是很美观,就想要自己来设计一个dialog界面,以下就是可以设计的dialog界面: public class CustomDialog extends Dialog ...

随机推荐

  1. SQLServer生成三位姓名及11位国内电话号码(生成测试数据用)

    SELECT SUBSTRING(N'王李张刘陈杨黄赵吴周徐孙马朱胡郭何高林郑谢罗梁宋唐许韩冯邓曹彭曾肖田董袁潘于蒋蔡余杜叶程苏魏吕丁任沈姚卢姜崔钟谭陆汪范金石廖贾夏韦付方白邹孟熊秦邱江尹薛闫段雷侯龙 ...

  2. 51Nod 1010 只包含因子2 3 5的数 Label:None

    K的因子中只包含2 3 5.满足条件的前10个数是:2,3,4,5,6,8,9,10,12,15. 所有这样的K组成了一个序列S,现在给出一个数n,求S中 >= 给定数的最小的数. 例如:n = ...

  3. Spark ZooKeeper数据恢复

    Spark使用ZooKeeper进行数据恢复的逻辑过程如下: 1.初始化:创建<CuratorFramwork,LeaderLatch,LeaderLatchListener>用于选举 创 ...

  4. 【DFS】POJ 1321

    POJ 1321 棋盘问题 题意:中文题不解释. 思路:经典DP,比较取巧的想法是一行行(按照题目意思一行最多只能放一个)来看,标记一列列.注意考虑到有些行可能不放的情况. /** Sample In ...

  5. JSON数据和对象

    在js中像数字类型.字符串类型.布尔类型这些都不能再被拆分,属于基本类型.与之相对有一种复杂类型:对象类型,它是本身由多个其他类型组合而成的. 创建对象有两种方法,一.new Object()创建一个 ...

  6. dubbo 常见错误

    1. Caused by: java.lang.reflect.MalformedParameterizedTypeException 或 Caused by: java.lang.NoSuchMet ...

  7. STM32之ADC+步骤小技巧(英文)

    神通广大的各位互联网的网友们.大家早上中午晚上好好好.今早起来很准时的收到了两条10086的扣月租的信息.心痛不已.怀着这心情.又开始了STM32的研究.早上做了计算机控制的PID实验,又让我想起了飞 ...

  8. AmazeUI 框架知识点-布局和样式整理

    1.Amaze UI 将所有元素的盒模型设置为 border-box.这下好了,妈妈再也不用担心没计算好 padding.border 而使布局破相了. 2.Amaze UI 将浏览器的基准字号设置为 ...

  9. PHP定界符使用技巧

    为什么要使用定界符 : 因为PHP是一个Web编程语言,在编程过程中难免会遇到用echo来输出大段的html和javascript脚本的情况,如果用传统的输出方法——按字符串输出的话,肯定要有大量的转 ...

  10. 另类的表单数据"序列化"

    背景:最近在做项目时,由于编辑页面需要提交的数据量有些多,而且在提交前还需要做一些逻辑处理,所以如果按照正常的方式,一个个的获取值然后拼接json对象传到后台的话相对工作量较大,而且容易出错,后期的维 ...