diff options
| -rw-r--r-- | api/current.xml | 11 | ||||
| -rw-r--r-- | core/java/android/view/ActionBarView.java | 13 | ||||
| -rw-r--r-- | core/java/com/android/internal/view/menu/ActionMenuView.java | 54 | ||||
| -rwxr-xr-x | core/res/res/values/attrs.xml | 7 | ||||
| -rw-r--r-- | core/res/res/values/dimens.xml | 3 | ||||
| -rw-r--r-- | core/res/res/values/public.xml | 1 | ||||
| -rw-r--r-- | core/res/res/values/themes.xml | 3 |
7 files changed, 83 insertions, 9 deletions
diff --git a/api/current.xml b/api/current.xml index 966154a..851e9c2 100644 --- a/api/current.xml +++ b/api/current.xml @@ -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" diff --git a/core/java/android/view/ActionBarView.java b/core/java/android/view/ActionBarView.java index 3966847..5142c50 100644 --- a/core/java/android/view/ActionBarView.java +++ b/core/java/android/view/ActionBarView.java @@ -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; } } diff --git a/core/java/com/android/internal/view/menu/ActionMenuView.java b/core/java/com/android/internal/view/menu/ActionMenuView.java index 596e3de..97d27ac 100644 --- a/core/java/com/android/internal/view/menu/ActionMenuView.java +++ b/core/java/com/android/internal/view/menu/ActionMenuView.java @@ -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); } diff --git a/core/res/res/values/attrs.xml b/core/res/res/values/attrs.xml index d984575..3d31c27 100755 --- a/core/res/res/values/attrs.xml +++ b/core/res/res/values/attrs.xml @@ -439,6 +439,13 @@ <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 --> <!-- =================== --> <eat-comment /> diff --git a/core/res/res/values/dimens.xml b/core/res/res/values/dimens.xml index 8a92757..656471c 100644 --- a/core/res/res/values/dimens.xml +++ b/core/res/res/values/dimens.xml @@ -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> diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index 3dba1a0..3d2db39 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -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" /> diff --git a/core/res/res/values/themes.xml b/core/res/res/values/themes.xml index 1f9f136..76bba4b 100644 --- a/core/res/res/values/themes.xml +++ b/core/res/res/values/themes.xml @@ -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 --> |
