Comment puis-je définir les paramètres de pied de page et les éléments de profil sur NavitationView
? à ressemble au tiroir de navigation Boîte de réception par e-mail. Les NavitationView
éléments sont gonflés par la ressource de menu, mais je ne sais pas comment définir les éléments du bas sur une ressource de menu, ou comment puis-je définir une vue personnalisée NavigationView
ou un décalage inférieur? J'ai essayé de mettre cela <LinearLayout...>
en vue de pied de page, mais sur les petits écrans, le pied de page place les éléments et je ne peux pas faire défiler le menu, j'ai essayé de définir un remplissage de pied de page NavigationView
, mais le pied de page prend également le rembourrage.
Ce n'est pas un défilement sur de petits écrans:
<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>
Cela défile, mais le pied de page est sur les éléments de 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
Fichier de menu du tiroir :
<?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)
.Réponses:
Si vous voulez un pied de page fixe (sans défilement) dans votre menu de navigation, vous devez envelopper NavigationView autour d'une autre disposition, comme vous l'avez publié. NavigationView fonctionne comme FrameLayout, donc cela finit par «empiler» la disposition interne au-dessus des éléments de menu NavigationView. Voici une façon de l'organiser, en utilisant LinearLayout pour les éléments de pied de page:
Pied de page fixe
J'ai utilisé TextViews dans cet exemple, mais vous pouvez utiliser ce que vous voulez pour les vues de pied de page. Pour éviter que les éléments du pied de page ne se chevauchent avec le bas du menu, ajoutez des éléments factices à la fin de votre fichier de ressources de menu (ils agiront comme des "entretoises"):
res / menu / tiroir.xml
Enfin, n'oubliez pas d'ajouter des écouteurs de clics dans votre activité pour les vues réelles du pied de page:
Pied de page défilant
Si vous autorisez le pied de page à défiler avec le reste de NavigationView, cela simplifie les choses (pas de dispositions supplémentaires ni d'écouteurs de clic). Ajoutez simplement les éléments de pied de page à votre fichier de ressources de menu en tant qu'unique
<group>
(cela créera une ligne de séparation ), et tout sera géré automatiquement et défilera ensemble:res / menu / tiroir.xml
la source
<group>
si vous voulez une ligne de séparation, sinon, le pied de page de navigation de l'application Gmail ressemble à des éléments de menu normaux (du moins pour moi).<dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen>
dansdimen.xml
au lieu d'utiliser des éléments factices dans le menu! c'est parfait !Je vais juste vous donner un indice pour le résoudre, mais je n'ai aucune chance de le tester sur NavigationView, et je suis presque sûr que cela fonctionnera
voici l'exemple de mise en page xml;
voici le résultat:
l'astuce consiste à appliquer un remplissage au parent et une marge moins à l'enfant.
Essai rapide:
la source
Suite aux approches décrites dans les autres réponses de l'imbrication des vues de navigation, certains problèmes sont survenus:
Ma solution à tous ces problèmes était la suivante:
Ici, NestedScrollView agit comme un parent défilant pour le sous-NavigationView. Cela signifie que le sous-NavigationView n'affiche jamais les barres de défilement lui-même, mais que tout le contenu est affiché de manière plate.
La mise en page «spacer_to_bottom» remplit tout l'espace restant, de sorte qu'avec quelques icônes de menu, le pied de page est toujours en bas.
Enfin, le pied de page fixe est ajouté à la mise en page linéaire, qui commence par le menu réel (sous-NavigationView), l'entretoise, et a en bas le pied de page.
Ici vous pouvez trouver l'exemple de travail complet comme AndroidStudio-Project: https://github.com/MarcDahlem/AndroidSidemenuFooterExample
En particulier, le tiroir de navigation peut être trouvé ici: https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Captures d'écran:
la source
La réponse la plus simple consiste à ajouter un bouton dans la disposition du tiroir et à le définir par gravité en bas dans le
navigationview.xml
.Voici le code:
la source
Vous devez avoir une disposition de vue de navigation de conteneur, puis qui doit contenir deux autres dispositions de navigation. Vous les alignez en haut et en bas de la mise en page parent.
Je recommanderais d'utiliser une vue de navigation en tant que parent et non un FrameLayout car il s'agit essentiellement d'un ScrimFrameLayout et interagit mieux avec la barre d'état.
Voici un exemple de ce à quoi votre activité devrait ressembler:
Vous pouvez en lire plus et voir un exemple ici: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
la source
Je connais sa réponse tardive mais sa réponse parfaite et précise que la plupart des développeurs recherchent.
Pour ajouter un pied de page dans la vue de navigation, ajoutez une vue personnalisée dans le menu de navigation comme ci-dessous:
footer_navigation_menu.xml
Maintenant, ajoutez la vue ci-dessus dans votre menu xml avec l'attribut group.Ainsi, il peut se différencier en pied de page dans le menu.
profile_menu.xml
C'est tout. Voici la sortie:
la source
C'est un peu décevant que NavigationView n'ait pas de disposition pour ajouter un pied de page. Mais tu peux essayer quelque chose comme ça,
Dans le cas où votre pied de page est une liste,
Mais, s'il s'agit d'une sorte de vue personnalisée,
De plus, dans ce cas, vous devrez définir
x = height of your custom footer view
J'espère que ça aide.
la source
J'ai fait la même chose de la manière suivante:
Ici, l'essentiel est que je mette la gravité de la disposition en bas, par exemple
la source
Suite à votre approche, quelques changements mineurs peuvent vous aider à atteindre vos objectifs.
Et définissez certains éléments de stub dans le menu, de sorte que les éléments de menu ne se chevauchent pas.
Vous voudrez également ajouter un écouteur de clic à votre élément de pied de page.
la source
Ma solution avec pied de page fixe et menus déroulants (testée à 100%)
la source
Voici comment j'arrive à ajouter une mise en page en bas de la navigation:
Bibliothèques mises à jour
la source
NavigationView
le premier enfantListView
contient les éléments d'en-tête et de menu.La seule chose nécessaire pour ajouter un pied de page est d'appeler .addFooterView à ListView
Plus d'infos: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navigationview/
Copier le code coller:
la source
Mettez simplement une autre disposition dans votre NavigationView:
L'astuce consiste à utiliser layout_gravity = "bottom" - cela mettra toute votre mise en page en bas et testera, test2 sont correctement empilés.
la source
utilisez ceci..
puis définissez le remplissage inférieur sur NavigationMenuView
la source
Essayez ceci, ce travail pour moi.
la source
J'utilise ce formulaire, travaille pour moi. en paysage et portrait.
la source
la source
<android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>
. pour plus de détails, veuillez consulter le repocitory github ( github.com/mehul0/AndroidSidemenuFooterExample-master )la source
La structure de mise en page pour l'en-tête et le pied de page collants dans le menu du tiroir:
La mise en page complète:
la source
Essayez ceci, ce travail pour moi. https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Cependant, vous désactivez NavigationViewScrolling pour un défilement plus fluide
Captures d'écran:
la source
Pied de page défilant pour la version> 23.xx
J'ai finalement réussi à réaliser ce que je voulais, malheureusement, il semble qu'il n'est plus possible de simplement saisir la référence à la ListView et d'ajouter un en-tête et un pied de page comme dans les versions inférieures à 23.xx (comme décrit par Andrea Baccega). Faire cela pour l'en-tête est toujours possible:
Mais l'ajout d'un pied de page n'est pas possible pour le moment. Cependant, j'ai trouvé une solution de contournement au cas où vous essayez simplement d'ajouter un pied de page: vous inversez simplement la vue, cela ajoutera l'en-tête en bas qui se comporte comme un pied de page normal. Assurez-vous simplement de créer votre menu dans l'ordre inverse
la source
Ma solution personnelle pour l'en-tête et le pied de page fixes étend NavigationView comme suit:
À l'origine, NavigationView crée un LinearLayout en tant que premier élément sur RecyclerView et fait défiler tout le contenu ensemble. L'idée à ce sujet est de créer des vues séparées pour le pied de page et l'en-tête, puis de les pousser vers le haut et le bas en utilisant Gravity. Plus tard, la mesure du contenu pour RecyclerView règle le contenu de défilement.
Voici la bibliothèque qui contient le code ci-dessus que j'ai écrit. https://github.com/guness/NavigationView
Bon côté de cela, je peux maintenant définir la vue du pied de page sur le xml tout comme l'en-tête sur le natif:
la source
Voici une solution qui ne nécessite pas d'imbrication et qui ajuste dynamiquement le remplissage inférieur du NavigationMenuView interne en fonction de la propre hauteur de la vue du pied de page, ce qui signifie que la hauteur du pied de page peut être définie sur
wrap_content
et que vous pouvez modifier dynamiquement la visibilité du pied de page surVISIBLE
ouGONE
.Vous devez définir l'id de design_navigation_view dans votre ids.xml:
Et utilisez comme ceci:
Testé avec
com.google.android.material:material:1.0.0
.la source
Si vous utilisez listview, vous pouvez essayer de cette façon. La vue de liste prend en charge la fonction d'affichage du pied de page, vous pouvez donc ajouter une vue de pied de page personnalisée R.layout.drawer_footer à l'aide de l'objet listview comme code ci-dessous
Dans mon cas, j'utilise expandableListView au lieu de listview (la listview a également la fonction addFooter). J'espère que cette façon vous aidera
la source
Mettez ces lignes dans la disposition de votre menu. J'espère que cela résoudra votre problème:
la source