Android: por onde começar?
Android: por onde começar?
Codelab do GDG Foz do Iguaçu cobrindo o básico pra sair do zero no Android: estrutura de projeto, layouts, ciclo de vida de Activity, RecyclerView e consumo de API com Retrofit.
🧭 Codelab
Roteiro do codelab: Android Studio, elementos de UI e XML do Android, Activities, listas e adapters, serialização com JSON e GSON, e consumo de REST WebServices.
Pré-requisitos: Windows, Mac OS ou Linux (GNOME/KDE), JRE 6+, JDK 7+, e "muita memória": mínimo 2GB, recomendado 4GB (a recomendação pessoal na talk era 8GB).
📁 Estrutura de um projeto Android
Um projeto Android se organiza em: configuração do projeto (gerenciamento de dependências/build via Gradle), código Java (toda a lógica do app), recursos (XMLs de layout, strings, estilos, imagens) e assets (fontes, bancos pré-compilados, etc).
O AndroidManifest.xml é o arquivo central que descreve o app: o package (pacote Java padrão, também usado como ID único), os componentes presentes (Activities, Services, BroadcastReceivers), as permissões requeridas, as features de hardware/software usadas, e a API level mínima suportada. Parte dessas informações é usada diretamente pela Google Play Store.
🖼️ Construção de layout
Duas classes-base: View (componente de UI) e ViewGroup (tipo especial de View que pode conter outras Views). Os gerenciadores de layout mais comuns: LinearLayout, RelativeLayout, FrameLayout, GridLayout.
LinearLayout organiza Views de forma linear, com android:orientation definindo a direção (horizontal/vertical) e android:layout_weight distribuindo o espaço proporcionalmente entre os filhos. RelativeLayout organiza Views de forma relativa, ao pai (layout_alignParentTop/Bottom/Left/Right) ou a outra View (layout_toLeftOf, layout_below, etc).
Exemplo básico de layout XML:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a TextView" />
<Button
android:id="@+id/button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello, I am a Button" />
</LinearLayout>
layout_width e layout_height são obrigatórios em toda View, com os valores wrap_content, match_parent ou um valor fixo. Outros atributos comuns: layout_margin, layout_gravity, background, onClick (aponta pro nome de um método que trata o clique), padding (não confundir com margin).
🔄 Activity e ciclo de vida
Uma Activity fornece uma tela pra o usuário interagir com a UI, e um app pode ter várias. Ela não é uma View, mas possui Views: a ligação entre o XML de layout e a Activity acontece via setContentView(R.layout.my_layout), chamado dentro do onCreate().
O ciclo de vida segue: onCreate → onStart → onResume (visível e em primeiro plano) → onPause → onStop → onDestroy, com onRestart quando o usuário volta pra uma Activity que tinha parado.
📜 RecyclerView e CardView
RecyclerView substitui listas mais antigas com melhor reaproveitamento de views. O Adapter precisa implementar onBindViewHolder (liga os dados a cada item visível) e getItemCount, além de uma classe interna ViewHolder estendendo RecyclerView.ViewHolder. CardView complementa como container visual de cada item da lista, em formato de cartão.
Dependências Gradle:
com.android.support:recyclerview-v7:22.1.1
com.android.support:cardview-v7:22.1.1
🌐 Consumindo uma API
O trio usado no codelab pra consumo de API: Retrofit (cliente HTTP), Gson (serialização JSON) e Picasso (carregamento de imagens). A API de exemplo usada foi a todo.api.gdgfoz.org/api/v1, do próprio GDG Foz.
Retrofit define uma interface descrevendo os métodos da API (CREATE/READ/UPDATE/DELETE), um POJO representando o modelo de dados, e um RestAdapter construído com endpoint e nível de log:
com.squareup.retrofit:retrofit:1.9.0
Gson converte a resposta JSON diretamente pra objetos Java definidos como modelo. Picasso carrega imagens a partir de uma URL com poucas linhas, recebendo o context e a url da imagem:
com.squareup.picasso:picasso:2.5.2
🔗 Links
Codelab conduzido com Valmir Barbosa, Lucas de Castro Oliveira e Cassiano Peres, no GDG Foz do Iguaçu.
Slides completos: Android: por onde começar?.