Google stellte die NavigationView
Version 22.2.0 der Design Support Library eingeführt, mit der Sie mithilfe einer Menüressource ganz einfach eine Schublade erstellen können.
Wie kann ich eine einfache Trennlinie zwischen zwei Elementen erstellen? Das Gruppieren der Elemente hat nicht funktioniert. Das Erstellen eines Unterelementabschnitts erstellt zwar eine Trennlinie, erfordert jedoch einen Titel, den ich nicht möchte.
Jede Hilfe wäre dankbar.
android
navigation-drawer
android-support-library
android-design-library
navigationview
Longi
quelle
quelle
Antworten:
Alles, was Sie tun müssen, ist eine
group
mit einer eindeutigen ID zu definieren . Ich habe die Implementierung überprüft. Wenn die Gruppe unterschiedliche IDs hat , wird ein Teiler erstellt.Beispielmenü zum Erstellen des Trennzeichens:
quelle
setChecked
es auf Gruppenebene zu funktionieren scheint. Wenn Sie einen Artikel in Gruppe A auswählen, die Schublade erneut öffnen und einen Artikel in Gruppe B auswählen, bleiben beide Artikel hervorgehoben. Möglicherweise wird Google dieses Verhalten in der nächsten Version beheben, aber im Moment ist dies der Nachteil der Verwendung mehrerer Gruppen mit NavigationView.android:checkableBehavior="none"
mit Ihrer zweiten Gruppe (das sind Aktionen, keine Navigation, nehme ich an)group
, wird sie kompiliert und ausgeführt, aber die Teiler sind versteckt.Erstellen Sie eine zeichnbare drawer_item_bg.xml wie folgt :
und fügen Sie es als App zu NavigationView hinzu : itemBackground = "@ drawable / drawer_item_bg"
und es geht los...
quelle
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
für perfekte Artikel Grenze getanEinfach DeviderItemDecoration hinzufügen:
Es sieht so aus:
quelle
addItemDecoration
Zeilenhöhe auf 1px ändern?Sie können Teiler einfach hinzufügen, indem Sie den Menüelementhintergrund über XML mithilfe von festlegen
app:itemBackground
Und verwenden Sie LayerDrawable als Hintergrund. Es bewahrt die Welligkeit der Materialdesign-Überlagerung für Klicks.
Das Ergebnis:
quelle
Ich denke, ich habe eine noch bessere Lösung für das Problem mehrerer geprüfter Elemente. Auf meine Weise müssen Sie sich keine Gedanken über das Ändern Ihres Codes machen, wenn Sie Ihrem Menü neue Abschnitte hinzufügen. Mein Menü sieht genauso aus wie die von Jared geschriebene akzeptierte Lösung, mit dem Unterschied, dass andoid verwendet wird: checkableBehavior = " all " für die Gruppen:
Das checkableBehavior von 'all' ermöglicht es, einzelne Elemente nach Belieben zu aktivieren / deaktivieren, unabhängig davon, zu welcher Gruppe sie gehören. Sie müssen nur das zuletzt überprüfte Menü speichern. Der Java-Code sieht folgendermaßen aus:
quelle
Wenn Sie verschiedene Gruppen wie Nileshs Antwort erstellen, wird zwar eine Trennlinie dazwischen erstellt, es entsteht jedoch das Problem, dass zwei markierte Elemente in der Navigationsleiste angezeigt werden.
Ein einfacher Weg, wie ich damit umgegangen bin, war:
quelle
android:checkableBehavior="none"
Ich bin mir nicht sicher, ob dies behoben ist
API 26 (Android 8)
oder ob es die ganze Zeit möglich war. Ich bin immer noch ein Neuling in der Android-Programmierung. Ich habe jedoch die folgenden Elterngruppen hinzugefügt. Testen auf einem physischen Android 6-Telefon,nav_g1
odernav_g2
die Auswahl anderer Elemente aufheben.Java
den Hörern keinen Code hinzugefügtMenücode
Anmerkungen
android:checkableBehavior="single"
einer übergeordneten Gruppe ist erforderlich, damit das Problem mehrerer ausgewählter Menüelemente in dieser Antwort (in den Kommentaren von hungrigem Host erwähnt) nicht auftrittUnd hier ist der Screenshot
quelle
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.
Hier ist der Stil
Und zeichnbar
Und das Menü
bearbeiten:
Anstelle von Schaltflächen können Sie TextView mit Drawable verwenden, das das Aussehen der ursprünglichen Menüelemente nachahmt:
quelle
Das Guthaben sollte für die Lösung an Zorawar gehen. Entschuldigung für das Duplizieren der Antwort, aber es konnte nicht so viel formatierter Text in einen Kommentar eingefügt werden.
Die Lösung von Zorawar funktioniert, der Code könnte als solcher verbessert werden:
quelle
Nilehs Antwort ist richtig, außer dass es einen Fehler bei der doppelten Überprüfung gibt.
Also mit
mit eindeutiger ID soll das Problem lösen
quelle
Wenn Sie einen Teiler dynamisch hinzufügen möchten , können Sie einfach ein leeres Untermenü wie folgt hinzufügen:
Dadurch wird ein Teiler hinzugefügt.
Stellen Sie nur sicher, dass Sie bei der Verwendung den richtigen Index übergeben
menu.getItem(int index)
quelle
Zusätzlich zu den vorherigen Antworten können Sie allen Gruppen dieselbe Gruppen-ID zuweisen, wenn Sie dekorative Trennzeichen möchten, aber aufgrund von Problemen mit "überprüfbarem Verhalten" nicht mehrere Gruppen erstellen möchten.
Beispiel:
quelle
Wenn die ausgewählte Antwort für Sie nicht funktioniert, können Sie versuchen, diese
onCreateOptionsMenu
zusätzlich hinzuzufügen , um die eindeutige Gruppen-ID zu erhalten:quelle