Wie erstelle ich einen einfachen Teiler in der neuen NavigationView?
Lesezeit: 9 Minuten
Longi
Google hat die eingeführt NavigationView in der Design Support Library Version 22.2.0, mit der Sie ganz einfach über eine Menüressource 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 Abschnitts für Unterelemente erstellt zwar eine Trennlinie, erfordert jedoch einen Titel, den ich nicht möchte.
Jede Hilfe wäre willkommen.
Wie in den Kommentaren dazu angegeben, besteht das Problem mit der akzeptierten Antwort darin, dass das überprüfbare Verhalten nicht über mehrere (parallele) Gruppen hinweg funktioniert. Um dies zu vermeiden, erstellen Sie keine parallelen Gruppen, sondern verwenden Sie Untermenüs oder Untergruppen, um Ihre Trennlinien zu erhalten, wie in meiner Antwort hier beschrieben: stackoverflow.com/questions/30766919/…
– Bis
24. November 15 um 23:12 Uhr
NJ
Alles, was Sie tun müssen, ist, a zu definieren group mit einem Eindeutige ID, ich habe die Implementierung überprüft, wenn die Gruppe unterschiedliche IDs hat, wird ein Teiler erstellt.
Frage mich, warum dies (soweit ich weiß) nicht dokumentiert ist. Ich denke, es wird viel gefragt werden. Danke!
– Gaëtan
3. Juni 15 um 17:32 Uhr
Das einzige Problem bei diesem Ansatz ist das setChecked scheint auf Gruppenebene zu funktionieren. Wenn Sie ein Element in Gruppe A auswählen, dann die Schublade erneut öffnen und Element in Gruppe B auswählen, bleiben beide Elemente hervorgehoben. Vielleicht wird Google dieses Verhalten in der nächsten Version beheben, aber das ist vorerst der Nachteil bei der Verwendung mehrerer Gruppen mit NavigationView.
– Hungriges Gespenst
4. Juni 15 um 9:28 Uhr
Toll. Über die doppelt überprüft, versuchen Sie es android:checkableBehavior="none" für Ihre zweite Gruppe (das sind Aktionen, keine Navigation, nehme ich an)
– Espinchi
23. Juli 15 um 12:07 Uhr
Komisch, wenn man die ID aus der entfernt group es wird kompiliert und ausgeführt, aber die Teiler sind ausgeblendet.
– Vahid Amiri
8. Februar 16 um 7:04 Uhr
Das funktioniert bei mir auch nicht. Ich wollte Linien zwischen den Menügruppen, nicht nach jedem Punkt.
– Rich Morey
10. März 17 um 21:50 Uhr
vbp
Erstellen Sie ein Drawable schublade_item_bg.xml so was,
Dies funktioniert, aber es entfernt auch die linke Polsterung des Elementsymbols. zumindest in meinem Code, aus irgendeinem Grund nicht in Ihrem Screenshot
– glücklich
14. Dezember 16 um 8:40 Uhr
@vbp Ich brauche den oberen Rand für das erste Kind, den unteren Rand für das andere Kind. Wie konnte ich erreichen. Es ist etwas Ähnliches wie id.first child in CSS
– Prabs
13. Februar 17 um 7:06 Uhr
@Prabs erwägen die Verwendung eines Fragments, einer Recycleransicht oder benutzerdefinierter Ansichten anstelle von NavigationView für eine bessere Anpassung
– vbp
23. Februar 17 um 11:18 Uhr
Ich habe getan navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL)); für perfekte Warenumrandung
– Prabs
27. Februar 17 um 5:39 Uhr
Sie können Trennlinien ganz einfach hinzufügen, indem Sie Menüelementhintergrund per XML mit festlegen app:itemBackground
Ich denke, ich habe eine noch bessere Lösung für das Problem der mehrfach überprüften Artikel. Wenn Sie my way verwenden, müssen Sie sich keine Gedanken darüber machen, Ihren Code zu ändern, 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 ich andoid:checkableBehavior=”alle” zu den Gruppen:
Das checkableBehavior von ‘all’ ermöglicht es, einzelne Elemente beliebig zu aktivieren/deaktivieren, unabhängig davon, zu welcher Gruppe sie gehören. Sie müssen nur den zuletzt geprüften Menüpunkt speichern. Der Java-Code sieht so aus:
Ich bin mir nicht sicher, ob das behoben ist API 26 (Android 8) oder es war die ganze Zeit möglich. Ich bin immer noch ein Noob in der Android-Programmierung. Ich habe jedoch Elterngruppen wie unten hinzugefügt. Testen auf einem physischen Android 6-Telefon,
Ich habe den Teiler
Auswählen eines beliebigen Elements aus beiden nav_g1 oder nav_g2 wird andere Elemente abwählen.
Keine zusätzliche Polsterung aufgrund von verschachtelten Gruppen.
Wie in dieser Antwort erwähnt, muss jede Gruppe eine eindeutige ID haben, um den Teiler anzuzeigen.
Laut dieser Antwort stimmen Leerzeichen mit den Materialdesignspezifikationen von Google überein.
Haben android:checkableBehavior="single" für die Elterngruppe ist erforderlich, damit das Problem mehrerer ausgewählter Menüpunkte in dieser Antwort (in den Kommentaren von Hungrigghost erwähnt) nicht auftritt
Und hier ist der Screenshot
Zowar Sachdev
Wenn Sie verschiedene Gruppen wie Nileshs Antwort erstellen, wird eine Trennlinie dazwischen erstellt, es entsteht jedoch das Problem von zwei aktivierten Elementen in der Navigationsschublade.
Ein einfacher Weg, wie ich damit umgegangen bin, war:
public boolean onNavigationItemSelected(final MenuItem menuItem) {
//if an item from extras group is clicked,refresh NAV_ITEMS_MAIN to remove previously checked item
if (menuItem.getGroupId() == NAV_ITEMS_EXTRA) {
navigationView.getMenu().setGroupCheckable(NAV_ITEMS_MAIN, false, true);
navigationView.getMenu().setGroupCheckable(NAV_ITEMS_EXTRA, true, true);
}else{
navigationView.getMenu().setGroupCheckable(NAV_ITEMS_MAIN, true, true);
navigationView.getMenu().setGroupCheckable(NAV_ITEMS_EXTRA, false, true);
}
//Update highlighted item in the navigation menu
menuItem.setChecked(true);
}
Noch einfacher: android:checkableBehavior="none"
– Espinchi
23. Juli 15 um 12:05 Uhr
@espinchi – Das funktioniert nicht, wenn andere Gruppen Navigationsmenüpunkte enthalten. Diese Lösung könnte nur für Aktionen funktionieren. Keine gute UX-Praxis
– Mushtaq Jameel
26. Juli 15 um 19:54 Uhr
Exzellent! Es könnte klarer sein, wenn Sie Ihre undefinierten Konstanten NAV_ITEMS_MAIN und NAV_ITEMS_EXTRA mit R.id.nav_items_group_main oder R.id.nav_items_group_extra ändern und das erforderliche XML zu Ihrem Beispiel hinzufügen
– Chris Prime
4. August 15 um 20:05 Uhr
IST onNavigationItemSelected(final MenuItem menuItem) { Standardmethode?? Wo soll ich diesen Code eingeben?
– John
22. September 15 um 7:27 Uhr
und was ist NAV_ITEMS_MAIN??
– John
22. September 15 um 7:31 Uhr
.
7750400cookie-checkWie erstelle ich einen einfachen Teiler in der neuen NavigationView?yes
Wie in den Kommentaren dazu angegeben, besteht das Problem mit der akzeptierten Antwort darin, dass das überprüfbare Verhalten nicht über mehrere (parallele) Gruppen hinweg funktioniert. Um dies zu vermeiden, erstellen Sie keine parallelen Gruppen, sondern verwenden Sie Untermenüs oder Untergruppen, um Ihre Trennlinien zu erhalten, wie in meiner Antwort hier beschrieben: stackoverflow.com/questions/30766919/…
– Bis
24. November 15 um 23:12 Uhr