将子项添加到NavigationView中组内的MenuItem

问题描述 投票:4回答:4

我已经检查了一些问题,但没有一个能够真正回答我正在寻找的问题。

基本上我正在尝试将项目子项添加到项目父项,或者在横向面板中模拟选项树,类似于Google Play应用程序:

enter image description here

我在我的XML文件中尝试了这个测试:

<group android:checkableBehavior="single">
        <item
            android:orderInCategory="0"
            android:id="@+id/nav_back"
            android:icon="@drawable/ic_arrow_back_black_24dp"
            android:title="Regresar a la pagina principal"
            />
</group>

<group android:checkableBehavior="single"
    android:id="@+id/groupTypes">
    <item
        android:orderInCategory="1"
        android:id="@+id/nav_negocios"
        android:icon="@drawable/ic_local_convenience_store_black_48dp"
        android:title="@string/negocios" />
    <item
        android:orderInCategory="1"
        android:id="@+id/nav_hoteles"
        android:icon="@drawable/ic_local_hotel_black_48dp"
        android:title="@string/hoteles" />
    <item
        android:orderInCategory="1"
        android:id="@+id/nav_bares"
        android:icon="@drawable/ic_local_bar_black_48dp"
        android:title="@string/bares">

        <menu>
            <item
                android:orderInCategory="1"
                android:id="@+id/nav_barType1"
                android:icon="@drawable/ic_local_bar_black_48dp"
                android:title="@string/restaurant" />
        </menu>

        </item>

    <item
        android:orderInCategory="1"
        android:id="@+id/nav_restaurant"
        android:icon="@drawable/ic_restaurant_black_48dp"
        android:title="@string/restaurant" />
    <item
        android:orderInCategory="1"
        android:id="@+id/nav_destacado"
        android:icon="@drawable/ic_stars_black_48dp"
        android:title="@string/destacado" />
</group>

<group android:title="@string/grupo2">
    <menu>
        <item
            android:id="@+id/nav_taxi"
            android:orderInCategory="2"
            android:icon="@drawable/ic_local_taxi_black_48dp"
            android:title="@string/mobility" />

    </menu>
</group>

这就是我得到的:

enter image description here

“Bares”项目已更改为类别,内部项目仅添加为组中的原始序列。

我也尝试使用android:menuCategory="container"android:menuCategory="secondary"options,但结果是一样的。

<item
        android:orderInCategory="1"
        android:id="@+id/nav_bares"
        android:menuCategory="container"
        android:icon="@drawable/ic_local_bar_black_48dp"
        android:title="@string/bares">

        <menu>
            <item
                android:orderInCategory="1"
                android:id="@+id/nav_barType1"
                android:menuCategory="secondary"
                android:icon="@drawable/ic_local_bar_black_48dp"
                android:title="@string/restaurant" />
        </menu>

</item>

有什么建议?

android android-menu navigationview
4个回答
1
投票

我在源代码中找不到这样的API。我用apk file反编译Play Store androidtool(版本7.7.17.O)。

main.xml中

<com.google.android.finsky.layout.play.FinskyDrawerLayout>
    <com.google.android.finsky.layout.InsetsFrameLayout>
    </com.google.android.finsky.layout.InsetsFrameLayout>
    <include layout="@layout/play_drawer_container" />
</com.google.android.finsky.layout.play.FinskyDrawerLayout>

play_drawer_container.xml

<LinearLayout>
    <ListView android:id="@id/play_drawer_list" style="@style/PlayDrawerList" />
    <TextView android:id="@id/play_drawer_docked_action" android:visibility="gone" style="@style/PlayDrawerDockedAction" />
</LinearLayout>

如您所见,菜单项不是通过app:menu设置的。这只是一个ListView

打开“显示布局边界”时,您还可以看到视图边界的差异:

enter image description here

enter image description here

如果他们使用了默认的menu项目,您应该看到边界匹配。

所以,回答你的问题:它可以用自定义方法实现,菜单没有这样的功能。

更新

有许多方法可以实现这种功能:

  1. 使用RecyclerView
  2. 使用ListView
  3. 使用ScrollView

如果列表中的项目很少,不需要回收功能,那么你可以坚持使用ScrollView。否则,更喜欢RecyclerViewListView,其中每个项目都有自己的行项目xml。


0
投票

您需要使用菜单包围您的项目,然后在其下方添加子菜单。它可能看起来像这样:

 <group android:checkableBehavior="single">
        <item
            android:orderInCategory="0"
            android:id="@+id/nav_back"
            android:icon="@drawable/ic_arrow_back_black_24dp"
            android:title="Regresar a la pagina principal"
            />
</group>

<group android:checkableBehavior="single"
    android:id="@+id/groupTypes">
    <menu>
        <item
            android:orderInCategory="1"
            android:id="@+id/nav_negocios"
            android:icon="@drawable/ic_local_convenience_store_black_48dp"
            android:title="@string/negocios" />
        <item
            android:orderInCategory="1"
            android:id="@+id/nav_hoteles"
            android:icon="@drawable/ic_local_hotel_black_48dp"
            android:title="@string/hoteles" />
        <item
            android:orderInCategory="1"
            android:id="@+id/nav_bares"
            android:icon="@drawable/ic_local_bar_black_48dp"
            android:title="@string/bares">
              <menu>
                  <item
                      android:orderInCategory="1"
                      android:id="@+id/nav_barType1"
                      android:icon="@drawable/ic_local_bar_black_48dp"
                      android:title="@string/restaurant" />
              </menu>
        </item>
         <item
                android:orderInCategory="1"
                android:id="@+id/nav_restaurant"
                android:icon="@drawable/ic_restaurant_black_48dp"
                android:title="@string/restaurant" />
         <item
                android:orderInCategory="1"
                android:id="@+id/nav_destacado"
                android:icon="@drawable/ic_stars_black_48dp"
                android:title="@string/destacado" />
   </menu>
    </group>

    <group android:title="@string/grupo2">
        <menu>
            <item
                android:id="@+id/nav_taxi"
                android:orderInCategory="2"
                android:icon="@drawable/ic_local_taxi_black_48dp"
                android:title="@string/mobility" />

        </menu>
    </group>

0
投票

您可以尝试使用下拉菜单或可扩展列表或简单列表,可以在导航抽屉而不是组中相应地单击菜单选项。


0
投票

对于您的第一种方法,您可以进行一些编辑。 SubItem也是一个项目,而不是将所有内容都放在一个项目中。试试下面这个例子:

 <item
        android:id="@+id/nav_category_electronics"
        android:icon="@drawable/ic_email_black_24dp"
        android:title="Electronics">

        <menu>
            <item
                android:id="@+id/nav_subcategory_laptops"
                android:icon="@drawable/laptop"
                android:title="Laptops" />

            <item
                android:id="@+id/nav_subcategory_tablet"
                android:icon="@drawable/tablet3"
                android:title="Tablets" />

            <item
                android:id="@+id/nav_category_phones"
                android:icon="@drawable/smartphone"
                android:title="Mobile Phones" />

            <item
                android:id="@+id/nav_subcategory_gadgets"
                android:icon="@drawable/ic_developer_mode_black_18dp"
                android:title="Gadgets" />
        </menu>
    </item>
© www.soinside.com 2019 - 2024. All rights reserved.