diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java index d5f69bab9fcd3..7218ddc090f08 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java @@ -66,7 +66,7 @@ public class ActionMenuItemView extends LinearLayout mItemData = itemData; setIcon(itemData.getIcon()); - setTitle(itemData.getTitle()); // Title only takes effect if there is no icon + setTitle(itemData.getTitleForItemView(this)); // Title only takes effect if there is no icon setId(itemData.getItemId()); setVisibility(itemData.isVisible() ? View.VISIBLE : View.GONE); @@ -91,7 +91,7 @@ public class ActionMenuItemView extends LinearLayout } public boolean prefersCondensedTitle() { - return false; + return true; } public void setCheckable(boolean checkable) { diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index 463902fe53e9b..8e491e9fdd620 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -20,9 +20,9 @@ import android.content.res.Configuration; import android.content.res.Resources; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; +import android.text.TextUtils; import android.util.AttributeSet; import android.view.Gravity; -import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.view.ViewParent; @@ -186,10 +186,14 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo boolean needsDivider = false; for (int i = 0; i < itemCount; i++) { + final MenuItemImpl itemData = itemsToShow.get(i); + boolean hasDivider = false; + if (needsDivider) { addView(makeDividerView(), makeDividerLayoutParams()); + hasDivider = true; } - final MenuItemImpl itemData = itemsToShow.get(i); + View actionView = itemData.getActionView(); if (actionView != null) { @@ -199,14 +203,22 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo } addView(actionView, makeActionViewLayoutParams(actionView)); } else { - needsDivider = addItemView(i == 0 || !needsDivider, - (ActionMenuItemView) itemData.getItemView( - MenuBuilder.TYPE_ACTION_BUTTON, this)); + ActionMenuItemView view = (ActionMenuItemView) itemData.getItemView( + MenuBuilder.TYPE_ACTION_BUTTON, this); + view.setItemInvoker(this); + if (i > 0 && !hasDivider && view.hasText() && itemData.getIcon() == null) { + addView(makeDividerView(), makeDividerLayoutParams()); + } + addView(view); + needsDivider = view.hasText(); } } if (reserveOverflow) { if (mMenu.getNonActionItems(true).size() > 0) { + if (itemCount > 0) { + addView(makeDividerView(), makeDividerLayoutParams()); + } OverflowMenuButton button = new OverflowMenuButton(mContext); addView(button); mOverflowButton = button; diff --git a/core/java/com/android/internal/view/menu/ListMenuItemView.java b/core/java/com/android/internal/view/menu/ListMenuItemView.java index e15587520625b..02584b618cf24 100644 --- a/core/java/com/android/internal/view/menu/ListMenuItemView.java +++ b/core/java/com/android/internal/view/menu/ListMenuItemView.java @@ -44,6 +44,7 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView private Drawable mBackground; private int mTextAppearance; private Context mTextAppearanceContext; + private boolean mPreserveIconSpacing; private int mMenuType; @@ -57,6 +58,8 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView mBackground = a.getDrawable(com.android.internal.R.styleable.MenuView_itemBackground); mTextAppearance = a.getResourceId(com.android.internal.R.styleable. MenuView_itemTextAppearance, -1); + mPreserveIconSpacing = a.getBoolean( + com.android.internal.R.styleable.MenuView_preserveIconSpacing, false); mTextAppearanceContext = context; a.recycle(); @@ -184,8 +187,8 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView } public void setIcon(Drawable icon) { - - if (!mItemData.shouldShowIcon(mMenuType)) { + final boolean showIcon = mItemData.shouldShowIcon(mMenuType); + if (!showIcon && !mPreserveIconSpacing) { return; } @@ -197,8 +200,8 @@ public class ListMenuItemView extends LinearLayout implements MenuView.ItemView insertIconView(); } - if (icon != null) { - mIconView.setImageDrawable(icon); + if (icon != null || mPreserveIconSpacing) { + mIconView.setImageDrawable(showIcon ? icon : null); if (mIconView.getVisibility() != VISIBLE) { mIconView.setVisibility(VISIBLE); diff --git a/core/java/com/android/internal/view/menu/MenuItemImpl.java b/core/java/com/android/internal/view/menu/MenuItemImpl.java index e1aa385fa051a..6fbae9446f30a 100644 --- a/core/java/com/android/internal/view/menu/MenuItemImpl.java +++ b/core/java/com/android/internal/view/menu/MenuItemImpl.java @@ -644,7 +644,6 @@ public final class MenuItemImpl implements MenuItem { public boolean shouldShowIcon(int menuType) { return menuType == MenuBuilder.TYPE_ICON || menuType == MenuBuilder.TYPE_ACTION_BUTTON || - menuType == MenuBuilder.TYPE_POPUP || mMenu.getOptionalIconsVisible(); } diff --git a/core/java/com/android/internal/widget/ActionBarView.java b/core/java/com/android/internal/widget/ActionBarView.java index 1d9276a39daf8..297dde78254b3 100644 --- a/core/java/com/android/internal/widget/ActionBarView.java +++ b/core/java/com/android/internal/widget/ActionBarView.java @@ -437,7 +437,7 @@ public class ActionBarView extends ViewGroup { mListNavLayout = new LinearLayout(mContext, null, com.android.internal.R.attr.actionBarTabBarStyle); LinearLayout.LayoutParams params = new LinearLayout.LayoutParams( - LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); + LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); params.gravity = Gravity.CENTER; mListNavLayout.addView(mSpinner, params); } diff --git a/core/res/res/layout/action_menu_item_layout.xml b/core/res/res/layout/action_menu_item_layout.xml index e502b1e6c03a2..e0018945d7b4f 100644 --- a/core/res/res/layout/action_menu_item_layout.xml +++ b/core/res/res/layout/action_menu_item_layout.xml @@ -20,10 +20,11 @@ android:layout_gravity="center" android:addStatesFromChildren="true" android:background="?attr/selectableItemBackground" - android:minWidth="64dip" - android:minHeight="?attr/actionBarSize" + android:gravity="center" android:paddingLeft="12dip" - android:paddingRight="12dip"> + android:paddingRight="12dip" + android:minWidth="64dip" + android:minHeight="?attr/actionBarSize"> diff --git a/core/res/res/layout/popup_menu_item_layout.xml b/core/res/res/layout/popup_menu_item_layout.xml index 2bbb4d06baf17..d22f74a055b7d 100644 --- a/core/res/res/layout/popup_menu_item_layout.xml +++ b/core/res/res/layout/popup_menu_item_layout.xml @@ -16,7 +16,8 @@ @@ -28,8 +29,6 @@ android:layout_weight="1" android:layout_height="wrap_content" android:layout_gravity="center_vertical" - android:layout_marginLeft="6dip" - android:layout_marginRight="6dip" android:duplicateParentState="true"> + + diff --git a/core/res/res/values/styles.xml b/core/res/res/values/styles.xml index cf9c00b2547d9..1183915003d3e 100644 --- a/core/res/res/values/styles.xml +++ b/core/res/res/values/styles.xml @@ -1194,7 +1194,7 @@