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

Commit e4beeb8e authored by Fabrice Di Meglio's avatar Fabrice Di Meglio Committed by Android (Google) Code Review
Browse files

Merge "Make Spinner widget aware of layout direction"

parents 5f85a76e 38d64c5a
Loading
Loading
Loading
Loading
+16 −12
Original line number Original line Diff line number Diff line
@@ -349,7 +349,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
    public void setGravity(int gravity) {
    public void setGravity(int gravity) {
        if (mGravity != gravity) {
        if (mGravity != gravity) {
            if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {
            if ((gravity & Gravity.HORIZONTAL_GRAVITY_MASK) == 0) {
                gravity |= Gravity.LEFT;
                gravity |= Gravity.START;
            }
            }
            mGravity = gravity;
            mGravity = gravity;
            requestLayout();
            requestLayout();
@@ -453,7 +453,7 @@ public class Spinner extends AbsSpinner implements OnClickListener {
    /**
    /**
     * Creates and positions all views for this Spinner.
     * Creates and positions all views for this Spinner.
     *
     *
     * @param delta Change in the selected position. +1 moves selection is moving to the right,
     * @param delta Change in the selected position. +1 means selection is moving to the right,
     * so views are scrolling to the left. -1 means selection is moving to the left.
     * so views are scrolling to the left. -1 means selection is moving to the left.
     */
     */
    @Override
    @Override
@@ -485,7 +485,9 @@ public class Spinner extends AbsSpinner implements OnClickListener {
        View sel = makeAndAddView(mSelectedPosition);
        View sel = makeAndAddView(mSelectedPosition);
        int width = sel.getMeasuredWidth();
        int width = sel.getMeasuredWidth();
        int selectedOffset = childrenLeft;
        int selectedOffset = childrenLeft;
        switch (mGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
        final int layoutDirection = getResolvedLayoutDirection();
        final int absoluteGravity = Gravity.getAbsoluteGravity(mGravity, layoutDirection);
        switch (absoluteGravity & Gravity.HORIZONTAL_GRAVITY_MASK) {
            case Gravity.CENTER_HORIZONTAL:
            case Gravity.CENTER_HORIZONTAL:
                selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2);
                selectedOffset = childrenLeft + (childrenWidth / 2) - (width / 2);
                break;
                break;
@@ -932,19 +934,18 @@ public class Spinner extends AbsSpinner implements OnClickListener {
        @Override
        @Override
        public void show() {
        public void show() {
            final Drawable background = getBackground();
            final Drawable background = getBackground();
            int bgOffset = 0;
            int hOffset = 0;
            if (background != null) {
            if (background != null) {
                background.getPadding(mTempRect);
                background.getPadding(mTempRect);
                bgOffset = -mTempRect.left;
                hOffset = isLayoutRtl() ? mTempRect.right : -mTempRect.left;
            } else {
            } else {
                mTempRect.left = mTempRect.right = 0;
                mTempRect.left = mTempRect.right = 0;
            }
            }


            final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
            final int spinnerPaddingLeft = Spinner.this.getPaddingLeft();
            if (mDropDownWidth == WRAP_CONTENT) {
                final int spinnerWidth = Spinner.this.getWidth();
            final int spinnerPaddingRight = Spinner.this.getPaddingRight();
            final int spinnerPaddingRight = Spinner.this.getPaddingRight();

            final int spinnerWidth = Spinner.this.getWidth();
            if (mDropDownWidth == WRAP_CONTENT) {
                int contentWidth =  measureContentWidth(
                int contentWidth =  measureContentWidth(
                        (SpinnerAdapter) mAdapter, getBackground());
                        (SpinnerAdapter) mAdapter, getBackground());
                final int contentWidthLimit = mContext.getResources()
                final int contentWidthLimit = mContext.getResources()
@@ -952,17 +953,20 @@ public class Spinner extends AbsSpinner implements OnClickListener {
                if (contentWidth > contentWidthLimit) {
                if (contentWidth > contentWidthLimit) {
                    contentWidth = contentWidthLimit;
                    contentWidth = contentWidthLimit;
                }
                }

                setContentWidth(Math.max(
                setContentWidth(Math.max(
                       contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
                       contentWidth, spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight));
            } else if (mDropDownWidth == MATCH_PARENT) {
            } else if (mDropDownWidth == MATCH_PARENT) {
                final int spinnerWidth = Spinner.this.getWidth();
                final int spinnerPaddingRight = Spinner.this.getPaddingRight();
                setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);
                setContentWidth(spinnerWidth - spinnerPaddingLeft - spinnerPaddingRight);
            } else {
            } else {
                setContentWidth(mDropDownWidth);
                setContentWidth(mDropDownWidth);
            }
            }
            setHorizontalOffset(bgOffset + spinnerPaddingLeft);

            if (isLayoutRtl()) {
                hOffset += spinnerWidth - spinnerPaddingRight - getWidth();
            } else {
                hOffset += spinnerPaddingLeft;
            }
            setHorizontalOffset(hOffset);
            setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
            setInputMethodMode(ListPopupWindow.INPUT_METHOD_NOT_NEEDED);
            super.show();
            super.show();
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
            getListView().setChoiceMode(ListView.CHOICE_MODE_SINGLE);
+1 −1
Original line number Original line Diff line number Diff line
@@ -1769,7 +1769,7 @@ please see styles_device_defaults.xml.
        <item name="android:dropDownHorizontalOffset">0dip</item>
        <item name="android:dropDownHorizontalOffset">0dip</item>
        <item name="android:dropDownWidth">wrap_content</item>
        <item name="android:dropDownWidth">wrap_content</item>
        <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
        <item name="android:popupPromptView">@android:layout/simple_dropdown_hint</item>
        <item name="android:gravity">left|center_vertical</item>
        <item name="android:gravity">start|center_vertical</item>
        <item name="android:disableChildrenWhenDisabled">true</item>
        <item name="android:disableChildrenWhenDisabled">true</item>
    </style>
    </style>