summaryrefslogtreecommitdiffstats
path: root/core
diff options
context:
space:
mode:
authorAdam Powell <adamp@google.com>2011-07-15 17:37:11 -0700
committerAdam Powell <adamp@google.com>2011-07-15 18:22:44 -0700
commit8132ba5e2e82d02697ef0570142abb8fc8054a67 (patch)
tree55e0b3d664cdcfd8aaa80358ac98dea92d9cbbf8 /core
parent9c83011005349f2f0ebefb47c8ea7fc4bb5a07f7 (diff)
downloadframeworks_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.java25
-rw-r--r--core/java/android/widget/Spinner.java15
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;