Dialog的创建与显示过程

原创 2013年12月01日 21:33:12
我们写应用程序的时候,有时候需要创建一个对话框,也就是Dialog,一般我们在程序里之间new一个Dialog,然后调用
dialog的show方法显示处理,这个过程到底是怎样的呢?
我们就从构造方法看起:
注:源码是4.3_r2.1的。
我们一般调用这个构造函数,然后调用重载的构造方法:

接着继续调用重载的构造方法:


默认createContextThemeWrapper是true,所以执行152-157行代码
theme是0的话,就使用系统默认的主题修饰对话框。
158行:new了一个ContextThemeWrapper赋值给mContext,真正的context就是传过来的context(一般就是这个对话框下面的Activity)

163行:获得WindowManager,因为这个context一般是Activity,所以这个WindowManager就是Activity中的WindowManager对象。
164行:创建一个Window对象,实际上就是PhoneWindow对象。
166行:Window的回调设置为当前的Dialog,Dialog和Activity一样也实现了Window.Callback接口。
167行:把windowManager设置给Window对象。

我们写程序的时候,new完Dialog对象之后,设置一些图标了,标题了之类的,在show()之前设置上即可,一般都是调用set方法,
这些都不用多说,最后一步才是弹出对话框,也就是调用show方法。
247行:如果mShow为true的话,说明这个窗口已经显示过了,那么只需把mDecor在重新显示一下即可,不用再创建了。
259行:如果mCreated未false的话,说明没有被创建过,就进行创建工作,调用dispatchOnCreate()
看一下这个方法:
然后调用conCreate()方法,在这个方法里调用setContentView()设置View,类似于Activity的onCreate()方法的使用。
Dialog的这个基类里面是空的,所以子类必须重写这个方法。
回到show()方法

263行:调用了onStart()方法,这个方法也是空方法,我们写程序的时候可以重写一下这个方法,然后在对话框看得之前能做一些处理。
264行:为mDecor赋值,和Activity中一样
281行:通过WindowManager把DecorView显示出来,过程也和Activity窗口的显示过程一致。
282行:此时可以把mShowing设置为true了
284行:发送一窗口显示的异步消息。

以上就是对话框的创建显示过程。

从以上可以看出,只要我们继承Dialog就可以定义我们自己的对话框了,包括样式完全可以像Activity一样灵活定义。

个人能力有限,如有谬误敬请指正。

Android源码解析(十九)-->Dialog加载绘制流程

其实Android系统中所有的显示控件(注意这里是控件,而不是组件)的加载绘制流程都是类似的,包括:Dialog的加载绘制流程,PopupWindow的加载绘制流程,Toast的显示原理等,上一篇文章...
  • qq_23547831
  • qq_23547831
  • 2016年05月02日 00:20
  • 20281

Dialog的创建过程

各位大大我也是初学者,写这些主要是为了对其认识更加清晰,同时也为了以后忘记时可以快速的回忆起。这是我第一次看源码在结合其他大大的思想得到的总结,可能会有很多问题,如果你们发现怎么不对可以告诉我,我很希...
  • u012646150
  • u012646150
  • 2015年05月29日 09:46
  • 218

Android—创建自己的Dialog—数据交互

之所以涉及到这,是因为今天天气不错想着干点什么呢,同时在自己的App上添加一项新功能,第一项就是想添加一个可选择功能的dialog,在Android的App里发现咕咚App的运动类型选择的Dialog...
  • iliupp
  • iliupp
  • 2016年06月27日 18:27
  • 1027

一步步追踪Dialog的创建流程(一)

想搞明白Dialog到底是怎么创建的,打开Dialog.java,看看里面都做了什么? 一.Dialog的构造函数 从构造函数出发,所有的构造函数都会调用下面这个构造函数: public Dia...
  • u011913612
  • u011913612
  • 2016年06月20日 23:18
  • 1606

使android的dialog全局显示

1、上下文传applicationContent类型的 2、添加dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_SYSTEM_AL...
  • wangqjpp
  • wangqjpp
  • 2017年05月25日 15:56
  • 442

AlertDialog创建过程详解

详细的说明了AlertDialog的创建过程
  • chunqiuwei
  • chunqiuwei
  • 2016年01月27日 13:44
  • 5438

win32sdk学习-创建一个对话框窗口

这几天在学习win32sdk编程,学习试用win32api来开发window程序。 win32应用程序入口和标准控制台程序入口不同,不是main而是WinMain了,这个函数默认会传递一些参数给应用...
  • sujudz
  • sujudz
  • 2012年10月04日 12:55
  • 10239

easyUI 通过JS显示Dialog

$(function () {             $("#myDialog").dialog({                 modal: true,                 ...
  • limlimlim
  • limlimlim
  • 2013年08月25日 11:24
  • 7124

Android Dialog 多次启动的问题

今天遇到一个蛋疼的问题,Dialog在电阻屏上用button响应的时候非常容易出现多次启动 也怪我脑子不好,光想着咋跟Activity一样整个singleTop啥的,NND,由于之前的Dialog是...
  • winteror
  • winteror
  • 2013年02月04日 15:59
  • 1962

Android Dialog 列表的创建

一.概述关于Dialog基本形式的创建我就不说了,很简单,下面说说列表的实现。 列表对话框主要有四种:普通列表、单选列表、双选列表、自定义视图的列表,下面我们一个个来分析。二.实现1.普通列表 A...
  • Small_Lee
  • Small_Lee
  • 2016年02月01日 17:04
  • 2647
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dialog的创建与显示过程
举报原因:
原因补充:

(最多只允许输入30个字)