GridView no Android, Entendendo e Utilizando
Blog /Android /GridView no Android, Entendendo e Utilizando
(14622) (26)
Na vídeo aula acima nós vamos, passo a passo, destrinchar por completo o componente visual GridView.
Componente Android que apesar de ser nostálgico, ainda é utilizado.
Principalmente em aplicativos que necessitavam do trabalho com grid antes mesmo do anúncio do RecyclerView no Google I\O 2014.
Digo isso, pois desde o lançamento do RecyclerView, tanto o trabalho com listas verticais quanto o trabalho com grids foi, mesmo que de maneira gradual, migrado para este componente visual e os seus principais LayoutManagers:
LinearLayoutManager;
WearableLinearLayoutManager;
StaggeredGridLayoutManager;
GridLayoutManager.
Thiengo, então não devo investir meu tempo no entendimento e domínio do GridView e consequentemente no domínio também do GridLayout?
Na verdade você deve sim investir tempo para dominar o GridView (e "por tabela" também investir tempo para o GridLayout).
Isso, pois não será incomum você encontrar projetos Android já em produção que fazem uso desses componentes.
Então para que você não fique perdido quando encontrar o GridView, por exemplo.
Para que isso não aconteça, invista sim tempo no estudo e domínio destes dois componentes de grid.
Correção: no diagrama acima é numColumns e não numColuns.
Mas eu confesso que hoje em dia, tanto para a construção listas verticais quanto para a construção de grids...
... para esses é melhor seguir com o RecyclerView junto ao LayoutManager correto.
Antes de finalizar e liberar você para a vídeo aula, preciso lhe passar alguns informes importantes justamente sobre a aula:
Dê atenção especial ao entendimento do atributos columnWith e numColumns;
Para entender o porquê da Interface ListAdapter é preciso também conhecer o BaseAdapter;
E se você quiser trabalhar com tabela, então pode ser melhor estudar o TableLayout, pois certamente será algo mais útil.
E... como estamos falando sobre um componente visual Android... não deixe de também investir tempo para o dominar o Material Design Android, a linguagem de design utilizada em todos os aplicativos mais atuais desta plataforma.
A seguir deixo alguns bons links de outros artigos aqui do Blog, acompanhados de seus respectivos vídeos, que lhe colocarão em dia com o que há de novo no desenvolvimento de apps Android:
Kotlin Android, Entendendo e Primeiro Projeto;
Android Studio: Instalação, Configuração e Otimização;
Android Mobile-Commerce, Apresentação e Protótipo do Projeto.
E caso você tenha o desejo de aprender a desenvolver apps Android, ou apenas evoluir nesta área, também com o conteúdo gratuito do Blog, então não deixe de acessar a lista exclusiva de estudos em:
Estudando Android - Lista de Conteúdos do Blog.
E também não esqueça de se inscrever 📫 na lista de e-mails do Blog para receber os conteúdos de desenvolvimento Android em primeira mão... e também em suas versões em PDF (versões liberadas somente aos inscritos da lista de e-mails).
Se inscreva também no canal do Blog no YouTube para acompanhar as últimas novidades.
Surgindo dúvidas ou dicas, pode enviar abaixo na área de comentários que logo eu lhe retorno.
Obs. : o link para download do projeto apresentado na vídeo aula se encontra logo abaixo no artigo, na seção "Download".
Eclipse IDE vs Android Studio IDE
Apesar de o conteúdo da vídeo aula acima estar utilizando o Eclipse IDE 😱, tudo que é apresentado, tanto a parte teórica quanto a parte prática, é ainda válido nos dias de hoje com o desenvolvimento Android utilizando o Android Studio 😁.
Ou seja, independente da linguagem oficial (Java, Kotlin, C ou C++), IDE ou framework que você esteja utilizando, o conteúdo acima é ainda muito útil.
Apesar do conteúdo sobre o componente GridView ainda estar atual e ser importante para qualquer nível de desenvolvedor Android.
Apesar disso eu também recomendo, assim que finalizado o projeto em sua própria instalação de IDE, que você o migre para o AndroidX.
Algo que pode ser feito com poucos cliques, como apresentado no tutorial a seguir: Migrar para o AndroidX.
Documentação oficial GridView Android
RelativeLayout no Android, Entendendo e UtilizandoAndroid
AbsoluteLayout no Android, Entendendo e UtilizandoAndroid
ScrollView e HorizontalScrollView no Android, Entendendo e UtilizandoAndroid
GridLayout no Android, Entendendo e UtilizandoAndroid
android - gridlayout - gridview - framework de lista - grid - componentes visual - nostalgia
Comentários Blog (26)
Alberto Bezerra (1) (0)
Thiego segui toda a aula, tudo certo. Agora eu tenho 12 imagens e eu queria que cada uma chamasse uma activity, poderia me ajudar no código. Todas as imagens chamam o toast normal, como no vídeo.
Alberto, blz?
Utilize o listener de clique setOnItemClickListener() em seu GrifView.
Melhor do que explicar aqui veja o que fiz com o ListView nesse projeto: https://github.com/viniciusthiengo/GeoLocationAds/blob/master/app/src/main/java/br/com/thiengo/geolocationads/MainActivity.java
Mais precisamente acesse o método initResults(), como coloquei o setOnItemClickListener() no ListView. Você fará o mesmo com o GridView.
É importante que você entenda a lógica de negócio, digo, o uso dos objetos na list para corretamente acessar a posição que foi clicada e enviar os dados para a Activity de detalhe. Abraço
Alisson Faria (1) (0)
Olá Thiengo blz?
Estou precisando implementar uma lista de tabelas, igual a tabelas de grupos de futebol com varias colunas, e que possua click nesses elementos das linhas. As colunas serão estáticas e o número de linhas dinâmico. Gostaria de saber a melhor maneira de se implementar e o que utilizar.
Fala Alisson, blz aqui.
Primeiro veja se já não existe um modelo de tabela fácil de utilizar em uma library aqui: https://android-arsenal.com/search?q=table
Caso nada, recomendo que utilize um GridView mesmo ou até um TableLayout (http://www.thiengo.com.br/tablelayout-no-android-entendendo-e-utilizando ) via Java API, dessa forma vc o terá com número de linhas dinâmico. Abraço
Daniel Filho (1) (0)
Implementei seu post "Utilizando BaseAdapter Para Personalização Completa da ListView" (apesar de ainda não conseguir fazer a figura aparecer, conforme perguntei lá), mas não vi muita diferença de visual
Respondi seu comentário lá em BaseAdapter. Aqui em GridView, trabalhou com a definição de colunas? Somente assim verá o visual diferente. Abraço
Daniel Tibúrcio (1) (0)
Thiengo, o que me recomenda para melhorar o visual de um app que já está pronto, apresentando os dados corretamente, mas de forma meio rudimentar, adicionando TextView em TableRow e TableLayout. Vou marcar você num post do grupo AndroidPro para você entender melhor o que quero fazer. Obrigado
Daniel, blz?
Vc tem mais ou menos uma ideia do que quer, digo, algum layout esboçado no papel ou APP similar? Abraço
Han Arantes (2) (0)
Excelente conteúdo Thiengo! Seria legal se você fizesse um tutorial sobre GridView com Drag and Drop, pesquisei por aí e não achei nenhum tutorial de fácil entendimento
Fala Han Arantes, blz?
Vlw a dica. Já deu uma olhada nessas libs:
https://android-arsenal.com/search?q=grid
https://android-arsenal.com/search?q=drag
RUAN ALVES (1) (0)
Otima video aula, seguinte estou remodelando uma aplicação, e ela tem que rodar no 2.3 obrigatoriamente :( ... estava usando linearlayout para organizar os icones, e fica muito bagunçado, quero usar o gridView, mais quando uso, os meus primeiros icones, ficam meio brancos, é algum efeito dele, tem como tirar?
Fala Ruan, blz?
Esse efeito aparece somente no emulador ou no device real tb? Veja a possibilidade de utilizar o RecyclerView com um LayoutManager de Grid, se não me engano roda tb no Android 2.3. A vantagem do RecyclerVIew é que ele é mais eficiente, veja os vídeos abaixo para lhe ajudar se ainda não os conhece. Abraço
RecyclerView, Material Design Android - Parte 2 (http://www.thiengo.com.br/recyclerview-material-design-android-parte-2 )
Animação, onLongPress e GridLayoutManager em RecyclerView, Material Design Android - Parte 3 (http://www.thiengo.com.br/animacao-onlongpress-e-gridlayoutmanager-em-recyclerview-material-design-android-parte-3 )
muito obrigado! é por que eu tinha que fazer em GridView por enquanto, poiso mesmo nem usava isso, o projeto ainda é em eclipse, e precisava usar uma tecnologia antiga ... Eu sofri muito pra colocar HEADER e FOOTER, nossa sofrimento, mais vou testar o Recicly View ... :)
Thiengo, estou fazendo uma tela, que tem um a GRID que suporta 3 colunas, quando viro a tela, ela tem que pegar 4 colunas, eu fiz outra pasta layout-land, coloquei o arquivo la e com o numeros de colunas 4, mais ele nao pega dijeito nenhum, tem outra maneira? um script?
Ruan, tem outra maneira sim, alias bem mais fácil, vc continua com o mesmo layout, o que acontece é que quando o device é rotacionado e consequentemente muda a orientação da tela, se seu APP não estiver com o configChanges configurado (recomendo não utilizá-lo) a Activity será reconstruída e seu Grid tb será, então no algoritmo vc consegue verificar se o device está portrait ou landscape, nesse caso verificando que está em landscape vc cria o Grid para trabalhar com a configuração de 4 colunas, caso em portrait vc cria ele para trabalhar com 3 apenas. Em nenhum dos casos é necessário modificar layouts, somente a inicialização do Grid é que muda. Dê uma olhada nos links abaixo para criar seu script de verificação de orientação de tela. Abraço
http://stackoverflow.com/questions/3674933/find-out-if-android-device-is-portrait-or-landscape-for-normal-usage
http://stackoverflow.com/questions/2795833/check-orientation-on-android-phone
Ruan Alves Ferreira de Bessa (1) (0)
Amigo vlw mesmo! mais descobri que o erro era no manifest, pois é um sistema já existênte cheio de erros. Quando viro minha GRIDVIEW para vertical, os valores dos icones das posição mudam, vc sabe me dizer o que pode ser? .... cara to adorando suas video aulas, são de grande ajuda ... vlw mesmo
Ruan, quando diz "os valores dos icones das posição mudam" vc diz que muda o valor / caminho de acesso aos ícones, ou seja, outros são abertos ou nenhum? Não vi isso ainda, o problema pode ser mesmo o que lhe informei no comentário anterior sobre o configChanges. Veja se nas Activities tag em seu AndroidManifest não há alguma com o atributo configChanges. Abraço
Guilherme (1) (0)
Fala Thiengo blz?
Me tira uma duvida por favor:
Carrego uma Gridview com dados do banco porem ao clicar em algum item da linha eu preciso pegar o ID que fica sempre na coluna 1 como faço isso?
Fala Guilherme, blz sim.
No caso o que pode fazer é o seguinte, carregando os dados do bd vc os coloca em uma lista do tipo da classe dos itens que estão no bd e nessa classe terá o campo do id. Essa lista será associada ao adapter que será vinculado ao GridView, assim vc coloca o listener de clique no GridView, nesse listener é informado como parâmetro de entrada a posição do item que foi clicado, logo é a mesma posição do item na lista que foi associada ao adapter, trabalhando com essa lista sendo uma variável de instancia na classe que tem o GridView, vc pode acessar o item na posição clicada e então dar um getId() para obter o id. Abraço
Ricardo (1) (0)
Thiengo blz, Cara eu queria fazer uma forma que conforme captura imagem ou pega da galeria isso ja fiz ai retorno em bitmap ,queria ir adicionando no grid tem alguma ideia de como fazer?
Fala Ricardo, blz sim.
Veja se é isso que está querendo dizer (http://www.thiengo.com.br/imageloader-com-a-lib-volley-no-android ou http://www.thiengo.com.br/carregamento-e-cache-de-imagem-com-universal-image-loader-no-android ), carregamento de imagem no grid ao invés de lista em seu caso. Abraço
daviola.menezes (0) (0)
Ou ? quest?o de gosto e Layouts msm?
Fala Daviola, blz?
Na verdade trato como questão de projeto, quando desenvolvendo mobile temos de pensar o tempo todo em otimização devido aos poucos recursos disponíveis, se utilizar o GridLayout se encaixa no design desenvolvido em projeto para a APP e tb é a melhor opção quanto a otimização, então é ele que devemos utilizar. Hj em Android temos de ficar atentos com o problema de Memory Leak, que é quando utulizamos mtas entidades em nossa APP, digo, mtos objetos (incluindo cada view do layout) e vazamos o limite permitido de dados na memória... por isso temos de ter cuidado no momento de escolher as views do layout. Abraço
Eae Vinicius ? recomendado pra mostrar um grid de fotos com aquele checkbox pra selecionar? Ou ? quest
Tb, vc pode mudar a cor do box ao invés de ter mais uma view (o checkbox) somente para mostrar que a imagem foi selecionada. Abraço