Fix bug 5011067 - align popup lists to their content rather than
window frame by default Change-Id: I05803b7487248d38981c2adc5422bf01761bc18c
This commit is contained in:
@@ -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;
|
||||
}
|
||||
|
||||
@@ -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;
|
||||
|
||||
Reference in New Issue
Block a user