如何组织菜单项

时间:2019-03-30 18:32:03

标签: android

我开始学习Android知识,我想知道如何组织/重新排列工具栏上菜单中的不同项目(例如:如何将其推到工具栏的中央,如何确定我希望在不同的物品之间有多少空间,等等。)

现在,我有一个如下所示的menu_main.xml:

<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto">

    <item
        android:id="@+id/miCompose"
        android:icon="@drawable/ic_calendar"
        app:showAsAction="always"
        android:title="Calendar" >
    </item>
    <item
        android:id="@+id/miProfile"
        android:icon="@drawable/ic_dining"
        app:showAsAction="always"
        android:title="Dining">
    </item>
</menu>

这样,我的项目就会以这种方式显示在我的工具栏上:

http://zupimages.net/viewer.php?id=19/13/pr82.png

但是我想找到一种方法使它们位于工具栏的中心。 有人可以帮我吗?我现在似乎找不到任何东西...

2 个答案:

答案 0 :(得分:0)

因此,忘记所有关于menu.xml的内容,并开始考虑自定义菜单项

您也可以通过编程方式添加各个菜单项,例如:

popup.getMenu().add(groupID,itemID,itemOrder,itemTitle);

'itemOrder'从字面上看是一个整数,您要为其添加项目的订单

对于每个菜单项,您需要:

  1. ID

  2. 标题

  3. 图标(可选)

所以。创建一个具有这些特征的类,如下所示:

public class MyMenu {
    public static Integer Count(){
        return 4;
    }
    public static String title(int pick){
        String[] strings = new String[]{
                "title1",
                "title2",
                "title3",
                "title4"
        };

        return strings[pick];
    }
    public static int iconDrawable(int pick){
        int[] drawables = new int[]{
                R.drawable.icon1,
                R.drawable.icon2,
                R.drawable.icon3,
                R.drawable.icon4
        };

        return drawables[pick];
    }
}

现在使用此类来创建菜单,如下所示:

PopupMenu popup = new PopupMenu(getActivity(), yourTargetView);
int count = MyMenu.Count();
for (int i = 0; i < count; i++) {
  popup.getMenu().add(1,
      i,
      i,
      MyMenu.title(i))
    .setIcon(MyMenu.iconDrawable(i))
    .setShowAsActionFlags(MenuItem.SHOW_AS_ACTION_WITH_TEXT);
}
popup.setOnMenuItemClickListener(
  new PopupMenu.OnMenuItemClickListener() {
    public boolean onMenuItemClick(MenuItem item) {
      // So Something on Click
      return true;
    }
  });
popup.show();

现在,您可以使用此类课程做任何您想做的事情。您还可以将简单数组列表用于标题或ID或订单

ArrayList<String> titles = new new ArrayList<>();
for (int i = 0; i < count; i++) {
  titles.add(_whatever);
}

答案 1 :(得分:0)

工具栏仅是视图。如果遇到一些麻烦,您可以使用自定义视图与没有菜单的孩子一起工作。

或以自定义布局作为子项添加