Evenly spaced menu items on Toolbar

前端 未结 8 768
心在旅途
心在旅途 2020-12-01 02:09

So I\'ve been trying to implement android.support.v7.widget.Toolbar in my Activity and to make it look similar to the previously supported split ActionBar.

8条回答
  •  失恋的感觉
    2020-12-01 02:42

    Here's what worked* for me:

    EnhancedMenuInflater.java

    import android.support.v4.internal.view.SupportMenuItem;
    import android.support.v7.internal.view.menu.MenuItemImpl;
    import android.view.Menu;
    import android.view.MenuInflater;
    import android.view.MenuItem;
    
    import here.is.your.R;
    
    public class EnhancedMenuInflater {
    
        public static void inflate(MenuInflater inflater, Menu menu, boolean forceVisible) {
            inflater.inflate(R.menu.menu, menu);
    
            if (!forceVisible) {
                return;
            }
    
            int size = menu.size();
            for (int i = 0; i < size; i++) {
                MenuItem item = menu.getItem(i);
                // check if app:showAsAction = "ifRoom"
                if (((MenuItemImpl) item).requestsActionButton()) {
                    item.setShowAsAction(SupportMenuItem.SHOW_AS_ACTION_ALWAYS);
                }
            }
        }
    }
    

    MainActivity.java

    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        if (toolbar == null) {
            EnhancedMenuInflater.inflate(getMenuInflater(), menu, false);
        }
        return super.onCreateOptionsMenu(menu);
    }
    
    // somewhere after views have been set.
    if (toolbar != null) {
        EnhancedMenuInflater.inflate(getMenuInflater(), toolbar.getMenu(), true);
        toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {
            @Override
            public boolean onMenuItemClick(MenuItem item) {
                return onOptionsItemSelected(item);
            }
        });
    }
    

    SplitToolbar.java

    import android.content.Context;
    import android.support.v7.widget.ActionMenuView;
    import android.support.v7.widget.Toolbar;
    import android.util.AttributeSet;
    import android.view.View;
    import android.view.ViewGroup;
    
    public class SplitToolbar extends Toolbar {
        public SplitToolbar(Context context) {
            super(context);
        }
    
        public SplitToolbar(Context context, AttributeSet attrs) {
            super(context, attrs);
        }
    
        public SplitToolbar(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
        }
    
        @Override
        public void addView(View child, ViewGroup.LayoutParams params) {
            if (child instanceof ActionMenuView) {
                params.width = LayoutParams.MATCH_PARENT;
            }
            super.addView(child, params);
        }
    }
    

    Layout.xml

    
    

    When I say worked I mean that it centered EVERYTHING in my menu, text and images alike. If you only use icons for your menu then it will look great. I'm still looking for a way to center them and have the text to be right next to the icons.

提交回复
热议问题