在编写完xml之后,仅需简单的几步,便可完成BasePopup的构建。

新建继承BasePopupWindow的Java类

  1. public class DemoPopup extends BasePopupWindow {
  2. public DemoPopup(Context context) {
  3. super(context);
  4. }
  5. }

设置xml或者指定的View

  1. public class DemoPopup extends BasePopupWindow {
  2. public DemoPopup(Context context) {
  3. super(context);
  4. setContentView(R.layout.popup_normal);
  5. // 设置View,建议使用createPopupById(),使BasePopup能正确读取xml参数
  6. // setContentView(createPopupById(R.layout.popup_normal));
  7. }
  8. }

展示BasePopup

最终展示非常简单,仅仅需要一行(其他高级用法请详见高级用法)。

  • 需要频繁弹窗的情况下建议将BasePopup用作成员变量
    1. new DemoPopup(getContext()).showPopupWindow();
    2. //new DemoPopup(getContext()).showPopupWindow(anchorView);
    3. //new DemoPopup(getContext()).showPopupWindow(x,y);

不同的展示方法之间的区别

方法 描述 备注
showPopupWindow() 调用该方法展示BasePopup将会以DecorView为参考对象,此时Gravity作用目标为宿主Window 相当于FrameLayout的子控件的Gravity
showPopupWindow(view) 传入AnchorView,调用该方法展示BasePopup将会以传入的AnchorView为参考对象,此时Gravity作用目标为AnchorView。 如在AnchorView右方弹出,则只需要设置Gravity.Right,而不需要计算offset
showPopupWindow(x,y) 传入坐标信息,调用该方法展示BasePopup将会以传入的(x,y)坐标点为参考对象,此时Gravity作用目标为坐标点 如在某个点右方弹出,则只需要设置Gravity.Right,而不需要计算offset

示例:

showPopupWindow()
gravity = CENTER gravity = RIGHT | CENTER_VERTICAL
show_1.gif show_2.gif
showPopupWindow(View v)
gravity = CENTER gravity = RIGHT | CENTER_VERTICAL
show_3.gif show_4.gif
showPopupWindow(int x, int y)
gravity = CENTER
anypos.gif