Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Introdução ao Android

Introdução ao Android

Minicurso de 4 h ministrado na UEFS, durante a SIECOMP

rodrigorgs

March 11, 2013
Tweet

More Decks by rodrigorgs

Other Decks in Programming

Transcript

  1. 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?
  2. 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)
  3. Conteúdo Ambiente de desenvolvimento (ADT) Alô mundo Estrutura de um

    app Ciclo de vida Múltiplas telas Salvando e lendo preferências ListView
  4. Método Um pequeno app para cada conceito Ao final, um

    app completo para anotar suas palestras favoritas
  5. Horário De 14h a 18h Pausa de 15 a 20

    min no meio do minicurso
  6. 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
  7. 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...)
  8. 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
  9. <?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)
  10. 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
  11. 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.
  12. <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!
  13. 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)
  14. <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!
  15. 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
  16. O que fazer quando clicar no botão? 1. Exibir algo

    na tela 2. Exibir algo no log 3. Mudar o texto do TextView
  17. 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
  18. 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)
  19. 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)
  20. Ciclo de vida de uma Activity onCreate onStart onResume onPause

    onStop onDestroy ativa onRestart parcialmente visível não visível destruída
  21. 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
  22. 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.
  23. 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
  24. 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
  25. 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
  26. 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.
  27. 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.
  28. 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
  29. 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()
  30. 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
  31. 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);
  32. 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>
  33. 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