如何在新的NavigationView中添加自定义视图

我试图在NavigationView中像这样添加一个开关作为menuitem

在这里输入图像说明

我使用了actionViewClass属性,但它只显示标题。

<item android:id="@+id/navi_item_create_notifications_sound" android:title="Notifications Sounds" xmlns:app="http://schemas.android.com/apk/res-auto" app:actionViewClass="android.support.v7.widget.SwitchCompat" app:showAsAction="always" /> 

新的支持库23.1

允许在导航视图中使用app:actionLayout或使用MenuItemCompat.setActionView()来使用自定义视图。

在这里输入图像说明

这是我如何设法显示一个SwitchCompat

menu_nav.xml

 <?xml version="1.0" encoding="utf-8"?> 
 <group android:id="@+id/first" android:checkableBehavior="single"> <item android:id="@+id/navi_item_1" android:icon="@drawable/ic_feed_grey_500_24dp" android:title="Feed" /> <item android:id="@+id/navi_item_2" android:icon="@drawable/ic_explore_grey_500_24dp" android:title="Explore" /> <item android:id="@+id/navi_item_4" android:icon="@drawable/ic_settings_grey_500_24dp" android:title="Settings" /> </group> <group android:id="@+id/second" android:checkableBehavior="single"> <item xmlns:app="http://schemas.android.com/apk/res-auto" android:id="@+id/navi_item_create_notifications_sound" android:title="Notifications Sounds" app:actionLayout="@layout/menu_swich" app:showAsAction="always" /> </group> 

menu_switch.xml

 <?xml version="1.0" encoding="utf-8"?> <android.support.v7.widget.SwitchCompat xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="wrap_content" android:layout_height="match_parent" android:gravity="right|center_vertical" app:buttonTint="@color/colorPrimary" app:switchPadding="@dimen/spacing_small" /> 

要获取视图并将事件分配给它,您应该这样做:

 SwitchCompat item = (SwitchCompat) navigationView.getMenu().getItem(3).getActionView(); item.setOnCheckedChangeListener( new CompoundButton.OnCheckedChangeListener(){ @Override public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { Logr.v(LOG_TAG, "onCheckedChanged" + isChecked); } }); 

简单的解决scheme,因为你正在使用NavigationView

 <android.support.design.widget.NavigationView android:id="@+id/nav_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start" android:fitsSystemWindows="true" app:menu="@menu/activity_main_drawer"> <LinearLayout android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" android:orientation="horizontal"> <android.support.v7.widget.SwitchCompat android:id="@+id/mSwitch" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:text="Night Mode" /> </LinearLayout> </android.support.design.widget.NavigationView> 

尝试将您的交换机包装到一个单独的布局文件中:

菜单:

 <menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto"> <item android:id="@+id/menu_switch" android:title="Switch Title" app:actionLayout="@layout/layout_my_switch" app:showAsAction="always" /> </menu> 

切换:“layout_my_switch.xml”

 <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <android.support.v7.widget.SwitchCompat android:id="@+id/my_switch" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" /> </RelativeLayout> 

[更新03-03-2017]答案已经过时。 不要参考这个。 参考接受的答案。

不幸的是,目前NavigationView没有太多允许定制…

您必须在NavigationView中使用Customized ListView。

 <android.support.design.widget.NavigationView android:id="@+id/navView" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start"> <ListView android:layout_width="match_parent" android:layout_height="match_parent"/> </android.support.design.widget.NavigationView> 

并通过将TextView放在左侧并将SwitchCompact放到右侧来为此列表视图创build单元格。

我希望它能帮助你

我在使用导航视图代码的抽屉布局中使用了下面的布局。

 <android.support.design.widget.NavigationView android:id="@+id/navi_view" android:layout_width="wrap_content" android:layout_height="match_parent" android:layout_gravity="start|top" android:background="@color/navigation_view_bg_color" app:theme="@style/NavDrawerTextStyle"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <include layout="@layout/drawer_header" /> <include layout="@layout/navigation_drawer_menu" /> </LinearLayout> </android.support.design.widget.NavigationView> 

你在找这样的东西吗

然后在Synfusion有一个自定义组件,称为导航抽屉 。

你可以在这里find相应的文档。

人。! 他们也提供社区许可 。