CodeLab Android
Instrutor Houssan A. Hijazi
GDGFozCodelab Android
GDGFoz
• Houssan A. Hijazi - hussanhijazi@gmail.com
• Valmir Barbosa - valmir.php@gmail.com
• Jefferson Maran - jefferson.maran@gmail.com
GDGFozCodelab Android
Quem ajuda no Codelab ?
• Houssan Ali Hijazi
• HE:labs / 2.5 anos Android
• Lucas de Castro Oliveira
• Estágio em desenvolvimento na Eits - PTI. Formando
em Ciência da Computação pela Unioeste.
• Cassiano Peres
• Trabalha no CIH, projeto de pesquisa e
desenvolvimento com tecnologias java para web e
georreferenciamento.
GDGFozCodelab Android
Codelab
• Android SDK
• Android Studio
• UIElements e
Android XML
• Activities
• List & Adapters
• Serialização
• Json e GSON
• REST WebServices
GDGFozCodelab Android
Android Studio
• IDE Oficial do Android
• “Fork” do IntelliJ IDEA (Jetbrains)
• Versão estável atual: 1.5
GDGFozCodelab Android
Android Studio
• Pre-Requisitos
• Windows, Mac OS ou Linux (GNOME ou KDE)
• Ambiente de tempo de execução Java (JRE) 6 ou +
• Kit de desenvolvimento Java (JDK) 7 ou +
• MUITA memória
• Mínimo 2GB
• Recomendado 4GB (Minha recomendação: 8GB)
GDGFozCodelab Android
Estrutura de um projeto
Android
• Gradle
• Configuração do projeto
• Gerenciamento de dependências/build
• Java
• Classes Java (contém toda a parte lógica do app)
• Recursos
• XMLs (Layout, Strings, Estilos, etc…)
• Imagens (PNGs, Gifs, etc…)
• Assets
• Fontes, Bancos de dados pré-compilados, etc…
GDGFozCodelab Android
Let’s Code!
Java e res
Java e res
Meu app
Java e res
Meu app
Classes
Java e res
Meu app
Classes
Layout
Java e res
Animações no formato .xml utilizada no seu app
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Todos os layout .xml do seu app
(Podem existir outras pastas layouts)
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Todos os layout .xml do seu app
(Podem existir outras pastas layouts)
Todos os menus .xml utilizado no seu app
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Todos os layout .xml do seu app
(Podem existir outras pastas layouts)
Todos os menus .xml utilizado no seu app
Somente o icon launcher do seu app.
Não confunda essa pasta com as drawable.
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Todos os layout .xml do seu app
(Podem existir outras pastas layouts)
Todos os menus .xml utilizado no seu app
Somente o icon launcher do seu app.
Não confunda essa pasta com as drawable.
Todos os textos, dimensões, cores,
arrays .xml utilizados no seu app
Java e res
Animações no formato .xml utilizada no seu app
Todos os ícones e imagens utilizada no seu app
Todos os layout .xml do seu app
(Podem existir outras pastas layouts)
Todos os menus .xml utilizado no seu app
Somente o icon launcher do seu app.
Não confunda essa pasta com as drawable.
Todos os textos, dimensões, cores,
arrays .xml utilizados no seu app
Declarar suas Activity, permissões, services e etc.
GDGFozCodelab Android
AndroidManifest.xml
GDGFozCodelab Android
AndroidManifest.xml
• Arquivo que descreve o conteúdo do aplicativo
• package: pacote java “default" para o App, também
usado com ID único
• Componentes presentes no App
• Activities, Services, BroadcastReceivers, etc.
• Permissões requeridas para o App
• Features de HW/SW usadas pelo App
• API Level mínimo suportado pelo App
• Algumas informações são usadas pelo Google Play Store
GDGFozCodelab Android
• View
• Classe base para qualquer componente de UI
• ViewGroup
• Tipo especial de View que podem ter Views "filhas"
• Gerenciadores de Layout
• Mais comuns:
• LinearLayout
• RelativeLayout
• FrameLayout
• GridLayout
Construção de Layout
GDGFozCodelab Android
ViewGroup
(Layout Managers)
• LinearLayout
• Organiza as Views de forma linear
• android:orientation especifica a direção linear
• “horizontal" ou “vertical”
• android:layout_gravity pode ser usada
• android:layout_weight
• Atribui uma “importância" aos filhos
• O espaço é dividido pela importância
GDGFozCodelab Android
ViewGroup
(Layout Managers)
• RelativeLayout
• Organiza as Views de forma relativa
• Com relação ao pai ou a elas mesmas
• android:layout_alignParent[Top | Bottom | Left | Right]
• Relacionado ao pai (true/false)
• android:layout_toLeftOf / layout_toRightOf
• Relacionado a outro filho (@id/child_id)
• android:layout_below / layout_above
• Relacionado a outro filho (@id/child_id)
GDGFozCodelab Android
Construção de Layout
• XML (res/layout)
• Define estrutura visual da interface
• Separa Visão/Comportamento
• Exemplo:
GDGFozCodelab Android
Construção de Layout
• Atributos
• ID (android:id)
• Definindo ID: android:id=“@+id/my_button"
• Referenciando ID: “@id/my_button” (XML) ou R.id.my_button (Java)
• LayoutParams
• Define atributos relativos ao ViewGroup pai
• android:layout_*
• android:layout_width / android:layout_height obrigatórios
• Valores possíveis: “wrap_content”, “match_parent”, valor fixo
• outros atributos
• android:layout_margin (ViewGroup)
• android:layout_gravity (LinearLayout)
• android:layout_weight (LinearLayout)
GDGFozCodelab Android
Construção de Layout
• LayoutParams
• Obrigatórios
• android:layout_width
• android:layout_height
• outros atributos
• android:layout_margin (ViewGroup)
• android:layout_gravity (LinearLayout)
• android:layout_weight (LinearLayout)
• Valores possíveis para altura/largura
• “wrap_content”
• “match_parent”
• valor inteiro fixo
GDGFozCodelab Android
Construção de Layout
• Alguns atributos de View
• android:background
• Valores possíveis: #RRGGBB, @drawable/image, @color/my_color
• Referenciando ID: “@id/my_button” (XML) ou R.id.my_button (Java)
• android:onClick
• Valor: nome do método que será chamado ao clicar na View.
• Exemplo:
• android:onClick=“viewClicked”
• public void viewClicked(View v)
• android:padding
• paddingTop, paddingBottom, paddingLeft, paddingRight
• Padding != Margin
GDGFozCodelab Android
Ligação XML - Java
• Activity
• Componente que fornece uma tela para que o usuário
possa interagir com a UI
• Um app pode ter n Activities
• Activity não é uma View, ela possui Views
• Ligando uma Activity a um XML de layout
• setContentView(R.layout.my_layout);
• deve ser chamado no método onCreate()
http://boomersurf.com/wp-content/uploads/2013/06/iphone-ca http://boomersurf.com/wp-content/
uploads/2013/06/iphone-camera-icon.jpg mera-ic http://www.thekirankumar.com/blog/wp-content/
uploads/2013/03/deadlock.jpg on.jpg
GDGFozCodelab Android
Activity
Lifecycle
GDGFozCodelab Android
Let’s Code!
GDGFozCodelab Android
RecyclerView
GDGFozCodelab Android
RecyclerView
GDGFozCodelab Android
RecyclerView
<android.support.v7.widget.RecyclerView

android:id="@+id/list_data"

android:layout_width="match_parent"

android:layout_height="match_parent"

/>
GDGFozCodelab Android
RecyclerView.Adapter
class CategoryAdapter
extends
RecyclerView.Adapter<CategoryAdapter.ViewHolder>
ViewHolder onCreateViewHolder(ViewGroup parent,
int viewType)
void onBindViewHolder(ViewHolder holder, final
int position)

int getItemCount()

public class ViewHolder
extends RecyclerView.ViewHolder
GDGFozCodelab Android
CardView
GDGFozCodelab Android
CardView
<android.support.v7.widget.CardView

android:id="@+id/card_view"

android:layout_width="match_parent"

android:layout_height="wrap_content"

>
GDGFozCodelab Android
RecyclerView/CardView
Grade

compile 'com.android.support:recyclerview-v7:22.1.1'

compile 'com.android.support:cardview-v7:22.1.1'
GDGFozCodelab Android
Consumindo uma api
Retrofit + Gson + Picasso
GDGFozCodelab Android
GDGFoz Todo Api
• todo.api.gdgfoz.org/api/v1
GDGFozCodelab Android
Retrofit


Gradle



compile 'com.squareup.retrofit:retrofit:1.9.0'

GDGFozCodelab Android
Retrofit
GDGFozCodelab Android
Retrofit
GDGFozCodelab Android
Retrofit
private static RestAdapter.LogLevel logLevel =
RestAdapter.LogLevel.FULL;

private static RestAdapter.Builder builder =
new RestAdapter.Builder()

.setEndpoint(Config.BASE_API)

.setLogLevel(logLevel);
GDGFozCodelab Android
Gson
public class Category {



@SerializedName("id")

@Expose

private Integer id;

@SerializedName("category")

@Expose

private String category;

@SerializedName("src")

@Expose

private String src;
}
GDGFozCodelab Android
Picasso
Grade

compile 'com.squareup.picasso:picasso:2.5.2'
GDGFozCodelab Android
Picasso
GDGFozCodelab Android
Links
• Android - http://developer.android.com/intl/pt-br/index.html
• Android Studio - http://developer.android.com/intl/pt-br/sdk/
index.html
• VirtualBox - https://www.virtualbox.org/
• Genymotion - https://www.genymotion.com
• JsonSchema2Pojo - http://www.jsonschema2pojo.org/
Obrigado

Android: Por onde começar ?