在开发PopupWindow相关功能时,我们主要处理PopupWindow两方面的工作:1.PopupWindow的UI展示;2.PopupWindow的显示方式,弹出位置。这篇blog主要讲PopupWindow弹出位置。
PopupWindow弹出方式有2种:1.showAsDropDown ; 2.showAtLocation() 两个方法的不同主要体现在,弹出时的坐标系,换句话说就是参照物不同。本文主要对showAsDropDown()展开说明。
为了精确(准确无误)的表现出PopupWindow坐标位置,我们的demo中设置setClippingEnabled(false),查看setClippingEnabled方法使用的详解。
public void showAsDropDown(View anchor, int xoff, int yoff) {
showAsDropDown(anchor, xoff, yoff, DEFAULT_ANCHORED_GRAVITY);
}
方法第一个参数View变量命名为anchor,真的是很形象。它就是弹窗的锚定点。或者再详细的讲,这个view就是弹窗的参照物,它的左下角就是PopupWindow眼中的原点。如下图中黄色高亮区域代表View anchor,它的左下角为PopupWindow眼中坐标系原点(0,0)。坐标系原点找到后,坐标系正方向如下图所示。
方法第二,三参数xOff,yOff,表示popupWindow距离原点的偏移量,具体讲就是PopupWindow左上角(图中蓝色实心点)距离(0,0)的偏移量。
下图展示了几种偏移情况。
下面3图分别是实际demo 红框为anchor,红框左下角为(0,0)
Demo1
showAsDropDown(mPopupWindowDropDownShow, 100, 100);
Demo2
showAsDropDown(mPopupWindowDropDownShow, 0, 0);
Demo3
showAsDropDown(mPopupWindowDropDownShow, -100, 100);
Demo 4
showAsDropDown(mPopupWindowDropDownShow, -100, -100);