Desenvolvimento Android
Faça da maneira certa!
Nelson Glauber
GDGRecife / Jun/2014
Nelson Glauber
Engenheiro 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 Eclipse
http://goo.gl/2qpr
Comece com uma boa IDE
Baseada em Eclipse
http://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-mdpi
res/drawable-tvdpi
res/drawable-hdpi
res/drawable-xhdpi
res/drawable-xxhdpi
res/drawable-xxxhdpi
http://goo.gl/E70Ez
Defina imagens para cada
densidade
res/drawable-mdpi
res/drawable-tvdpi
res/drawable-hdpi
res/drawable-xhdpi
res/drawable-xxhdpi
res/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/obp2C
http://goo.gl/tpTc1
Acesse a web
• Imagens em listas?
• Universal Image Loader
• Picasso
• Volley
http://goo.gl/obp2C
http://goo.gl/tpTc1
Acesse a web
• Imagens em listas?
• Universal Image Loader
• Picasso
• Volley
http://goo.gl/obp2C
http://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!!

Desenvolvimento Android: Faça da maneira certa