关闭

Dialog的创建与显示过程

2041人阅读 评论(0) 收藏 举报
分类:
我们写应用程序的时候,有时候需要创建一个对话框,也就是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一样灵活定义。

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

0
0

猜你在找
【套餐】Hadoop生态系统零基础入门
【套餐】嵌入式Linux C编程基础
【套餐】2017软考系统集成项目——任铄
【套餐】Android 5.x顶级视频课程——李宁
【套餐】深度学习入门视频课程——唐宇迪
【直播】广义线性模型及其应用——李科
【直播】从0到1 区块链的概念到实践
【直播】计算机视觉原理及实战——屈教授
【直播】机器学习之凸优化——马博士
【直播】机器学习&数据挖掘7周实训--韦玮
查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:733017次
    • 积分:7474
    • 等级:
    • 排名:第2866名
    • 原创:137篇
    • 转载:36篇
    • 译文:3篇
    • 评论:117条
    最新评论