DialogFragment是Fragment家族成员之一,如果你把它简单的理解成Dialog,那就错了。它的确可以做作dialog显示,还可以显示出自己定义的Dialog或者AlertDialog,但它同时也是一个Fragment。
按照官方的话来理解就是,你既可以把它当成一个dialog显示出来,也可以让它作为一个Fragment嵌套在Activity中,这样更方便开发。
为什么这么说呢?试想一下,当产品需求最开始把它作为一个界面显示的时候,你可能已经把它作为Fragment已经写好了,但中途产品又把它设计成一个dialog,那你该怎么办?重新去一个dialog或者activity吗?以前的传参怎么办?过两天,产品又将它改回去,你还要再重写一遍吗?等等一系列的问题就来了。
所以,这个时候,你只需要把当前的Fragment继承类改为DialogFragment,再添加几行代码就可以了。其他的,基本都不用动。即使过两天再改回来,或者别的界面也需要它的时候,你就可以直接把它当做Fragment,继续使用,代码都不用改。
这一点,不得不赞一下Fragment这个的出现,大大方便了开发,再也不怕产品设计调整界面布局了!
这里多啰嗦一句,如果产品已经定义好了作为dialog,或者之前就是dialog的,就不要将它们改成DialogFragment的了,还是那句话:只做有意义的代码改动!
今天之所以翻出源码来,主要还是希望通过对代码的了解,更好使用DialogFragment。而且有些细节部分,不看源码的话,可能就真在方法传值时传错了。比如:style的设置!
在源码最开始部分,就定义了style的常量:
publicstaticfinalintSTYLE_NORMAL =0;
publicstaticfinalintSTYLE_NO_TITLE =1;
publicstaticfinalintSTYLE_NO_FRAME =2;
publicstaticfinalintSTYLE_NO_INPUT =3;
STYLE_NORMAL:会显示一个普通的dialog
STYLE_NO_TITLE:不带标题的dialog
STYLE_NO_FRAME:无框的dialog
STYLE_NO_INPUT:无法输入内容的dialog,即不接收输入的焦点,而且触摸无效。
说起来,android很多参数的设置,都有用到“|”的方法,表示支持两种或两种以上。最常见的,就是“Top|Left”,所以,在这里有很多人会想用