我有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没有足够的空间在它下面。
我该如何解决这个问题?以及为什么屏幕位置在该听众中不正确?