弹窗系列:Dialog源码中有没有用到WindowManager?

//在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的痕迹。

猜你喜欢

转载自blog.csdn.net/zhangjin1120/article/details/113487221