Jak mogę ustawić ustawienia stopki i elementy profilu na NavitationView
? wygląda jak szuflada nawigacji w skrzynce odbiorczej. Te NavitationView
elementy są zawyżone przez menu zasobu, ale nie wiem jak ustawić dolne pozycje menu do zasobu, lub w jaki sposób mogę ustawić niestandardowy widok na NavigationView
lub dno offset? Próbowałem umieścić to <LinearLayout...>
jako widok stopki, ale na małych ekranach stopka umieszcza elementy i nie mogę przewijać menu, próbowałem ustawić dopełnienie stopki na NavigationView
, ale stopka też ją przyjmuje.
To nie jest przewijanie na małych ekranach:
<android.support.design.widget.NavigationView
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
app:headerLayout="@layout/kuona_drawer_header"
app:menu="@menu/drawer">
<LinearLayout...>
</android.support.design.widget.NavigationView>
To się przewija, ale stopka znajduje się nad pozycjami menu:
<android.support.design.widget.NavigationView
android:id="@+id/drawer"
android:layout_width="wrap_content"
android:layout_height="match_parent"
android:layout_gravity="start"
android:paddingBottom="96dp"
app:headerLayout="@layout/kuona_drawer_header"
app:menu="@menu/drawer">
<LinearLayout...>
</android.support.design.widget.NavigationView>
res/menu/drawer.xml
Plik menu szuflady :
<?xml version="1.0" encoding="utf-8"?>
<menu xmlns:android="http://schemas.android.com/apk/res/android">
<group android:checkableBehavior="single">
<item
android:id="@+id/action_current_list"
android:checked="true"
android:icon="@drawable/ic_current_list"
android:title="@string/current_list" />
<item
android:id="@+id/action_manage_lists"
android:icon="@drawable/ic_my_lists"
android:title="@string/my_lists" />
<item
android:id="@+id/action_search_products"
android:icon="@drawable/ic_search_black_24dp"
android:title="@string/search_products" />
<item
android:id="@+id/action_deals"
android:icon="@drawable/ic_product_promo"
android:title="@string/deals" />
</group>
</menu>
/res/menu/drawer.xml
menuItem.setIcon(Drawable)
.Odpowiedzi:
Jeśli chcesz mieć stałą (nie przewijaną) stopkę w menu nawigacyjnym, musisz zawinąć NavigationView wokół innego układu, tak jak opublikowałeś. NavigationView działa podobnie jak FrameLayout, więc kończy się to „układaniem” wewnętrznego układu na górze elementów menu NavigationView. Oto jeden sposób, aby to zorganizować, używając LinearLayout dla elementów stopki:
Naprawiono stopkę
W tym przykładzie użyłem TextViews, ale w widokach stopki możesz użyć wszystkiego, co chcesz. Aby elementy stopki nie pokrywały się z dolną częścią menu, dodaj kilka fikcyjnych elementów na końcu pliku zasobów menu (będą one działać jak „odstępniki”):
res / menu / drawer.xml
Na koniec nie zapomnij dodać odbiorników kliknięć w swoim działaniu, aby uzyskać faktyczne widoki stopki:
Przewijana stopka
Jeśli jednak pozwolisz stopce na przewijanie z resztą NavigationView, upraszcza to (bez dodatkowych układów ani detektorów kliknięć). Po prostu dodaj elementy stopki do pliku zasobów menu jako unikalne
<group>
(spowoduje to utworzenie linii separatora ), a wszystko będzie obsługiwane automatycznie i przewijane razem:res / menu / drawer.xml
źródło
<group>
jeśli chcesz mieć linię separatora, w przeciwnym razie stopka nawigacyjna aplikacji Gmail wygląda jak zwykłe pozycje menu (przynajmniej dla mnie).<dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen>
wdimen.xml
zamiast używać fikcyjnych pozycji w menu! jest doskonały!Podam ci tylko podpowiedź, jak to rozwiązać, ale nie mam szans przetestować tego na NavigationView i jestem prawie pewien, że zadziała
tutaj przykładowy układ xml;
oto wynik:
sztuczka polega na zastosowaniu dopełnienia do rodzica i minus margines do dziecka.
Szybka próba:
źródło
Zgodnie z podejściami opisanymi w innych odpowiedziach dotyczących zagnieżdżania widoków nawigacji, pojawiły się pewne problemy:
Moje rozwiązanie wszystkich tych problemów było następujące:
W tym miejscu NestedScrollView działa jako przewijany element nadrzędny dla sub-NavigationView. Oznacza to, że sub-NavigationView nigdy nie wyświetla samych pasków przewijania, ale cała zawartość jest wyświetlana w sposób płaski.
Układ „spacer_to_bottom” wypełnia całą pozostałą przestrzeń, więc przy kilku ikonach menu stopka nadal znajduje się na dole.
Na koniec stała stopka jest dodawana do układu liniowego, który zaczyna się od rzeczywistego menu (sub-NavigationView), odstępnika, a na dole ma stopkę.
Tutaj możesz znaleźć kompletny przykład roboczy jako AndroidStudio-Project: https://github.com/MarcDahlem/AndroidSidemenuFooterExample
Szczególnie szufladę nawigacji można znaleźć tutaj: https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Zrzuty ekranu:
źródło
Najprostszą odpowiedzią jest dodanie przycisku w układzie szuflady i ustawienie grawitacji na dole w
navigationview.xml
.Oto kod:
źródło
Musisz mieć układ widoku nawigacji kontenera, który powinien zawierać dwa dodatkowe układy nawigacji. Wyrównaj je do góry i do dołu układu nadrzędnego.
Zalecałbym używanie widoku nawigacji jako elementu nadrzędnego, a nie FrameLayout, ponieważ zasadniczo jest to ScrimFrameLayout i lepiej współdziała z paskiem stanu.
Oto przykład tego, jak powinna wyglądać Twoja aktywność:
Możesz przeczytać więcej na ten temat i zobaczyć przykład tutaj: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
źródło
Znam jego późną odpowiedź, ale jest to doskonała i dokładna odpowiedź, której szuka większość programistów.
Aby dodać stopkę w widoku nawigacji, Dodaj widok niestandardowy do menu nawigacji, tak jak poniżej:
footer_navigation_menu.xml
Teraz dodaj powyższy widok do pliku XML menu z atrybutem grupy, aby można go było rozróżnić jako stopkę w menu.
profile_menu.xml
Otóż to. Poniżej jest wyjście:
źródło
To trochę kłopotliwe, że NavigationView nie ma możliwości dodania stopki. Ale możesz spróbować czegoś takiego,
Jeśli Twoja stopka jest listą,
Ale jeśli jest to jakiś niestandardowy widok,
Również w tym przypadku będziesz musiał ustawić
x = height of your custom footer view
Mam nadzieję, że to pomoże.
źródło
Zrobiłem to samo w następujący sposób:
Tutaj najważniejsze jest to, że sprowadziłem grawitację układu do dołu np
źródło
Zgodnie z twoim podejściem, niektóre drobne zmiany mogą pomóc w tym, co chcesz osiągnąć.
I ustaw kilka elementów pośredniczących w menu, aby elementy menu się nie nakładały.
Chciałbyś również dodać odbiornik kliknięć do elementu stopki.
źródło
Moje rozwiązanie ze stałą stopką i menu przewijania (przetestowane w 100%)
źródło
W ten sposób mogę dodać układ u dołu nawigacji:
Zaktualizowane biblioteki
źródło
NavigationView
pierwsze dziecko toListView
zawierający zarówno nagłówek, jak i elementy menu.Jedyną rzeczą potrzebną do dodania stopki jest wywołanie .addFooterView do ListView
Więcej informacji: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navigationview/
Skopiuj wklej kod:
źródło
Po prostu umieść inny układ w swoim NavigationView:
Sztuczka polega na użyciu layout_gravity = "bottom" - spowoduje to umieszczenie całego układu na dole i sprawdzenie, czy test2 są odpowiednio ułożone.
źródło
Użyj tego..
następnie ustaw dopełnienie dolne na NavigationMenuView
źródło
Spróbuj tego, to działa dla mnie.
źródło
Używam tego formularza, pracuj dla mnie. w poziomie i pionie.
źródło
źródło
<android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>
. aby uzyskać więcej informacji, sprawdź repocytorium github ( github.com/mehul0/AndroidSidemenuFooterExample-master )źródło
Struktura układu dla lepkiego nagłówka i stopki w menu szuflady:
Kompletny układ:
źródło
Spróbuj tego, to działa dla mnie.https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Możesz jednak wyłączyć NavigationViewScrolling, aby przewijać płynniej
Zrzuty ekranu:
źródło
Przewijana stopka dla wersji> 23.xx
W końcu udało mi się osiągnąć to, co chciałem, niestety wygląda na to, że nie da się już po prostu pobrać odniesienia do ListView i dodać nagłówek i stopkę jak w wersjach poniżej 23.xx (jak opisał Andrea Baccega). Robienie tego dla nagłówka jest nadal możliwe:
Ale dodanie stopki nie jest obecnie możliwe. Jednak znalazłem obejście na wypadek, gdybyś próbował tylko dodać stopkę: po prostu odwrócisz widok, spowoduje to dodanie nagłówka na dole, który zachowuje się jak normalna stopka. Po prostu utwórz menu w odwrotnej kolejności
źródło
Moje osobiste rozwiązanie dla stałego nagłówka i stopki rozszerza NavigationView w następujący sposób:
Oryginalnie NavigationView tworzy LinearLayout jako pierwszy element w RecyclerView i przewija całą zawartość razem. Pomysł polega na utworzeniu oddzielnych widoków dla stopki i nagłówka, a następnie przesunięciu ich do góry i do dołu za pomocą Gravity. Później podczas pomiaru zawartości dla RecyclerView ustawia przewijaną zawartość.
Oto biblioteka zawierająca powyższy kod, który napisałem. https://github.com/guness/NavigationView
Dobra strona tego, teraz mogę zdefiniować widok stopki w XML, tak jak nagłówek w natywnym:
źródło
Oto rozwiązanie, które nie wymaga zagnieżdżania i które dynamicznie dostosowuje dolne wypełnienie wewnętrznego NavigationMenuView na podstawie własnej wysokości widoku stopki, co oznacza, że można ustawić wysokość stopki
wrap_content
i dynamicznie zmieniać widoczność stopki naVISIBLE
lubGONE
.Musisz zdefiniować identyfikator design_navigation_view w swoim ids.xml:
I użyj w ten sposób:
Testowane z
com.google.android.material:material:1.0.0
.źródło
Jeśli używasz widoku listy, możesz spróbować w ten sposób. Obsługa widoku listy dodaje funkcję widoku stopki, dzięki czemu można dodać niestandardową stopkę widoku R.layout.drawer_footer za pomocą obiektu listview, jak poniżej
W moim przypadku używam expandableListView zamiast listview (listview ma również funkcję addFooter). Mam nadzieję, że w ten sposób ci pomogę
źródło
Umieść te linie w układzie menu. Mam nadzieję, że to rozwiąże Twój problem:
źródło