工具栏上均匀分布的菜单项 [英] Evenly spaced menu items on Toolbar

查看:40
本文介绍了工具栏上均匀分布的菜单项的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

所以我一直在尝试在我的 Activity 中实现 android.support.v7.widget.Toolbar 并使它看起来类似于以前支持的拆分 ActionBar.

这是我的工具栏的 XML:

对我有用*:>

EnhancedMenuInflater.java

import android.support.v4.internal.view.SupportMenuItem;导入 android.support.v7.internal.view.menu.MenuItemImpl;导入 android.view.Menu;导入 android.view.MenuInflater;导入 android.view.MenuItem;在这里导入.is.your.R;公共类 EnhancedMenuInflater {public static void inflate(MenuInflater inflater, Menu menu, boolean forceVisible) {inflater.inflate(R.menu.menu, menu);如果 (!forceVisible) {返回;}int size = menu.size();for (int i = 0; i < size; i++) {MenuItem item = menu.getItem(i);//检查是否 app:showAsAction = "ifRoom"if (((MenuItemImpl) item).requestsActionButton()) {item.setShowAsAction(SupportMenuItem.SHOW_AS_ACTION_ALWAYS);}}}}

MainActivity.java

@Override公共布尔 onCreateOptionsMenu(菜单菜单){如果(工具栏 == 空){EnhancedMenuInflater.inflate(getMenuInflater(), menu, false);}返回 super.onCreateOptionsMenu(menu);}//视图设置后的某处.如果(工具栏!= null){EnhancedMenuInflater.inflate(getMenuInflater(), toolbar.getMenu(), true);toolbar.setOnMenuItemClickListener(new Toolbar.OnMenuItemClickListener() {@覆盖public boolean onMenuItemClick(MenuItem item) {返回 onOptionsItemSelected(item);}});}

SplitToolbar.java

import android.content.Context;导入 android.support.v7.widget.ActionMenuView;导入 android.support.v7.widget.Toolbar;导入 android.util.AttributeSet;导入 android.view.View;导入 android.view.ViewGroup;公共类 SplitToolbar 扩展工具栏 {公共拆分工具栏(上下文上下文){超级(上下文);}公共拆分工具栏(上下文上下文,属性集属性){超级(上下文,属性);}public SplitToolbar(上下文上下文,AttributeSet attrs,int defStyleAttr){超级(上下文,属性,defStyleAttr);}@覆盖public void addView(View child, ViewGroup.LayoutParams params) {如果(ActionMenuView 的子实例){params.width = LayoutParams.MATCH_PARENT;}super.addView(child, params);}}

布局.xml

当我说有效时,我的意思是它以我的菜单、文本和图像等所有内容为中心.如果您只为菜单使用图标,那么它看起来会很棒.我仍在寻找一种方法来将它们居中并将文本放在图标旁边.

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.

Here's the XML for my Toolbar:

<android.support.v7.widget.Toolbar
    android:id="@+id/toolbar_btm"
    android:layout_height="wrap_content"
    android:layout_width="match_parent"
    android:minHeight="?attr/actionBarSize"
    android:background="@color/toolbar_bkgnd"
    android:layout_alignParentBottom="true"
    app:theme="@style/ToolBarTheme" />

Here's the style for the Toolbar I'm using:

<style name="ToolBarTheme" parent="Theme.AppCompat">
    <item name="actionButtonStyle">@style/ActionButtonStyle</item>
    <item name="android:actionButtonStyle">@style/ActionButtonStyle</item>
    <item name="android:textColor">@android:color/white</item>
</style>

The style for the Toolbar menu buttons, my initial plan was to calculate the minWidth based on the screen size and then set it for each menu button.

<style name="ActionButtonStyle" parent="@android:style/Widget.Holo.Light.ActionButton">
    <item name="android:minWidth">56dip</item>
    <item name="android:paddingLeft">0dip</item>
    <item name="android:paddingRight">0dip</item>
</style>

And finally, here is what I'm calling in my activity.

Toolbar toolbar = (Toolbar) findViewById(R.id.toolbar_btm);
toolbarBtm.inflateMenu(R.id.menu);

The problem is that the menu items in the bottom Toolbar are right aligned like this:

However I want them to be evenly spaced like this:

解决方案

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

<here.is.my.SplitToolbar
    android:id="@+id/toolbar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"/>

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.

这篇关于工具栏上均匀分布的菜单项的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆