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:
@@ -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"
|
||||
|
||||
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
@@ -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);
|
||||
}
|
||||
|
||||
@@ -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 -->
|
||||
<!-- =================== -->
|
||||
|
||||
@@ -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>
|
||||
|
||||
@@ -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" />
|
||||
|
||||
|
||||
@@ -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 -->
|
||||
|
||||
Reference in New Issue
Block a user