在编写完xml之后,仅需简单的几步,便可完成BasePopup的构建。
新建继承BasePopupWindow的Java类
public class DemoPopup extends BasePopupWindow {
public DemoPopup(Context context) {
super(context);
}
}
设置xml或者指定的View
public class DemoPopup extends BasePopupWindow {
public DemoPopup(Context context) {
super(context);
setContentView(R.layout.popup_normal);
// 设置View,建议使用createPopupById(),使BasePopup能正确读取xml参数
// setContentView(createPopupById(R.layout.popup_normal));
}
}
展示BasePopup
最终展示非常简单,仅仅需要一行(其他高级用法请详见高级用法)。
不同的展示方法之间的区别
方法 |
描述 |
备注 |
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](/uploads/projects/razerdp@basepopup/0adfc5231d3f2cda78076abc293608c5.gif) |
![show_2.gif](/uploads/projects/razerdp@basepopup/eae1c9879c8b39174dc0f9496921e9c8.gif) |
showPopupWindow(View v) |
|
gravity = CENTER |
gravity = RIGHT | CENTER_VERTICAL |
![show_3.gif](/uploads/projects/razerdp@basepopup/63e00de1ad7ee1ff42553c5f3d0a3117.gif) |
![show_4.gif](/uploads/projects/razerdp@basepopup/396fceff68da8b8b288c267be5b6674b.gif) |
showPopupWindow(int x, int y) |
gravity = CENTER |
![anypos.gif](/uploads/projects/razerdp@basepopup/f9e9c561c0236f265b2a4a60d46692ad.gif) |