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

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

版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

dialog全局显示的两种方式

默认的Dialog是不能全屏的。也就是怎么设置Dialog的Layout都没用的。   面给出实现Dialog实现全屏的两种方式:   1、代码实现。这中方法相对比较简单   首先继承Di...

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

Android创建子窗口
  • leif_
  • leif_
  • 2016-11-18 17:02
  • 346

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

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

Dialog的创建过程

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

圆角dialog实现过程

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

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

#include #include "resource.h" LRESULT CALLBACK WindowProc( HWND hwnd, UINT uM...

把网络请求加载过程dialog做成一个View

自己写一个工具类继承dialog,在网络请求的时候进行dialog的show() 或者dismiss(),但是会出现一个问题:当在进行网络请求的时候进行横竖屏切换就会出现dialog找不到底部的vie...

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

效果图实现过程主要是借助于AnimationList实现帧动画animation_list.xml文件 <it
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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