diff options
Diffstat (limited to 'core/java/android/widget')
| -rw-r--r-- | core/java/android/widget/ListPopupWindow.java | 25 | ||||
| -rw-r--r-- | core/java/android/widget/Spinner.java | 15 |
2 files changed, 29 insertions, 11 deletions
diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index 564287785abf..f057d07033b7 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -62,6 +62,7 @@ public class ListPopupWindow { private int mDropDownWidth = ViewGroup.LayoutParams.WRAP_CONTENT; private int mDropDownHorizontalOffset; private int mDropDownVerticalOffset; + private boolean mDropDownVerticalOffsetSet; private boolean mDropDownAlwaysVisible = false; private boolean mForceIgnoreOutsideTouch = false; @@ -404,6 +405,9 @@ public class ListPopupWindow { * @return The vertical offset of the popup from its anchor in pixels. */ public int getVerticalOffset() { + if (!mDropDownVerticalOffsetSet) { + return 0; + } return mDropDownVerticalOffset; } @@ -414,6 +418,7 @@ public class ListPopupWindow { */ public void setVerticalOffset(int offset) { mDropDownVerticalOffset = offset; + mDropDownVerticalOffsetSet = true; } /** @@ -1061,21 +1066,27 @@ public class ListPopupWindow { } } - // Max height available on the screen for a popup. - boolean ignoreBottomDecorations = - mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED; - final int maxHeight = mPopup.getMaxAvailableHeight( - getAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations); - - // getMaxAvailableHeight() subtracts the padding, so we put it back, + // getMaxAvailableHeight() subtracts the padding, so we put it back // to get the available height for the whole window int padding = 0; Drawable background = mPopup.getBackground(); if (background != null) { background.getPadding(mTempRect); padding = mTempRect.top + mTempRect.bottom; + + // If we don't have an explicit vertical offset, determine one from the window + // background so that content will line up. + if (!mDropDownVerticalOffsetSet) { + mDropDownVerticalOffset = -mTempRect.top; + } } + // Max height available on the screen for a popup. + boolean ignoreBottomDecorations = + mPopup.getInputMethodMode() == PopupWindow.INPUT_METHOD_NOT_NEEDED; + final int maxHeight = mPopup.getMaxAvailableHeight( + getAnchorView(), mDropDownVerticalOffset, ignoreBottomDecorations); + if (mDropDownAlwaysVisible || mDropDownHeight == ViewGroup.LayoutParams.MATCH_PARENT) { return maxHeight + padding; } diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index 485c67861f37..2fba18b12ec8 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -165,10 +165,17 @@ public class Spinner extends AbsSpinner implements OnClickListener { ViewGroup.LayoutParams.WRAP_CONTENT); popup.setBackgroundDrawable(a.getDrawable( com.android.internal.R.styleable.Spinner_popupBackground)); - popup.setVerticalOffset(a.getDimensionPixelOffset( - com.android.internal.R.styleable.Spinner_dropDownVerticalOffset, 0)); - popup.setHorizontalOffset(a.getDimensionPixelOffset( - com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0)); + final int verticalOffset = a.getDimensionPixelOffset( + com.android.internal.R.styleable.Spinner_dropDownVerticalOffset, 0); + if (verticalOffset != 0) { + popup.setVerticalOffset(verticalOffset); + } + + final int horizontalOffset = a.getDimensionPixelOffset( + com.android.internal.R.styleable.Spinner_dropDownHorizontalOffset, 0); + if (horizontalOffset != 0) { + popup.setHorizontalOffset(horizontalOffset); + } mPopup = popup; break; |
