Merge "Set width of spinner's dropdown to fit on device"

This commit is contained in:
Jean-Baptiste Queru
2012-02-29 15:09:16 -08:00
committed by android code review

View File

@@ -26,6 +26,7 @@ import android.database.DataSetObserver;
import android.graphics.Rect; import android.graphics.Rect;
import android.graphics.drawable.Drawable; import android.graphics.drawable.Drawable;
import android.util.AttributeSet; import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity; import android.view.Gravity;
import android.view.View; import android.view.View;
import android.view.ViewGroup; import android.view.ViewGroup;
@@ -732,13 +733,30 @@ public class Spinner extends AbsSpinner implements OnClickListener {
@Override @Override
public void show() { public void show() {
final Drawable background = getBackground();
int bgOffset = 0;
if (background != null) {
background.getPadding(mTempRect);
bgOffset = -mTempRect.left;
} else {
mTempRect.left = mTempRect.right = 0;
}
final int spinnerPaddingLeft = Spinner.this.getPaddingLeft(); final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
if (mDropDownWidth == WRAP_CONTENT) { if (mDropDownWidth == WRAP_CONTENT) {
final int spinnerWidth = Spinner.this.getWidth(); final int spinnerWidth = Spinner.this.getWidth();
final int spinnerPaddingRight = Spinner.this.getPaddingRight(); final int spinnerPaddingRight = Spinner.this.getPaddingRight();
int contentWidth = measureContentWidth(
(SpinnerAdapter) mAdapter, getBackground());
final int contentWidthLimit = mContext.getResources()
.getDisplayMetrics().widthPixels - mTempRect.left - mTempRect.right;
if (contentWidth > contentWidthLimit) {
contentWidth = contentWidthLimit;
}
setContentWidth(Math.max( setContentWidth(Math.max(
measureContentWidth((SpinnerAdapter) mAdapter, getBackground()), contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
} else if (mDropDownWidth == MATCH_PARENT) { } else if (mDropDownWidth == MATCH_PARENT) {
final int spinnerWidth = Spinner.this.getWidth(); final int spinnerWidth = Spinner.this.getWidth();
final int spinnerPaddingRight = Spinner.this.getPaddingRight(); final int spinnerPaddingRight = Spinner.this.getPaddingRight();
@@ -746,12 +764,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
} else { } else {
setContentWidth(mDropDownWidth); setContentWidth(mDropDownWidth);
} }
final Drawable background = getBackground();
int bgOffset = 0;
if (background != null) {
background.getPadding(mTempRect);
bgOffset = -mTempRect.left;
}
setHorizontalOffset(bgOffset + spinnerPaddingLeft); setHorizontalOffset(bgOffset + spinnerPaddingLeft);
setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED); setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
super.show(); super.show();