Android PopupWindow显示在onGlobalLayoutListener中的错误位置
我有一个观点,比如说anchor和PopupWindow。当我单击锚上的按钮时,pop显示为 我想要的是在第一次锚出现在屏幕上时自动显示pop。所以我覆盖了onAttachedToWindow并添加了一个OnGloballYoutListener并在其中显示pop。见下文:Android PopupWindow显示在onGlobalLayoutListener中的错误位置,android,popupwindow,Android,Popupwindow,我有一个观点,比如说anchor和PopupWindow。当我单击锚上的按钮时,pop显示为 我想要的是在第一次锚出现在屏幕上时自动显示pop。所以我覆盖了onAttachedToWindow并添加了一个OnGloballYoutListener并在其中显示pop。见下文: private boolean mFirstRun = true; @Override protected void onAttachedToWindow() { super.onAttach
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呢?假设所有的值都是最终形式的。我试过了,但结果是一样的。我的日志输出如下:测量,布局,绘制测量布局绘制,两次