Firma Google wprowadziła do NavigationView
biblioteki Design Support Library w wersji 22.2.0, za pomocą której można bardzo łatwo utworzyć szufladę za pomocą zasobu menu.
Jak mogę utworzyć prostą linię podziału między dwoma elementami? Grupowanie elementów nie działa. Utworzenie sekcji elementów podrzędnych powoduje utworzenie linii podziału, ale wymaga tytułu, którego nie chcę.
Każda pomoc będzie mile widziana.
android
navigation-drawer
android-support-library
android-design-library
navigationview
Longi
źródło
źródło
Odpowiedzi:
Wszystko, co musisz zrobić, to zdefiniować
group
za pomocą unikalnego identyfikatora , mam sprawdzone realizację jeśli grupa ma inny identyfikator będzie go utworzyć dzielnik.Przykładowe menu, tworzenie separatora:
źródło
setChecked
wydaje się działać na poziomie grupy. Jeśli wybierzesz element z grupy A, a następnie ponownie otworzysz szufladę i wybierzesz element z grupy B, oba elementy pozostaną podświetlone. Być może Google naprawi to zachowanie w następnej wersji, ale na razie jest to wada używania wielu grup z NavigationView.android:checkableBehavior="none"
dla swojej drugiej grupy (zakładam, że są to akcje, a nie nawigacja)group
niego, skompiluje się i uruchomi, ale separatory są ukryte.utwórz do rysowania drawer_item_bg.xml w ten sposób,
i dodaj go do NavigationView jako aplikację: itemBackground = "@ drawable / drawer_item_bg"
i zaczynamy ...
źródło
navMenuView.addItemDecoration(new DividerItemDecoration(NavigationViewActivity.this, DividerItemDecoration.VERTICAL));
dla idealnego obramowania przedmiotuProste dodanie DeviderItemDecoration:
Wygląda to tak:
źródło
addItemDecoration
linii na 1 piksel?Możesz łatwo dodawać separatory, ustawiając Tło elementu menu za pomocą XML za pomocą
app:itemBackground
I użyj LayerDrawable jako tła. Zachowuje nakładkę marszczenia materiału projektowego dla kliknięć.
Wynik:
źródło
Myślę, że mam jeszcze lepsze rozwiązanie problemu wielu zaznaczonych pozycji. Na mój sposób nie musisz się martwić o zmianę kodu podczas dodawania nowych sekcji do menu. Moje menu wygląda tak, jak zaakceptowane rozwiązanie napisane przez Jareda, z tą różnicą, że używa się andoid: checkableBehavior = " all " na grupach:
CheckableBehavior opcji „all” umożliwia dowolne zaznaczanie / odznaczanie pojedynczych elementów, niezależnie od tego, do jakiej grupy należą. Musisz tylko zapisać ostatnio zaznaczony element menu. Kod java wygląda następująco:
źródło
Tworzenie różnych grup, takich jak odpowiedź Nilesha, powoduje podział między nimi, ale stwarza problem dwóch zaznaczonych elementów w szufladzie nawigacji.
Prosty sposób, w jaki sobie z tym poradziłem, był następujący:
źródło
android:checkableBehavior="none"
Nie jestem pewien, czy zostało to naprawione,
API 26 (Android 8)
czy było to możliwe przez cały czas. Nadal jestem noobem w programowaniu na Androida. Jednak dodałem grupy rodziców, jak poniżej. Testowanie na fizycznym telefonie z Androidem 6,nav_g1
lubnav_g2
spowoduje odznaczenie innych elementów.Java
kodu do słuchaczyKod menu
Uwagi
android:checkableBehavior="single"
dla grupy rodzicielskiej jest wymagane, więc problem wielu wybranych pozycji menu w tej odpowiedzi (wspomniany w komentarzach głodnego gościa) nie występujeA oto zrzut ekranu
źródło
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.
Oto styl
I do rysowania
I menu
edytować:
Zamiast Buttons możesz użyć TextView z drawable, który naśladuje oryginalny wygląd elementów menu:
źródło
Rozwiązanie powinno być zasługą Zorawar. Przepraszamy za powielenie odpowiedzi, ale nie mogłem dodać tak dużo sformatowanego tekstu w komentarzu.
Rozwiązanie Zorawar działa, kod można ulepszyć w następujący sposób:
źródło
Odpowiedź Nileha jest prawidłowa, z wyjątkiem tego, że ma jedną wadę podwójnego sprawdzenia.
Więc używając
z unikalnym identyfikatorem rozwiąże problem
źródło
Jeśli chcesz dynamicznie dodać dzielnik , możesz po prostu dodać puste podmenu w następujący sposób:
doda to rozdzielacz.
po prostu pamiętaj, aby przekazać właściwy indeks podczas używania
menu.getItem(int index)
źródło
Oprócz poprzednich odpowiedzi, jeśli chcesz używać separatorów dekoracyjnych, ale nie chcesz tworzyć wielu grup z powodu problemów z „sprawdzalnym zachowaniem” - możesz przypisać ten sam identyfikator grupy do wszystkich swoich grup.
Przykład:
źródło
Jeśli wybrana odpowiedź nie działa dla Ciebie, możesz spróbować dodać ją do
onCreateOptionsMenu
oprócz podania unikalnego identyfikatora grupy:źródło