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一样灵活定义。

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

非模式对话框CreateDialog() 与 模式对话框 DialogBoxParam()和DialogBox()

一、非模式对话框比模式对话框的好处是,它是作为一个独立窗口打开的,不会影响父窗口的状态,而后者打开后,关闭前父窗口是不能使用的。而且必须要对话框关闭以后,函数才会返回调用生成对话框语句的下一句。而模式...

AlertDialog创建过程详解

详细的说明了AlertDialog的创建过程

Fragment详解之二——基本使用方法

上一篇给大家简单说了说Fragment是用来做什么的及生命周期的问题,这篇我们就用实例来看看我们在代码中如何使用Fragment; 在这里我们全部使用android-support-v4.jar包里...

Android Window理解(3.1)---子窗口创建过程:Dialog、PopupWindow

Android创建子窗口
  • leif_
  • leif_
  • 2016年11月18日 17:02
  • 433

Dialog的Window的创建过程

Dialog的Window的创建过程

Android4.0窗口机制token分析以及activitiy, dialog, toast 窗口创建过程分析

原文http://bbs.51cto.com/thread-1072344-1.html 一  前言 在谈到这个话题的时候,脑海里面千头万绪,因为它涉及到了方方面面的知识…...

Dialog的创建过程

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

为custom dialog box class定义两个窗口过程

#include #include "resource.h" LRESULT CALLBACK WindowProc( HWND hwnd, UINT uM...
  • tms_li
  • tms_li
  • 2012年01月18日 10:26
  • 692

圆角dialog实现过程

一、概述 原生的dialog一般不是很好看,在不同版本的手机上显示效果可能不太一样,所以我们就需要自定义dialog,这次给大家分享一下,圆角dialog的实现过程,也是自己学习的一个过程。 二、效果...

使用Animation list实现网络请求过程中的加载动画dialog

效果图实现过程主要是借助于AnimationList实现帧动画animation_list.xml文件
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Dialog的创建与显示过程
举报原因:
原因补充:

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