Dialog的创建与显示过程

本文详细解析了Android中Dialog的创建与显示过程,从构造方法开始,讲解了如何构造Dialog,设置主题,获取WindowManager,创建Window对象,设置回调,到最终调用show方法显示对话框的整个流程。通过分析源码,揭示了Dialog如何像Activity一样灵活定义样式,并强调了关键方法如setContentView()、onStart()和窗口显示的过程。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

我们写应用程序的时候,有时候需要创建一个对话框,也就是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一样灵活定义。

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值