Upload
nelson-glauber-leal
View
2.980
Download
0
Tags:
Embed Size (px)
DESCRIPTION
Palestra sobre boas práticas no desenvolvimento Android para iniciantes. Apresentada no lançamento do GDG Recife em 11/Jun/2014.
Citation preview
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!!