Como definir configurações de rodapé e itens de perfil NavitationView
? se parece com a caixa de entrada pela gaveta de navegação por email. Os NavitationView
itens são inflados pelo recurso de menu, mas não sei como definir os itens inferiores para um recurso de menu, ou como posso definir uma exibição personalizada NavigationView
ou um deslocamento inferior? Tentei colocar isso <LinearLayout...>
como exibição em rodapé, mas em telas pequenas o rodapé coloca os itens e não consigo rolar o menu, tentei definir um preenchimento de rodapé para NavigationView
, mas o rodapé também aceita o preenchimento.
Isso não está rolando em telas pequenas:
<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>
Isso rola, mas o rodapé está sobre os itens 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
Arquivo de menu da gaveta :
<?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)
.Respostas:
Se você deseja um rodapé fixo (sem rolagem) no menu de navegação, é necessário agrupar o NavigationView em outro layout, como você publicou. NavigationView funciona como FrameLayout, então isso acaba "empilhando" o layout interno na parte superior dos itens de menu NavigationView. Aqui está uma maneira de organizá-lo, usando LinearLayout para os itens de rodapé:
Rodapé fixo
Usei TextViews neste exemplo, mas você pode usar o que quiser para as visualizações de rodapé. Para evitar que os itens do rodapé se sobreponham à parte inferior do menu, adicione alguns itens fictícios ao final do arquivo de recursos do menu (eles funcionarão como "espaçadores"):
res / menu / drawer.xml
Por fim, não esqueça de adicionar ouvintes de clique em sua Atividade para as visualizações de rodapé reais:
Rodapé de rolagem
Se você permitir que o rodapé role com o restante do NavigationView, isso simplificará as coisas (sem layouts adicionais ou clique em listeners). Basta adicionar os itens de rodapé ao seu arquivo de recurso de menu como um único
<group>
(isso criará uma linha separadora ), e tudo será tratado automaticamente e rolará:res / menu / drawer.xml
fonte
<group>
se desejar uma linha separadora; caso contrário, o rodapé de navegação do aplicativo do Gmail se parecerá com itens de menu normais (pelo menos para mim).<dimen name="design_navigation_padding_bottom" tools:override="true">48dp</dimen>
emdimen.xml
vez de usar itens fictícios no menu! Está perfeito !Vou dar uma dica de como resolvê-lo, mas não tenho chance de testá-lo no NavigationView e tenho certeza de que funcionará
aqui o layout de amostra xml;
aqui está o resultado:
o truque é aplicar o preenchimento ao pai e menos margem ao filho.
Tentativa rápida:
fonte
Seguindo as abordagens descritas nas outras respostas das visualizações de navegação de aninhamento, surgiram alguns problemas:
Minha solução para todos esses problemas foi a seguinte:
Aqui, o NestedScrollView atua como um pai de rolagem para o sub-NavigationView. Isso significa que o sub-NavigationView nunca aparece as barras de rolagem, mas todo o conteúdo é mostrado de maneira plana.
O layout 'spacer_to_bottom' preenche todo o espaço restante, de modo que, com poucos ícones de menu, o rodapé ainda está na parte inferior.
Por fim, o rodapé fixo é adicionado ao layout linear, que começa com o menu real (sub-NavigationView), o espaçador, e possui na parte inferior o rodapé.
Aqui você pode encontrar o exemplo de trabalho completo como AndroidStudio-Project: https://github.com/MarcDahlem/AndroidSidemenuFooterExample
Especialmente a gaveta de navegação pode ser encontrada aqui: https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
Imagens:
fonte
A resposta mais simples é adicionar um botão dentro do layout da gaveta e definir a gravidade para baixo no
navigationview.xml
.Aqui está o código:
fonte
Você precisa ter um layout de exibição de navegação de contêiner e, em seguida, ele deve conter mais dois layouts de navegação. Você os alinha à parte superior e inferior do layout pai.
Eu recomendaria o uso de uma exibição de navegação como pai e não como FrameLayout, porque é essencialmente um ScrimFrameLayout e interage melhor com a barra de status.
Aqui está um exemplo de como deve ser sua atividade:
Você pode ler mais sobre isso e ver um exemplo aqui: http://blog.nitish.io/post/122633295558/android-design-library-navigationview-with-top
fonte
Eu sei sua resposta tardia, mas sua resposta perfeita e precisa que a maioria dos desenvolvedores procura.
Para adicionar rodapé na visualização de navegação, adicione visualização personalizada ao menu de navegação, como abaixo:
footer_navigation_menu.xml
Agora, adicione a visualização acima em seu menu xml com o atributo group. Para isso, ele pode se diferenciar como rodapé no menu.
profile_menu.xml
É isso aí. Abaixo está a saída:
fonte
É um tipo de chatice que o NavigationView não tenha uma disposição para adicionar rodapé. Mas você pode tentar algo assim,
Caso seu rodapé seja uma lista,
Mas, se for algum tipo de visualização personalizada,
Além disso, nesse caso, você precisará definir
x = height of your custom footer view
Espero que ajude.
fonte
Fiz a mesma coisa da seguinte maneira:
Aqui, o principal é que eu coloque a gravidade do layout no fundo, por exemplo
fonte
Seguindo sua abordagem, algumas pequenas alterações podem ajudar no que você deseja alcançar.
E defina alguns itens de stub no menu, para que eles não se sobreponham.
Além disso, você deseja adicionar um ouvinte de clique ao item de rodapé.
fonte
Minha solução com rodapé fixo e menus de rolagem (100% testado)
fonte
É assim que consigo adicionar o layout na parte inferior da navegação:
Bibliotecas atualizadas
fonte
NavigationView
O primeiro filho é o queListView
contém os itens de cabeçalho e de menu.A única coisa necessária para adicionar um rodapé é chamar .addFooterView no ListView
Mais informações: http://www.andreabaccega.com/blog/2015/08/28/how-to-add-footer-to-navigationview/
Copie o código de colagem:
fonte
Basta colocar outro layout dentro do seu NavigationView:
O truque é usar layout_gravity = "bottom" - isso colocará todo o layout na parte inferior e testará, test2 está empilhado corretamente.
fonte
usa isto..
em seguida, defina o preenchimento inferior como NavigationMenuView
fonte
Tente isso, este trabalho para mim.
fonte
Eu uso este formulário, trabalho para mim. na paisagem e retrato.
fonte
fonte
<android.support.design.widget.NavigationView>...</android.support.design.widget.NavigationView>
. para obter mais detalhes, verifique o repocitory do github ( github.com/mehul0/AndroidSidemenuFooterExample-master )fonte
A estrutura do layout do cabeçalho e rodapé no menu da gaveta:
O layout completo:
fonte
Tente isso, este trabalho para mim.https://github.com/MarcDahlem/AndroidSidemenuFooterExample/blob/master/app/src/main/res/layout/activity_main.xml
No entanto, você deve desativar o NavigationViewScrolling para obter uma rolagem mais suave
Imagens:
fonte
Rodapé de rolagem para Versão> 23.xx
Finalmente consegui alcançar o que queria, infelizmente, parece que não é mais possível apenas pegar a referência ao ListView e adicionar um cabeçalho e rodapé como nas versões abaixo de 23.xx (conforme descrito por Andrea Baccega). Ainda é possível fazer isso no cabeçalho:
Mas adicionar um rodapé não é possível no momento. No entanto, encontrei uma solução alternativa no caso de você apenas tentar adicionar um rodapé: basta reverter a exibição. Isso adicionará o cabeçalho na parte inferior, que se comporta como um rodapé normal. Apenas certifique-se de criar seu menu na ordem inversa
fonte
Minha solução pessoal para cabeçalho e rodapé fixos está estendendo o NavigationView da seguinte maneira:
Originalmente, o NavigationView cria um LinearLayout como primeiro item no RecyclerView e rola todo o conteúdo juntos. A idéia é criar vistas separadas para rodapé e cabeçalho e, em seguida, empurre-as para cima e para baixo usando Gravity. Posteriormente, medir o conteúdo do RecyclerView resolve o conteúdo da rolagem.
Aqui está a biblioteca que contém o código acima que escrevi. https://github.com/guness/NavigationView
O lado bom disso é que agora posso definir a visualização do rodapé no xml, assim como o cabeçalho no nativo:
fonte
Aqui está uma solução que não requer aninhamento e que ajusta dinamicamente o preenchimento inferior do NavigationMenuView interno com base na altura da visualização do rodapé, o que significa que a altura do rodapé pode ser configurada
wrap_content
e você pode alterar dinamicamente a visibilidade do rodapé paraVISIBLE
ouGONE
.Você precisa definir o ID do design_navigation_view no seu ids.xml:
E use assim:
Testado com
com.google.android.material:material:1.0.0
.fonte
Se você estiver usando o listview, poderá tentar dessa maneira. O suporte à visualização de lista inclui a função de visualização de rodapé, para que você possa adicionar uma visualização R.layout.drawer_footer de rodapé personalizada usando o objeto listview como o código abaixo
No meu caso, uso expandableListView em vez de listview (a listview também possui a função addFooter). Espero que desta forma te ajude
fonte
Coloque essas linhas no layout do menu. Espero que o problema seja resolvido:
fonte