Utilizando NavigationDrawer, Material Design Android - Parte 5

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes! Você receberá um email de confirmação. Somente depois de confirma-lo é que eu poderei lhe enviar os conteúdos semanais exclusivos. Os artigos em PDF são entregues somente para os inscritos na lista.

Email inválido.
Blog /Android /Utilizando NavigationDrawer, Material Design Android - Parte 5

Utilizando NavigationDrawer, Material Design Android - Parte 5

Vinícius Thiengo
(13322) (43)
Go-ahead
"O método consciente de tentativa e erro é mais bem-sucedido que o planejamento de um gênio isolado."
Peter Skillman
Prototipagem Android
Capa do curso Prototipagem Profissional de Aplicativos
TítuloAndroid: Prototipagem Profissional de Aplicativos
CategoriasAndroid, Design, Protótipo
AutorVinícius Thiengo
Vídeo aulas186
Tempo15 horas
ExercíciosSim
CertificadoSim
Acessar Curso
Quer aprender a programar para Android? Acesse abaixo o curso gratuito no Blog.
Lendo
TítuloTest-Driven Development: Teste e Design no Mundo Real
CategoriaEngenharia de Software
Autor(es)Mauricio Aniche
EditoraCasa do Código
Edição1
Ano2012
Páginas194
Conteúdo Exclusivo
Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba gratuitamente conteúdos Android sem precedentes!
Email inválido

Opa, blz?

Nesse vídeo dou continuidade a série sobre Material Design no Android, dessa vez mostrando uma implementação do NavigationDrawer, no caso utilizando a lib MaterialDrawer de Mike Penz que nos permite ter uma Full NavigationDrawer rodando em nossa APP Android com a chamada a poucos métodos das entidades da lib.

Note que a lib nos permite personalizar todo o conteúdo, apesar da mudança do Adapter e da ListView serem desencorajados pelo autor da lib. No vídeo apresento a facilidade de implementar tanto o listener de click simples quanto o de long click. Mostro também como setar os profiles no header do NavigationDrawer.

Note que no vídeo comentei sobre a implementação do onSaveInstanceState() da Activity, porém acabei passando "batido" sem implementar, no big deal, a implementação é simples e no código de exemplo que está disponível para download já deixei implementado, se surgir a dúvida baixe o código e veja como ficou a implementação (bem simples mesmo, poucas linhas de código). Adicionei também a implementação do método onBackPressed(), pois se testar o projeto você notará que mesmo com o NavigationDrawer aberto a APP é fechada quando na verdade o comportamento comum é que o NavigationDrawer seja fechado e ai sim com ele fechado seja fechada a APP se o back button for pressionado novamente. Bom é isso, vou evitar mais delongas e deixar você assistir ao vídeo.

O link para download do projeto se encontra logo abaixo, no post.

Os links dos vídeos anteriores da série Material Design no Android se encontram na sessão "Relacionado" desse post.

Segue links apresentados no vídeo:

Página da lib MaterialDrawer no GitHub

Página da Wiki da lib MaterialDrawer no GitHub 

Página do NavigationDrawer no guideline do Material Design

Como comentei sobre a implementação manual apresentada na série Material Design do SlideNerd, segue link: NavigationDrawer SlideNerd

Vlw

Investir em Você é Barra de Ouro a R$ 2,00. Cadastre-se e receba grátis conteúdos Android sem precedentes!
Email inválido

Relacionado

Toolbar, Material Design Android - Parte 1Toolbar, Material Design Android - Parte 1Android
RecyclerView, Material Design Android - Parte 2RecyclerView, Material Design Android - Parte 2Android
Animação, onLongPress e GridLayoutManager em RecyclerView, Material Design Android - Parte 3Animação, onLongPress e GridLayoutManager em RecyclerView, Material Design Android - Parte 3Android
Utilizando CardView, Material Design Android - Parte 4Utilizando CardView, Material Design Android - Parte 4Android

Compartilhar

Comentários Facebook

Comentários Blog (43)

Para código / script, coloque entre [code] e [/code] para receber marcação especifica.
Forneça seu nome válido.
Forneça seu email válido.
Forneça o comentário.
Enviando, aguarde...
Danilo (1) (0)
04/05/2016
Boa Tarde Thiengo. Não sei se estou faltando com algum procedimento, mas o navigation drawer não está com o efeito ripple. Você já se deparou com alguma situação semelhante, tanto no navigation quanto em qualquer view? Abrço
Responder
Vinícius Thiengo (0) (0)
07/05/2016
Fala Danilo, blz?
Na verdade o efeito Ripple não coloquei nessa série. Dê uma olhada nesse vídeo (https://www.youtube.com/watch?v=qvVkDb7DqCk ) para lhe ajudar a implementa-lo. Abraço
Responder
20/10/2015
Bom dia Vinicius,

Você poderia me ajudar com a utilização do Navigation Drawer, eu gostaria de fazer uma navegação entre minhas telas através do navigation, só que não estou conseguindo.

Desde já agradeço
Responder
Vinícius Thiengo (0) (0)
21/10/2015
Fala Fabricio, blz?
Dê uma olhada nesse vídeo primeiro (http://www.thiengo.com.br/material-dialog-correcao-bug-statusbar-e-acoes-nos-fragments-material-design-android-parte-7 ), pois se me lembro bem é nele que adiciono a funcionalidade de mudança de fragment partindo do menu do Drawer. Se quiser para Activity utilize o startActivity() ao invés de todo aquele script do FragmentTransaction. Se mesmo assim nada, volte ae. Abraço
Responder
Vinicius Lima (1) (0)
14/09/2015
Fala Thiengo tudo bem? Procurei na internet e não consegui achar o que precisava, se puder me ajudar fico muito agradecido.

Acompanhando esse vídeo, na hora em que você define os perfis que irão aparecer no AccountHeader (person1, 2, 3), você define os atributos de cada um manualmente, porém, no meu projeto preciso carregar isso á partir do SQlite e não estou entendendo muito bem como posso fazer isso.

Você tem mais ou menos alguma ideia?
Obrigado!!
Responder
Vinícius Thiengo (0) (0)
16/09/2015
Fala Vinicius, blz sim.
Faça o seguinte, carregue os dados do SQLite (somente os necessários), colocando-os nos objetos dos tipos definidos em seu dominio do problema (classe Pessoa, Carro, ... por exemplo), então da maneira que fiz colocando os dados diretamente, coloque os dados dos objetos carregados (pesso.getName(), pessage.getUrlImage() - essa lib já utiliza o Picasso no background para carregar imagens remotas). Tentou assim? Devido a provável pequena quantidade de dados para carregar para preencher esse navigation, não precisa de uma Thread de background com receio de travar a tela devido a quantidade de dados, nesse caso o carregamento será no instante. Abraço
Responder
Maycon (1) (0)
05/08/2015
Eai Thiengo, blz?

Cara ao tentar implementar essa lib ao meu projeto, recebo o seguinte erro.

java.lang.NoClassDefFoundError: android.support.v7.appcompat.R$layout

Sabe o que pode ser ?
Responder
Vinícius Thiengo (1) (0)
05/08/2015
Fala Maycon, blz?
Verifique se suas Activities (pelo menos a atual do error) estão herdando de AppCompatActivity. Verifique se há a necessidade de utilizar a classe R do package android.support.v7.appcompat ao invés de utilizar a classe R do package de seu projeto, provavelmente essa troca de classes Rs é que é o problema. Abraço
Responder
Maycon (1) (0)
05/08/2015
Infelizmente não é este o problema.. =/ as classes R estão corretas, e minha activity generica extent de AppCompactActivity, pelo que tenho pesquisado na internet pode ser algo com a lib deste vídeo. Pois ao remove-la, tudo funciona normalmente. =/
Responder
Vinícius Thiengo (0) (0)
06/08/2015
Maycon, é bem provável, pois ela atualizou algumas coisas, inclusive algumas maneiras de instanciar o navigation e o header. Mas enfim, quando fiz esse vídeo ainda não tinha sido lançada a lib de suporte do Material Design para o Android, mas agora com o Navigation da lib de suporte (http://www.android4devs.com/2015/06/navigation-view-material-design-support.html ), ele é a melhor opção. Abraço
Responder
juniogro10 (1) (0)
03/08/2015
Boa tarde, estou tendo um certo delay na primeira troca de tela, todos o fragment que eu chamo via drawer na primeira utilização sofre alguma lentidão para abertura.. Já ouviu ou viu algum problema igual a esse nessa lib?
Após disso elas abrem normalmente..
Responder
Vinícius Thiengo (0) (0)
04/08/2015
Fala Junio, blz?
Tem n fatores para contribuir com esse delay, incluindo device com vários APPs instalados / rodando. Mas aparentemente é tb por causa do primeiro carregamento do fragment, mas não deveria ser tão evidente a ponto de ser notado em todos os fragments vinculados a lista do Drawer. Enfim, está com a versão mais atual dessa lib? Pois já tem outra e se isso for um bug, provavelmente corrigiram. Abraço
Responder
patrickryuchi (1) (0)
10/07/2015
Opa Thiengo,  fiz com que  o navigation Drawer chamasse uma atividade e nessa atividade que vinculei o card view,  troquei ele da main pra por em outra atividade,  mas quando clico no navigation drawer pra abrir a mesma, ele abre e  quando  chega no 4° card da um erro na app e no Log aparece essa mensagem "at android.app.ActivityThread.main(ActivityThread. java:5312) <2 internal calls> . e aparece tbm " the application may  be doing too much work on its main thread"  já procurei em fóruns mas não conseguir resolver, tem ideia do q seja ? muito obrigado. Excelentes vídeos.
Responder
Vinícius Thiengo (1) (0)
11/07/2015
Fala Patrick, blz?
Provavelmente seu script está carregando dados da Web na Thread principal. Ou tem algum outro script nessa Activity que tem o processamento pesado a ponto de travar a tela do user, pois está sendo realizado na mesmo Thread de UI. Tem carregamento de dados da Web? Se sim, coloque o carregamento junto ao Volley (http://www.thiengo.com.br/volley-no-android-entendendo-e-utilizando ) que já implementa um Thread de background ou crie vc mesmo essa Thread para então realizar o carregamento. Se tiver algum outro código de processamento demorado que está na Thread principal, utilize o AsyncTask (http://www.thiengo.com.br/asynctask-no-android-acesso-a-thread-principal-de-forma-otimizada ) para trabalhar com esse código no método doInBackground(), com o AsyncTask vc terá um controle fácil das mensagens de "Loading" a serem apresentadas aso users. Abraço
Responder
patrickryuchi5892 (1) (0)
13/07/2015
valew Thiengo,  problema na activity proncipal resolvido,  só uma outra dúvida q surgiu, quando se troca a posição da tela a app volta ao "on create" ? tem como não voltar ?   parabéns mesmo por compartilhar seu conhecimeno,  estou vendo desde as primeiras vídeos aulas.
Responder
Vinícius Thiengo (1) (0)
14/07/2015
Patrick, vc pode utilizar o configChanges (http://www.thiengo.com.br/entendendo-e-utilizando-o-configchanges-no-android ) para evitar os casos mais comuns de reconstrução de Activity e consequentemente evitar a nova chamada ao onCreate(), porém recomendo que utilize o onSavedInsanceState(), pois com ele seu código sempre estará pronto para a reconstrução da Activity, com o configChanges vc não tem controle sobre isso em alguns casos (mesmo que no vídeo tenha incentivado o uso dele, hj com mais experiência recomendo somente em casos que o onSavedInstanceState é implementado em conjunto). Abraço
Responder
Christian (1) (0)
23/06/2015
Obrigado pela atenção Thiengo,

Eu estava tentando exatamente desta forma que você sugeriu

Bitimap fotousuario; // A imagem do usuário já convertida em bitmap
        drawable=new BitmapDrawable(fotousuario);

Mas a minha dificuldade está em setar isso no setIcon, o getDrawable não aceita o drawable

setIcon(getResources().getDrawable(drawable));

estou declarando da forma correta?


Obrigado!
Responder
Vinícius Thiengo (0) (0)
24/06/2015
Já resolvido por ti. Abraço
Responder
Christian (0) (0)
23/06/2015
Thiengo,


Estou trabalhando em uma aplicação que trás a foto do perfil do usuário do servidor como string e depois eu converto ela em bitmap dentro da classe. Eu gostaria de setar essa imagem(bitmap) como icon do perfil na sua headerNavigationLeft, mas como vemos abaixo para setar a imagem tem que estar na drawable.


aux.setIcon(getResources().getDrawable(icons[i]));

Existe alguma forma de eu setar essa imagem que é bitmap ?

Obrigado!
Responder
Vinícius Thiengo (1) (0)
23/06/2015
Fala Christian, blz?
Essa lib já faz essa jogada de baixar imagem para ti, apenas passe o url em setIcon(), pois há uma sobrecarga desse método para uti, logo ficaria .setIcon( Uri.parse( "url da imagem aqui" ) ). Se não me engano ele utiliza o Picasso no background para baixar a imagem. Abraço
Responder
Christian (1) (0)
23/06/2015
Obrigado pela resposta Thiengo,

A dificuldade que eu tenho é que as imagens vem do meu servidor via json (vem dentro de um objeto usuario que trás todos seus atributos), ela vem como String e eu converto ela para bitmap para então poder utilizar ela dentro da aplicação.
Responder
Vinícius Thiengo (2) (0)
23/06/2015
Ok, então converta o Bitmap para Drawable utilizando um BitmapDrawable. Veja a segunda resposta desse link (http://stackoverflow.com/questions/2415619/how-to-convert-a-bitmap-to-drawable-in-android ).
Responder
Christian (3) (0)
23/06/2015
Consegui amigo,

Eu realmente esta setando errado

Desta forma deu certo:
aux.setIcon(getResources(drawable));

Muito obrigado!!!
Responder
Gabriel (1) (0)
23/05/2015
Thiengo, observei uma coisa no onItemClick do Drawer, se colocar um Divider no Drawer ele ocupa uma posição lá no i (talvez só eu não tinha observado isso) e aí se quiser fazer aquele tratamento pra chamar Fragments baseado na posição vai ter que acrescentar em um pros itens que estão abaixo do Drawer.
Talvez tenha mais alguém que possa esquecer então to deixando aqui a observação porque me bati um pouco com isso...

Muito obrigado pelos vídeos, vlw!
Responder
Vinícius Thiengo (0) (0)
24/05/2015
Vlw Gabriel
Responder
17/05/2015
Opa Thiengo, blz?

Primeiramente parabéns pelos seus vídeos, um dos melhores conteúdos que encontrei desde que comecei com Android. Você sabe me informar se eu posso utilizar essa lib tranquilamente em um App que será comercializado?

Mais uma vez parabéns pelo conteúdo.
Responder
Vinícius Thiengo (0) (0)
18/05/2015
Fala Lucas, blz sim.
A licença é Apache 2.0, se não me engano não há problemas em comercializar a APP, mas tem tempo que não vejo isso, logo leia essa página (http://www.apache.org/licenses/LICENSE-2.0 ) para se certificar. Abraço
Responder
18/05/2015
Vlw Thiengo vou dar uma olhada no link.
Responder
13/05/2015
Opa Thiengo.
Aproveitando o embalo que você está me ajudando MUUUITO, queria que me ajudasse com o .withOnDrawerItemClickListener. Como faço pra chamar uma Activity pra cada item lá dentro ? Crio um switch?
Mais uma vez muito obrigado!
Responder
Vinícius Thiengo (0) (0)
13/05/2015
Veja esse último vídeo da série que coloquei (http://www.thiengo.com.br/material-dialog-correcao-bug-statusbar-e-acoes-nos-fragments-material-design-android-parte-7 ). Nele utilizo o fragment para alterar o conteúdo principal na tela. Em seu caso será o startActivity() ao invés de fragmenteTransaction.replace(). Abraço
Responder
João Arthur (1) (0)
11/05/2015
Thiengo não tem disponível as "jars" dessas libs que você utiliza ?
Responder
Vinícius Thiengo (0) (0)
12/05/2015
Fala João Arthur, blz?
Se não me engano somente pelo maven (gradle dependencies). Está como o Eclipse? Nã página da lib o autor somente fala de como obter via Maven,. Abraco
Responder
Joao Arthur (1) (0)
12/05/2015
Sim estou usando eclipse, é complicado converter o projeto pro maven ?
Responder
Vinícius Thiengo (0) (0)
12/05/2015
João Arthur, veja se com esse plugin (https://marketplace.eclipse.org/content/android-maven-eclipse ) vc consegue pegar as libs do Maven e colocar em seus projetos Android. Se possível informe aqui depois se deu certo, pois se sim isso vai ajudar uma galera que ainda utiliza o AndroidStudio. Abrço
Responder
09/05/2015
Fala Thiengo blz?

No meu navigationDrawer na posição 6, chamo uma dialog.Dessa forma não preciso deixar selecionado o item dessa posição.
Como posso fazer isso?
Valeu!
Responder
Vinícius Thiengo (0) (0)
10/05/2015
Fala Hemerson, blz sim.
Tente o navigationDrawer.setSelection(-1); para deixar nenhum item selecionado ou vc pode salvar o position do item que estava selecionado anterior ao clique em seu position 6 para então voltar a seleção para ele: navigationDrawerRight.setSelection( variavelPositionAnterior ); Abraço
Responder
alessandroceron9 (1) (0)
04/05/2015
primeiramente parabéns pelos vídeos. Gostaria de saber como consigo lãs libs em .jar pois não utilizo o gradle. E gostaria de pedir algum vídeo usando a lib tess-two pra ocr,  ou alguma outra melhor. obrigado e continue com o ótimo trabalho
Responder
Vinícius Thiengo (0) (0)
05/05/2015
Fala Alessandro, blz?
Sobre o Tesseract acredito que vc já esteja com o melhor OCR, o que achei não foi uma outra lib e sim a implementação dessa nesse link (http://stackoverflow.com/questions/19533273/best-ocr-optical-character-recognition-example-in-android ). Se não me engano é ela.

Quando diz lib lã é lib de suporte? Se sim, não sei se conseguirá, já vi em comentários de Wiki de lib que tinha versão par AS, no caso o dono da lib informando que não tinha versão para Eclipse, logo esse deve ser o comportamento normal desde que o AS é a plataforma oficial de dev Android e que o suporte para o Eclipse se não foi ainda cessado será. Abraço
Responder
alessandroceron9 (2) (0)
06/05/2015
Muito obrigado Vinícios, achei uma maneira de converter o tess-two pra gradle, agora consigo utilizar tranquilo a lib. Valeu.
Responder
galerinha.ti (2) (0)
03/05/2015
Eae Thiengo, blz? Primeiramente parabéns pelo vídeo, mas o que eu vou perguntar vai fugir do assunto do vídeo. Eu preciso criar uma lista, com o RecyclerView, e carregar os itens da lista com dados salvos em um servidor, porém estou começando em Android, e não entendo muito, vc teria algumas dicas de por onde eu posso começar? Pois está muito difícil, Android é um tanto quanto assustador no começo.
Responder
Vinícius Thiengo (0) (0)
03/05/2015
Fala ae, blz?
Bom, se está começando recomendo que veja os vídeos base que tenho sobre o dev android (https://www.youtube.com/playlist?list=PLBA57K2L2RILUAyMeRmw5kkt4-zzTHv78 ) e qualquer outro conteúdo que encontrar para quem está começando. Tem de pegar assuntos como Thread Principal, Intent, Activity, ... Depois dê preferencia ao estudo sobre conexões Web com Android, no caso estude sobre a lib Volley no Android (http://www.thiengo.com.br/volley-no-android-entendendo-e-utilizando ).

Imaginando que o backend no server Web vc manja, depois dos conteúdos descritos a cima consumidos vc já saberá o que fazer para montar sua APP. Abraço
Responder
galerinha.ti (1) (0)
09/05/2015
Opa, vlw Thiengo, abs.
Responder
ivanrocha.rocha (1) (0)
03/05/2015
Esse video foi show.  Sempre com bons toturiais. aprendo muito consigo.
Responder