SlideShare uma empresa Scribd logo
1 de 23
Baixar para ler offline
Android
BottomNavigationView
Como e quando utilizar
thiengo.com.br
O componente visual
O BottomNavigationView foi lançado no
Android, como API nativa, somente em
março de 2016, junto a versão 25 da
Material Design Support Library.
O foco deste componente visual é em
devices mobile, sendo recomendado,
quando em sistemas desktop ou Web, o uso
do menu gaveta.
Por fazer parte do pacote de suporte do
Android, o BottomNavigationView atende
às principais versões deste SO.
Com o bottom navigation é possível prover
ao usuário acesso rápido a telas de
contextos similares, porém há uma série de
regras de negócio sobre quando e como
devemos utilizar este widget, regras também
apresentadas e discutidas nos próximos
slides.
Especificações de design
- Altura de 56dp e largura variando entre
80dp e 168dp:
- A exceção é quando há animação e
itens suficiente, na barra de fundo,
para exigir que o item atualmente em
foco tenha um espaço bem maior do
que os outros:
- Item ativo, de 96dp a 168dp;
- Item inativo de 56dp a 96dp.
- Quando há um número de itens onde
até mesmo os rótulos de todos eles
podem ser apresentados, neste caso
todas as abas devem ter a mesma
largura em qualquer status.
- Ícones devem ter medidas como as dos
ícones do NavigationView, 24dp x 24dp;
- Os rótulos dos bottom actions, itens do BottomNavigationView, devem ser
pequenos e significativos, isso caso haja a necessidade de também coloca-los
junto aos ícones, e não devem ser truncados, ocupando apenas uma linha;
- O design dos itens deve ser em duas categorias: item em foco; e itens fora de
foco. Ou seja, não utilize cores distintas para itens diferentes em foco. Se a cor
primária do app for a utilizada para itens em foco, sempre utilize ela
independente do item e da cor principal da tela de conteúdo acionada por ele.
Especificações de comportamento
- O acionamento de qualquer bottom
action não deve abrir outros menus
ou dialogs;
- Caso seja acionado um item já em
foco, o comportamento deve ser de
refresh de conteúdo, o que faríamos
caso um SwipeRefreshLayout
estivesse em uso;
- A navegação entre os itens do
BottomNavigationView deve
cancelar a tarefa atual em curso do
item anteriormente em foco;
- O apresentar / esconder do
BottomNavigationView, de acordo
com o scroll da tela, é algo opcional;
- O gesto de swipe na área de conteúdo não deve permitir a mudança de
conteúdo e nem mesmo a mudança de item no bottom navigation:
- O efeito de transição de conteúdo, se presente, deve ser com a animação de
fade (in / out).
- A navegação hierárquica dos conteúdos não deve tirar da tela o
BottomNavigationView, o que ocorre quando utilizando o menu gaveta.
Especificações de uso
- O BottomNavigationView deve ser considerado como opção de uso somente
para contextos onde há de 3 a 5 telas de alto nível no aplicativo:
- Para menos três telas, utilize tabs;
- Para mais de 5 telas, utilize o menu gaveta, isso, pois mais do 5 itens
atrapalha na experiência do usuário, UX, os itens ficam muito próximos uns
aos outros.
- Os conteúdos dos itens do bottom navigation devem ter similar importância no
aplicativo;
- Evite o uso, em mesma tela, de tabs e BottomNavigationView, pois isso tende
a confundir o usuário;
- O back button do device não deve acionar navegação de volta entre os itens do
BottomNavigationView, ou seja, não há o trabalho de empilhamento entre os
fragmentos acionados a partir dos bottom actions.
Codificação
Instalação
Para poder utilizar o BottomNavigationView
é necessário, no Gradle App Level, a
referência a biblioteca de suporte do Material
Design:
Certifique-se de sempre estar utilizando a
versão mais atual da library de suporte.
Definição em XML
Diferente do DrawerLayout que trabalha como uma espécie de invólucro a outros
componentes necessários a ele, o BottomNavigationView, apesar de herdar do
FrameLayout, é utilizado de maneira isolada, digo, sem componentes filhos
diretos, com uso de tags de abertura e de fechamento.
/res/layout/activity_main.xml
/res/menu/activity_main_bottom_actions.xml
Resultado em tela
Definição em linguagem de programação
Para a parte de programação, o principal é o acesso aos listeners de
acionamento e re-acionamento de bottom actions.
No código Kotlin ao lado
é assumido que o plugin
kotlin-android-extensions
está definido no projeto,
por isso não há
necessidade de uso do
método findViewById().
Todo o código XML do
BottomNavigationView
também é passível de
ser construído via
programação, com
qualquer uma das
linguagens oficiais para
o dev Android.
MainActivity.kt
Customização de itens
Caso queira definir outras cores
para os bottom actions e seus
componentes, pode utilizar os
atributos: app:itemBackground,
app:itemIconTint e
app:itemTextColor.
O conteúdo de cada um destes
atributos pode ser uma cor direta,
como em: @color/colorPrimary.
Ou um drawable que permite
mudanças de estilo de acordo com
o status do item, como o
@drawable/
bottom_item_background_color.
/res/drawable/bottom_item_background_color.xml
/res/layout/activity_main.xml
Note que no caso da definição
de um <selector> para o
atributo app:itemBackground,
ao invés de android:color
deverá ser utilizado o atributo
android:drawable.
Caso não queira trabalhar o
background dos itens de acordo
com os estados deles, algo
correto de se fazer quando
seguindo as regras do bottom
navigation no Material Design,
utilize o atributo
android:background.
O resultado é o mesmo do que
o apresentado com o
app:itemBackground quando
utilizando somente uma cor.
Resultado dos códigos XML do slide anterior
BottomNavigationView com android:background
Animação
Utilizando a API nativa do
BottomNavigationView não
precisamos nos preocupar com a
codificação de animação que nos
permitirá seguir as regras do
Material Design para este widget.
A versão nativa já faz, com
maestria, a parte dela: Ripple Effect,
mudança de cor e
redimensionamento de itens e
rótulos, incluindo a não
apresentação de rótulos de itens
não acionados em uma bottom
navigation pequena.
Clique para visualizar a animação
A parte de animação que devemos
implementar sem auxílio da API do
BottomNavigationView é a de transição de
fragmentos, algo também definido, como
opcional, nas especificações deste widget.
Clique para visualizar a animação
Pontos finais
Curiosidade
Na documentação, tanto a oficial do Android como a oficial do Material Design, não
há restrições de uso do BottomNavigationView junto a:
- DrawerLayout e NavigationView, também conhecidos como Menu Gaveta;
- BottomSheet;
- Snackbar;
- FloatingActionButton.
Uma observação importante é que não há necessidade e nem mesmo é inteligente
querer utilizar um ViewPager, que facilita a transição e cache de fragmentos, junto
ao BottomNavigationView. Isso principalmente pelo ViewPager permitir, por
padrão, a animação de swipe entre fragmentos, algo não permitido no bottom
navigation.
Limitações
Apesar da API nativa do BottomNavigationView ser bem simples de utilizar, ela
fica devendo em:
- Não fornecer uma maneira trivial de vincular fragmentos e animações de
transição aos itens, bottom actions. Algo que é possível quando utilizando
TabLayout e ViewPager;
- Não fornecer uma maneira trivial de ativar o scroll da barra de fundo de acordo
com o scroll do conteúdo em tela.
Outras APIs
A seguir alguns conteúdos com outras APIs de BottomNavigationView que
podem ser úteis em sua jornada como desenvolvedor Android:
- Ultimate Guide to Bottom Navigation on Android;
- AHBottomNavigation, API bottom navigation do artigo indicado no item anterior;
- Uma série de APIs no Android-Arsenal.
Conclusão
Com o BottomNavigationView, mesmo sabendo da não restrição do trabalho
junto ao menu gaveta, podemos assumir que ele veio também para substituir, em
alguns casos (de três a cinco itens), tanto o drawer navigation como também as
tabs de topo.
Respeitando ao menos as regras de cores, ícones e rótulos, já é o suficiente para
termos um bom uso do widget discutido nestes slides.
Caso precise de alguma funcionalidade ainda não atendida pela implementação
nativa do componente, não deixe de pesquisar por APIs de terceiros que permitam
o uso mais customizado do bottom navigation, que até o momento da construção
deste conteúdo, a versão nativa, não permitia de forma trivial o scroll de acordo
com a tela.
Fique atento quanto ao uso do BottomNavigationView, pois em alguns conteúdos
de estudo para o desenvolvimento destes slides foram encontrados casos onde um
ou outro item deste widget ficava desativado devido a algum passo que o usuário
ainda não havia percorrido no aplicativo. Uma das regras de negócio do
BottomNavigationView é o acesso imediato ao conteúdo do bottom action
acionado, sem necessidade de pré-requisitos.
Fontes
Conteúdo completo, em texto e em vídeo, no link a seguir:
- https://www.thiengo.com.br/bottomnavigationview-android-como-e-quando-utilizar
Fontes:
- https://material.io/guidelines/components/bottom-navigation.html
- https://developer.android.com/reference/android/support/design/widget/
BottomNavigationView.html
- https://medium.com/@hitherejoe/exploring-the-android-design-support-library-
bottom-navigation-drawer-548de699e8e0
- https://stackoverflow.com/a/44778453/2578331
- https://stackoverflow.com/a/40326245/2578331
- https://stackoverflow.com/a/30214843/2578331
Para estudo
- Treinamento oficial:
- Prototipagem Profissional de Aplicativos Android.
- Livros oficiais:
- Receitas Para Desenvolvedores Android;
- Refatorando Para Programas Limpos.
- Redes:
- Udemy;
- YouTube;
- Facebook;
- LinkedIn;
- GitHub;
- Twitter;
- Google Plus.
- Blog App.
Android
BottomNavigationView
thiengo.com.br
Vinícius Thiengo
thiengocalopsita@gmail.com

Mais conteúdo relacionado

Mais procurados

PhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomPhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomVinícius Thiengo
 
Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Vinícius Thiengo
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - BásicoHugoDalevedove
 
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhone
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhoneEntenda porque seu aplicativo de Android não deve ser igual ao de iPhone
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhoneHenrique Perticarati
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidSidney Roberto
 
Fontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoFontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoVinícius Thiengo
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Horacio Diamante Mondlane
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldMarcio Palheta
 
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Tchelinux
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4Jose Berardo
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidJosé Alexandre Macedo
 
Curso de Android - aula 3
Curso de Android - aula 3Curso de Android - aula 3
Curso de Android - aula 3Jose Berardo
 
Curso de Android - aula 2
Curso de Android - aula 2Curso de Android - aula 2
Curso de Android - aula 2Jose Berardo
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidRodolfo Faquin Della Justina
 
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2Matheus Calegaro
 
Annotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidAnnotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidVinícius Thiengo
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para AndroidJorge Cardoso
 
Desenvolvimento Android, por onde começar?
Desenvolvimento Android, por onde começar?Desenvolvimento Android, por onde começar?
Desenvolvimento Android, por onde começar?Rudson Lima
 

Mais procurados (20)

PhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de ZoomPhotoView Android Para a Completa Implementação de Zoom
PhotoView Android Para a Completa Implementação de Zoom
 
Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?Android: Qual Tecnologia de Desenvolvimento Utilizar?
Android: Qual Tecnologia de Desenvolvimento Utilizar?
 
Programação Android - Básico
Programação Android - BásicoProgramação Android - Básico
Programação Android - Básico
 
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhone
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhoneEntenda porque seu aplicativo de Android não deve ser igual ao de iPhone
Entenda porque seu aplicativo de Android não deve ser igual ao de iPhone
 
Tutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para AndroidTutorial - Como criar sua primeira app para Android
Tutorial - Como criar sua primeira app para Android
 
Fontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e UsoFontes em XML, Android O. Configuração e Uso
Fontes em XML, Android O. Configuração e Uso
 
Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03Apostila passo a passo como programar em android edição03
Apostila passo a passo como programar em android edição03
 
Android Aula 5
Android Aula 5Android Aula 5
Android Aula 5
 
Capítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorldCapítulo 01 - Fundamentos de Android e o HelloWorld
Capítulo 01 - Fundamentos de Android e o HelloWorld
 
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
Desenvolvendo aplicações em Java para o Google Android - Ranieri de Souza Fer...
 
Curso de Android Aula 4
Curso de Android Aula 4Curso de Android Aula 4
Curso de Android Aula 4
 
Introdução ao Desenvolvimento Android
Introdução ao Desenvolvimento AndroidIntrodução ao Desenvolvimento Android
Introdução ao Desenvolvimento Android
 
Curso de Android - aula 3
Curso de Android - aula 3Curso de Android - aula 3
Curso de Android - aula 3
 
Curso de Android - aula 2
Curso de Android - aula 2Curso de Android - aula 2
Curso de Android - aula 2
 
Android Aprendiz
Android AprendizAndroid Aprendiz
Android Aprendiz
 
Da introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento AndroidDa introdução à prática no desenvolvimento Android
Da introdução à prática no desenvolvimento Android
 
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2Introdução ao desenvolvimento de apps para Android - Dia 2/2
Introdução ao desenvolvimento de apps para Android - Dia 2/2
 
Annotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no AndroidAnnotation Span Para Estilização de Texto no Android
Annotation Span Para Estilização de Texto no Android
 
Introdução à programação para Android
Introdução à programação para AndroidIntrodução à programação para Android
Introdução à programação para Android
 
Desenvolvimento Android, por onde começar?
Desenvolvimento Android, por onde começar?Desenvolvimento Android, por onde começar?
Desenvolvimento Android, por onde começar?
 

Semelhante a BottomNavigationView Android, Como e Quando Utilizar

Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIVinícius Thiengo
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com androidRicardo Ogliari
 
Android About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela SobreAndroid About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela SobreVinícius Thiengo
 
Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap Raniere de Lima
 
Observable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidObservable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidVinícius Thiengo
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Claudinei Brito Junior
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Nelson Glauber Leal
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapThiago Colares
 
Articulate storyline - Criando uma Apresentação - Parte 01
Articulate storyline - Criando uma Apresentação - Parte 01Articulate storyline - Criando uma Apresentação - Parte 01
Articulate storyline - Criando uma Apresentação - Parte 01EADCONSULTOR
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_onRoberson Alves
 
ViewModel Android, Como Utilizar Este Componente de Arquitetura
ViewModel Android, Como Utilizar Este Componente de ArquiteturaViewModel Android, Como Utilizar Este Componente de Arquitetura
ViewModel Android, Como Utilizar Este Componente de ArquiteturaVinícius Thiengo
 
Layouts e multiplas activities
Layouts e multiplas activitiesLayouts e multiplas activities
Layouts e multiplas activitiesCalebeMiquissene
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLIVanessa Me Tonini
 
Aplicações java com netbeans
Aplicações  java com  netbeansAplicações  java com  netbeans
Aplicações java com netbeansThalles Anderson
 

Semelhante a BottomNavigationView Android, Como e Quando Utilizar (20)

Como Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State APIComo Reter Objetos Utilizando Android-State API
Como Reter Objetos Utilizando Android-State API
 
Como criar interfaces gráficas com android
Como criar interfaces gráficas com androidComo criar interfaces gráficas com android
Como criar interfaces gráficas com android
 
Android About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela SobreAndroid About Page API Para Construir a Tela Sobre
Android About Page API Para Construir a Tela Sobre
 
Slide 02 introdução ao code igniter, utilização do bootstrap
Slide 02   introdução ao code igniter, utilização do bootstrap Slide 02   introdução ao code igniter, utilização do bootstrap
Slide 02 introdução ao code igniter, utilização do bootstrap
 
Observable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI AndroidObservable Binding Para Atualização na UI Android
Observable Binding Para Atualização na UI Android
 
Bada
BadaBada
Bada
 
Apostila Android
Apostila AndroidApostila Android
Apostila Android
 
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
Desenvolvimento de aplicativos móveis para Android utilizando Java - 1/3
 
Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023Novidades incríveis do Android em 2023
Novidades incríveis do Android em 2023
 
Visualg2_manual.pdf
Visualg2_manual.pdfVisualg2_manual.pdf
Visualg2_manual.pdf
 
Mulheres na tecnologia 2015
Mulheres na tecnologia 2015Mulheres na tecnologia 2015
Mulheres na tecnologia 2015
 
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGapAplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
Aplicações Híbridas para Dispositivos Móveis com AngularJS e PhoneGap
 
Articulate storyline - Criando uma Apresentação - Parte 01
Articulate storyline - Criando uma Apresentação - Parte 01Articulate storyline - Criando uma Apresentação - Parte 01
Articulate storyline - Criando uma Apresentação - Parte 01
 
Android Libs - AndroidDevConf
Android Libs - AndroidDevConfAndroid Libs - AndroidDevConf
Android Libs - AndroidDevConf
 
Sap
SapSap
Sap
 
Aula02 android hands_on
Aula02 android hands_onAula02 android hands_on
Aula02 android hands_on
 
ViewModel Android, Como Utilizar Este Componente de Arquitetura
ViewModel Android, Como Utilizar Este Componente de ArquiteturaViewModel Android, Como Utilizar Este Componente de Arquitetura
ViewModel Android, Como Utilizar Este Componente de Arquitetura
 
Layouts e multiplas activities
Layouts e multiplas activitiesLayouts e multiplas activities
Layouts e multiplas activities
 
Aprendendo Angular com a CLI
Aprendendo Angular com a CLIAprendendo Angular com a CLI
Aprendendo Angular com a CLI
 
Aplicações java com netbeans
Aplicações  java com  netbeansAplicações  java com  netbeans
Aplicações java com netbeans
 

Mais de Vinícius Thiengo

7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria LerVinícius Thiengo
 
5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria lerVinícius Thiengo
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidVinícius Thiengo
 
Como Utilizar Métodos Binding Adapter no Android
Como Utilizar Métodos Binding Adapter no AndroidComo Utilizar Métodos Binding Adapter no Android
Como Utilizar Métodos Binding Adapter no AndroidVinícius Thiengo
 
Ajuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android JetpackAjuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android JetpackVinícius Thiengo
 
Live Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioLive Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioVinícius Thiengo
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidVinícius Thiengo
 
True Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidTrue Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidVinícius Thiengo
 
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidUtilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidVinícius Thiengo
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingVinícius Thiengo
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidVinícius Thiengo
 

Mais de Vinícius Thiengo (13)

7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
7 Livros Que Não São de TI, Mas Que Um Programador Deveria Ler
 
5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler5 livros que não são de TI, mas que um desenvolvedor deveria ler
5 livros que não são de TI, mas que um desenvolvedor deveria ler
 
SelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView AndroidSelectionTracker Para Seleção de Itens no RecyclerView Android
SelectionTracker Para Seleção de Itens no RecyclerView Android
 
Como Utilizar Métodos Binding Adapter no Android
Como Utilizar Métodos Binding Adapter no AndroidComo Utilizar Métodos Binding Adapter no Android
Como Utilizar Métodos Binding Adapter no Android
 
Ajuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android JetpackAjuste de Texto com Autosizing TextView - Android Jetpack
Ajuste de Texto com Autosizing TextView - Android Jetpack
 
Live Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android StudioLive Templates Para Otimização de Tempo no Android Studio
Live Templates Para Otimização de Tempo no Android Studio
 
Data Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI AndroidData Binding Para Vinculo de Dados na UI Android
Data Binding Para Vinculo de Dados na UI Android
 
True Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no AndroidTrue Time API Para Data e Horário NTP no Android
True Time API Para Data e Horário NTP no Android
 
Utilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no AndroidUtilizando Intenções Para Mapas de Alta Qualidade no Android
Utilizando Intenções Para Mapas de Alta Qualidade no Android
 
Leitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXingLeitor de Códigos no Android com Barcode Scanner API - ZXing
Leitor de Códigos no Android com Barcode Scanner API - ZXing
 
Freelancer Android
Freelancer AndroidFreelancer Android
Freelancer Android
 
Definindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos AndroidDefinindo Fontes em Aplicativos Android
Definindo Fontes em Aplicativos Android
 
Material Design
Material DesignMaterial Design
Material Design
 

Último

I.1 Boas Práticas fitossanitarias.pptxCC
I.1 Boas Práticas fitossanitarias.pptxCCI.1 Boas Práticas fitossanitarias.pptxCC
I.1 Boas Práticas fitossanitarias.pptxCCJudite Silva
 
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaa
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaaGESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaa
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaayasminlarissa371
 
I.2 Meios de Proteção das culturass.pptx
I.2 Meios de Proteção das culturass.pptxI.2 Meios de Proteção das culturass.pptx
I.2 Meios de Proteção das culturass.pptxJudite Silva
 
Simulado Bernoulli Enem_2-Primeiro dia.pdf
Simulado Bernoulli Enem_2-Primeiro dia.pdfSimulado Bernoulli Enem_2-Primeiro dia.pdf
Simulado Bernoulli Enem_2-Primeiro dia.pdfAnnaCarolina242437
 
Simulado Enem Bernoulli-Primeiro dia.pdf
Simulado Enem Bernoulli-Primeiro dia.pdfSimulado Enem Bernoulli-Primeiro dia.pdf
Simulado Enem Bernoulli-Primeiro dia.pdfAnnaCarolina242437
 
Antonio Pereira_Vale+comunidade_set a dez_2023.pdf
Antonio Pereira_Vale+comunidade_set a dez_2023.pdfAntonio Pereira_Vale+comunidade_set a dez_2023.pdf
Antonio Pereira_Vale+comunidade_set a dez_2023.pdfAnnaCarolina242437
 
MARANATA - 19_04_2024.pptx | Maranata 2024
MARANATA - 19_04_2024.pptx | Maranata 2024MARANATA - 19_04_2024.pptx | Maranata 2024
MARANATA - 19_04_2024.pptx | Maranata 2024CarolTelles6
 
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdf
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdfAVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdf
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdfAnnaCarolina242437
 
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...AnnaCarolina242437
 

Último (9)

I.1 Boas Práticas fitossanitarias.pptxCC
I.1 Boas Práticas fitossanitarias.pptxCCI.1 Boas Práticas fitossanitarias.pptxCC
I.1 Boas Práticas fitossanitarias.pptxCC
 
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaa
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaaGESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaa
GESTÃO FINANceiraaaaaaaaaaaaaaaaaaaaaaaaaa
 
I.2 Meios de Proteção das culturass.pptx
I.2 Meios de Proteção das culturass.pptxI.2 Meios de Proteção das culturass.pptx
I.2 Meios de Proteção das culturass.pptx
 
Simulado Bernoulli Enem_2-Primeiro dia.pdf
Simulado Bernoulli Enem_2-Primeiro dia.pdfSimulado Bernoulli Enem_2-Primeiro dia.pdf
Simulado Bernoulli Enem_2-Primeiro dia.pdf
 
Simulado Enem Bernoulli-Primeiro dia.pdf
Simulado Enem Bernoulli-Primeiro dia.pdfSimulado Enem Bernoulli-Primeiro dia.pdf
Simulado Enem Bernoulli-Primeiro dia.pdf
 
Antonio Pereira_Vale+comunidade_set a dez_2023.pdf
Antonio Pereira_Vale+comunidade_set a dez_2023.pdfAntonio Pereira_Vale+comunidade_set a dez_2023.pdf
Antonio Pereira_Vale+comunidade_set a dez_2023.pdf
 
MARANATA - 19_04_2024.pptx | Maranata 2024
MARANATA - 19_04_2024.pptx | Maranata 2024MARANATA - 19_04_2024.pptx | Maranata 2024
MARANATA - 19_04_2024.pptx | Maranata 2024
 
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdf
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdfAVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdf
AVALIA_CHUM_EFI_5 ANO_AV_2SEMESTRE_2023.pdf
 
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...
Exame De Suficiencia Para Obtencao Do Titulo De Especialista Em Medicina De F...
 

BottomNavigationView Android, Como e Quando Utilizar

  • 2. O componente visual O BottomNavigationView foi lançado no Android, como API nativa, somente em março de 2016, junto a versão 25 da Material Design Support Library. O foco deste componente visual é em devices mobile, sendo recomendado, quando em sistemas desktop ou Web, o uso do menu gaveta. Por fazer parte do pacote de suporte do Android, o BottomNavigationView atende às principais versões deste SO. Com o bottom navigation é possível prover ao usuário acesso rápido a telas de contextos similares, porém há uma série de regras de negócio sobre quando e como devemos utilizar este widget, regras também apresentadas e discutidas nos próximos slides.
  • 3. Especificações de design - Altura de 56dp e largura variando entre 80dp e 168dp: - A exceção é quando há animação e itens suficiente, na barra de fundo, para exigir que o item atualmente em foco tenha um espaço bem maior do que os outros: - Item ativo, de 96dp a 168dp; - Item inativo de 56dp a 96dp. - Quando há um número de itens onde até mesmo os rótulos de todos eles podem ser apresentados, neste caso todas as abas devem ter a mesma largura em qualquer status. - Ícones devem ter medidas como as dos ícones do NavigationView, 24dp x 24dp;
  • 4. - Os rótulos dos bottom actions, itens do BottomNavigationView, devem ser pequenos e significativos, isso caso haja a necessidade de também coloca-los junto aos ícones, e não devem ser truncados, ocupando apenas uma linha; - O design dos itens deve ser em duas categorias: item em foco; e itens fora de foco. Ou seja, não utilize cores distintas para itens diferentes em foco. Se a cor primária do app for a utilizada para itens em foco, sempre utilize ela independente do item e da cor principal da tela de conteúdo acionada por ele.
  • 5. Especificações de comportamento - O acionamento de qualquer bottom action não deve abrir outros menus ou dialogs; - Caso seja acionado um item já em foco, o comportamento deve ser de refresh de conteúdo, o que faríamos caso um SwipeRefreshLayout estivesse em uso; - A navegação entre os itens do BottomNavigationView deve cancelar a tarefa atual em curso do item anteriormente em foco; - O apresentar / esconder do BottomNavigationView, de acordo com o scroll da tela, é algo opcional;
  • 6. - O gesto de swipe na área de conteúdo não deve permitir a mudança de conteúdo e nem mesmo a mudança de item no bottom navigation: - O efeito de transição de conteúdo, se presente, deve ser com a animação de fade (in / out). - A navegação hierárquica dos conteúdos não deve tirar da tela o BottomNavigationView, o que ocorre quando utilizando o menu gaveta.
  • 7. Especificações de uso - O BottomNavigationView deve ser considerado como opção de uso somente para contextos onde há de 3 a 5 telas de alto nível no aplicativo: - Para menos três telas, utilize tabs; - Para mais de 5 telas, utilize o menu gaveta, isso, pois mais do 5 itens atrapalha na experiência do usuário, UX, os itens ficam muito próximos uns aos outros. - Os conteúdos dos itens do bottom navigation devem ter similar importância no aplicativo; - Evite o uso, em mesma tela, de tabs e BottomNavigationView, pois isso tende a confundir o usuário; - O back button do device não deve acionar navegação de volta entre os itens do BottomNavigationView, ou seja, não há o trabalho de empilhamento entre os fragmentos acionados a partir dos bottom actions.
  • 9. Instalação Para poder utilizar o BottomNavigationView é necessário, no Gradle App Level, a referência a biblioteca de suporte do Material Design: Certifique-se de sempre estar utilizando a versão mais atual da library de suporte.
  • 10. Definição em XML Diferente do DrawerLayout que trabalha como uma espécie de invólucro a outros componentes necessários a ele, o BottomNavigationView, apesar de herdar do FrameLayout, é utilizado de maneira isolada, digo, sem componentes filhos diretos, com uso de tags de abertura e de fechamento. /res/layout/activity_main.xml /res/menu/activity_main_bottom_actions.xml Resultado em tela
  • 11. Definição em linguagem de programação Para a parte de programação, o principal é o acesso aos listeners de acionamento e re-acionamento de bottom actions. No código Kotlin ao lado é assumido que o plugin kotlin-android-extensions está definido no projeto, por isso não há necessidade de uso do método findViewById(). Todo o código XML do BottomNavigationView também é passível de ser construído via programação, com qualquer uma das linguagens oficiais para o dev Android. MainActivity.kt
  • 12. Customização de itens Caso queira definir outras cores para os bottom actions e seus componentes, pode utilizar os atributos: app:itemBackground, app:itemIconTint e app:itemTextColor. O conteúdo de cada um destes atributos pode ser uma cor direta, como em: @color/colorPrimary. Ou um drawable que permite mudanças de estilo de acordo com o status do item, como o @drawable/ bottom_item_background_color. /res/drawable/bottom_item_background_color.xml /res/layout/activity_main.xml
  • 13. Note que no caso da definição de um <selector> para o atributo app:itemBackground, ao invés de android:color deverá ser utilizado o atributo android:drawable. Caso não queira trabalhar o background dos itens de acordo com os estados deles, algo correto de se fazer quando seguindo as regras do bottom navigation no Material Design, utilize o atributo android:background. O resultado é o mesmo do que o apresentado com o app:itemBackground quando utilizando somente uma cor. Resultado dos códigos XML do slide anterior BottomNavigationView com android:background
  • 14. Animação Utilizando a API nativa do BottomNavigationView não precisamos nos preocupar com a codificação de animação que nos permitirá seguir as regras do Material Design para este widget. A versão nativa já faz, com maestria, a parte dela: Ripple Effect, mudança de cor e redimensionamento de itens e rótulos, incluindo a não apresentação de rótulos de itens não acionados em uma bottom navigation pequena. Clique para visualizar a animação
  • 15. A parte de animação que devemos implementar sem auxílio da API do BottomNavigationView é a de transição de fragmentos, algo também definido, como opcional, nas especificações deste widget. Clique para visualizar a animação
  • 17. Curiosidade Na documentação, tanto a oficial do Android como a oficial do Material Design, não há restrições de uso do BottomNavigationView junto a: - DrawerLayout e NavigationView, também conhecidos como Menu Gaveta; - BottomSheet; - Snackbar; - FloatingActionButton. Uma observação importante é que não há necessidade e nem mesmo é inteligente querer utilizar um ViewPager, que facilita a transição e cache de fragmentos, junto ao BottomNavigationView. Isso principalmente pelo ViewPager permitir, por padrão, a animação de swipe entre fragmentos, algo não permitido no bottom navigation.
  • 18. Limitações Apesar da API nativa do BottomNavigationView ser bem simples de utilizar, ela fica devendo em: - Não fornecer uma maneira trivial de vincular fragmentos e animações de transição aos itens, bottom actions. Algo que é possível quando utilizando TabLayout e ViewPager; - Não fornecer uma maneira trivial de ativar o scroll da barra de fundo de acordo com o scroll do conteúdo em tela.
  • 19. Outras APIs A seguir alguns conteúdos com outras APIs de BottomNavigationView que podem ser úteis em sua jornada como desenvolvedor Android: - Ultimate Guide to Bottom Navigation on Android; - AHBottomNavigation, API bottom navigation do artigo indicado no item anterior; - Uma série de APIs no Android-Arsenal.
  • 20. Conclusão Com o BottomNavigationView, mesmo sabendo da não restrição do trabalho junto ao menu gaveta, podemos assumir que ele veio também para substituir, em alguns casos (de três a cinco itens), tanto o drawer navigation como também as tabs de topo. Respeitando ao menos as regras de cores, ícones e rótulos, já é o suficiente para termos um bom uso do widget discutido nestes slides. Caso precise de alguma funcionalidade ainda não atendida pela implementação nativa do componente, não deixe de pesquisar por APIs de terceiros que permitam o uso mais customizado do bottom navigation, que até o momento da construção deste conteúdo, a versão nativa, não permitia de forma trivial o scroll de acordo com a tela. Fique atento quanto ao uso do BottomNavigationView, pois em alguns conteúdos de estudo para o desenvolvimento destes slides foram encontrados casos onde um ou outro item deste widget ficava desativado devido a algum passo que o usuário ainda não havia percorrido no aplicativo. Uma das regras de negócio do BottomNavigationView é o acesso imediato ao conteúdo do bottom action acionado, sem necessidade de pré-requisitos.
  • 21. Fontes Conteúdo completo, em texto e em vídeo, no link a seguir: - https://www.thiengo.com.br/bottomnavigationview-android-como-e-quando-utilizar Fontes: - https://material.io/guidelines/components/bottom-navigation.html - https://developer.android.com/reference/android/support/design/widget/ BottomNavigationView.html - https://medium.com/@hitherejoe/exploring-the-android-design-support-library- bottom-navigation-drawer-548de699e8e0 - https://stackoverflow.com/a/44778453/2578331 - https://stackoverflow.com/a/40326245/2578331 - https://stackoverflow.com/a/30214843/2578331
  • 22. Para estudo - Treinamento oficial: - Prototipagem Profissional de Aplicativos Android. - Livros oficiais: - Receitas Para Desenvolvedores Android; - Refatorando Para Programas Limpos. - Redes: - Udemy; - YouTube; - Facebook; - LinkedIn; - GitHub; - Twitter; - Google Plus. - Blog App.