BasePopupWindow的构造器有三种,通常我们都使用BasePopupWindow(Context context),但是在一些特别的情况下我们需要使用另外两种构造器,本文档详述三种构造器的差异。
BasePopupWindow(Context context)
- 最常用的构造器,传入context情况下会寻找其Activity作为依附的WindowToken,如果获取不到(如ApplicationContext)则取当前应用最顶层Activity作为依附的WindowToken
- 此时PopupWindow的层级与Activity的Window一致,无法显示在其他Window上方(如弹出一个Dialog再弹出一个PopupWindow,此时PopupWindow显示在Dialog下层)
该构造器构造的BasePopup可以在Dialog或DialogFragment下弹出
示例
BasePopupWindow(Fragment fragment)
构造器传入Fragment情况下会寻找其RootView作为依附的WindowToken,如果获取不到则取当前fragment所属Activity作为依附的WindowToken(DialogFragmentc除外)
- 此时PopupWindow的层级与Fragment的Window一致,无法显示在其他Window上方(如弹出一个Dialog再弹出一个PopupWindow,此时PopupWindow显示在Dialog下层)
- 该构造器构造的BasePopup可以在DialogFragment或者依附于Activity的Fragment下弹出,其余情况不能弹出
【注意】:DialogFragment在getDialog()!=null的情况下,会获取其Dialog的WindowToken。