PopupWindow显示在onGlobalLayoutListener中的错误位置

时间:2014-08-21 09:12:32

标签: android popupwindow

我有View主播PopupWindow pop 。当我点击锚点上的按钮时, pop 会显示showAsDropDown

我想要的是在 anchor 第一次进入屏幕时自动显示 pop 。因此,我覆盖onAttachedToWindow并添加onGlobalLayoutListener并在其中显示 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 的宽度和高度是正确的。当按钮单击触发时, pop 将显示在正确的位置。

花了一些时间我发现问题出在onGlobalLayoutListener 中。getLocationOnScreen的值大于最终值,因此 pop没有足够的空间在它下面。

我该如何解决这个问题?以及为什么屏幕位置在该听众中不正确?

0 个答案:

没有答案