Share
Embed
Introdução ao Android
Minicurso de 4 h ministrado na UEFS, durante a SIECOMP
rodrigorgs
March 11, 2013
Transcript
66 slides
-
Introdução ao Android Minicurso, 4h Rodrigo Rocha Gomes e Souza
11 de março de 2013 X SIECOMP, UEFS -
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 -
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 -
Prática Abrir o ambiente de desenvolvimento Criar e executar uma
AVD Abrir o SDK Manager -
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. -
<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 -
Log (não aparece para o usuário) Log.i("minhatag", "Minha mensagem") //
Métodos de Log Log.v // Verbose Log.d // Debug Log.i // Info Log.w // Warning Log.e // Error Log.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 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 -
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 -
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 @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { if (requestCode == 1234 && resultCode == RESULT_OK) { float pi = data.getFloat(“pi”); } } MainActivity.java -
Intents Implícitos // Abrir navegador Intent 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 <?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) 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