SlideShare uma empresa Scribd logo
Introdução ao Android
           Minicurso, 4h



    Rodrigo Rocha Gomes e Souza
        11 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




                                             4.0
                                                    4.1, 4.2

                                                        2.2
                                            2.3




http://developer.android.com/about/dashboards/index.html
Introdução ao Android (minicurso 4h)
Ambiente de
desenvolvimento
http://developer.android.com/tools/sdk/eclipse-adt.html
Introdução ao Android (minicurso 4h)
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
Layout
                                   res/layout/activity_main.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>
strings.xml
                                  res/values/strings.xml


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


  útil para traduzir um app para vários idiomas
        (um arquivo strings.xml por idioma)
Código Java
                                  src/.../MainActivity.java




public class MainActivity extends Activity {

	   @Override
	   protected void onCreate(Bundle savedInstanceState) {
	   	 super.onCreate(savedInstanceState);
	   	 setContentView(R.layout.activity_main);
	   }
}
R (arquivo gerado pelo compilador)
                                                    gen/R.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;
       }
       ...
   }



  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
Ids!
                                  res/layout/activity_main.xml
       <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>
R (arquivo gerado pelo compilador)


                                                  gen/R.java



  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;
      }
      ...
  }
Clique!
                                res/layout/activity_main.xml
 <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>
Chama método botaoClicado

                                  src/.../MainActivity.java


public class MainActivity extends Activity {

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

	   public void botaoClicado(View v) {
	   	
	   }
}
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 Log
Log.v    // Verbose
Log.d    // Debug
Log.i    // Info
Log.w    // Warning
Log.e    // Error
Log.wtf // What a Terrible Failure
Alterar o TextView (usa findViewById)


                                   src/.../MainActivity.java



public class MainActivity extends Activity {

	   ...

	   public void botaoClicado(View v) {
	   	 TextView tv = (TextView)findViewById(R.id.textView1);
	   	 tv.setText("Clique!");
	   }
}
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

                ativa

                                       parcialmente
  onResume                 onPause        visível


               onRestart
    onStart                 onStop      não visível




   onCreate                onDestroy    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.
Preferências

             SharedPreferences prefs = PreferenceManager
             	 	 .getDefaultSharedPreferences(this);
Salvando
             Editor editor = prefs.edit();
             editor.putString("texto", texto);
             editor.commit();




             SharedPreferences prefs = PreferenceManager
             	 	 .getDefaultSharedPreferences(this);
Carregando
             String texto = prefs.getString("texto", "");
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
Abrindo outra Activity

                                MainActivity.java



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




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

    A nova Activity é empilhada sobre a atual.
Fechando a Activity

                  OutraActivity



                  finish();


        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
Passando dados de uma Activity para outra
                                      MainActivity.java


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


                                     OutraActivity.java


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


            Pode ser chamado no onCreate()
Retornando dados de uma Activity

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



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




@Override
protected void onActivityResult(int requestCode,
                                                          MainActivity.java
                                int resultCode,
                                Intent data) {
  if (requestCode == 1234 && resultCode == RESULT_OK) {
    float pi = data.getFloat(“pi”);
  }
}
Prática
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
ListView: funcionamento

                            ListView


             ArrayAdapter

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




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);
ListView: interação



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

	   	   // ...

	 }
});
Prática

Sistema para guardar palestras e cursos do SIECOMP.

Mais conteúdo relacionado

PPTX
Computação Móvel 2012.2 - Android
PPT
Dê seus primeiros passos no desenvolvimento com Android
PDF
Apresentação-Resumo sobre o Java Swing.
ODP
Java 17 Swing
PDF
Android Aula 5
PPTX
Atividades e Intenções (Android)
PDF
Introdução ao Java Swing (Interface)
PDF
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)
Computação Móvel 2012.2 - Android
Dê seus primeiros passos no desenvolvimento com Android
Apresentação-Resumo sobre o Java Swing.
Java 17 Swing
Android Aula 5
Atividades e Intenções (Android)
Introdução ao Java Swing (Interface)
Desenvolvimento de Aplicações para o Google App Engine (CPBR5)

Mais procurados (20)

PDF
Java Swing
PDF
Desenvolvimento Moderno de Aplicativos Android
PDF
Android: Intent, Broadcast Receiver e Notifications
PDF
Java interface gráfica swing
PDF
Android Aula 3
PDF
Android Aula 4
PPT
Applets
PDF
PPTX
Java gui
PPT
Introdução à programação para Android
PDF
Minicurso Android Ronildo Oliveira
PDF
Curso Básico Android - Aula 05
PDF
Java introdução ao eclipse
PPTX
Aula02 android hands_on
PPTX
Aula04 android intents
PDF
Curso de Android Aula 4
PDF
Introdução ao Desenvolvimento Android
PDF
Introdução ao JavaFX
PDF
Curso Básico Android - Aula 02
PPTX
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Java Swing
Desenvolvimento Moderno de Aplicativos Android
Android: Intent, Broadcast Receiver e Notifications
Java interface gráfica swing
Android Aula 3
Android Aula 4
Applets
Java gui
Introdução à programação para Android
Minicurso Android Ronildo Oliveira
Curso Básico Android - Aula 05
Java introdução ao eclipse
Aula02 android hands_on
Aula04 android intents
Curso de Android Aula 4
Introdução ao Desenvolvimento Android
Introdução ao JavaFX
Curso Básico Android - Aula 02
Introdução ao desenvolvimento de apps para Android - Dia 2/2
Anúncio

Destaque (20)

PPTX
Professionalism and Civility in Electronic Discovery
PPTX
Presentacion yonathan clavijo pwp
PPTX
Linkedin Profile 2.0 Presentation
PPT
Dog Nights
PDF
Social Issues
PPTX
3. simple present tense 1
PPT
company UDS
DOCX
Muhammad Nazim Al Zafir resume
PPTX
BBNC overview canadian consultants
PDF
PPT
Ledakan bintang
PPT
Agire professionale e competenze2
PDF
Tizenについて
PDF
Inland Technology General Profile 2016
PDF
Freello mobile-marketing-4-brands
PDF
Freello | Mobile Marketing 4 Media
PDF
103845188 unidades-de-controle-na-parte-dianteira-do-veiculo-parte-2
PDF
freeCodeCamp Tokyo Meetup #18
Professionalism and Civility in Electronic Discovery
Presentacion yonathan clavijo pwp
Linkedin Profile 2.0 Presentation
Dog Nights
Social Issues
3. simple present tense 1
company UDS
Muhammad Nazim Al Zafir resume
BBNC overview canadian consultants
Ledakan bintang
Agire professionale e competenze2
Tizenについて
Inland Technology General Profile 2016
Freello mobile-marketing-4-brands
Freello | Mobile Marketing 4 Media
103845188 unidades-de-controle-na-parte-dianteira-do-veiculo-parte-2
freeCodeCamp Tokyo Meetup #18
Anúncio

Semelhante a Introdução ao Android (minicurso 4h) (20)

PPTX
Aula01 - introdução, Activity
PDF
Curso de android
PDF
Apresentação Google Android
PDF
SESTINFO 2011 Apresentacao Android
PDF
Introdução a Plataforma Android
PDF
Aulas Google Android
PPTX
Curso Android 01: Introdução
PDF
Apresentacao android por Júlio Cesar Bueno Cotta
ODP
Hello World Android
PPTX
Minicurso2013
PDF
Desenvolvimento de Aplicativos para a Plataforma Android
PDF
Computação Móvel: Perspectivas, Oportunidades e Desenvolvimento
PDF
Android bootcamp 06-01-2012 Part 1
PDF
Curso de Android - aula 3
PDF
Introdução ao Android
PDF
Indrodução ao android 1º Encontro JUG VALE 2012
PDF
Documentao Projeto Android - Intent
PDF
Aula 02 fundamentos
PPSX
Aula 2
PDF
Programando Android - Aula 3
Aula01 - introdução, Activity
Curso de android
Apresentação Google Android
SESTINFO 2011 Apresentacao Android
Introdução a Plataforma Android
Aulas Google Android
Curso Android 01: Introdução
Apresentacao android por Júlio Cesar Bueno Cotta
Hello World Android
Minicurso2013
Desenvolvimento de Aplicativos para a Plataforma Android
Computação Móvel: Perspectivas, Oportunidades e Desenvolvimento
Android bootcamp 06-01-2012 Part 1
Curso de Android - aula 3
Introdução ao Android
Indrodução ao android 1º Encontro JUG VALE 2012
Documentao Projeto Android - Intent
Aula 02 fundamentos
Aula 2
Programando Android - Aula 3

Mais de Rodrigo Rocha (11)

PDF
Aula: busca e ordenação
PDF
Patterns for Extracting High Level Information from Bug Reports
PDF
Patterns for Cleaning Up Bug Data
PDF
Beabá do R
PDF
Mineração de Repositórios de Defeitos
PDF
2011 seminario rodrigo 2011
PDF
2012 qualificacao-rodrigo-2012
PDF
2012 doutorado - visita de dalton - comentarios de dalton, roberto e christina
PDF
Características de apps
PDF
Mercado de apps
KEY
Characterizing Verification of Bug Fixes in Two Open Source IDEs (MSR 2012)
Aula: busca e ordenação
Patterns for Extracting High Level Information from Bug Reports
Patterns for Cleaning Up Bug Data
Beabá do R
Mineração de Repositórios de Defeitos
2011 seminario rodrigo 2011
2012 qualificacao-rodrigo-2012
2012 doutorado - visita de dalton - comentarios de dalton, roberto e christina
Características de apps
Mercado de apps
Characterizing Verification of Bug Fixes in Two Open Source IDEs (MSR 2012)

Último (20)

PDF
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
PPTX
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
PDF
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
PPTX
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
PDF
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
PDF
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
PPTX
Émile Durkheim slide elaborado muito bom
PDF
Apple Pippin Uma breve introdução. - David Glotz
PDF
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
PPTX
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
PPTX
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
PPTX
Aula 18 - Manipulacao De Arquivos python
PPTX
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
PDF
Processos na gestão de transportes, TM100 Col18
PPTX
Aula sobre banco de dados com firebase db
PPTX
Aula sobre desenvolvimento de aplicativos
PDF
Custos e liquidação no SAP Transportation Management, TM130 Col18
PPTX
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
PPTX
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
PPTX
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx
Mergulho profundo técnico para gestão de transportes no SAP S/4HANA, S4TM6 Col14
BANCO DE DADOS - AULAS INICIAIS-sgbd.pptx
Fundamentos de gerenciamento de ordens e planejamento no SAP TransportationMa...
Curso de Java 15 - (Uso de Servlets (Entendendo a Estrutura)).pptx
20250805_ServiceNow e a Arquitetura Orientada a Serviços (SOA) A Base para Ap...
Custos e faturamento no SAP S/4HANA Transportation Management, S4TM3 Col26
Émile Durkheim slide elaborado muito bom
Apple Pippin Uma breve introdução. - David Glotz
Otimizador de planejamento e execução no SAP Transportation Management, TM120...
Gestao-de-Bugs-em-Software-Introducao.pptxxxxxxxx
Programação - Linguagem C - Variáveis, Palavras Reservadas, tipos de dados, c...
Aula 18 - Manipulacao De Arquivos python
Curso de Java 11 - (Serializable (Serialização de Objetos)).pptx
Processos na gestão de transportes, TM100 Col18
Aula sobre banco de dados com firebase db
Aula sobre desenvolvimento de aplicativos
Custos e liquidação no SAP Transportation Management, TM130 Col18
Curso de Java 10 - (IO Manipulação de Arquivos).pptx
Aula16ManipulaçãoDadosssssssssssssssssssssssssssss
Curso de Java 13 - (JavaEE (JSP e Servlets)).pptx

Introdução ao Android (minicurso 4h)

  • 1. Introdução ao Android Minicurso, 4h Rodrigo Rocha Gomes e Souza 11 de março de 2013 X SIECOMP, UEFS
  • 3. 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?
  • 4. 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)
  • 5. Conteúdo Ambiente de desenvolvimento (ADT) Alô mundo Estrutura de um app Ciclo de vida Múltiplas telas Salvando e lendo preferências ListView
  • 6. Método Um pequeno app para cada conceito Ao final, um app completo para anotar suas palestras favoritas
  • 7. Horário De 14h a 18h Pausa de 15 a 20 min no meio do minicurso
  • 9. Dispositivos Smartphones: 240x320, 320x480, 480x800... Tablets: 480x800, 600x1024, 800x1280... TVs, consoles, computador pessoal...
  • 10. 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
  • 12. Versões 1.0: muito antiga 2.0: smartphones 3.0: tablets 4.0: smartphones e tablets
  • 13. Versões 4.0 4.1, 4.2 2.2 2.3 http://developer.android.com/about/dashboards/index.html
  • 18. Emulador / Android Virtual Device (AVD)
  • 19. Prática Abrir o ambiente de desenvolvimento Criar e executar uma AVD Abrir o SDK Manager
  • 20. Prática Abrir o DDMS. Aba Emulator Control. Simule uma ligação telefônica
  • 24. 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...)
  • 25. 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
  • 26. Layout res/layout/activity_main.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>
  • 27. strings.xml res/values/strings.xml <?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> útil para traduzir um app para vários idiomas (um arquivo strings.xml por idioma)
  • 28. Código Java src/.../MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } }
  • 29. R (arquivo gerado pelo compilador) gen/R.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; } ... } Cada recurso é identificado por um número. O compilador gera constantes para facilitar o uso de recursos no código-fonte.
  • 30. Prática Substitua, no arquivo strings.xml, “Hello world!” por “Alo mundo!” Execute o app.
  • 33. Ids! res/layout/activity_main.xml <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>
  • 34. R (arquivo gerado pelo compilador) gen/R.java 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; } ... }
  • 35. Clique! res/layout/activity_main.xml <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>
  • 36. Chama método botaoClicado src/.../MainActivity.java public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); } public void botaoClicado(View v) { } }
  • 37. O que fazer quando clicar no botão? 1. Exibir algo na tela 2. Exibir algo no log 3. Mudar o texto do TextView
  • 38. Toast (mensagem na tela) Toast.makeText(this, "Hello World", Toast.LENGTH_SHORT).show();
  • 39. 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
  • 40. Alterar o TextView (usa findViewById) src/.../MainActivity.java public class MainActivity extends Activity { ... public void botaoClicado(View v) { TextView tv = (TextView)findViewById(R.id.textView1); tv.setText("Clique!"); } }
  • 41. 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)
  • 42. Ciclo de Vida de uma Activity
  • 43. Ciclo de vida de uma Activity ativa parcialmente onResume onPause visível onRestart onStart onStop não visível onCreate onDestroy destruída
  • 44. 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
  • 45. Prática Rotacione o dispositivo (Ctrl+F11). Quais métodos são chamados?
  • 47. 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.
  • 48. Preferências SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this); Salvando Editor editor = prefs.edit(); editor.putString("texto", texto); editor.commit(); SharedPreferences prefs = PreferenceManager .getDefaultSharedPreferences(this); Carregando String texto = prefs.getString("texto", "");
  • 49. 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
  • 50. Pausa
  • 52. 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
  • 53. Abrindo outra Activity MainActivity.java Intent intent = new Intent(this, OutraActivity.class); startActivity(intent); Pode ser chamado, por exemplo, ao clicar em um botão. A nova Activity é empilhada sobre a atual.
  • 54. Fechando a Activity OutraActivity finish(); 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.
  • 55. 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
  • 56. Passando dados de uma Activity para outra MainActivity.java Intent intent = new Intent(this, OutraActivity.class); intent.putExtra(“pi”, 3.14); startActivity(intent); OutraActivity.java Bundle extras = getIntent().getExtras() if (extras != null) { float x = extra.getFloat(“pi”); } Pode ser chamado no onCreate()
  • 57. Retornando dados de uma Activity Intent intent = new Intent(this, OutraActivity.class); MainActivity.java startActivityForResult(intent, 1234); Intent data = new Intent(); data.putExtra(“pi”, 3.14); OutraActivity.java setResult(RESULT_OK, data); finish(); @Override protected void onActivityResult(int requestCode, MainActivity.java int resultCode, Intent data) { if (requestCode == 1234 && resultCode == RESULT_OK) { float pi = data.getFloat(“pi”); } }
  • 59. 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);
  • 61. ListView: funcionamento ListView ArrayAdapter String
  • 62. 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>
  • 63. ListView ListView listView = (ListView) findViewById(R.id.mylist); listView.setAdapter(adapter);
  • 64. ArrayAdapter 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);
  • 65. ListView: interação listView.setOnItemClickListener(new OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { // ... } });
  • 66. Prática Sistema para guardar palestras e cursos do SIECOMP.