Android PopupWindow显示在onGlobalLayoutListener中的错误位置

Android PopupWindow显示在onGlobalLayoutListener中的错误位置,android,popupwindow,Android,Popupwindow,我有一个观点,比如说anchor和PopupWindow。当我单击锚上的按钮时,pop显示为 我想要的是在第一次锚出现在屏幕上时自动显示pop。所以我覆盖了onAttachedToWindow并添加了一个OnGloballYoutListener并在其中显示pop。见下文: private boolean mFirstRun = true; @Override protected void onAttachedToWindow() { super.onAttach

我有一个观点,比如说anchor和PopupWindow。当我单击锚上的按钮时,pop显示为

我想要的是在第一次锚出现在屏幕上时自动显示pop。所以我覆盖了onAttachedToWindow并添加了一个OnGloballYoutListener并在其中显示pop。见下文:

private boolean mFirstRun = true;
    @Override
    protected void onAttachedToWindow() {
        super.onAttachedToWindow();
        if(mFirstRun) {
            mFirstRun = false;
            getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {

                @Override
                public void onGlobalLayout() {
                    showPopup();
                    getViewTreeObserver().removeGlobalOnLayoutListener(this);
                }
            });
        }
    }
结果是,只有第一次看到上面的pop才会停留在锚点的正上方。我已经确认弹孔的宽度和高度是正确的。当按钮点击触发时,pop显示在正确的位置

花了一段时间后,我发现问题出在OnGlobalYoutListener anchor.getLocationOnScreen的值大于最终值,因此它下面没有足够的空间放置pop


我怎样才能解决这个问题?为什么该侦听器中的屏幕位置不正确?

onPreDrawListener呢?假设所有的值都是最终形式的。我试过了,但结果是一样的。我的日志输出如下:测量,布局,绘制测量布局绘制,两次