首页 > 解决方案 > 如何使用 id 在组中添加菜单?

问题描述

我正在开发我的 android 应用程序以使用 id 在组中添加菜单。我在组中添加菜单时遇到问题,因为它会在导航抽屉底部添加菜单,而不会使用 id 添加组。

这是它所显示的:

在此处输入图像描述

这是我尝试过的:

menu.addSubMenu(R.id.nav_group1, 1, 100, "test1")
      .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.nav_group1, 2, 101, "test2")
      .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.nav_group1, 3, 102, "test4")
      .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.nav_group1, 4, 103, "test new folder")
      .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.nav_group1, 5, 104, "test new folder backup")
     .setIcon(R.drawable.ic_baseline_folder_24);

我也试过这个:

menu.add(R.id.nav_group1, 1, 100, "test1")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 2, 101, "test2")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 3, 102, "test4")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 5, 104, "test new folder")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 5, 104, "test new folder backup")
     .setIcon(R.drawable.ic_baseline_folder_24);

我也试过这个:

menu.addSubMenu(R.id.second_group, 1, 100, "test1")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.second_group, 2, 101, "test2")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.second_group, 3, 102, "test4")
     .setIcon(R.drawable.ic_baseline_folder_24);
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.addSubMenu(R.id.second_group, 5, 104, "test new folder backup")
     .setIcon(R.drawable.ic_baseline_folder_24);

完整代码:

DrawerLayout drawer = findViewById(R.id.drawer_layout);
NavigationView navigationView = findViewById(R.id.nav_view);
Menu menu = navigationView.getMenu();
menu.add(R.id.nav_group1, 1, 100, "test1")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 2, 101, "test2")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 3, 102, "test4")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 5, 104, "test new folder")
     .setIcon(R.drawable.ic_baseline_folder_24);
menu.add(R.id.nav_group1, 5, 104, "test new folder backup")
     .setIcon(R.drawable.ic_baseline_folder_24);

activity_main_drawer.xml:

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

    <group android:checkableBehavior="single">
        <item
            android:id="@+id/nav_inbox"
            android:icon="@drawable/ic_baseline_inbox_24"
            android:title="Inbox1" />
        <item
            android:id="@+id/nav_important"
            android:icon="@drawable/ic_baseline_important_24"
            android:title="Important" />
        <item
            android:id="@+id/nav_outbox"
            android:icon="@drawable/ic_baseline_outbox_24"
            android:title="Outbox" />
        <item
            android:id="@+id/nav_sent"
            android:icon="@drawable/ic_baseline_sent_mail_24"
            android:title="Sent" />
        <item
            android:id="@+id/nav_drafts"
            android:icon="@drawable/ic_baseline_draft_24"
            android:title="Drafts" />
        <item
            android:id="@+id/nav_spam"
            android:icon="@drawable/ic_baseline_spam_24"
            android:title="Spam" />
        <item
            android:id="@+id/nav_trash"
            android:icon="@drawable/ic_baseline_trash_24"
            android:title="Trash" />
    </group>

    <group android:visible="false" android:id="@+id/second_group" />

    <group android:id="@+id/nav_group1">
        <item
            android:title="Folders" />
    </group>

    <group android:id="@+id/nav_group2">
        <item
            android:id="@+id/nav_create_new_folder"
            android:icon="@drawable/ic_baseline_add_24"
            android:title="Create New" />
    </group>
</menu>

我想要实现的是我想使用名为nav_group1.

像这样:

在此处输入图像描述

你能告诉我一个例子,我如何使用 id 将菜单添加到组中?

标签: javaandroidxmlandroid-studionavigation-drawer

解决方案


你会想要使用orderInCategory. 您已经将订单分配给以编程方式添加的 menuItems。

问题出在您的 XML 中,当orderIncategory没有为数字分配数字时,它们的默认值为零。当您以编程方式添加 menuItems 时,您orderInCategory在底部分配了更高的定位这些菜单项。

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

    <group android:checkableBehavior="single"
           android:orderInCategory="10">
        ...
    </group>

    <group android:visible="false" android:id="@+id/second_group" />

    <group android:id="@+id/nav_group1"
           android:orderInCategory="100">
        <item
            android:title="Folders" />
    </group>

    <group android:id="@+id/nav_group2"
           android:orderInCategory="200">
        <item
            android:id="@+id/nav_create_new_folder"
            android:icon="@drawable/ic_baseline_add_24"
            android:title="Create New" />
    </group>
</menu>

我无权访问android stuido,但在你的java中,你也可以尝试设置inOrderNumber为零。

menu.addSubMenu(R.id.nav_group1, 1, 0, "test1")
      .setIcon(R.drawable.ic_baseline_folder_24);


推荐阅读