#.简介
DialogFragment是继承Fragment,兼具Fragment和Dialog的特点:
一方面,它具有Fragment的生命周期,可以由Activity的FragmentManager来管理器生命周期;
另一方面,其内部包含一个Dialog成员变量,可以像窗口一样展示。
##.DialogFragment相对于Dialog的优点:
Dialog的生命周期不会随着Activity生命周期变化而变化,而DialogFragment继承自Fragment,具有与Fragment相同的生命周期和管理方式,FragmentManager会自动管理DialogFragment的生命周期。
所以在特定场景下,DialogFragment的生命周期管理起来更方便,例如:旋转屏幕等配置变化导致Activity重新创建时,Dialog会消失不见,而DialogFragment会由FragmentManager自动重建。
谷歌官方推荐使用DialogFragment来代替Dialog。
##使用要点和示例
分析源代码可知,DialogFragment内部包含一个Dialog实例,显示的窗口实际上是这个Dialog实例的窗口。
1. 这个Dialog实例通过onCreateDialog()方法创建,可以覆写该方法,返回自定义的Dialog,如果界面简单的话,其实只覆写该方法就可以实现传统Dialog需要实现的业务。
2. 如果界面复杂的话,则需要在onCreateView()方法中返回需要显示的View,就像普通Fragment中一样。所不同的无非是,在onActivityCreated()中,DialogFragment内部会获取前面返回的View,如果返回的View不是null的话,则会调用mDialog.setContentView(view),将该View设置为Dialog的显示内容。
也就是说,onCreateDialog()和onCreateView()实际上重写一个就行了,两个都重写是无意义的。如果在onCreateView()中自定了界面,它会覆盖内部Dialog的界面。如果前面在onCreateDialog()中自定义了Dialog的界面,这个界面也会被后面的覆盖掉。
3. 窗口大小的代码逻辑,放在子类的onActivityCreated()、或onStart()、onResume()方法中才会生效。个人习惯放在onActivityCreated()中。
至于设置窗口大小的方法