introdução ao android (minicurso 4h)

66
Introdução ao Android Minicurso, 4h Rodrigo Rocha Gomes e Souza 11 de março de 2013 X SIECOMP, UEFS

Upload: rodrigo-rocha

Post on 11-Jun-2015

1.357 views

Category:

Technology


4 download

DESCRIPTION

Minicurso ministrado no X SIECOMP, 11 de março de 2013, UEFS

TRANSCRIPT

Page 1: Introdução ao Android (minicurso 4h)

Introdução ao AndroidMinicurso, 4h

Rodrigo Rocha Gomes e Souza11 de março de 2013

X SIECOMP, UEFS

Page 2: Introdução ao Android (minicurso 4h)

Apresentação

Page 3: Introdução ao Android (minicurso 4h)

Vocês

Quem tem um aparelho Android?

Quem programa em Java?

Quem já programou pra Android, pelo menos um Hello World?

Quem já programou pra outra plataforma móvel?

Page 4: Introdução ao Android (minicurso 4h)

Eu

Doutorando em Ciência da Computação na UFBA

Analista de TI no CPD-UFBA

Professor estagiário da disciplina “Aplicações para Dispositivos Móveis”, na UFBA

Fundador da RoDen Apps (iOS)

Page 5: Introdução ao Android (minicurso 4h)

Conteúdo

Ambiente de desenvolvimento (ADT)

Alô mundo

Estrutura de um app

Ciclo de vida

Múltiplas telas

Salvando e lendo preferências

ListView

Page 6: Introdução ao Android (minicurso 4h)

Método

Um pequeno app para cada conceito

Ao final, um app completo para anotar suas palestras favoritas

Page 7: Introdução ao Android (minicurso 4h)

Horário

De 14h a 18h

Pausa de 15 a 20 min no meio do minicurso

Page 8: Introdução ao Android (minicurso 4h)

Android

Page 9: Introdução ao Android (minicurso 4h)

Dispositivos

Smartphones: 240x320, 320x480, 480x800...

Tablets: 480x800, 600x1024, 800x1280...

TVs, consoles, computador pessoal...

Page 10: Introdução ao Android (minicurso 4h)

Android, o sistema operacional

Comprado pela Google em 2005

Anunciado em 2007, lançado em 2008

Usa o kernel do Linux

Roda uma máquina virtual Java própria: Dalvik VM

Muitas bibliotecas Java funcionam sem alterações na Dalvik, mas nem todas

Page 11: Introdução ao Android (minicurso 4h)

Empacotamento

Page 12: Introdução ao Android (minicurso 4h)

Versões

1.0: muito antiga

2.0: smartphones

3.0: tablets

4.0: smartphones e tablets

Page 13: Introdução ao Android (minicurso 4h)

Versões

http://developer.android.com/about/dashboards/index.html

2.3

4.0

2.2

4.1, 4.2

Page 14: Introdução ao Android (minicurso 4h)
Page 15: Introdução ao Android (minicurso 4h)

Ambiente de desenvolvimento

Page 17: Introdução ao Android (minicurso 4h)
Page 18: Introdução ao Android (minicurso 4h)

Emulador / Android Virtual Device (AVD)

Page 19: Introdução ao Android (minicurso 4h)

Prática

Abrir o ambiente de desenvolvimento

Criar e executar uma AVD

Abrir o SDK Manager

Page 20: Introdução ao Android (minicurso 4h)

Prática

Abrir o DDMS. Aba Emulator Control.

Simule uma ligação telefônica

Page 21: Introdução ao Android (minicurso 4h)

Alô, Mundo!

Page 22: Introdução ao Android (minicurso 4h)

Novo projeto

Page 23: Introdução ao Android (minicurso 4h)

Novo projeto

Page 24: Introdução ao Android (minicurso 4h)

Estrutura do app

src/ - código-fonte

res/ - telas, strings, ícone do app...

assets/ - outros arquivos usados por seu app (imagem, música, texto...)

gen/ - código-fonte gerado automaticamente

AndroidManifest.xml - configuração do app (nome, versão do Android, telas, permissões...)

Page 25: Introdução ao Android (minicurso 4h)

Activity

Equivale a uma tela.

Ao criar um projeto, uma Activity (Main) é criada

Cada Activity é definida em dois arquivos...

res/layout/activity_nome.xml (visual)

src/.../NomeActivity.java (comportamento)

... e é listada no arquivo

AndroidManifest.xml

Page 26: Introdução ao Android (minicurso 4h)

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity" >

<TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:layout_centerVertical="true" android:text="@string/hello_world" />

</RelativeLayout>

res/layout/activity_main.xml

Layout

Page 27: Introdução ao Android (minicurso 4h)

<?xml version="1.0" encoding="utf-8"?><resources>

<string name="app_name">Alo Mundo</string> <string name="hello_world">Hello world!</string> <string name="menu_settings">Settings</string>

</resources>

res/values/strings.xml

strings.xml

útil para traduzir um app para vários idiomas(um arquivo strings.xml por idioma)

Page 28: Introdução ao Android (minicurso 4h)

public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }}

src/.../MainActivity.java

Código Java

Page 29: Introdução ao Android (minicurso 4h)

public final class R { public static final class layout { public static final int activity_main=0x7f030000; } public static final class string { public static final int app_name=0x7f040000; public static final int hello_world=0x7f040001; public static final int menu_settings=0x7f040002; } ...}

gen/R.java

R (arquivo gerado pelo compilador)

Cada recurso é identificado por um número.O compilador gera constantes para facilitar o

uso de recursos no código-fonte.

Page 30: Introdução ao Android (minicurso 4h)

Prática

Substitua, no arquivo strings.xml, “Hello world!” por “Alo mundo!”

Execute o app.

Page 31: Introdução ao Android (minicurso 4h)

Interação

Page 32: Introdução ao Android (minicurso 4h)

Adicionar um botão

Page 33: Introdução ao Android (minicurso 4h)

<RelativeLayout ... >

<TextView android:id="@+id/textView1" ... />

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="21dp" android:text="Button" />

</RelativeLayout>

res/layout/activity_main.xml

Ids!

Page 34: Introdução ao Android (minicurso 4h)

public final class R { public static final class id { public static final int button1=0x7f070001; public static final int menu_settings=0x7f070002; public static final int textView1=0x7f070000; } ...}

gen/R.java

R (arquivo gerado pelo compilador)

Page 35: Introdução ao Android (minicurso 4h)

<RelativeLayout ... >

<TextView android:id="@+id/textView1" ... />

<Button android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_alignLeft="@+id/textView1" android:layout_below="@+id/textView1" android:layout_marginTop="21dp" android:text="Button" android:onClick="botaoClicado" />

</RelativeLayout>

res/layout/activity_main.xml

Clique!

Page 36: Introdução ao Android (minicurso 4h)

public class MainActivity extends Activity {

@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); }

public void botaoClicado(View v) { }}

src/.../MainActivity.java

Chama método botaoClicado

Page 37: Introdução ao Android (minicurso 4h)

O que fazer quando clicar no botão?

1. Exibir algo na tela

2. Exibir algo no log

3. Mudar o texto do TextView

Page 38: Introdução ao Android (minicurso 4h)

Toast (mensagem na tela)

Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();

Page 39: Introdução ao Android (minicurso 4h)

Log (não aparece para o usuário)

Log.i("minhatag", "Minha mensagem")

// Métodos de LogLog.v // VerboseLog.d // DebugLog.i // InfoLog.w // WarningLog.e // ErrorLog.wtf // What a Terrible Failure

Page 40: Introdução ao Android (minicurso 4h)

public class MainActivity extends Activity {

...

public void botaoClicado(View v) { TextView tv = (TextView)findViewById(R.id.textView1); tv.setText("Clique!"); }}

src/.../MainActivity.java

Alterar o TextView (usa findViewById)

Page 41: Introdução ao Android (minicurso 4h)

Prática

Adicione um campo de texto (EditText)

Ao clicar no botão, altere o TextView para o valor do campo de texto (use getText()).

Boa prática: crie um atributo para cada view e inicialize todos no onCreate (usando findViewbyId)

Page 42: Introdução ao Android (minicurso 4h)

Ciclo de Vida de uma Activity

Page 43: Introdução ao Android (minicurso 4h)

Ciclo de vida de uma Activity

onCreate

onStart

onResume onPause

onStop

onDestroy

ativa

onRestart

parcialmente visível

não visível

destruída

Page 44: Introdução ao Android (minicurso 4h)

Prática

Implemente os métodos do ciclo de vida de uma activity para emitir uma mensagem de log para cada um

Tente fazer com que onDestroy seja chamado

Page 45: Introdução ao Android (minicurso 4h)

Prática

Rotacione o dispositivo (Ctrl+F11). Quais métodos são chamados?

Page 46: Introdução ao Android (minicurso 4h)

Preferências

Page 47: Introdução ao Android (minicurso 4h)

Preferências

Como salvar dados para que eles possam ser acessados da próxima vez que o app seja executado?

SharedPreferences é uma forma conveniente de salvar pequenas quantidades de dados.

Page 48: Introdução ao Android (minicurso 4h)

SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this);

Editor editor = prefs.edit();editor.putString("texto", texto);editor.commit();

Preferências

SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this);

String texto = prefs.getString("texto", "");

Salvando

Carregando

Page 49: Introdução ao Android (minicurso 4h)

Prática

Faça o app guardar o texto

Carregue no onCreate, salve no onDestroy

Boa prática: use atributos static final para as chaves

Page 50: Introdução ao Android (minicurso 4h)

Pausa

Page 51: Introdução ao Android (minicurso 4h)

Intents

Page 52: Introdução ao Android (minicurso 4h)

Intents

São mensagens que seu programa envia para o sistema para requisitar funcionalidades de outros componentes

Exemplo: uma Activity envia um Intent para requisitar ao sistema que outra Activity seja aberta

Outro exemplo: uma Activity envia um Intent para requisitar ao sistema que abra um navegador na página www.google.com

Page 53: Introdução ao Android (minicurso 4h)

Intent intent = new Intent(this, OutraActivity.class);startActivity(intent);

MainActivity.java

Abrindo outra Activity

Pode ser chamado, por exemplo, ao clicar em um botão.

A nova Activity é empilhada sobre a atual.

Page 54: Introdução ao Android (minicurso 4h)

finish();

OutraActivity

Fechando a Activity

Quando uma Activity é fechada (desempilhada), o sistema mostra

a Activity anterior, que estava abaixo da atual.

OutraActivity deve se fechar, e não empilhar MainActivity.

Page 55: Introdução ao Android (minicurso 4h)

Prática

Crie um projeto.

Crie uma nova Activity, chamada OutraActivity

Na MainActivity, adicione um botão que, ao ser clicado, abre OutraActivity

Na OutraActivity, adicione um botão que, ao ser chamado, feche a Activity

Page 56: Introdução ao Android (minicurso 4h)

Intent intent = new Intent(this, OutraActivity.class);intent.putExtra(“pi”, 3.14);startActivity(intent);

MainActivity.java

Passando dados de uma Activity para outra

Bundle extras = getIntent().getExtras()if (extras != null) { float x = extra.getFloat(“pi”);}

OutraActivity.java

Pode ser chamado no onCreate()

Page 57: Introdução ao Android (minicurso 4h)

Intent intent = new Intent(this, OutraActivity.class);startActivityForResult(intent, 1234); MainActivity.java

Retornando dados de uma Activity

Intent data = new Intent();data.putExtra(“pi”, 3.14);setResult(RESULT_OK, data);finish();

OutraActivity.java

@Overrideprotected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1234 && resultCode == RESULT_OK) { float pi = data.getFloat(“pi”); } }

MainActivity.java

Page 58: Introdução ao Android (minicurso 4h)

Prática

Page 59: Introdução ao Android (minicurso 4h)

Intents Implícitos

// Abrir navegadorIntent intent = new Intent(Intent.ACTION_VIEW, Uri.parse("http://www.google.com/"));startActivity(intent);

// Enviar mensagem (SMS)Intent intent = new Intent(Intent.ACTION_SEND);intent.setType("text/plain");intent.putExtra(android.content.Intent.EXTRA_TEXT, "Oi!");startActivity(intent);

Page 60: Introdução ao Android (minicurso 4h)

ListView

Page 61: Introdução ao Android (minicurso 4h)

String

ArrayAdapter

ListView

ListView: funcionamento

Page 62: Introdução ao Android (minicurso 4h)

ListView

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" >

       <ListView                android:id="@+id/mylist"                android:layout_width="match_parent"                android:layout_height="wrap_content"  >        </ListView>

</LinearLayout>

Page 63: Introdução ao Android (minicurso 4h)

ListView

ListView listView = (ListView) findViewById(R.id.mylist);

listView.setAdapter(adapter);

Page 64: Introdução ao Android (minicurso 4h)

ListView listView = (ListView) findViewById(R.id.mylist);

String[] values = new String[] { “Ada”, “Basic”, “C++” };

ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, // layout de um item values);

listView.setAdapter(adapter);

ArrayAdapter

Page 65: Introdução ao Android (minicurso 4h)

listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) {

// ...

}});

ListView: interação

Page 66: Introdução ao Android (minicurso 4h)

Prática

Sistema para guardar palestras e cursos do SIECOMP.