Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 95148495 authored by SeongJae Park's avatar SeongJae Park
Browse files

Set width of spinner's dropdown to fit on device

Commit for issue at
http://code.google.com/p/android/issues/detail?id=25916&colspec=ID%20Type%20Status%20Owner%20Summary%20Stars&start=100



[Problem]
Dropdown popup of Spinner become wider than device's width if selected
item's content's width is larger than device's screen.

[Cause]
Spinner just display dropdown popup with measured content's width
although measured content's width is wider than device's screen.

[Solution]
If calculated content's width is wider than device's screen, set width
of spinner's dropdown popup to fit on device.

Change-Id: I3276e5ff745c6ba1437c07fc55645d6b53fef89a
Signed-off-by: default avatarSeongJae Park <sj38.park@gmail.com>
parent d7fa7dee
Loading
Loading
Loading
Loading
+23 −11
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.database.DataSetObserver;
import android.graphics.Rect;
import android.graphics.drawable.Drawable;
import android.util.AttributeSet;
import android.util.DisplayMetrics;
import android.view.Gravity;
import android.view.View;
import android.view.ViewGroup;
@@ -732,13 +733,30 @@ public class Spinner extends AbsSpinner implements OnClickListener {

        @Override
        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();
            if (mDropDownWidth == WRAP_CONTENT) {
                final int spinnerWidth = Spinner.this.getWidth();
                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(
                        measureContentWidth((SpinnerAdapter) mAdapter, getBackground()),
                        spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
                       contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
            } else if (mDropDownWidth == MATCH_PARENT) {
                final int spinnerWidth = Spinner.this.getWidth();
                final int spinnerPaddingRight = Spinner.this.getPaddingRight();
@@ -746,12 +764,6 @@ public class Spinner extends AbsSpinner implements OnClickListener {
            } else {
                setContentWidth(mDropDownWidth);
            }
            final Drawable background = getBackground();
            int bgOffset = 0;
            if (background != null) {
                background.getPadding(mTempRect);
                bgOffset = -mTempRect.left;
            }
            setHorizontalOffset(bgOffset + spinnerPaddingLeft);
            setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
            super.show();