From f023c2530a4591889dda614aaa016d5a9f9617ed Mon Sep 17 00:00:00 2001 From: Alan Viverette Date: Thu, 28 Aug 2014 13:55:18 -0700 Subject: [PATCH] Update action bar item widths, overflow menu, button, and spinner styles Manually modifies the overflow button hotspot bounds so that the ripple appears to be centered on the overflow icon. Adds styleable and parsing for list popup window offsets. Updates spinner text appearance to be consistent with drop down item text appearance. Also updates horizontal inner padding in buttons. BUG: 17305079 BUG: 17304391 BUG: 17302567 Change-Id: Iafddfef290078de968894a3b443ba9f60f84c6d4 --- .../android/widget/ActionMenuPresenter.java | 19 +++++++++++++++ .../android/widget/AutoCompleteTextView.java | 24 +++++++------------ core/java/android/widget/ListPopupWindow.java | 14 +++++++++++ core/java/android/widget/Spinner.java | 11 --------- .../res/drawable/btn_borderless_material.xml | 12 ++++------ .../res/res/drawable/btn_default_material.xml | 10 ++++---- .../res/drawable/btn_default_mtrl_shape.xml | 24 ++++++++++++------- core/res/res/drawable/btn_toggle_material.xml | 13 ++++++---- core/res/res/values/attrs.xml | 17 ++++++------- core/res/res/values/dimens_material.xml | 8 ++++++- core/res/res/values/styles_material.xml | 9 +++++-- 11 files changed, 94 insertions(+), 67 deletions(-) diff --git a/core/java/android/widget/ActionMenuPresenter.java b/core/java/android/widget/ActionMenuPresenter.java index 7123b9a1e2316..ef8c006e1554e 100644 --- a/core/java/android/widget/ActionMenuPresenter.java +++ b/core/java/android/widget/ActionMenuPresenter.java @@ -19,6 +19,8 @@ package android.widget; import android.content.Context; import android.content.res.Configuration; import android.content.res.Resources; +import android.graphics.Rect; +import android.graphics.drawable.Drawable; import android.os.Parcel; import android.os.Parcelable; import android.util.SparseBooleanArray; @@ -645,6 +647,23 @@ public class ActionMenuPresenter extends BaseMenuPresenter super.onInitializeAccessibilityNodeInfo(info); info.setCanOpenPopup(true); } + + @Override + protected void onLayout(boolean changed, int left, int top, int right, int bottom) { + super.onLayout(changed, left, top, right, bottom); + + // Set up the hotspot bounds to be centered on the image. + final Drawable d = getDrawable(); + final Drawable bg = getBackground(); + if (d != null && bg != null) { + final Rect bounds = d.getBounds(); + final int height = bottom - top; + final int offset = (height - bounds.width()) / 2; + final int hotspotLeft = bounds.left - offset; + final int hotspotRight = bounds.right + offset; + bg.setHotspotBounds(hotspotLeft, 0, hotspotRight, height); + } + } } private class OverflowPopup extends MenuPopupHelper { diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java index eb232fd8db5c6..6f52db6c94b4a 100644 --- a/core/java/android/widget/AutoCompleteTextView.java +++ b/core/java/android/widget/AutoCompleteTextView.java @@ -130,7 +130,7 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe } public AutoCompleteTextView(Context context, AttributeSet attrs) { - this(context, attrs, com.android.internal.R.attr.autoCompleteTextViewStyle); + this(context, attrs, R.attr.autoCompleteTextViewStyle); } public AutoCompleteTextView(Context context, AttributeSet attrs, int defStyleAttr) { @@ -141,23 +141,17 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { super(context, attrs, defStyleAttr, defStyleRes); - mPopup = new ListPopupWindow(context, attrs, - com.android.internal.R.attr.autoCompleteTextViewStyle); + mPopup = new ListPopupWindow(context, attrs, defStyleAttr, defStyleRes); mPopup.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); mPopup.setPromptPosition(ListPopupWindow.POSITION_PROMPT_BELOW); - final TypedArray a = context.obtainStyledAttributes(attrs, - com.android.internal.R.styleable.AutoCompleteTextView, defStyleAttr, defStyleRes); + final TypedArray a = context.obtainStyledAttributes( + attrs, R.styleable.AutoCompleteTextView, defStyleAttr, defStyleRes); - mThreshold = a.getInt( - R.styleable.AutoCompleteTextView_completionThreshold, 2); + mThreshold = a.getInt(R.styleable.AutoCompleteTextView_completionThreshold, 2); mPopup.setListSelector(a.getDrawable(R.styleable.AutoCompleteTextView_dropDownSelector)); - mPopup.setVerticalOffset((int) - a.getDimension(R.styleable.AutoCompleteTextView_dropDownVerticalOffset, 0.0f)); - mPopup.setHorizontalOffset((int) - a.getDimension(R.styleable.AutoCompleteTextView_dropDownHorizontalOffset, 0.0f)); - + // Get the anchor's id now, but the view won't be ready, so wait to actually get the // view and store it in mDropDownAnchorView lazily in getDropDownAnchorView later. // Defaults to NO_ID, in which case the getDropDownAnchorView method will simply return @@ -167,11 +161,9 @@ public class AutoCompleteTextView extends EditText implements Filter.FilterListe // For dropdown width, the developer can specify a specific width, or MATCH_PARENT // (for full screen width) or WRAP_CONTENT (to match the width of the anchored view). - mPopup.setWidth(a.getLayoutDimension( - R.styleable.AutoCompleteTextView_dropDownWidth, + mPopup.setWidth(a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownWidth, ViewGroup.LayoutParams.WRAP_CONTENT)); - mPopup.setHeight(a.getLayoutDimension( - R.styleable.AutoCompleteTextView_dropDownHeight, + mPopup.setHeight(a.getLayoutDimension(R.styleable.AutoCompleteTextView_dropDownHeight, ViewGroup.LayoutParams.WRAP_CONTENT)); mHintResource = a.getResourceId(R.styleable.AutoCompleteTextView_completionHintView, diff --git a/core/java/android/widget/ListPopupWindow.java b/core/java/android/widget/ListPopupWindow.java index 6a514bab99849..3c186e3b9d2bd 100644 --- a/core/java/android/widget/ListPopupWindow.java +++ b/core/java/android/widget/ListPopupWindow.java @@ -20,6 +20,7 @@ import android.animation.Animator; import android.animation.AnimatorListenerAdapter; import android.animation.ObjectAnimator; import android.content.Context; +import android.content.res.TypedArray; import android.database.DataSetObserver; import android.graphics.Rect; import android.graphics.drawable.Drawable; @@ -40,6 +41,7 @@ import android.view.ViewGroup; import android.view.ViewParent; import android.view.animation.AccelerateDecelerateInterpolator; +import com.android.internal.R; import com.android.internal.widget.AutoScrollHelper.AbsListViewAutoScroller; import java.util.Locale; @@ -208,6 +210,18 @@ public class ListPopupWindow { */ public ListPopupWindow(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes) { mContext = context; + + final TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.ListPopupWindow, + defStyleAttr, defStyleRes); + mDropDownHorizontalOffset = a.getDimensionPixelOffset( + R.styleable.ListPopupWindow_dropDownHorizontalOffset, 0); + mDropDownVerticalOffset = a.getDimensionPixelOffset( + R.styleable.ListPopupWindow_dropDownVerticalOffset, 0); + if (mDropDownVerticalOffset != 0) { + mDropDownVerticalOffsetSet = true; + } + a.recycle(); + mPopup = new PopupWindow(context, attrs, defStyleAttr, defStyleRes); mPopup.setInputMethodMode(PopupWindow.INPUT_METHOD_NEEDED); // Set the default layout direction to match the default locale one diff --git a/core/java/android/widget/Spinner.java b/core/java/android/widget/Spinner.java index 9914800ec6cae..1fc5437c5be85 100644 --- a/core/java/android/widget/Spinner.java +++ b/core/java/android/widget/Spinner.java @@ -209,17 +209,6 @@ public class Spinner extends AbsSpinner implements OnClickListener { ViewGroup.LayoutParams.WRAP_CONTENT); popup.setBackgroundDrawable(a.getDrawable( com.android.internal.R.styleable.Spinner_popupBackground)); - 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; mForwardingListener = new ForwardingListener(this) { diff --git a/core/res/res/drawable/btn_borderless_material.xml b/core/res/res/drawable/btn_borderless_material.xml index 016f0ff156839..08e1060ebad31 100644 --- a/core/res/res/drawable/btn_borderless_material.xml +++ b/core/res/res/drawable/btn_borderless_material.xml @@ -14,10 +14,8 @@ limitations under the License. --> - - - - - + + + diff --git a/core/res/res/drawable/btn_default_material.xml b/core/res/res/drawable/btn_default_material.xml index d00a348398271..ed2b5aacb2369 100644 --- a/core/res/res/drawable/btn_default_material.xml +++ b/core/res/res/drawable/btn_default_material.xml @@ -14,9 +14,7 @@ limitations under the License. --> - - - - - + + + diff --git a/core/res/res/drawable/btn_default_mtrl_shape.xml b/core/res/res/drawable/btn_default_mtrl_shape.xml index 9235c76860857..6d0f7f8c63c7b 100644 --- a/core/res/res/drawable/btn_default_mtrl_shape.xml +++ b/core/res/res/drawable/btn_default_mtrl_shape.xml @@ -15,12 +15,18 @@ --> - - - - - + + + + + + + + diff --git a/core/res/res/drawable/btn_toggle_material.xml b/core/res/res/drawable/btn_toggle_material.xml index 9726782e0efbb..f91d4cc0cde91 100644 --- a/core/res/res/drawable/btn_toggle_material.xml +++ b/core/res/res/drawable/btn_toggle_material.xml @@ -15,7 +15,10 @@ --> + android:insetLeft="@dimen/button_inset_horizontal_material" + android:insetTop="@dimen/button_inset_vertical_material" + android:insetRight="@dimen/button_inset_horizontal_material" + android:insetBottom="@dimen/button_inset_vertical_material"> @@ -25,10 +28,10 @@ - + diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index d8b129c4fa44a..b5876f08fa989 100644 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -4172,10 +4172,6 @@ - - - - @@ -4223,6 +4219,13 @@ + + + + + + + @@ -4281,12 +4284,6 @@ - - - - 2dp + + 6dp + @dimen/control_inset_material + + @dimen/control_padding_material + 8dp + 4dp diff --git a/core/res/res/values/styles_material.xml b/core/res/res/values/styles_material.xml index 3ee555254cd12..da32c42cd2dd8 100644 --- a/core/res/res/values/styles_material.xml +++ b/core/res/res/values/styles_material.xml @@ -306,7 +306,7 @@ please see styles_device_defaults.xml.