Chciałem, aby separatory znajdowały się powyżej pierwszej pozycji i po ostatniej pozycji. Korzystając z rozwiązania @Nilesh musiałem dodać atrapy pozycji menu i ustawić włączone na false, co było naprawdę brudne. A co jeśli chcę zrobić inne fajne rzeczy w moim menu?
Zauważyłem, że NavigationView rozszerza FrameLayout, dzięki czemu możesz umieścić w nim własną zawartość, tak jak w przypadku FrameLayout. Następnie ustawiam pusty plik XML menu, aby wyświetlał tylko mój niestandardowy układ. Rozumiem, że prawdopodobnie jest to sprzeczne ze ścieżką, którą Google chce, abyśmy podążali, ale jeśli chcesz mieć naprawdę niestandardowe menu, jest to łatwy sposób na zrobienie tego.
<!--Note: NavigationView extends FrameLayout so we can put whatever we want in it.-->
<!--I don't set headerLayout since we can now put that in our custom content view-->
<android.support.design.widget.NavigationView
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:fitsSystemWindows="true"
app:menu="@menu/empty_menu">
<!--CUSTOM CONTENT-->
<RelativeLayout
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- CUSTOM HEADER -->
<include
android:id="@+id/vNavigationViewHeader"
layout="@layout/navigation_view_header"/>
<!--CUSTOM MENU-->
<LinearLayout
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:layout_below="@+id/vNavigationViewHeader">
<View style="@style/NavigationViewLineSeperator"/>
<Button android:text="Option 1"/>
<View style="@style/NavigationViewLineSeperator"/>
<Button android:text="Option 2"/>
<View style="@style/NavigationViewLineSeperator"/>
</LinearLayout>
</RelativeLayout>
</android.support.design.widget.NavigationView>
Oto styl
<style name="NavigationViewLineSeperator">
<item name="android:background">@drawable/line_seperator</item>
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">1dp</item>
</style>
I do rysowania
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<solid android:color="@color/white"/>
<size android:width="100sp"
android:height="1sp" />
</shape>
I menu
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
</menu>
edytować:
Zamiast Buttons możesz użyć TextView z drawable, który naśladuje oryginalny wygląd elementów menu:
<TextView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:text="@string/menu_support"
android:drawableLeft="@drawable/menu_icon_support"
style="@style/MainMenuText" />
// style.xml
<style name="MainMenuText">
<item name="android:drawablePadding">12dp</item>
<item name="android:padding">10dp</item>
<item name="android:gravity">center_vertical</item>
<item name="android:textColor">#fff</item>
</style>