程序员

关于PopupWindow的显示(1)—— showAsDrop

2020-08-12  本文已影响0人  仲秋花似锦

在开发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);

Demo1

showAsDropDown(mPopupWindowDropDownShow, 0, 0);

Demo2

showAsDropDown(mPopupWindowDropDownShow, -100, 100);

Demo3

showAsDropDown(mPopupWindowDropDownShow, -100, -100);

Demo4
上一篇 下一篇

猜你喜欢

热点阅读