Action bar button layout changes.

Theme attribute added for spacing between action buttons. Action
buttons are now allowed to fill up to half of the total action bar's
width.

Change-Id: Iabbc67e695684529dfae9681d4d9580cd30839d0
This commit is contained in:
Adam Powell
2010-06-17 12:51:21 -07:00
parent 831c6cc7c1
commit 7ade1be822
7 changed files with 83 additions and 9 deletions

View File

@@ -2088,6 +2088,17 @@
visibility="public"
>
</field>
<field name="actionButtonPadding"
type="int"
transient="false"
volatile="false"
value="16843547"
static="true"
final="true"
deprecated="not deprecated"
visibility="public"
>
</field>
<field name="actionButtonStyle"
type="int"
transient="false"

View File

@@ -19,6 +19,7 @@ package android.view;
import com.android.internal.R;
import com.android.internal.view.menu.ActionMenu;
import com.android.internal.view.menu.ActionMenuItem;
import com.android.internal.view.menu.ActionMenuView;
import com.android.internal.view.menu.MenuBuilder;
import android.app.ActionBar;
@@ -85,7 +86,7 @@ public class ActionBarView extends ViewGroup {
private boolean mShowMenu;
private MenuBuilder mOptionsMenu;
private View mMenuView;
private ActionMenuView mMenuView;
private ActionMenuItem mLogoNavItem;
@@ -186,7 +187,9 @@ public class ActionBarView extends ViewGroup {
if (mMenuView != null) {
removeView(mMenuView);
}
final View menuView = builder.getMenuView(MenuBuilder.TYPE_ACTION_BUTTON, null);
final ActionMenuView menuView = (ActionMenuView) builder.getMenuView(
MenuBuilder.TYPE_ACTION_BUTTON, null);
mActionSpacing = menuView.getItemMargin();
final LayoutParams layoutParams = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.MATCH_PARENT);
menuView.setLayoutParams(layoutParams);
@@ -426,7 +429,7 @@ public class ActionBarView extends ViewGroup {
if (mMenuView != null) {
availableWidth = measureChildView(mMenuView, availableWidth,
childSpecHeight, mActionSpacing);
childSpecHeight, 0);
}
switch (mNavigationMode) {
@@ -497,9 +500,9 @@ public class ActionBarView extends ViewGroup {
x = r - l - getPaddingRight();
if (mMenuView != null) {
x -= positionChildInverse(mMenuView, x, y, contentHeight) + mActionSpacing;
x -= positionChildInverse(mMenuView, x + mActionSpacing, y, contentHeight)
- mActionSpacing;
}
}

View File

@@ -16,7 +16,10 @@
package com.android.internal.view.menu;
import android.content.Context;
import android.content.res.Resources;
import android.content.res.TypedArray;
import android.util.AttributeSet;
import android.view.ViewGroup;
import android.widget.LinearLayout;
import java.util.ArrayList;
@@ -27,10 +30,11 @@ import java.util.ArrayList;
public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvoker, MenuView {
private static final String TAG = "ActionMenuView";
// TODO: Make this a ViewConfiguration constant.
private static final int MAX_ACTION_ITEMS = 3;
private MenuBuilder mMenu;
private int mItemPadding;
private int mItemMargin;
private int mMaxItems;
public ActionMenuView(Context context) {
this(context, null);
@@ -38,6 +42,48 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
public ActionMenuView(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray a = context.obtainStyledAttributes(attrs,
com.android.internal.R.styleable.Theme);
mItemPadding = a.getDimensionPixelOffset(
com.android.internal.R.styleable.Theme_actionButtonPadding, 0);
mItemMargin = mItemPadding / 2;
a.recycle();
final Resources res = getResources();
final int size = res.getDimensionPixelSize(com.android.internal.R.dimen.action_icon_size);
final int spaceAvailable = res.getDisplayMetrics().widthPixels / 2;
final int itemSpace = size + mItemPadding;
mMaxItems = spaceAvailable / (itemSpace > 0 ? itemSpace : 1);
}
@Override
protected boolean checkLayoutParams(ViewGroup.LayoutParams p) {
if (p instanceof LayoutParams) {
LayoutParams lp = (LayoutParams) p;
return lp.leftMargin == mItemMargin && lp.rightMargin == mItemMargin &&
lp.width == LayoutParams.WRAP_CONTENT && lp.height == LayoutParams.WRAP_CONTENT;
}
return false;
}
@Override
protected LayoutParams generateDefaultLayoutParams() {
LayoutParams params = new LayoutParams(LayoutParams.WRAP_CONTENT,
LayoutParams.WRAP_CONTENT);
params.leftMargin = mItemMargin;
params.rightMargin = mItemMargin;
return params;
}
@Override
protected LayoutParams generateLayoutParams(ViewGroup.LayoutParams p) {
return generateDefaultLayoutParams();
}
public int getItemMargin() {
return mItemMargin;
}
public boolean invokeItem(MenuItemImpl item) {
@@ -49,7 +95,7 @@ public class ActionMenuView extends LinearLayout implements MenuBuilder.ItemInvo
}
public void initialize(MenuBuilder menu, int menuType) {
menu.setMaxActionItems(MAX_ACTION_ITEMS);
menu.setMaxActionItems(mMaxItems);
mMenu = menu;
updateChildren(true);
}

View File

@@ -438,6 +438,13 @@
<!-- Default quickcontact badge style with large quickcontact window. -->
<attr name="quickContactBadgeStyleSmallWindowLarge" format="reference" />
<!-- =================== -->
<!-- Action bar styles -->
<!-- =================== -->
<eat-comment />
<!-- Default amount of padding to use between action buttons. -->
<attr name="actionButtonPadding" format="dimension" />
<!-- =================== -->
<!-- Preference styles -->
<!-- =================== -->

View File

@@ -25,6 +25,9 @@
<!-- The standard size (both width and height) of an application icon that
will be displayed in the app launcher and elsewhere. -->
<dimen name="app_icon_size">48dip</dimen>
<!-- The standard size (both width and height) of an action icon that will
be displayed in application action bars. -->
<dimen name="action_icon_size">48dip</dimen>
<dimen name="toast_y_offset">64dip</dimen>
<!-- Height of the status bar -->
<dimen name="status_bar_height">25dip</dimen>

View File

@@ -1298,6 +1298,7 @@
<public type="attr" name="actionDropDownStyle" />
<public type="attr" name="actionButtonStyle" />
<public type="attr" name="showAsAction" />
<public type="attr" name="actionButtonPadding" />
<public type="id" name="home" />

View File

@@ -203,6 +203,9 @@
<!-- Search widget styles -->
<item name="searchWidgetCorpusItemBackground">@android:color/search_widget_corpus_item_background</item>
<!-- Action bar styles -->
<item name="actionButtonPadding">12dip</item>
</style>
<!-- Variant of the default (dark) theme with no title bar -->