Loading core/java/android/widget/PopupWindow.java +30 −14 Original line number Diff line number Diff line Loading @@ -210,6 +210,21 @@ public class PopupWindow { com.android.internal.R.attr.state_above_anchor }; private final OnAttachStateChangeListener mOnAnchorDetachedListener = new OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { // Anchor might have been reattached in a different position. alignToAnchor(); } @Override public void onViewDetachedFromWindow(View v) { // Leave the popup in its current position. // The anchor might become attached again. } }; private final OnAttachStateChangeListener mOnAnchorRootDetachedListener = new OnAttachStateChangeListener() { @Override Loading @@ -225,20 +240,7 @@ public class PopupWindow { private WeakReference<View> mAnchorRoot; private boolean mIsAnchorRootAttached; private final OnScrollChangedListener mOnScrollChangedListener = new OnScrollChangedListener() { @Override public void onScrollChanged() { final View anchor = mAnchor != null ? mAnchor.get() : null; if (anchor != null && mDecorView != null) { final WindowManager.LayoutParams p = (WindowManager.LayoutParams) mDecorView.getLayoutParams(); updateAboveAnchor(findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, p.width, p.height, mAnchoredGravity, false)); update(p.x, p.y, -1, -1, true); } } }; private final OnScrollChangedListener mOnScrollChangedListener = this::alignToAnchor; private int mAnchorXoff; private int mAnchorYoff; Loading Loading @@ -2217,6 +2219,7 @@ public class PopupWindow { if (anchor != null) { final ViewTreeObserver vto = anchor.getViewTreeObserver(); vto.removeOnScrollChangedListener(mOnScrollChangedListener); anchor.removeOnAttachStateChangeListener(mOnAnchorDetachedListener); } final View anchorRoot = mAnchorRoot != null ? mAnchorRoot.get() : null; Loading @@ -2236,6 +2239,7 @@ public class PopupWindow { if (vto != null) { vto.addOnScrollChangedListener(mOnScrollChangedListener); } anchor.addOnAttachStateChangeListener(mOnAnchorDetachedListener); final View anchorRoot = anchor.getRootView(); anchorRoot.addOnAttachStateChangeListener(mOnAnchorRootDetachedListener); Loading @@ -2250,6 +2254,18 @@ public class PopupWindow { mAnchoredGravity = gravity; } private void alignToAnchor() { final View anchor = mAnchor != null ? mAnchor.get() : null; if (anchor != null && anchor.isAttachedToWindow() && mDecorView != null) { final WindowManager.LayoutParams p = (WindowManager.LayoutParams) mDecorView.getLayoutParams(); updateAboveAnchor(findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, p.width, p.height, mAnchoredGravity, false)); update(p.x, p.y, -1, -1, true); } } private class PopupDecorView extends FrameLayout { private TransitionListenerAdapter mPendingExitListener; Loading Loading
core/java/android/widget/PopupWindow.java +30 −14 Original line number Diff line number Diff line Loading @@ -210,6 +210,21 @@ public class PopupWindow { com.android.internal.R.attr.state_above_anchor }; private final OnAttachStateChangeListener mOnAnchorDetachedListener = new OnAttachStateChangeListener() { @Override public void onViewAttachedToWindow(View v) { // Anchor might have been reattached in a different position. alignToAnchor(); } @Override public void onViewDetachedFromWindow(View v) { // Leave the popup in its current position. // The anchor might become attached again. } }; private final OnAttachStateChangeListener mOnAnchorRootDetachedListener = new OnAttachStateChangeListener() { @Override Loading @@ -225,20 +240,7 @@ public class PopupWindow { private WeakReference<View> mAnchorRoot; private boolean mIsAnchorRootAttached; private final OnScrollChangedListener mOnScrollChangedListener = new OnScrollChangedListener() { @Override public void onScrollChanged() { final View anchor = mAnchor != null ? mAnchor.get() : null; if (anchor != null && mDecorView != null) { final WindowManager.LayoutParams p = (WindowManager.LayoutParams) mDecorView.getLayoutParams(); updateAboveAnchor(findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, p.width, p.height, mAnchoredGravity, false)); update(p.x, p.y, -1, -1, true); } } }; private final OnScrollChangedListener mOnScrollChangedListener = this::alignToAnchor; private int mAnchorXoff; private int mAnchorYoff; Loading Loading @@ -2217,6 +2219,7 @@ public class PopupWindow { if (anchor != null) { final ViewTreeObserver vto = anchor.getViewTreeObserver(); vto.removeOnScrollChangedListener(mOnScrollChangedListener); anchor.removeOnAttachStateChangeListener(mOnAnchorDetachedListener); } final View anchorRoot = mAnchorRoot != null ? mAnchorRoot.get() : null; Loading @@ -2236,6 +2239,7 @@ public class PopupWindow { if (vto != null) { vto.addOnScrollChangedListener(mOnScrollChangedListener); } anchor.addOnAttachStateChangeListener(mOnAnchorDetachedListener); final View anchorRoot = anchor.getRootView(); anchorRoot.addOnAttachStateChangeListener(mOnAnchorRootDetachedListener); Loading @@ -2250,6 +2254,18 @@ public class PopupWindow { mAnchoredGravity = gravity; } private void alignToAnchor() { final View anchor = mAnchor != null ? mAnchor.get() : null; if (anchor != null && anchor.isAttachedToWindow() && mDecorView != null) { final WindowManager.LayoutParams p = (WindowManager.LayoutParams) mDecorView.getLayoutParams(); updateAboveAnchor(findDropDownPosition(anchor, p, mAnchorXoff, mAnchorYoff, p.width, p.height, mAnchoredGravity, false)); update(p.x, p.y, -1, -1, true); } } private class PopupDecorView extends FrameLayout { private TransitionListenerAdapter mPendingExitListener; Loading