Blog Houssan Ali Hijazi
IA · Python · Android
← Voltar ao blog
Android, Java

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: onCreateonStartonResume (visível e em primeiro plano) → onPauseonStoponDestroy, 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?.