diff options
author | Adam Powell <adamp@google.com> | 2011-07-15 17:37:11 -0700 |
---|---|---|
committer | Adam Powell <adamp@google.com> | 2011-07-15 18:22:44 -0700 |
commit | 8132ba5e2e82d02697ef0570142abb8fc8054a67 (patch) | |
tree | 55e0b3d664cdcfd8aaa80358ac98dea92d9cbbf8 /core | |
parent | 9c83011005349f2f0ebefb47c8ea7fc4bb5a07f7 (diff) | |
download | frameworks_base-8132ba5e2e82d02697ef0570142abb8fc8054a67.zip frameworks_base-8132ba5e2e82d02697ef0570142abb8fc8054a67.tar.gz frameworks_base-8132ba5e2e82d02697ef0570142abb8fc8054a67.tar.bz2 |
Fix bug 5011067 - align popup lists to their content rather than
window frame by default
Change-Id: I05803b7487248d38981c2adc5422bf01761bc18c
Diffstat (limited to 'core')
-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 5642877..f057d07 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 485c678..2fba18b 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; |