Desenvolvimento Android: Faça da maneira certa

Post on 11-Jun-2015

2.980 views 0 download

Tags:

description

Palestra sobre boas práticas no desenvolvimento Android para iniciantes. Apresentada no lançamento do GDG Recife em 11/Jun/2014.

Transcript of Desenvolvimento Android: Faça da maneira certa

Desenvolvimento AndroidFaça da maneira certa!

Nelson GlauberGDGRecife / Jun/2014

Nelson GlauberEngenheiro de Sistemas do C.E.S.A.R.

Professor da Unibratec Android GDE 2014

!@nglauber

+NelsonGlauber nglauber.blogspot.com

http://goo.gl/V7qHc

“Android is a software stack for mobile devices that includes an operating system,

middleware and key applications. The Android SDK provides the tools and APIs

necessary to begin developing applications on the Android platform using the Java

programming language.”

Mais 190 países !Mais de 1 milhão de ativações por dia !Loja com mais de 1,5 bilhão de downloads por dia

ANDROID ESTÁ AQUI…

http://www.google.com/phone

E AQUI TAMBÉM!

Faça seu aplicativo da maneira certa!

Comece com uma boa IDE

Comece com uma boa IDE

Comece com uma boa IDE

Baseada em Eclipse

Comece com uma boa IDE

Baseada em Eclipsehttp://goo.gl/2qpr

Comece com uma boa IDE

Baseada em Eclipsehttp://goo.gl/2qpr

Comece com uma boa IDE

Baseada em Eclipse

Baseada em IntelliJ IDEA

http://goo.gl/2qpr

Comece com uma boa IDE

Baseada em Eclipse

Baseada em IntelliJ IDEA

http://goo.gl/2qpr

http://goo.gl/iJEvl

http://www.genymotion.com/

http://www.genymotion.com/

http://www.genymotion.com/

http://www.genymotion.com/

Suporte múltiplas telas

Suporte múltiplas telas

Suporte múltiplas telas

Tamanhos e Densidades diferentes!!!

Suporte múltiplas telas

Tamanhos e Densidades diferentes!!!

Suporte múltiplas telas

http://goo.gl/cMGs

Suporte múltiplas telas

• Tamanho: é a área física de tela em polegadas

http://goo.gl/cMGs

Suporte múltiplas telas

• Tamanho: é a área física de tela em polegadas

• Densidade: quantidade de pixels por polegada

http://goo.gl/cMGs

Suporte múltiplas telas

• Tamanho: é a área física de tela em polegadas

• Densidade: quantidade de pixels por polegada

• Resolução: quantidade de pixels na tela

http://goo.gl/cMGs

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100px"          android:layout_height="100px"          ...  />  

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100px"          android:layout_height="100px"          ...  />  

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100px"          android:layout_height="100px"          ...  />  

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100dp"          android:layout_height="100dp"          ...  />  

!    <Button          android:layout_width="100px"          android:layout_height="100px"          ...  />  

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100dp"          android:layout_height="100dp"          ...  />  

!    <Button          android:layout_width="100px"          android:layout_height="100px"          ...  />  

Não use px, use dp (ou dip)

!    <Button          android:layout_width="100dp"          android:layout_height="100dp"          ...  />  

Use dp para margin e padding!<LinearLayout  ...>          <TextView                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="Margin"                  android:background="#FFFF00"                  android:layout_margin="40dp"/>          <TextView                  android:layout_width="wrap_content"                  android:layout_height="wrap_content"                  android:text="Padding"                  android:background="#00FF00"                  android:padding="40dp"/>  </LinearLayout>  

Use sp (sip) para textos

!    <TextView          android:textSize="36sp"          ...  />  

Defina imagens para cada densidade

http://goo.gl/E70Ez

Defina imagens para cada densidade

res/drawable-mdpires/drawable-tvdpires/drawable-hdpires/drawable-xhdpires/drawable-xxhdpires/drawable-xxxhdpi

http://goo.gl/E70Ez

Defina imagens para cada densidade

res/drawable-mdpires/drawable-tvdpires/drawable-hdpires/drawable-xhdpires/drawable-xxhdpires/drawable-xxxhdpi

http://goo.gl/E70Ez

Defina imagens para cada densidade

Launcher Notifications ActionBar

http://goo.gl/E70Ez

Personalize componentes com imagens 9-patched

http://goo.gl/5AiEM

Personalize componentes com selectors

http://goo.gl/5AiEM

botao_pressionado.9.pngbotao_normal.9.png botao_desabilitado.9.png

Personalize componentes com selectors

http://goo.gl/5AiEM

!    <selector  ...>          <item  android:state_pressed="true"                  android:drawable="@drawable/botao_pressionado"/>          <item  android:state_enabled="false"                  android:drawable="@drawable/botao_desabilitado"/>          <item  android:drawable="@drawable/botao_normal"/>      </selector>  

botao_pressionado.9.pngbotao_normal.9.png botao_desabilitado.9.png

Personalize componentes com selectors

http://goo.gl/5AiEM

botao_pressionado.9.pngbotao_normal.9.png botao_desabilitado.9.png

Personalize componentes com selectors

http://goo.gl/5AiEM

botao_pressionado.9.pngbotao_normal.9.png botao_desabilitado.9.png

Não diga como o usuário deve segurar o aparelho*

res/layout res/layout-land

* Salvo algumas exceções http://goo.gl/sMhD5

Seja poliglota

Seja poliglota!    <TextView          android:text=“Hello  World"          ...  />  

Seja poliglota!    <TextView          android:text=“Hello  World"          ...  />  

Seja poliglota<string  name="hello">     Hello  World </string>

res/values !    <TextView          android:text=“Hello  World"          ...  />  

Seja poliglota<string  name="hello">     Hello  World </string>

res/values

<string  name="hello">     Olá  mundo </string>

res/values-pt

!    <TextView          android:text=“Hello  World"          ...  />  

Seja poliglota<string  name="hello">     Hello  World </string>

res/values

<string  name="hello">     Olá  mundo </string>

res/values-pt

!    <TextView          android:text=“Hello  World"          ...  />  

<string  name="hello">     Hola  mundo </string>

res/values-es

Seja poliglota<string  name="hello">     Hello  World </string>

res/values

<string  name="hello">     Olá  mundo </string>

res/values-pt

!    <TextView          android:text=“Hello  World"          ...  />  

<string  name="hello">     Hola  mundo </string>

res/values-es

!    <TextView          android:text="@string/hello"          ...  />  

Seja poliglota<string  name="hello">     Hello  World </string>

res/values

<string  name="hello">     Olá  mundo </string>

res/values-pt

!    <TextView          android:text=“Hello  World"          ...  />  

<string  name="hello">     Hola  mundo </string>

res/values-es

http://goo.gl/JAuu

!    <TextView          android:text="@string/hello"          ...  />  

Use Fragments

http://goo.gl/TRHlS

Use Fragments

http://goo.gl/TRHlS

Use a ActionBar

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título Ações

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título Ações Overflow

menu

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título Ações

Navegação com Abas

Overflow menu

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título Ações

Navegação com Abas

Overflow menu

http://goo.gl/l5mQA

Use a ActionBarÍcone e Título Ações

Navegação com Abas

Navegação com Spinner

Overflow menu

http://goo.gl/l5mQA

Menu lateral = NavigationDrawer

http://goo.gl/phAJy

ViewPager

http://goo.gl/2nYzo

Salve seus dados!

http://goo.gl/xkXp

Salve seus dados!• SharedPreferences para pequenas coisas

http://goo.gl/xkXp

Salve seus dados!• SharedPreferences para pequenas coisas

http://goo.gl/xkXp

Salve seus dados!• SharedPreferences para pequenas coisas

• SQLite para trabalhar off-line

• CursorLoader + ContentProvider + CursorAdapter

http://goo.gl/xkXp

Salve seus dados!• SharedPreferences para pequenas coisas

• SQLite para trabalhar off-line

• CursorLoader + ContentProvider + CursorAdapter

• Salve na nuvem

• Em uma app servidora

• Play Games

• Android Backup Service

http://goo.gl/xkXp

Acesse a web

http://goo.gl/ZcDlO

Acesse a web

• A comunicação deve ser feita em uma outra Thread

http://goo.gl/ZcDlO

Acesse a web

• A comunicação deve ser feita em uma outra Thread

• AsyncTask ou AsyncTaskLoader

http://goo.gl/ZcDlO

Acesse a web

• A comunicação deve ser feita em uma outra Thread

• AsyncTask ou AsyncTaskLoader

• IntentService

http://goo.gl/ZcDlO

Acesse a web

• A comunicação deve ser feita em uma outra Thread

• AsyncTask ou AsyncTaskLoader

• IntentService

• Volley

http://goo.gl/ZcDlO

Acesse a web

• A comunicação deve ser feita em uma outra Thread

• AsyncTask ou AsyncTaskLoader

• IntentService

• Volley

• Acesse serviços REST

http://goo.gl/ZcDlO

Acesse a web

http://goo.gl/obp2Chttp://goo.gl/tpTc1

Acesse a web

• Imagens em listas?

• Universal Image Loader

• Picasso

• Volley

http://goo.gl/obp2Chttp://goo.gl/tpTc1

Acesse a web

• Imagens em listas?

• Universal Image Loader

• Picasso

• Volley

http://goo.gl/obp2Chttp://goo.gl/tpTc1

Google Cloud Endpoints

http://goo.gl/Mxzwq

Não faça telas de login

http://goo.gl/jfAMI

Não faça telas de login

http://goo.gl/jfAMI

Não faça telas de login

http://goo.gl/jfAMI

Não faça telas de login

http://goo.gl/jfAMI

Engajamento

http://goo.gl/v1I4f

Anime-se

• É possível animar transições de tela (Activities e Fragments)

• Views individualmente (escala, rotação, translação, …)

• Adição e remoção de componentes em layouts

• Criar animações quadro-a-quadro

http://goo.gl/0iVE

Monetize

http://goo.gl/XcaxQd http://goo.gl/JrCWt0

Widgets!

http://goo.gl/oDoOT2

Widgets!

http://goo.gl/oDoOT2

Widgets!

http://goo.gl/oDoOT2

Widgets!

http://goo.gl/oDoOT2

Widgets!

http://goo.gl/oDoOT2

Se vista de Android

http://goo.gl/f0Ng0l

Agora é com vocês!

Dúvidas?

Obrigado!!