首页 > 解决方案 > 如何组织菜单项

问题描述

我开始学习 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

但我想找到一种方法让它们成为我工具栏的中心。有人可以帮我吗?我现在好像什么都找不到...

标签: android

解决方案


所以忘记所有关于 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);
}

推荐阅读