Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 7ade1be8 authored by Adam Powell's avatar Adam Powell
Browse files

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
parent 831c6cc7
Loading
Loading
Loading
Loading
+11 −0
Original line number Diff line number Diff line
@@ -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"
+8 −5
Original line number Diff line number Diff line
@@ -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;
        }
    }

+50 −4
Original line number Diff line number Diff line
@@ -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,17 +30,60 @@ 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);
    }
    
    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);
    }
+7 −0
Original line number Diff line number Diff line
@@ -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   -->
        <!-- =================== -->
+3 −0
Original line number Diff line number Diff line
@@ -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>
Loading