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

Log.d(tag, message)

Info

Log.i(tag, message)

Warning

Log.w(tag, message)

Error

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

URI - chamar Uri.parse(uri)

Descrio

ACTION_VIEW

http://www.gmail.com

Abre browser na
pgina

ACTION_VIEW

content://com.android.contacts/contacts/1

Mostra contato
solicitado

ACTION_VIEW

geo:0,0?q=Presidente+Vargas,Rio+de+Janeiro

Busca no Google
Maps

ACTION_CALL

tel:12345678

Liga para o nmero

ACTION_DIAL

tel:12345678

Apenas disca o
nmero

ACTION_PICK

Contacts.CONTENT_URI

Abre lista de contatos


do celular

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

Descrio

px (pixels)

Corresponde aos pixels reais da tela

in (polegadas)

Baseado no tamanho fsico da tela

mm (milmetros)

Baseado no tamanho fsico da tela

pt (pontos)

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>

/res/values/recurso.xml

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

55

Interfaces grficas - Widgets

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

AnalogClock
DigitalClock
Chronometer

DatePicker
TimePicker

ProgressBar
RatingBar

Toast
Dialogs
ProgressDialog
Alertas

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)

DatePicker

Selecionar um data (dia, ms, ano)


int getDayOfMonth(), getMonth(), getYear()
init(ano, ms, dia, OnDateChangeListener)
updateDate(ano, ms, dia)

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

Indeterminado circular de tamanho pequeno

?android:progressBarStyleLarge

Indeterminado circular de tamanho grande

?android:progressBarStyleHorizontal

Barra horizontal indeterminado ou com percentual

Mtodos
setProgress(int)

Determina o nvel de progresso para uma barra percentual

setSecondaryProgress(int)

Determina o nvel secundrio de progresso para uma barra


percentual

boolean isIndeterminate()

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

Retorna quantidade de estrelas totais

float getRating()

Retorna a classificao (nota)

float getStepSize()

Retorna o tamanho de cada salto das notas

boolean isIndicator()

Retorna true se for indicadora ou false se for interativa

void setRating(float rating)

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.

?android:ratingBarStyleSmall

Exibe estrelas pequenas. Apenas indicador.

?android:ratingBarStyleIndicator

Exibe estrelas mdias. Apenas indicador.


76

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.

void dismissDialog(int id)

Fecha o Dialog criado por showDialog() com o id


especificado. Se nenhum Dialog com o id tiver sido
mostrado lana IllegalArgumentException.

void removeDialog(int id)

Remove qualquer referncia para o Dialog especificado.


Caso esteja sendo exibido, ele fechado antes.

Dialog onCreateDialog (id, Bundle)

Callback chamado quando um Dialog deve ser criado


para o id especificado. Implementado pelo desenvolver.

void onPrepareDialog(id, Dialog,


Bundle)

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)

Determina o cone a ser mostrado

setTitle(String)

Determina o ttulo do alerta

setMessage(String)

Mensagem a ser mostrada no interior do alerta

setPositiveButton(String, listener)

Texto do boto positivo (Sim, Yes, Ok, etc)

setNegativeButton(String, listener)

Texto do boto negativo (No, No, etc)

setItems(String [], listener)

Items a serem mostrados para usurio selecionar

setSingleChoiceItems(String [], int


checkedItem, listener)

Determina lista de RadioButtons a serem mostrados ao


usurio

setCancelable(boolean)

Alerta cancelvel ou no. Cancelvel significa que usurio


no pode fechar com boto voltar.

show()

Exibe o alerta para o usurio

cancel()

Cancela o alerta

Nota: listener uma instncia de DialogInterface.OnClickListener

81

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)

Determina se o item selecionvel ou no

setVisible(boolean)

Determina se o item visvel ou no

setTitle(int)
setTitle(String)

Define o texto que aparece no item

setIcon(int)
setIcon(Drawable)

Define o cone que aparece no item

int getItemId()

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

Retorna o adaptador atual

ListView getListView()

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)

Especifica o id da View que deve ser usada como o contedo


da aba.

setContent(Intent)

Especifica a Intent que deve ser usada para iniciar uma


activity que ser o contedo da aba.

setContent(TabContentFactory)

Especifica um TabHost.TabContentFactory que ser


responsvel por criar o contedo da aba.

setIndicator(String)

Especifica apenas um texto como indicador da aba.

setIndicator(View)

Especifica uma View como indicador da aba.

setIndicator(String, Drawable)

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