关于PopupWindow的显示(1)—— showAsDrop
在开发PopupWindow相关功能时,我们主要处理PopupWindow两方面的工作:1.PopupWindow的UI展示;2.PopupWindow的显示方式,弹出位置。这篇blog主要讲PopupWindow弹出位置。
PopupWindow弹出方式有2种:1.showAsDropDown ; 2.showAtLocation() 两个方法的不同主要体现在,弹出时的坐标系,换句话说就是参照物不同。本文主要对showAsDropDown()展开说明。
为了精确(准确无误)的表现出PopupWindow坐标位置,我们的demo中设置setClippingEnabled(false),setClippingEnabled方法详细说明可见上一篇blog。
显示弹窗方法:
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)的偏移量。
下图展示了几种偏移情况。
下面4图分别是实际demo 红框为anchor,红框左下角为(0,0)
showAsDropDown(mPopupWindowDropDownShow, 100, 100);
showAsDropDown(mPopupWindowDropDownShow, 0, 0);
showAsDropDown(mPopupWindowDropDownShow, -100, 100);
showAsDropDown(mPopupWindowDropDownShow, -100, -100);