Você está na página 1de 89

Curso de Android

Fevereiro de 2011

Cristiano Expedito Ribeiro Fabrcio Firmino de Faria

Pr-requisitos
Programao Orientada a Objetos Java XML bsico Banco de Dados semi-bsico IDE - Eclipse Desejvel algum conhecimento sobre Web Services REST

Agenda da Aula 1
Introduo Conceitos bsicos Activity e Intent
Aplicaes e tarefas Ciclo de vida Passagem e retorno de parmetros

Interface grficas

Layouts Views Dialogs Menus


3

Introduo
Suportado pelo Google Sistema Operacional Linux Mquina Virtual Dalvik Cdigo aberto e livre com boa documentao

Plataformas, SDK e API Level


Android 1.5 - 3 Android 1.6 - 4 Android 2.1 - 7 Android 2.2 - 8 Android 2.3 - 9
4

Configurao do ambiente
Download e Instalao
Software Development Kit (SDK) http://developer.android.com/sdk/index.html Plataformas: Pasta de instalao > SDK Manager "Available Packages" e marque:

Android SDK Tools SDK Platform - API 7, 8 ou 9 Google API - API 7, 8 ou 9 Demais so opcionais ou instalados automaticamente

Download das plataformas

Configurao do ambiente
Android Virtual Devices (AVD)
Permite configurar um celular virtual Verso do Android, Tamanho da tela e memria

Emulador
Programa que permite rodar um AVD no computador

Exerccio 1:
Criar um AVD usando SDK Manager No SDK Manager: Virtual Devices > New Preencher campos Name, Target e SD Card Size (128MiB).

Criao do AVD

Plugin para Eclipse (ADT)


Permite criao e execuo de projetos Android Instalao
No Eclipse: Help > Install New Software > Add URL: https://dl-ssl.google.com/android/eclipse/

Configurao
Window > Preferentes > Android Em "SDK Location" coloque o path do SDK

Exerccio 2:
Criar uma aplicao Hello World bsica com o Wizard e rodar no emulador (no precisa programar).

Criao de projeto
New > Other > Android > Android Project Preencha os campos conforme a prxima figura Clique em Finish No Package Explorer, clique com o boto direito sobre o novo projeto Selecione Run as > Android Aplication O emulador ser iniciado e aps alguns minutos a aplicao rodar apresentando o ttulo "Hello World.

10

Criao de projeto
Project Name
O nome do projeto que

aparecer no Package Explorer do Eclipse.

Application Name
Nome que aparecer no menu

do Android.

Package Name
Nome nico do pacote que

identifica a aplicao.

Create Activity
O nome da classe que

representa a tela inicial da aplicao.


11

Detalhes e dicas
No necessrio fechar o emulador aps testar a aplicao Para executar o mesmo projeto aps uma alterao no necessrio fechar e reabrir o emulador, basta clicar em Run. O mesmo vale para outros projetos. No entanto, em alguns poucos casos, pode ser preciso

Caso uma aplicao seja instalada com o mesmo nome de pacote de uma j existente no celular a anterior ser substituda.
12

Conceitos bsicos
Estrutura do Projeto src
Classes da aplicao

gen
Classe R Gerada automaticamente

res/drawable
Imagens em 3 resolues diferentes

res/layout res/values
Internacionalizao de strings Descrio de cores, estilos, etc

AndroidManifest.xml

A classe R
Atualizada automaticamente pelo ADT quando o contedo da pasta res alterado Tambm existe a classe android.R com alguns recursos pr-definidos Contm constantes que representam cada recurso

R.drawable.nome_imagem R.layout.nome_layout R.string.nome_string R.color.red R.dimen.espaco R.array.nome_array R.style.nome_estilo

14

AndroidManifest.xml
XML com as configuraes da aplicao

Nome, pacote e cone Classes de tela (Activity's) Verso mnima do SDK necessria Permisses (acessar Internet, efetuar ligaes, etc)

ADT fornece interface de edio

15

AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.example.notification" android:versionCode="1" android:versionName="1.0"> <application android:icon="@drawable/icon" android:label="@string/app_name"> <activity android:name=".MyActivity1" android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".MyActivity2" /> </application> <uses-permission android:name="android.permission.VIBRATE" /> </manifest>

16

strings.xml
/res/values/values-en/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Hello World, HelloActivity!</string> <string name="app_name">Hello World in Android</string> </resources>

/res/values/values-pt/strings.xml
<?xml version="1.0" encoding="utf-8"?> <resources> <string name="hello">Al Mundo, HelloActivity!</string> <string name="app_name">Al Mundo no Android</string> </resources>

17

LogCat
No existe System.out.println(), mas existe o LogCat LogCat permite escrever mensagens no Log do Android Nveis de severidade
Verbose Log.v(tag, message)

Debug Info
Warning Error

Log.d(tag, message) Log.i(tag, message)


Log.w(tag, message) Log.e(tag, message,exception)

Para ver no Eclipse:


Window > Show View > Other > Android > LogCat
18

Importao de projetos no Eclipse


Muitas vezes pode ser necessrio importar projetos criados e uma mquina para outra(s):
Menu File > Import... > Existing Projects into Workspace > Next > Browser... Escolha o diretrio contendos os projetos a serem importados Em projects, marque os projetos a serem importados de

fato Caso queira que os projetos sejam copiados para seu workspace, e no apenas referenciados, marque Copy projects into workspace Clique em Finish

Resoluo de erros de importao


Aps a importao o Eclipse pode relatar erros nos projetos. Para resolver siga os passos a seguir, desde que no existam erros de compilao na mquina original Primeiros deve-se tentar corrigir os erros globalmente, depois, caso persistam em cada projeto com erros.
Window > Preferences > Android > SDK Location Window > Preferences > Java > Compiler > Compiler

compliance level > 1.6 Project > Clean... > Clean all projects > OK

Resoluo por projeto


Para os projetos que ainda estiverem com erro:
1. Selecione o projeto > Clique com o boto direito >

Properties > Java Compiler > Desmarque Enable project specific settings > OK 2. Selecione o projeto > Clique com o boto direito > Properties > Android > Em Project Build Target marque a verso do Android a ser utilizada 3. Selecione o projeto > Clique com o boto direito > Android Tools > Fix Project Properties

Aps as propriedades de todos os projetos terem sido corrigidas:


Project > Clean... > All projects > OK.

Activity e Intent
Aplicao
Ao instalar associada a um usurio nico Roda em seu processo separado

Classe View
Classe base para elementos de interface grfica

Classe Activity
Container de elemento grficos Gerencia um ciclo de vida

Task (tarefa)
Pilha de Activity's Pode haver activity`s de diferentes aplicaes

Classe Intent
Classe que descreve uma inteno em realizar uma ao
22

Ciclo de vida de uma Activity

23

Ciclo de vida
Entire Lifetime Fase entre o incio e o fim da activity Compreende mtodos entre onCreate() e onDestroy() Visible Lifetime Activity iniciada e na pilha da tarefa interagindo com o usurio ou no. Compreende os mtodos (callbacks): onStart(), onStop(), onRestart() onPause(), onResume() Foreground Lifetime Activity visvel e em primeiro interagindo com o usurio Callbacks: onResume(), onPause()

24

Botes Home e Back


Boto Home
Coloca a tarefa da activity em background e retorna

para a tela inicial do Android

Boto Back
Remove Activity do topo da pilha da tarefa Caso a pilha fique vazia retorna para a tela inicial

Exerccio 3
Ciclo de vida: 03-ActivityLifeCycle

25

Como chamar Activity's


Para iniciar uma Activity necessrio
Criar uma Intent Chamar startActivity ou startActivityForResult Pegar resultado se necessrio

Criao da Intent
Na mesma aplicao: new Intent(context, class) context - instncia da Activity chamadora class - <activity a ser iniciada>.class Nativas do sistema Android: new Intent(action, uri) action - uma das aes possiveis uri - identificador de recurso De outra aplicao: Intent.setComponent(...)
26

Tabela de possveis aes (Intent)


Action
ACTION_VIEW
ACTION_VIEW ACTION_VIEW

URI - chamar Uri.parse(uri)


http://www.gmail.com content://com.android.contacts/contacts/1 geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro tel:12345678 tel:12345678

Descrio
Abre browser na pgina

Mostra contato solicitado Busca no Google Maps


Liga para o nmero Apenas disca o nmero Abre lista de contatos do celular

ACTION_CALL
ACTION_DIAL ACTION_PICK

Contacts.CONTENT_URI

27

Como chamar Activity's


Mtodo startActivity(Intent) Chamar e pegar retorno
Mtodo startActivityForResult(Intent, int requestCode) Antes de terminar, a activity chamada deve chamar setResult(int resultCode) setResult(int resultCode, Intent data)
resultCode - RESULT_CANCELED ou RESULT_OK data - dados adicionais a serem retornados

A activity chamadora deve implementar o mtodo onActivityResult(int requestCode, int resultCode, Intent data)
28

Como chamar Activity's


Chamar Activity em outra aplicacao:
Intent intent = new Intent(); intent.setComponent(new ComponentName( "com.example.helloworld", "com.example.helloworld.HelloWorld")); startActivity(intent);

Chamar Activity nativa do Android:


Uri uri = Uri.parse("http://www.gmail.com"); Intent intent = new Intent(Intent.ACTION_VIEW, uri); startActivity(intent);

29

Passagem de parmetros para Activity


Mtodos da classe Intent para armazenar dados estendidos

putExtra(String nome, int valor) putExtra(String nome, int [] valor) putExtra(String nome, float valor), etc putExtra(String nome, String valor) putExtra(String nome, Bundle bundle) putExtras(Bundle) putExtras(Intent)

Classe Bundle
mapa de pares chave-valor
30

Passagem de parmetros para Activity


Para pegar estes dados estendidos
String getStringExtra(String nome) int getIntExtra(String nome, int defaultValue) Bundle getExtras()

Notas sobre o argumento nome


Indicam o nome da chave Recomendvel prefixar com o pacote da aplicao para

evitar sobrescrever dados

31

Como chamar Activity's e pegar retorno


Chamar Activity (em algum mtodo da Activity chamadora)
// REQUEST_CODE uma constante definida pela activity // chamadora e identifica esta chamada Intent intent = new Intent(this, Activity2.class); intent.putExtra("com.example.hello.Param1", "Hello"); startActivityForResult(intent, REQUEST_CODE);

Pegar retorno(mtodo dentro da Activity chamadora)


protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); if (requestCode == REQUEST_CODE) if (resultCode == RESULT_OK) { // pode usar data.getStringExtra(...), etc } else (resultCode == RESULT_CANCELED) { // ao para cancelado } }

32

Lendo parmetros e retornando dados


Na Activity chamada:
Pegar parmetros passados
public void onCreate(Bundle savedInstanceState) { // ... Intent intent = this.getIntent(); String nome = ... String textParam = intent.getStringExtra(nome); // ... }

Retornando dados
Intent intent = new Intent(); intent.putExtra("chave", "valor"); setResult(RESULT_OK, intent); finish();
33

Encerrando Activity's e aplicaes


O mtodo finish()
Encerra a Activity que o chamou

Encerramento da aplicao
Quando a ltima Activity da pilha (Task) da aplicao

termina, a aplicao tambm encerrada

34

Criando vrias Activity's na aplicao


Necessrio declarar no AndroidManifest.xml
Tornar Activity visvel para startActivity()
<activity android:name="<nome_da_classe_activy>" />

Tornar Activity executvel pelo menu do Android


<activity android:name="nome_da_classe_activy android:label="nome no menu"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER/> </intent-filter> </activity>

35

Interfaces grficas
Viso geral Classe View
A classe para componentes visuais Desenha na tela atravs do mtodo onDraw(Canvas)

Widgets
Componentes visuais simples Subclasses de View TextView, EditText, ImageView, ProgressBar, etc

Classe ViewGroup e Gerenciadores de Layout


Container invisvel que guarda View's Gerencia a disposio destes componentes na tela FrameLayout, LinearLayout, etc

Activity's especializadas
ListActivity, TabActivity, MapActivity
36

Interfaces grficas - Layouts


Opes para definio do layout
Arquivos XML na pasta /res/layout
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <ImageView android:src="@drawable/image" android:id="@+id/imgView" android:layout_width="wrap_content" android:layout_height="wrap_content" /> </FrameLayout>

Via cdigo da API


FrameLayout layout = new FrameLayout(this); LayoutParams params = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); layout.setLayoutParams(params); ImageView imgView = new ImageView(this); params = new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT); imgView.setLayoutParams(params); imgView.setImageResource(R.drawable.image); layout.addView(imgView); setContentView(layout);

37

Como referenciar recursos no XML


Drawable:
android:src="@drawable/nome_drawable"

Identificadores:
Definio: android:id="@+id/identificador" Referncia: android:layout_below="@id/identificador"

Strings:
android:text="@string/nome_string"

Cores:
Forma direta: android:textColor="#RRGGBB" Forma indireat: android:textColor="@color/nome_cor"

Estilos:
style="@style/nome_estilo

Tipos de recursos ainda no abordados sero apresentados quando necessrio

38

Interfaces grficas - Layouts


FrameLayout
Componentes so organizados em pilha O ltimo componente adicionado aparece na frente

Atributos

39

Interfaces grficas - Layouts


LinearLayout
Componentes so organizados lado a lado Orientao horizontal (padro) ou vertical

Atributos

40

Interfaces grficas - Layouts


TableLayout
Organiza componentes em linhas e colunas Cada linha um TableRow (subclase de LinearLayout)

Atributos

41

Interfaces grficas - Layouts


RelativeLayout Posiciona componentes relativamente a outros Componentes precisam ser identificados:
android:id="@+id/id_componente"

Atributos

42

Interfaces grficas - Layouts


AbsoluteLayout
Permite controlar posio exata dos componentes Pode gerar pssimos resultados em diferentes telas

Atributos

43

Dimenses
Dimenso px (pixels) in (polegadas) mm (milmetros) pt (pontos) Descrio Corresponde aos pixels reais da tela Baseado no tamanho fsico da tela Baseado no tamanho fsico da tela 1 pt = 1/72 in. Tambm baseado no tamanho fsico

dp/dip Unidade abstrata baseada na densidade fsica da tela, onde 160 dp = (Density-independent Pixels) 1 in = 25.4 mm. Mantm sempre o mesmo tamanho real, independente da densidade. Exemplo: 0.5 in = 12.7 mm = 80 dp. Em 160 dpi, 80 dp = 80 px, j em 240 dpi, 80 dp = 120 px. Para fazer converso entre pixels e dps use o seguinte cdigo:
DisplayMetrics metrics = getResources().getDisplayMetrics(); pixels = dps * (metrics.densityDpi / 160.0);

sp (Scale-independent Pixels)

Semelhante ao dp/dip, mas tambm escalado pelo tamanho de fonte nas preferncias do usurio. Recomendvel para especificar tamanhos de fonte pois elas sero ajustadas tanto para densidade da tela quanto para as preferncias do usurios.
44

Outras subclasses de ViewGroup


ListView Permite rolar contedo verticalmente usando ListAdapter GridView apresenta o contedo na forma de grade WebView exibe pginas Web Gallery e ImageSwitcher Organiza componentes lado a lado na horizontal Usado com ImageSwitcher para exibir galeria de imagens ScrollView permite rolar contedo maior que tela verticalmente TabHost exibe tela com abas E outros

45

ListView
Permite rolar contedo verticalmente e selecionar Interface ListAdapter
Faz a ligao entre ListView e seus elementos Implementado pela classe ArrayAdapter <T> new ArrayAdapter<String>(contexto, itemResId, items);
itemResId pode ser android.R.layout.simple_list_item_1 items = array de Ts, neste caso Strings

Atributos

46

ListView
Maneira simplificada de uso: Coloque um elemento <ListView> com id no XML de layout Crie um array de elementos de um tipo T Obtenha o objeto ListView usando Activity.findViewById(id) Crie um ArrayAdapter passando o array de Ts Adicione o ArrayAdapter ao ListView usando ListView.setAdapter(..) Implemente o mtodo onItemClick(...) de OnItemClickListener Passe a instncia da classe que implementa onItemClick para ListView.setOnItemClickListener(...) Parmetros de OnItemClickListener.onItemClick(...) AdapterView <?> parent - referncia para o ListView View view - a View dentro de parent que foi clicada int position - a posio da View no ArrayAdapter, i.e., o ndice do array int id - o id do elemento, neste caso ser igual a position 47

GridView
Exibe Views na forma de grade Todas as colunas tm a mesma largura Faz scrolling do contedo

Atributos

Exerccio 9
http://developer.android.com/resources/tutorials/views/hello-gridview.html
48

WebView e WebSettings
WebView
Apresenta uma pgina de web Usa o mesmo componente que o navegador do celular Necessrio permisso android.permission.INTERNET

WebSettings
Permite configurar o WebView Permite JavaScript, Salvar senhas, etc.

Mtodos principais

49

Gallery e ImageSwitcher
Gallery
Mostra lista de componentes com rolagem horizontal Mantm o componente selecionado sempre no centro

ImageSwitcher
Exibe imagens e cria efeitos ao altern-las

50

Interfaces grficas - Recursos


Na pasta values possvel adicionar XML de vrios recursos

Strings Cores Dimenses Array


listas de inteiros, strings, ou recursos

Estilos definir atributos de cada View uma nica vez Temas aplicao de estilos a toda activity ou aplicao
51

Interfaces grficas - Recursos


Strings Declarao XML: <string name=appname">Nome Aplicao</string> Atributos XML: @strings/appname Identificador: R.string.appname Texto: getResources().getString(R.string.appname) Cores Declarao XML: <color name="red">#FF0000</color> Atributos XML: @color/red Identificador: R.color.red Cor: getResources().getColor(R.color.red) Dimenses Declarao XML: <dimen name="spacing">2px</dimen> Atributos XML: @dimen/spacing Identificador: R.dimen.spacing
52

Interfaces grficas - Recursos


Array no XML
<integer-array name="iArray"> <item>10</item> <item>20</item> <item>30</item> </integer-array> <array name="planets"> <item>@drawable/mercurio</item> <item>@drawable/venus</item> ... <item>@drawable/plutao</item> </array> <string-array name="sArray"> <item>texto1</item> <item>texto2</item> Resources res = getResources(); ... String [] sa = res.getStringArray(R.array.sArray); </string-array> int [] ia = res.getIntArray(R.array.iArray);

No cdigo Java

int id = R.array.planets; TypedArray da = res.obtainTypedArray(id); Drawable dw0 = array.getDrawable(0); Drawable dw1 = array.getDrawable(1);

53

Interfaces grficas - Recursos


Estilos
<style name="nome_estilo"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> ... </style> <TextView android:layout_width="wrap_content" ... style="@style/nome_estilo" />

Temas
<style name="nome_estilo" parent="android:style/Theme.Black"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> ... </style> <application ... android:theme="@android:style/Theme.Back"> <activity ... android:theme="@android:style/Theme.Back"> <application ... android:theme="@style/nome_estilo"> <activity ... android:theme="@style/nome_estilo">

54

Interfaces grficas - Exemplo recursos


<?xml version="1.0" encoding="utf-8"?> <resources> <array name="planets"> <item>@drawable/mercurio</item> <item>@drawable/venus</item> ... <item>@drawable/plutao</item> </array> <string-array name="sarray"> <item>texto1</item> ... </string-array> <color name="branco">#FFFFFF</color> <style name="nome_estilo" parent="android:style/Theme.Black"> <item name="android:textSize">14sp</item> <item name="android:background">@color/branco</item> ... </style> <dimen name="spacing">80dip</dimen> <drawable name="gray">#888888</drawable> </resources>

/res/values/recurso.xml

55

Interfaces grficas - Widgets


View TextView EditText AutoCompleteTextView Button ImageButton CheckBox ToggleButton RadioButton e RadioGroup Spinner (combo) DatePicker TimePicker

ProgressBar RatingBar
Toast Dialogs ProgressDialog Alertas

AnalogClock DigitalClock Chronometer

Menus e Submenus LayoutInflater TabActivity e TabWidget ListView e ListActivity

56

Interfaces grficas - View


Classe base para qualquer componente grfico Atributos android:padding(Left, Right, Top, Bottom)="2px" android:background="@color/blue|#RRGGBB" android:id="@+id/identificador" android:visibility="visible | invisible | gone" android:layout_width="wrap_content | match_parent" android:layout_height="wrap_content | match_parent" Mtodos invalidate() - invalida View para ser redesenhada onDraw(Canvas) - responsvel por desenhar componente onKeyDown(...), onKeyUp() - chamados quando uma tecla e pressione ou solta. onTouchEvent(...) - quando h movimento por toque na tela onFocusChange(...)

57

Interface grfica - TextView's


TextView - apresenta texto na tela EditText - apresenta caixa de edio de texto AutoCompleteTextView - caixa de edio com auto-complete Atributos

android:text="@string/..." android:textColor="@color/..." android:password="true | false" android:numeric="integer | signed | decimal" android:singleLine="true | false" android:lines - quantas linhas de texto de altura

AutoCompleteTextView
android:completionThreshold="3" - quantidade de caracteres digitados antes aparecer sugestes setAdapter(ArrayAdapter) - definir lista de opes

58

TextView's Exerccio 12
Crie um projeto chamado TesteViews Crie /res/layout/texts.xml
Crie TextView, EditText e

AutoCompleteTextView EditText - aceita um nmero indicando quantos caracteres disparam as sugestes AutoCompleteTextView com completionThreshold="1"

Crie /res/values/arrays.xml
Crie um array de nomes iniciando por letras parecidas

Na activity carregue o layout e o array


Configure AutoCompleteTextView para usar o array Dica: use ArrayAdapter Detecte quando EditText for alterado e chame

AutoCompleteTextView.setThreashold(int)

59

Button e ImageButton
Permitem criar botes clicveis na tela Button - subclasse de TextView ImageButton - subclasse de ImageView Setando imagem via Java e XML imageButton.setImageResource(R.drawable.image_id) button.setCompoundDrawablesWithIntrinsicBounds(left,top,right,bottom) <ImageButton android:src="@drawable/..." ... /> <Button android:drawableLeft="@drawable/..." android:drawableTop="..." android:drawableRight="..." android:drawableBottom="..." ... />

Detectando clique:
final Button button = (Button) findViewById(R.id.button_id); button.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { // Perform action on click } });

60

CheckBox e ToggleButton
Boto de dois estados, que permite marcar um item na tela CheckBox android:text="@string/..." ToggleButton android:textOn="@string/..." android:textOff="@string/..." Mtodos boolean isChecked() - retorna estado void toggle() - alterna estado void setChecked(boolean) - define estado boolen performClick() - simula click chamando o mtodo onClick(..) do OnClickListener associado

61

RadioButton e RadioGroup
RadioButton
Permite selecionar apenas um item dentro da lista de

um RadioGroup

Exemplo
<RadioGroup android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal" android:id="@+id/group1"> <RadioButton android:id="@+id/radioSim" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Sim" android:checked="false" /> <RadioButton android:id="@+id/radioNao" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="No" android:checked="false"/> </RadioGroup>
62

RadioButton e RadioGroup
Pegar id do RadioButton selecionado
RadioGroup.getCheckedRadioButtonId() Ou usar o callback onCheckedChanged(...)
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.radiobutton);
final RadioGroup group = (RadioGroup) findViewById(R.id.group1); group.setOnCheckedChangeListener(new RadioGroup.OnCheckedChangeListener() { public void onCheckedChanged(RadioGroup group, int checkedId) { // Note que: checkedId == group.getCheckedRadioButtonId() boolean sim = R.id.radioSim == checkedId; boolean nao = R.id.radioNao == checkedId; if (sim) { // } else if (nao) { // } } }); }
63

Spinner (combo)
Exibe um componente com texto que ao ser clicado expande um lista de opes Exemplo /res/layout/spinner.xml
<?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"> <Spinner android:id="@+id/comboPlanetas" android:layout_width="match_parent" android:layout_height="wrap_content" android:prompt="Planetas" /> <ImageView android:id="@+id/img" android:layout_width="match_parent" android:layout_height="match_parent" /> </LinearLayout>

64

Spinner (combo)
Exemplo SpinnerActivity.java (trechos)
Definir a lista de opes e seus layouts
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this, R.layout.spinner_textview, getResources().getStringArray(R.array.planetNames)); adapter.setDropDownViewResource(R.layout.simple_textview);
Spinner spinner = (Spinner) findViewById(R.id.comboPlanetas); spinner.setAdapter(adapter);

Capturar seleo do usurio


spinner.setOnItemSelectedListener(new OnItemSelectedListener() { @Override public void onItemSelected(AdapterView<?> parent, View v, int position, long id) { // ao } @Override public void onNothingSelected(AdapterView<?> arg0) { }

});

65

Spinner (combo)
Exemplo dos layouts adicionais
/res/layout/spinner_textview.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@android:color/transparent" android:textColor="@color/vermelho" android:padding="2px" android:textSize="18sp" />

/res/layout/simple_textview.xml
<?xml version="1.0" encoding="utf-8"?> <TextView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/azul" android:textColor="@color/branco" android:padding="10px" android:textSize="20sp" />
66

Spinner (combo)

Exerccio: pegar o exemplo, entender e alterar


67

Spinner (combo)
Outros mtodos Object getSelectedItem()
retorna o item selecionado

long getSelectedItemId()
retorna o id do item selecionado

int getSelectedItemPosition()
retorna a posio do item selecionado no array fornecido para ArrayAdapter

void setPrompt(String)
determina o prompt da lista de opes

void setPromptId(int resId)


determina o prompt a partir de um R.string.id_string

void setSelection(int position)


determina o item atualmente selecionado
68

Clock e Chronometer
AnalogClock e DigitalClock
Exibem um relgio digital ou analgico com a hora atual

Chronometer
Exibe um contador de tempo setBase(long time) Define o instante de tempo que o cronometro marca zero Usar SystemClock.elapsedRealtime() start(), stop() Disparar ou interromper contagem setOnChronometerTickListener(Chronometer.OnChron

ometerTickListener)
Chamado pelo cronmetro quando seu contador muda
69

Clock e Chronometer - Exemplo


/res/layout/clock.xml
<?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" > <AnalogClock android:id="@+id/analogClock1" android:layout_width="match_parent" android:layout_height="wrap_content" android:gravity="center_horizontal" /> <DigitalClock android:id="@+id/digitalClock1" android:layout_width="match_parent android:layout_height="wrap_content" android:gravity="center_horizontal" /> <Chronometer android:id="@+id/chronometer1" android:layout_width="match_parent android:layout_height="wrap_content android:gravity="center_horizontal" />

</LinearLayout>

70

Clock e Chronometer - Exemplo


Em uma activity:
protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.clock); Chronometer chrono = (Chronometer) findViewById(R.id.chronometer1); chrono.setBase(SystemClock.elapsedRealtime()); chrono.setOnChronometerTickListener( new OnChronometerTickListener() { @Override public void onChronometerTick(Chronometer chronometer) { long elapsedTime = SystemClock.elapsedRealtime() - chronometer.getBase(); Log.i(this.getClass().getName(), "" + elapsedTime); if (elapsedTime > 10000) chronometer.stop(); } }); chrono.start();

71

Escolha de data, horrio


TimePicker

Selecionar horrio do dia (24h ou AM/PM) Aceita horas e minutos, mas no segundos Integer getCurrentHour(), getCurrentMinute() setIs24HourView(boolean), boolean is24HourView() setCurrentHour(Integer), setCurrentMinute(Integer) setOnTimeChangedListener(OnTimeChangedListener) Selecionar um data (dia, ms, ano) int getDayOfMonth(), getMonth(), getYear() init(ano, ms, dia, OnDateChangeListener) updateDate(ano, ms, dia)

DatePicker

72

Escolha de data, horrio - Exemplo


<?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"> <DatePicker android:id="@+id/dtpicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> <TimePicker android:id="@+id/tmpicker" android:layout_width="wrap_content" android:layout_height="wrap_content"/> </LinearLayout>
73

ProgressBar
Exibe um indicador de progresso de uma operao Estilos como percentual ou indeterminado Estilos (atributo style no XML):
?android:progressBarStyle (padro) Indeterminado circular de tamanho mdio

?android:progressBarStyleSmall
?android:progressBarStyleLarge ?android:progressBarStyleHorizontal

Indeterminado circular de tamanho pequeno


Indeterminado circular de tamanho grande Barra horizontal indeterminado ou com percentual

Mtodos
setProgress(int)
setSecondaryProgress(int) boolean isIndeterminate()

Determina o nvel de progresso para uma barra percentual


Determina o nvel secundrio de progresso para uma barra percentual Retorna true se for indeterminado
74

ProgressBar - Exemplo
<ProgressBar style="?android:progressBarStyleSmall" android:layout_width="wrap_content android:layout_height="wrap_content" /> <ProgressBar style="?android:progressBarStyle" android:layout_width="wrap_content android:layout_height="wrap_content" /> <ProgressBar style="?android:progressBarStyleLarge" android:layout_width="wrap_content android:layout_height="wrap_content" />

<ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="true" />


<ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="false" android:progress="45" /> <ProgressBar style="?android:progressBarStyleHorizontal" android:layout_width="match_parent" android:layout_height="wrap_content" android:indeterminate="false" android:progress="45" android:secondaryProgress="80" /> 75

RatingBar
Mostra uma barra de classificao com estrelas A barra pode ser interativa ou apenas um indicator Mtodos
int getNumStars() float getRating() float getStepSize() boolean isIndicator() void setRating(float rating) Retorna quantidade de estrelas totais Retorna a classificao (nota) Retorna o tamanho de cada salto das notas Retorna true se for indicadora ou false se for interativa Determina a classificao

Estilos
?android:ratingBarStyle (default) Exibe estrelas grandes e permite alterao da classificao. Pode-se usar isIndicator=true para ser apenas um indicador. Exibe estrelas pequenas. Apenas indicador. Exibe estrelas mdias. Apenas indicador.
76

?android:ratingBarStyleSmall ?android:ratingBarStyleIndicator

RatingBar
<RatingBar style="?android:ratingBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize=".5" android:rating="2.5" />

<RatingBar style="?android:ratingBarStyle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="5" android:stepSize=".5" android:rating="2.5" android:isIndicator="true" />


<RatingBar style="?android:ratingBarStyleSmall" android:layout_width="wrap_content" android:layout_height="wrap_content" android:numStars="10" android:stepSize=".5" android:rating="2.5" /> <RatingBar style="?android:ratingBarStyleIndicator" android:layout_width="wrap_content android:layout_height="wrap_content" android:numStars="6" android:stepSize=".5" android:rating="2.5" />
77

Toast
Exibio de alertas por tempo determinado

Sem interao com usurio


View personalizada
Toast toast = new Toast(this); toast.setDuration(Toast.LENGTH_LONG); toast.setView(view); toast.show();

Apenas mensagem de texto


Toast.makeText(this, Mensagem, Toast.LENGTH_SHORT).show();
78

Dialogs
Usado para abrir janelas na tela Recomendado usar os mtodos a seguir para que a Activity gerencie o ciclo de vida do Dialog.
boolean showDialog(int id, Bundle) Tenta mostrar o Dialog para o id chamando onCreateDialog() se necessrio, e em seguida onPrepareDialog(). Retorna true em caso de sucesso. Fecha o Dialog criado por showDialog() com o id especificado. Se nenhum Dialog com o id tiver sido mostrado lana IllegalArgumentException. Remove qualquer referncia para o Dialog especificado. Caso esteja sendo exibido, ele fechado antes.

void dismissDialog(int id)

void removeDialog(int id)

Dialog onCreateDialog (id, Bundle)


void onPrepareDialog(id, Dialog, Bundle)

Callback chamado quando um Dialog deve ser criado para o id especificado. Implementado pelo desenvolver.
Callback que permite que o Dialog seja preparado antes de ser apresentado. Por exemplo, configurar alguma varavel.
79

ProgressDialog
Janela para mostrar o progresso de uma operao Como usar sem os mtodos anteriores
Mostrar o Dialog
dialog = ProgressDialog.show(contexto, titulo, msg, bool indet); indet = se indeterminado ou no (percentual)

Feche o Dialog, quando concluir


dialog.dismiss();

Alterar o progresso (se indet = true)


dialog.setProgress(int v) v entre 0 e 10000
80

AlertDialog
Exibe um alerta ao usurio Contedo e botes de escolha personalizados Classe AlertDialog.Builder para construir alertas
setIcon(int resId) setTitle(String) setMessage(String) setPositiveButton(String, listener) Determina o cone a ser mostrado Determina o ttulo do alerta Mensagem a ser mostrada no interior do alerta Texto do boto positivo (Sim, Yes, Ok, etc)

setNegativeButton(String, listener) setItems(String [], listener) setSingleChoiceItems(String [], int checkedItem, listener)
setCancelable(boolean) show() cancel()

Texto do boto negativo (No, No, etc) Items a serem mostrados para usurio selecionar Determina lista de RadioButtons a serem mostrados ao usurio
Alerta cancelvel ou no. Cancelvel significa que usurio no pode fechar com boto voltar. Exibe o alerta para o usurio Cancela o alerta
81

Nota: listener uma instncia de DialogInterface.OnClickListener

AlertDialog - Exemplos
AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setMessage("Are you sure you want to exit?"); builder.setCancelable(false); builder.setPositiveButton("Yes", ...); builder.setNegativeButton("No, ...); AlertDialog alert = builder.create();

CharSequence[] items = {"Red", "Green", "Blue"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setTitle("Pick a color"); builder.setItems(items, new DialogInterface.OnClickListener() { ... } ); builder.show();

82

Menus e Submenus
possvel criar menus e um submenu para cada menu So exibidos quando a tecla Menu apertada Devem ser criados em Activity.onCreateOptionsMenu()
public boolean onCreateOptionsMenu(Menu menu) { super.onCreateOptionsMenu(menu); MenuItem item = menu.add(0, NOVO, 0, Novo); item = menu.add(0, ABRIR, 0, Abrir); item = menu.add(0, SALVAR, 0, Salvar); SubMenu submenu = menu.addSubMenu(Outros); item = submenu.add(0, PESQUISAR, 0, Pesquisar); item = submenu.add(0, LIMPAR, 0, Limpar); item = submenu.add(0, SAIR, 0, Sair); return true; }

As constantes ABRIR, SALVAR, etc so definidas pelo

desenvolvedor Retorne true para que o menu seja mostrado

83

MenuItems
Representa um item selecionvel de menu Mtodos
setEnabled(boolean) setVisible(boolean) setTitle(int) setTitle(String) setIcon(int) setIcon(Drawable) int getItemId() Determina se o item selecionvel ou no Determina se o item visvel ou no Define o texto que aparece no item Define o cone que aparece no item Retorna o id do item conforme Menu.add()

Quando um item selecionado pelo usurio o mtodo boolean onOptionsItemSelected (MenuItem) chamado
Compare o id usando MenuItem.getItemId()
84

LayoutInflater
Constri hierarquia de uma View a partir de um layout Exemplo
LayoutInflater inflater = (LayoutInflater) getSystemService(Context.LAYOUT_INFLATER_SERVICE); View view = inflater.inflate(resId, null); // Agora possvel passar para um Toast e exibir na tela Toast toast = new Toast(this); toast.setView(view); toast.setDuration(Toast.LENGTH_SHORT); toast.show();

85

ListActivity
Cria uma activity que mostra uma lista de itens Simplifica codificao Java Evita criao de XML de layout
Apenas listas personalizadas precisariam

Mtodos adicionais em relao activity:


void setListAdapter(ListAdapter) Determina o adaptador que fornece os items e layout

ListAdapter getListAdapter()
ListView getListView()

Retorna o adaptador atual


Retorna o objeto ListView utilizado pela ListActivity

void onListItemClick(ListView, View, int pos, long id)

Callback chamado quando um item da lista selecionado pelo usurio. A parmetro pos indica a posio do item na lista de item do adaptador.

86

TabActivity
Usada para criar telas com abas Cada aba fica associada a uma activity ou view Etapas de uso:
Herde de TabActivity No mtodo onCreate() Obtenha o objeto TabHost usando getTabHost() Para cada aba a ser criada
Obtenha um objeto TabSpec chamando

TabHost.newTabSpec(String tag) TabSpec.setIndicator() para definir o titulo e/ou imagem TabSpec.setContent() para definir o contedo da aba TabHost.addTab(TabSpec) para adicionar a aba
87

TabActivity
A classe TabSpec possui variantes em seus mtodos:
setContent(int viewId) setContent(Intent) setContent(TabContentFactory) Especifica o id da View que deve ser usada como o contedo da aba. Especifica a Intent que deve ser usada para iniciar uma activity que ser o contedo da aba. Especifica um TabHost.TabContentFactory que ser responsvel por criar o contedo da aba.

setIndicator(String)
setIndicator(View) setIndicator(String, Drawable)

Especifica apenas um texto como indicador da aba.


Especifica uma View como indicador da aba. Especifica um texto e um cone como indicador da aba.

88

Agenda das prximas aulas


Intent filter BroadcastReceiver, Services e Notification AlarmManager e Handler Banco de Dados e ContentProvider Mapas e GPS Sockets e Web Services Projeto

89

Você também pode gostar