diff options
author | 2016-01-04 18:32:16 +0000 | |
---|---|---|
committer | 2016-01-04 18:32:16 +0000 | |
commit | fe34f6c1985d0f86c0e99f86dc64a09c39ac45ac (patch) | |
tree | 1f4b558f145e9fc52d4ff63d259f21b2d1c79edc | |
parent | db4da1bd209d4ee58868bdfc428b8b639b8ee7c9 (diff) | |
parent | 7c9732db0e450785f70d634fee4037b5e887d911 (diff) |
Merge "Fix popup window position calculation in multiwindow mode"
-rw-r--r-- | core/java/android/widget/PopupWindow.java | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/core/java/android/widget/PopupWindow.java b/core/java/android/widget/PopupWindow.java index 19e290b71a97..7e981939034b 100644 --- a/core/java/android/widget/PopupWindow.java +++ b/core/java/android/widget/PopupWindow.java @@ -1467,10 +1467,14 @@ public class PopupWindow { } if (mClipToScreen) { + final int winOffsetX = mScreenLocation[0] - mDrawingLocation[0]; + final int winOffsetY = mScreenLocation[1] - mDrawingLocation[1]; + p.x += winOffsetX; + p.y += winOffsetY; final int displayFrameWidth = displayFrame.right - displayFrame.left; final int right = p.x + p.width; - if (right > displayFrameWidth) { - p.x -= right - displayFrameWidth; + if (right > displayFrame.right) { + p.x -= right - displayFrame.right; } if (p.x < displayFrame.left) { @@ -1479,10 +1483,9 @@ public class PopupWindow { } if (mOverlapAnchor) { - final int displayFrameHeight = displayFrame.bottom - displayFrame.top; final int bottom = p.y + p.height; if (bottom > displayFrame.bottom) { - p.y -= bottom - displayFrameHeight; + p.y -= bottom - displayFrame.bottom; } } else { if (onTop) { @@ -1494,6 +1497,8 @@ public class PopupWindow { p.y = Math.max(p.y, displayFrame.top); } } + p.x -= winOffsetX; + p.y -= winOffsetY; } p.gravity |= Gravity.DISPLAY_CLIP_VERTICAL; |