-
从这篇文章: Toast类如何实现在任意Activity上显示提示?中我们可以知道:WindowManager.addView()方法可以显示一个新的图层。那么Dialog类是否也是这个原理来显示弹窗了?
- 测试代码:
//在Activity中调用这段代码就好
Dialog dialog = new Dialog(MainActivity.this);
dialog.show();
效果如下:
-
查看源代码,看看这个show()方法到底干了啥?
-
这篇文章:Android:源码解析Dialog的窗口机制已经写的很详细了。大致还是调用WindowManager.addView()方法。不同于Toast类的是,Dialog中多了个PhoneWindow对象,并且最终被添加到WindowManager中的,其实是PhoneWindow中的DecorView。
- 下面是我整理的关于PhoneWindow的描述:
- Activity和Dialog的布局都比较复杂,比如都可能有appbar(toolbar/actionbar)等。因此通过PhoneWindow来封装下可以更好的解耦代码
- PopupWindow或者Toast的布局比较简单。因此没有必要包裹一层PhoneWindow。在源码中也没有发现有PhoneWindow的痕迹。
-
更多关于PhoneWindow,参考:我所理解的 PhoneWindow 的一个作用