diff --git a/core/java/com/android/internal/view/menu/ActionMenuItemView.java b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
index a10d241ef4e4b..d5c2018d2b3a4 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuItemView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuItemView.java
@@ -27,28 +27,26 @@ import android.view.Gravity;
import android.view.MotionEvent;
import android.view.View;
import android.view.accessibility.AccessibilityEvent;
-import android.widget.Button;
-import android.widget.ImageButton;
-import android.widget.LinearLayout;
+import android.widget.TextView;
import android.widget.Toast;
/**
* @hide
*/
-public class ActionMenuItemView extends LinearLayout
+public class ActionMenuItemView extends TextView
implements MenuView.ItemView, View.OnClickListener, View.OnLongClickListener,
ActionMenuView.ActionMenuChildView {
private static final String TAG = "ActionMenuItemView";
private MenuItemImpl mItemData;
private CharSequence mTitle;
+ private Drawable mIcon;
private MenuBuilder.ItemInvoker mItemInvoker;
- private ImageButton mImageButton;
- private Button mTextButton;
private boolean mAllowTextWithIcon;
private boolean mExpandedFormat;
private int mMinWidth;
+ private int mSavedPaddingLeft;
public ActionMenuItemView(Context context) {
this(context, null);
@@ -68,17 +66,12 @@ public class ActionMenuItemView extends LinearLayout
mMinWidth = a.getDimensionPixelSize(
com.android.internal.R.styleable.ActionMenuItemView_minWidth, 0);
a.recycle();
- }
- @Override
- public void onFinishInflate() {
- mImageButton = (ImageButton) findViewById(com.android.internal.R.id.imageButton);
- mTextButton = (Button) findViewById(com.android.internal.R.id.textButton);
- mImageButton.setOnClickListener(this);
- mTextButton.setOnClickListener(this);
- mImageButton.setOnLongClickListener(this);
setOnClickListener(this);
setOnLongClickListener(this);
+
+ // Save the inflated padding for later, we'll need it.
+ mSavedPaddingLeft = getPaddingLeft();
}
public MenuItemImpl getItemData() {
@@ -96,13 +89,6 @@ public class ActionMenuItemView extends LinearLayout
setEnabled(itemData.isEnabled());
}
- @Override
- public void setEnabled(boolean enabled) {
- super.setEnabled(enabled);
- mImageButton.setEnabled(enabled);
- mTextButton.setEnabled(enabled);
- }
-
public void onClick(View v) {
if (mItemInvoker != null) {
mItemInvoker.invokeItem(mItemData);
@@ -135,26 +121,22 @@ public class ActionMenuItemView extends LinearLayout
}
private void updateTextButtonVisibility() {
- boolean visible = !TextUtils.isEmpty(mTextButton.getText());
- visible &= mImageButton.getDrawable() == null ||
+ boolean visible = !TextUtils.isEmpty(mTitle);
+ visible &= mIcon == null ||
(mItemData.showsTextAsAction() && (mAllowTextWithIcon || mExpandedFormat));
- mTextButton.setVisibility(visible ? VISIBLE : GONE);
+ setText(visible ? mTitle : null);
}
public void setIcon(Drawable icon) {
- mImageButton.setImageDrawable(icon);
- if (icon != null) {
- mImageButton.setVisibility(VISIBLE);
- } else {
- mImageButton.setVisibility(GONE);
- }
+ mIcon = icon;
+ setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
updateTextButtonVisibility();
}
public boolean hasText() {
- return mTextButton.getVisibility() != GONE;
+ return !TextUtils.isEmpty(getText());
}
public void setShortcut(boolean showShortcut, char shortcutKey) {
@@ -164,8 +146,6 @@ public class ActionMenuItemView extends LinearLayout
public void setTitle(CharSequence title) {
mTitle = title;
- mTextButton.setText(mTitle);
-
setContentDescription(mTitle);
updateTextButtonVisibility();
}
@@ -236,12 +216,17 @@ public class ActionMenuItemView extends LinearLayout
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
+ final boolean textVisible = hasText();
+ if (textVisible) {
+ setPadding(mSavedPaddingLeft, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ }
+
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
- final int specSize = MeasureSpec.getSize(widthMeasureSpec);
+ final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
final int oldMeasuredWidth = getMeasuredWidth();
- final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(specSize, mMinWidth)
+ final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(widthSize, mMinWidth)
: mMinWidth;
if (widthMode != MeasureSpec.EXACTLY && mMinWidth > 0 && oldMeasuredWidth < targetWidth) {
@@ -249,5 +234,13 @@ public class ActionMenuItemView extends LinearLayout
super.onMeasure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
heightMeasureSpec);
}
+
+ if (!textVisible && mIcon != null) {
+ // TextView won't center compound drawables in both dimensions without
+ // a little coercion. Pad in to center the icon after we've measured.
+ final int w = getMeasuredWidth();
+ final int dw = mIcon.getIntrinsicWidth();
+ setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
+ }
}
}
diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java
index 8d8c72c1d0706..e00fe9f7043ad 100644
--- a/core/java/com/android/internal/view/menu/ActionMenuView.java
+++ b/core/java/com/android/internal/view/menu/ActionMenuView.java
@@ -96,6 +96,13 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
if (mFormatItems) {
onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec);
} else {
+ // Previous measurement at exact format may have set margins - reset them.
+ final int childCount = getChildCount();
+ for (int i = 0; i < childCount; i++) {
+ final View child = getChildAt(i);
+ final LayoutParams lp = (LayoutParams) child.getLayoutParams();
+ lp.leftMargin = lp.rightMargin = 0;
+ }
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
}
diff --git a/core/res/res/layout/action_menu_item_layout.xml b/core/res/res/layout/action_menu_item_layout.xml
index dca6c52d21ef0..ba7cf3b54872d 100644
--- a/core/res/res/layout/action_menu_item_layout.xml
+++ b/core/res/res/layout/action_menu_item_layout.xml
@@ -18,39 +18,12 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
- android:addStatesFromChildren="true"
android:gravity="center"
android:focusable="true"
- android:paddingLeft="4dip"
- android:paddingRight="4dip"
- style="?android:attr/actionButtonStyle">
-
-
-
+ android:paddingTop="4dip"
+ android:paddingBottom="4dip"
+ android:paddingLeft="8dip"
+ android:paddingRight="8dip"
+ android:textAppearance="?attr/actionMenuTextAppearance"
+ android:textColor="?attr/actionMenuTextColor"
+ style="?android:attr/actionButtonStyle" />
diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml
index 519ab8747bc8c..a089021b8b1d1 100644
--- a/core/res/res/values/public.xml
+++ b/core/res/res/values/public.xml
@@ -88,7 +88,6 @@
-
@@ -173,7 +172,6 @@
-