Android Dialog 源码研究
在阅读Dialog源代码之前,我给自己提出了4个问题,带着这4个问题的疑问,我才开始看源码,这样的好处能让阅读中有了侧重点,往往能更快的理解某些代码的意图,这也正是为什么总说提出问题本身,要比解决问题困难
。
我下面要思考的4个问题是:
- Dialog到底是什么东西?
- Dialog到底是如何被显示到屏幕上?
- Dialog的构建,有哪些类参与,都有什么作用?
- Dialog的主要API,是如何让Dialog发生变化的?
首先,我们先得搞清楚Dialog的继承体系,整体把握下Dialog的设计结构。下图即为Dialog的继承体系树结构:
对Dialog有了整体认识之后,我们带着上面4个问题来阅读源码,并从中找到问题的答案。当把所有问题都解决掉之后,Dialog的源码也基本上都看懂了,对之后的自定义Dialog有很大帮助。
Dialog本质上是什么?
先看Dialog类的源码的构造函数,发现不同的构造内部最后都会调用3个参数的构造Dialog(@NonNull Context context, @StyleRes int themeResId, boolean createContextThemeWrapper)
。
我们来看下,该构造中形参的作用,第一个参数上下文,就不用解释啦。
1.