Skip to content

Commit 75d022a

Browse files
committed
Action buttons are now 1 view instead of 3.
Change-Id: I42afe0e4bd20c3dbe86e2c43a6bc1d776361dca9
1 parent 42b40c0 commit 75d022a

File tree

4 files changed

+42
-71
lines changed

4 files changed

+42
-71
lines changed

core/java/com/android/internal/view/menu/ActionMenuItemView.java

Lines changed: 28 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -27,28 +27,26 @@
2727
import android.view.MotionEvent;
2828
import android.view.View;
2929
import android.view.accessibility.AccessibilityEvent;
30-
import android.widget.Button;
31-
import android.widget.ImageButton;
32-
import android.widget.LinearLayout;
30+
import android.widget.TextView;
3331
import android.widget.Toast;
3432

3533
/**
3634
* @hide
3735
*/
38-
public class ActionMenuItemView extends LinearLayout
36+
public class ActionMenuItemView extends TextView
3937
implements MenuView.ItemView, View.OnClickListener, View.OnLongClickListener,
4038
ActionMenuView.ActionMenuChildView {
4139
private static final String TAG = "ActionMenuItemView";
4240

4341
private MenuItemImpl mItemData;
4442
private CharSequence mTitle;
43+
private Drawable mIcon;
4544
private MenuBuilder.ItemInvoker mItemInvoker;
4645

47-
private ImageButton mImageButton;
48-
private Button mTextButton;
4946
private boolean mAllowTextWithIcon;
5047
private boolean mExpandedFormat;
5148
private int mMinWidth;
49+
private int mSavedPaddingLeft;
5250

5351
public ActionMenuItemView(Context context) {
5452
this(context, null);
@@ -68,17 +66,12 @@ public ActionMenuItemView(Context context, AttributeSet attrs, int defStyle) {
6866
mMinWidth = a.getDimensionPixelSize(
6967
com.android.internal.R.styleable.ActionMenuItemView_minWidth, 0);
7068
a.recycle();
71-
}
7269

73-
@Override
74-
public void onFinishInflate() {
75-
mImageButton = (ImageButton) findViewById(com.android.internal.R.id.imageButton);
76-
mTextButton = (Button) findViewById(com.android.internal.R.id.textButton);
77-
mImageButton.setOnClickListener(this);
78-
mTextButton.setOnClickListener(this);
79-
mImageButton.setOnLongClickListener(this);
8070
setOnClickListener(this);
8171
setOnLongClickListener(this);
72+
73+
// Save the inflated padding for later, we'll need it.
74+
mSavedPaddingLeft = getPaddingLeft();
8275
}
8376

8477
public MenuItemImpl getItemData() {
@@ -96,13 +89,6 @@ public void initialize(MenuItemImpl itemData, int menuType) {
9689
setEnabled(itemData.isEnabled());
9790
}
9891

99-
@Override
100-
public void setEnabled(boolean enabled) {
101-
super.setEnabled(enabled);
102-
mImageButton.setEnabled(enabled);
103-
mTextButton.setEnabled(enabled);
104-
}
105-
10692
public void onClick(View v) {
10793
if (mItemInvoker != null) {
10894
mItemInvoker.invokeItem(mItemData);
@@ -135,26 +121,22 @@ public void setExpandedFormat(boolean expandedFormat) {
135121
}
136122

137123
private void updateTextButtonVisibility() {
138-
boolean visible = !TextUtils.isEmpty(mTextButton.getText());
139-
visible &= mImageButton.getDrawable() == null ||
124+
boolean visible = !TextUtils.isEmpty(mTitle);
125+
visible &= mIcon == null ||
140126
(mItemData.showsTextAsAction() && (mAllowTextWithIcon || mExpandedFormat));
141127

142-
mTextButton.setVisibility(visible ? VISIBLE : GONE);
128+
setText(visible ? mTitle : null);
143129
}
144130

145131
public void setIcon(Drawable icon) {
146-
mImageButton.setImageDrawable(icon);
147-
if (icon != null) {
148-
mImageButton.setVisibility(VISIBLE);
149-
} else {
150-
mImageButton.setVisibility(GONE);
151-
}
132+
mIcon = icon;
133+
setCompoundDrawablesWithIntrinsicBounds(icon, null, null, null);
152134

153135
updateTextButtonVisibility();
154136
}
155137

156138
public boolean hasText() {
157-
return mTextButton.getVisibility() != GONE;
139+
return !TextUtils.isEmpty(getText());
158140
}
159141

160142
public void setShortcut(boolean showShortcut, char shortcutKey) {
@@ -164,8 +146,6 @@ public void setShortcut(boolean showShortcut, char shortcutKey) {
164146
public void setTitle(CharSequence title) {
165147
mTitle = title;
166148

167-
mTextButton.setText(mTitle);
168-
169149
setContentDescription(mTitle);
170150
updateTextButtonVisibility();
171151
}
@@ -236,18 +216,31 @@ public boolean onLongClick(View v) {
236216

237217
@Override
238218
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
219+
final boolean textVisible = hasText();
220+
if (textVisible) {
221+
setPadding(mSavedPaddingLeft, getPaddingTop(), getPaddingRight(), getPaddingBottom());
222+
}
223+
239224
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
240225

241226
final int widthMode = MeasureSpec.getMode(widthMeasureSpec);
242-
final int specSize = MeasureSpec.getSize(widthMeasureSpec);
227+
final int widthSize = MeasureSpec.getSize(widthMeasureSpec);
243228
final int oldMeasuredWidth = getMeasuredWidth();
244-
final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(specSize, mMinWidth)
229+
final int targetWidth = widthMode == MeasureSpec.AT_MOST ? Math.min(widthSize, mMinWidth)
245230
: mMinWidth;
246231

247232
if (widthMode != MeasureSpec.EXACTLY && mMinWidth > 0 && oldMeasuredWidth < targetWidth) {
248233
// Remeasure at exactly the minimum width.
249234
super.onMeasure(MeasureSpec.makeMeasureSpec(targetWidth, MeasureSpec.EXACTLY),
250235
heightMeasureSpec);
251236
}
237+
238+
if (!textVisible && mIcon != null) {
239+
// TextView won't center compound drawables in both dimensions without
240+
// a little coercion. Pad in to center the icon after we've measured.
241+
final int w = getMeasuredWidth();
242+
final int dw = mIcon.getIntrinsicWidth();
243+
setPadding((w - dw) / 2, getPaddingTop(), getPaddingRight(), getPaddingBottom());
244+
}
252245
}
253246
}

core/java/com/android/internal/view/menu/ActionMenuView.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -96,6 +96,13 @@ protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
9696
if (mFormatItems) {
9797
onMeasureExactFormat(widthMeasureSpec, heightMeasureSpec);
9898
} else {
99+
// Previous measurement at exact format may have set margins - reset them.
100+
final int childCount = getChildCount();
101+
for (int i = 0; i < childCount; i++) {
102+
final View child = getChildAt(i);
103+
final LayoutParams lp = (LayoutParams) child.getLayoutParams();
104+
lp.leftMargin = lp.rightMargin = 0;
105+
}
99106
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
100107
}
101108
}

core/res/res/layout/action_menu_item_layout.xml

Lines changed: 7 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -18,39 +18,12 @@
1818
android:layout_width="wrap_content"
1919
android:layout_height="wrap_content"
2020
android:layout_gravity="center"
21-
android:addStatesFromChildren="true"
2221
android:gravity="center"
2322
android:focusable="true"
24-
android:paddingLeft="4dip"
25-
android:paddingRight="4dip"
26-
style="?android:attr/actionButtonStyle">
27-
<ImageButton android:id="@+id/imageButton"
28-
android:layout_width="wrap_content"
29-
android:layout_height="wrap_content"
30-
android:layout_gravity="center"
31-
android:visibility="gone"
32-
android:layout_marginTop="4dip"
33-
android:layout_marginBottom="4dip"
34-
android:layout_marginLeft="4dip"
35-
android:layout_marginRight="4dip"
36-
android:scaleType="fitCenter"
37-
android:adjustViewBounds="true"
38-
android:background="@null"
39-
android:focusable="false" />
40-
<Button android:id="@+id/textButton"
41-
android:layout_width="wrap_content"
42-
android:layout_height="wrap_content"
43-
android:layout_gravity="center"
44-
android:visibility="gone"
45-
android:textAppearance="?attr/actionMenuTextAppearance"
46-
style="?attr/buttonStyleSmall"
47-
android:textColor="?attr/actionMenuTextColor"
48-
android:singleLine="true"
49-
android:ellipsize="none"
50-
android:background="@null"
51-
android:paddingTop="4dip"
52-
android:paddingBottom="4dip"
53-
android:paddingLeft="4dip"
54-
android:paddingRight="4dip"
55-
android:focusable="false" />
56-
</com.android.internal.view.menu.ActionMenuItemView>
23+
android:paddingTop="4dip"
24+
android:paddingBottom="4dip"
25+
android:paddingLeft="8dip"
26+
android:paddingRight="8dip"
27+
android:textAppearance="?attr/actionMenuTextAppearance"
28+
android:textColor="?attr/actionMenuTextColor"
29+
style="?android:attr/actionButtonStyle" />

core/res/res/values/public.xml

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -88,7 +88,6 @@
8888
<java-symbol type="id" name="hour" />
8989
<java-symbol type="id" name="icon" />
9090
<java-symbol type="id" name="image" />
91-
<java-symbol type="id" name="imageButton" />
9291
<java-symbol type="id" name="increment" />
9392
<java-symbol type="id" name="internalEmpty" />
9493
<java-symbol type="id" name="info" />
@@ -173,7 +172,6 @@
173172
<java-symbol type="id" name="switch_old" />
174173
<java-symbol type="id" name="switchWidget" />
175174
<java-symbol type="id" name="text" />
176-
<java-symbol type="id" name="textButton" />
177175
<java-symbol type="id" name="time" />
178176
<java-symbol type="id" name="time_current" />
179177
<java-symbol type="id" name="timeDisplayBackground" />

0 commit comments

Comments
 (0)