CodeLab Android
Instrutor Houssan A. Hijazi
GDGFozCodelab Android
GDGFoz
• Houssan A. Hijazi - [email protected]
• Valmir Barbosa - [email protected]
• Jefferson Maran - [email protected]
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.Adapterclass 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
Gradecompile '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
Gradecompile '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