introdução ao android (minicurso 4h)

Post on 11-Jun-2015

1.357 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

DESCRIPTION

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

TRANSCRIPT

Introdução ao AndroidMinicurso, 4h

Rodrigo Rocha Gomes e Souza11 de março de 2013

X SIECOMP, UEFS

Apresentação

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?

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)

Conteúdo

Ambiente de desenvolvimento (ADT)

Alô mundo

Estrutura de um app

Ciclo de vida

Múltiplas telas

Salvando e lendo preferências

ListView

Método

Um pequeno app para cada conceito

Ao final, um app completo para anotar suas palestras favoritas

Horário

De 14h a 18h

Pausa de 15 a 20 min no meio do minicurso

Android

Dispositivos

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

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

TVs, consoles, computador pessoal...

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

Empacotamento

Versões

1.0: muito antiga

2.0: smartphones

3.0: tablets

4.0: smartphones e tablets

Versões

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

2.3

4.0

2.2

4.1, 4.2

Ambiente de desenvolvimento

Emulador / Android Virtual Device (AVD)

Prática

Abrir o ambiente de desenvolvimento

Criar e executar uma AVD

Abrir o SDK Manager

Prática

Abrir o DDMS. Aba Emulator Control.

Simule uma ligação telefônica

Alô, Mundo!

Novo projeto

Novo projeto

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...)

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

<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

<?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)

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

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.

Prática

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

Execute o app.

Interação

Adicionar um botão

<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!

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)

<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!

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

O que fazer quando clicar no botão?

1. Exibir algo na tela

2. Exibir algo no log

3. Mudar o texto do TextView

Toast (mensagem na tela)

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

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

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)

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)

Ciclo de Vida de uma Activity

Ciclo de vida de uma Activity

onCreate

onStart

onResume onPause

onStop

onDestroy

ativa

onRestart

parcialmente visível

não visível

destruída

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

Prática

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

Preferências

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.

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

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

Pausa

Intents

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

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.

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.

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

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()

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

Prática

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);

ListView

String

ArrayAdapter

ListView

ListView: funcionamento

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>

ListView

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

listView.setAdapter(adapter);

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

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

// ...

}});

ListView: interação

Prática

Sistema para guardar palestras e cursos do SIECOMP.

top related