Ich wollte Trennwände über dem ersten und nach dem letzten Artikel. Mit der @ Nilesh-Lösung musste ich Dummy-Menüelemente hinzufügen und auf false setzen, was sich wirklich schmutzig anfühlte. Und was ist, wenn ich andere coole Sachen in meinem Menü machen möchte?
Mir ist aufgefallen, dass NavigationView FrameLayout erweitert, sodass Sie Ihre eigenen Inhalte wie bei einem FrameLayout darin einfügen können. Ich habe dann eine leere Menü-XML festgelegt, sodass nur mein benutzerdefiniertes Layout angezeigt wird. Ich verstehe, dass dies wahrscheinlich gegen den Weg verstößt, den Google von uns erwartet, aber wenn Sie ein wirklich benutzerdefiniertes Menü wünschen, ist dies eine einfache Möglichkeit, dies zu tun.
<!--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>
Hier ist der Stil
<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>
Und zeichnbar
<?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>
Und das Menü
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
</menu>
bearbeiten:
Anstelle von Schaltflächen können Sie TextView mit Drawable verwenden, das das Aussehen der ursprünglichen Menüelemente nachahmt:
<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>