Wie kann ich Fußzeileneinstellungen und Profilelemente festlegen NavitationView
? sieht aus wie der Posteingang per E-Mail-Navigationsschublade. Die NavitationView
Elemente werden nach Menüressourcen aufgeblasen, aber ich weiß nicht, wie ich untere Elemente auf eine Menüressource festlegen oder wie ich eine benutzerdefinierte Ansicht NavigationView
oder einen unteren Versatz festlegen kann . Ich habe versucht, dies <LinearLayout...>
als Fußzeilenansicht zu verwenden, aber auf kleinen Bildschirmen werden die Elemente in der Fußzeile angezeigt, und ich kann nicht durch das Menü scrollen. Ich habe versucht, eine Fußzeilenauffüllung festzulegen NavigationView
, aber die Fußzeile übernimmt auch die Auffüllung.
Auf kleinen Bildschirmen wird nicht gescrollt:
<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>
Dies scrollt, aber die Fußzeile ist über den Menüelementen:
<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>
Schubladenmenü- res/menu/drawer.xml
Datei:
<?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)
.Antworten:
Wenn Sie eine feste Fußzeile (ohne Bildlauf) in Ihrem Navigationsmenü haben möchten, müssen Sie NavigationView um ein anderes Layout wickeln, wie Sie es gepostet haben. NavigationView funktioniert wie FrameLayout, sodass das innere Layout über den NavigationView-Menüelementen "gestapelt" wird. Hier ist eine Möglichkeit, dies mithilfe von LinearLayout für die Fußzeilenelemente anzuordnen:
Fußzeile behoben
In diesem Beispiel habe ich TextViews verwendet, aber Sie können für die Fußzeilenansichten alles verwenden, was Sie möchten. Um zu vermeiden, dass sich die Fußzeilenelemente mit dem unteren Rand des Menüs überschneiden, fügen Sie am Ende Ihrer Menüressourcendatei einige Dummy-Elemente hinzu (diese wirken wie "Abstandshalter"):
res / menu / drawer.xml
Vergessen Sie nicht, in Ihrer Aktivität Klick-Listener für die tatsächlichen Fußzeilenansichten hinzuzufügen:
Scrolling-Fußzeile
Wenn Sie der Fußzeile jedoch erlauben, mit dem Rest der Navigationsansicht zu scrollen, wird dies einfacher (keine zusätzlichen Layouts oder Klick-Listener). Fügen Sie einfach die Fußzeilenelemente als eindeutige Elemente zu Ihrer Menüressourcendatei hinzu
<group>
(dies erzeugt eine Trennlinie ), und alles wird automatisch behandelt und zusammen gescrollt:res / menu / drawer.xml
quelle
<group>
Trennlinie, wenn Sie eine Trennlinie wünschen. Andernfalls sieht die Navigationsfußzeile der Google Mail-App wie normale Menüelemente aus (zumindest für mich).<dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen>
indimen.xml
anstelle von Dummy-Elementen im Menü verwenden! es ist perfekt !Ich gebe Ihnen nur den Hinweis, wie Sie es lösen können, aber ich habe keine Chance, es in NavigationView zu testen, und bin mir ziemlich sicher, dass es funktionieren wird
hier das Beispiellayout xml;
Hier ist das Ergebnis:
Der Trick besteht darin, dem Elternteil eine Auffüllung und dem Kind einen Minusrand zuzuweisen.
Schneller Versuch:
quelle
Nach den in den anderen Antworten zum Verschachteln von Navigationsansichten beschriebenen Ansätzen traten einige Probleme auf:
Meine Lösung für all diese Probleme war die folgende:
Hier fungiert die NestedScrollView als übergeordnetes Bildlaufelement für die Sub-NavigationView. Das bedeutet, dass in der Unter-Navigationsansicht niemals Bildlaufleisten selbst angezeigt werden, sondern der gesamte Inhalt flach angezeigt wird.
Das Layout 'spacer_to_bottom' füllt den gesamten verbleibenden Platz aus, sodass sich die Fußzeile mit wenigen Menüsymbolen immer noch unten befindet.
Schließlich wird die feste Fußzeile zum linearen Layout hinzugefügt, das mit dem realen Menü (Sub-NavigationView), dem Abstandshalter, beginnt und unten die Fußzeile hat.
Hier finden Sie das vollständige Arbeitsbeispiel als AndroidStudio-Project: https://github.com/MarcDahlem/AndroidSidemenuFooterExample
Besonders die Navigationsschublade finden Sie hier: https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Screenshots:
quelle
Die einfachste Antwort besteht darin, eine Schaltfläche in das Schubladenlayout einzufügen und die Schwerkraft im unteren Bereich der Schublade festzulegen
navigationview.xml
.Hier ist der Code:
quelle
Sie benötigen ein Layout für die Containernavigationsansicht, das dann zwei weitere Navigationslayouts enthalten sollte. Sie richten diese oben und unten im übergeordneten Layout aus.
Ich würde empfehlen, eine Navigationsansicht als übergeordnetes Element und kein FrameLayout zu verwenden, da es sich im Wesentlichen um ein ScrimFrameLayout handelt und besser mit der Statusleiste interagiert.
Hier ist ein Beispiel dafür, wie Ihre Aktivität aussehen sollte:
Sie können mehr darüber lesen und ein Beispiel hier sehen: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
quelle
Ich kenne die späte Antwort, aber die perfekte und genaue Antwort, nach der die meisten Entwickler suchen.
Fügen Sie zum Hinzufügen einer Fußzeile in der Navigationsansicht eine benutzerdefinierte Ansicht zum Navigationsmenü wie folgt hinzu:
footer_navigation_menu.xml
Fügen Sie nun die obige Ansicht mit dem Gruppenattribut in Ihre Menü-XML ein. Damit kann sie als Fußzeile im Menü unterschieden werden.
profile_menu.xml
Das ist es. Unten ist die Ausgabe:
quelle
Es ist eine Art Patzer, dass NavigationView keine Möglichkeit hat, Fußzeilen hinzuzufügen. Aber Sie können so etwas versuchen,
Falls Ihre Fußzeile eine Liste ist,
Wenn es sich jedoch um eine benutzerdefinierte Ansicht handelt,
Auch in diesem Fall müssen Sie einstellen
x = height of your custom footer view
Ich hoffe es hilft.
quelle
Ich habe dasselbe auf folgende Weise gemacht:
Hier ist die Hauptsache, dass ich die Layout-Schwerkraft nach unten lege, z
quelle
Nach Ihrem Ansatz können einige geringfügige Änderungen dazu beitragen, was Sie erreichen möchten.
Stellen Sie einige Stub-Elemente im Menü ein, damit sich die Menüelemente nicht überschneiden.
Außerdem möchten Sie Ihrem Fußzeilenelement einen Klick-Listener hinzufügen.
quelle
Meine Lösung mit festen Fußzeilen- und Bildlaufmenüs (100% getestet)
quelle
So erreiche ich das Hinzufügen eines Layouts am unteren Rand der Navigation:
Aktualisierte Bibliotheken
quelle
NavigationView
Das ersteListView
untergeordnete Element enthält sowohl Kopf- als auch Menüelemente.Das einzige, was zum Hinzufügen einer Fußzeile erforderlich ist, ist der Aufruf von .addFooterView zur ListView
Weitere Informationen: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navigationview/
Kopieren Einfügen Code:
quelle
Fügen Sie einfach ein anderes Layout in Ihre Navigationsansicht ein:
Der Trick besteht darin, layout_gravity = "bottom" zu verwenden. Dadurch wird Ihr gesamtes Layout unten platziert und test, test2 wird ordnungsgemäß gestapelt.
quelle
benutze das..
Stellen Sie dann die untere Polsterung auf NavigationMenuView ein
quelle
Versuchen Sie das, diese Arbeit für mich.
quelle
Ich benutze dieses Formular, arbeite für mich. in Landschaft & Porträt.
quelle
quelle
<android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>
. Für weitere Informationen überprüfen Sie bitte github repocitory ( github.com/mehul0/AndroidSidemenuFooterExample-master )quelle
Die Layoutstruktur für klebrige Kopf- und Fußzeilen im Schubladenmenü:
Das komplette Layout:
quelle
Versuchen Sie das, diese Arbeit für mich.https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Sie können jedoch NavigationViewScrolling deaktivieren, um einen reibungsloseren Bildlauf zu ermöglichen
Screenshots:
quelle
Scrolling-Fußzeile für Version> 23.xx.
Ich habe es endlich geschafft, das zu erreichen, was ich wollte. Leider scheint es nicht mehr möglich zu sein, einfach den Verweis auf die ListView zu greifen und eine Kopf- und Fußzeile wie in den Versionen unter 23.xx (wie von Andrea Baccega beschrieben) hinzuzufügen. Dies für den Header zu tun ist weiterhin möglich:
Das Hinzufügen einer Fußzeile ist derzeit jedoch nicht möglich. Ich habe jedoch eine Problemumgehung gefunden, falls Sie nur versuchen, eine Fußzeile hinzuzufügen: Sie kehren einfach die Ansicht um. Dadurch wird die Kopfzeile unten hinzugefügt, die sich wie eine normale Fußzeile verhält. Stellen Sie einfach sicher, dass Sie Ihr Menü in umgekehrter Reihenfolge erstellen
quelle
Meine persönliche Lösung für feste Kopf- und Fußzeilen besteht darin, NavigationView wie folgt zu erweitern:
Ursprünglich erstellt NavigationView ein LinearLayout als erstes Element in RecyclerView und scrollt den gesamten Inhalt zusammen. Die Idee dabei ist, separate Ansichten für Fußzeile und Kopfzeile zu erstellen und diese dann mithilfe der Schwerkraft nach oben und unten zu verschieben. Später misst das Messen des Inhalts für RecyclerView den Bildlaufinhalt.
Hier ist die Bibliothek, die den obigen Code enthält, den ich geschrieben habe. https://github.com/guness/NavigationView
Gute Seite davon, jetzt kann ich die Fußzeilenansicht auf der XML genau wie die Kopfzeile auf native definieren:
quelle
Hier ist eine Lösung, die keine Verschachtelung erfordert und die den unteren Abstand der internen NavigationMenuView basierend auf der eigenen Höhe der Fußzeilenansicht dynamisch anpasst. Dies bedeutet, dass die Fußzeilenhöhe auf eingestellt werden kann
wrap_content
und Sie die Sichtbarkeit der Fußzeile dynamisch aufVISIBLE
oder ändern könnenGONE
.Sie müssen die ID von design_navigation_view in Ihrer ids.xml definieren:
Und verwenden Sie wie folgt:
Getestet mit
com.google.android.material:material:1.0.0
.quelle
Wenn Sie die Listenansicht verwenden, können Sie dies auf diese Weise versuchen. Die Listenansicht unterstützt die Funktion zum Hinzufügen der Fußzeile, sodass Sie eine benutzerdefinierte Fußzeilenansicht R.layout.drawer_footer hinzufügen können, indem Sie das Listenansichtsobjekt wie folgt verwenden
In meinem Fall verwende ich expandableListView anstelle von listview (die listview hat auch die Funktion addFooter). Hoffe dieser Weg hilft dir
quelle
Fügen Sie diese Zeilen in Ihr Menü-Layout ein. Ich hoffe, es wird Ihr Problem beheben:
quelle