我如何添加一个自定义项目的菜单布局的NavigationView?
我一直在尝试通过在Androiddevise支持库中使用新的NavigationView
类来简化一些导航抽屉代码。 如果您只需要左侧的图标,右侧的文本就好像文档中的示例那样,这样做效果很好。 例如,如果我使用这个菜单布局:
<menu xmlns:android="http://schemas.android.com/apk/res/android"> <group android:id="@+id/group1" android:checkableBehavior="single"> <item android:id="@+id/nav_screen1" android:icon="@drawable/ic_list_black_24dp" android:title="Screen 1" /> <item android:id="@+id/nav_screen2" android:icon="@drawable/ic_search_black_24dp" android:title="Screen2"/> <item android:id="@+id/nav_screen3" android:icon="@drawable/ic_equalizer_black_24dp" android:title="Screen 3"/> </group> <group android:id="@+id/group2"> <item android:id="@+id/nav_settings" android:icon="@drawable/ic_settings_black_24dp" android:title="Settings"/> </group> </menu>
问题是,我想添加一个自定义的视图,在Google Play电影应用程序(请参阅下面的屏幕截图)中有一个android.support.v7.widget.SwitchCompat
的布局。 理想情况下,我想添加自定义视图,同时仍然使用我的菜单布局,但如果这是不可能的,如果不使用粗糙的黑客(如攻入由支持库生成的现有布局),那么我想知道解决scheme的代码量最less,这仍然值得转换到NavigationView
。
我尝试使用actionLayout
属性来指定一个自定义布局文件,如下所示:
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.SwitchCompat android:layout_width="fill_parent" android:layout_height="match_parent" android:text="@string/night_mode"/> </LinearLayout>
然而,这个属性似乎被忽略,因为它没有工作。
作为参考,以下是Google Play电影中的抽屉式导航栏的屏幕截图:
Gmail应用程序还具有自定义视图来显示标签对应的计数。
Android支持库23.1中现在可以使用actionLayout
属性:
NavigationView提供了一种便捷的方式来构build导航抽屉,包括使用菜单XML文件创build菜单项的function。 我们已经扩展了function,可以通过app:actionLayout或使用MenuItemCompat.setActionView()为项目设置自定义视图。
NavigationView
是FrameLayout
的子类,可以有多个子FrameLayout
:
但是,您可以将多个子元素添加到FrameLayout,并通过使用android:layout_gravity属性为每个子元素分配重力来控制其在FrameLayout中的位置。
这意味着您可以将自定义视图添加到您的NavigationView
:
<android.support.design.widget.NavigationView android:layout_height="match_parent" android:layout_width="wrap_content" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/side_menu"> <LinearLayout android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="200dp" android:layout_gravity="bottom"> <android.support.v7.widget.SwitchCompat android:layout_width="match_parent" android:layout_height="match_parent" android:text="night_mode"/> </LinearLayout> </android.support.design.widget.NavigationView>
用switchcompat创build一个布局,并在菜单项as中提到它
<item android:id="@+id/notification" android:title="Notification" app:actionLayout="@layout/notify" />`
然后通知布局添加这个
<android.support.v7.widget.SwitchCompat android:id="@+id/switch_compat" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="10dp" android:checked="false" android:onClick="notify"/>
onclick是keyPoint,在您的Activity中实现处理程序,然后它将工作。
你可能想看看这个库: https : //github.com/mikepenz/MaterialDrawer 。 它使得它易于使用导航抽屉,它支持自定义视图。