Professional Documents
Culture Documents
Fevereiro de 2011
2
Agenda da Aula 1
Introdução
Conceitos básicos
Activity e Intent
Aplicações e tarefas
Ciclo de vida
Passagem e retorno de parâmetros
Interface gráficas
Layouts
Views
Dialogs
Menus
3
Introdução
Suportado pelo Google
Sistema Operacional Linux
Máquina Virtual Dalvik
Código aberto e livre com boa documentação
5
Download das plataformas
6
Configuração do ambiente
Android Virtual Devices (AVD)
Permite configurar um celular virtual
Versão do Android, Tamanho da tela e memória
Emulador
Programa que permite rodar um AVD no computador
Exercício 1:
Criar um AVD usando SDK Manager
• No SDK Manager: Virtual Devices > New
• Preencher campos Name, Target e SD Card Size
(128MiB).
7
Criação do AVD
8
Plugin para Eclipse (ADT)
Permite criação e execução de projetos Android
Instalação
No Eclipse: Help > Install New Software > Add
URL: https://dl-ssl.google.com/android/eclipse/
Configuração
Window > Preferentes > Android
Em "SDK Location" coloque o path do SDK
Exercício 2:
Criar uma aplicação Hello World básica com o Wizard
e rodar no emulador (não precisa programar).
9
Criação de projeto
New > Other > Android > Android Project
Preencha os campos conforme a próxima figura
Clique em Finish
No Package Explorer, clique com o botão direito sobre
o novo projeto
Selecione Run as > Android Aplication
O emulador será iniciado e após alguns minutos a
aplicação rodará apresentando o título "Hello World.
10
Criação 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 aplicação.
Create Activity
O nome da classe que
representa a tela inicial da
aplicação.
11
Detalhes e dicas
Não é necessário fechar o emulador após testar a
aplicação
Para executar o mesmo projeto após uma alteração não
é necessário fechar e reabrir o emulador, basta clicar
em Run.
O mesmo vale para outros projetos.
No entanto, em alguns poucos casos, pode ser preciso
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>
/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
Não existe System.out.println(), mas existe o LogCat
LogCat permite escrever mensagens no Log do
Android
Níveis 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)
23
Ciclo de vida
Entire Lifetime
Fase entre o início e o fim da activity
Compreende métodos entre onCreate() e onDestroy()
Visible Lifetime
Activity iniciada e na pilha da tarefa interagindo com o
usuário ou não.
Compreende os métodos (callbacks):
• onStart(), onStop(), onRestart()
• onPause(), onResume()
Foreground Lifetime
Activity visível e em primeiro interagindo com o usuário
Callbacks:
• onResume(), onPause() 24
Botões Home e Back
Botão Home
Coloca a tarefa da activity em background e retorna
para a tela inicial do Android
Botão Back
Remove Activity do topo da pilha da tarefa
Caso a pilha fique vazia retorna para a tela inicial
Exercício 3
Ciclo de vida: 03-ActivityLifeCycle
25
Como chamar Activity's
Para iniciar uma Activity é necessário
Criar uma Intent
Chamar startActivity ou startActivityForResult
Pegar resultado se necessário
Criação da Intent
Na mesma aplicação: new Intent(context, class)
• context - instância da Activity chamadora
• class - <activity a ser iniciada>.class
Nativas do sistema Android: new Intent(action, uri)
• action - uma das ações possiveis
• uri - identificador de recurso
De outra aplicação: Intent.setComponent(...)
26
Tabela de possíveis ações (Intent)
27
Como chamar Activity's
Método startActivity(Intent)
Chamar e pegar retorno
Método 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 método
• 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);
29
Passagem de parâmetros para Activity
Métodos 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 parâmetros para Activity
Para pegar estes dados estendidos
String getStringExtra(String nome)
int getIntExtra(String nome, int defaultValue)
Bundle getExtras()
31
Como chamar Activity's e pegar retorno
Chamar Activity (em algum método 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);
Retornando dados
Intent intent = new Intent();
intent.putExtra("chave", "valor");
setResult(RESULT_OK, intent);
finish();
33
Encerrando Activity's e aplicações
O método finish()
Encerra a Activity que o chamou
Encerramento da aplicação
Quando a última Activity da pilha (Task) da aplicação
termina, a aplicação também é encerrada
34
Criando várias Activity's na aplicação
Necessário declarar no AndroidManifest.xml
Tornar Activity visível para startActivity()
<activity android:name="<nome_da_classe_activy>" />
35
Interfaces gráficas
Visão geral
Classe View
• A classe para componentes visuais
• Desenha na tela através do método onDraw(Canvas)
Widgets
• Componentes visuais simples
• Subclasses de View
• TextView, EditText, ImageView, ProgressBar, etc
Classe ViewGroup e Gerenciadores de Layout
• Container invisível que guarda View's
• Gerencia a disposição destes componentes na tela
• FrameLayout, LinearLayout, etc
Activity's especializadas
• ListActivity, TabActivity, MapActivity 36
Interfaces gráficas - Layouts
Opções para definição 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>
Atributos
39
Interfaces gráficas - Layouts
LinearLayout
Componentes são organizados lado a lado
Orientação horizontal (padrão) ou vertical
Atributos
40
Interfaces gráficas - Layouts
TableLayout
Organiza componentes em linhas e colunas
Cada linha é um TableRow (subclase de LinearLayout)
Atributos
41
Interfaces gráficas - Layouts
RelativeLayout
Posiciona componentes relativamente a outros
Componentes precisam ser identificados:
• android:id="@+id/id_componente"
Atributos
42
Interfaces gráficas - Layouts
AbsoluteLayout
Permite controlar posição exata dos componentes
Pode gerar péssimos resultados em diferentes telas
Atributos
43
Dimensões
Dimensão Descrição
px (pixels) Corresponde aos pixels reais da tela
in (polegadas) Baseado no tamanho físico da tela
mm (milímetros) Baseado no tamanho físico da tela
pt (pontos) 1 pt = 1/72 in. Também baseado no tamanho físico
dp/dip Unidade abstrata baseada na densidade física da tela, onde 160 dp =
(Density-independent Pixels) 1 in = 25.4 mm. Mantém 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 conversão entre pixels e dps use o seguinte código:
DisplayMetrics metrics =
getResources().getDisplayMetrics();
pixels = dps * (metrics.densityDpi / 160.0);
sp Semelhante ao dp/dip, mas também escalado pelo tamanho de fonte
(Scale-independent Pixels) nas preferências do usuário. Recomendável para especificar
tamanhos de fonte pois elas serão ajustadas tanto para densidade da
tela quanto para as preferências do usuários.
44
Outras subclasses de ViewGroup
ListView
Permite rolar conteúdo verticalmente usando ListAdapter
GridView
apresenta o conteúdo na forma de grade
WebView
exibe páginas Web
Gallery e ImageSwitcher
Organiza componentes lado a lado na horizontal
Usado com ImageSwitcher para exibir galeria de imagens
ScrollView
permite rolar conteúdo maior que tela verticalmente
TabHost exibe tela com abas
E outros… 45
ListView
Permite rolar conteúdo verticalmente e selecionar
Interface ListAdapter
Faz a ligação 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 T‟s, 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 T‟s
Adicione o ArrayAdapter ao ListView usando ListView.setAdapter(..)
Implemente o método onItemClick(...) de OnItemClickListener
Passe a instância da classe que implementa onItemClick para
ListView.setOnItemClickListener(...)
Parâmetros de OnItemClickListener.onItemClick(...)
AdapterView <?> parent - referência para o ListView
View view - a View dentro de parent que foi clicada
int position - a posição 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 têm a mesma largura
Faz scrolling do conteúdo
Atributos
Exercício 9
http://developer.android.com/resources/tutorials/views/hello-gridview.html
48
WebView e WebSettings
WebView
Apresenta uma página de web
Usa o mesmo componente que o navegador do celular
Necessário permissão android.permission.INTERNET
WebSettings
Permite configurar o WebView
• Permite JavaScript, Salvar senhas, etc.
Métodos principais
49
Gallery e ImageSwitcher
Gallery
Mostra lista de componentes com rolagem horizontal
Mantém o componente selecionado sempre no centro
ImageSwitcher
Exibe imagens e cria efeitos ao alterná-las
50
Interfaces gráficas - Recursos
Na pasta values é possível adicionar XML de vários
recursos
Strings
Cores
Dimensões
Array
• listas de inteiros, strings, ou recursos
Estilos
• definir atributos de cada View uma única vez
Temas
• aplicação de estilos a toda activity ou aplicação
51
Interfaces gráficas - Recursos
Strings
Declaração XML: <string name=“appname">Nome Aplicação</string>
Atributos XML: @strings/appname
Identificador: R.string.appname
Texto: getResources().getString(R.string.appname)
Cores
Declaração XML: <color name="red">#FF0000</color>
Atributos XML: @color/red
Identificador: R.color.red
Cor: getResources().getColor(R.color.red)
Dimensões
Declaração XML: <dimen name="spacing">2px</dimen>
Atributos XML: @dimen/spacing
Identificador: R.dimen.spacing
52
Interfaces gráficas - 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> No código Java
<item>texto2</item>
... Resources res = getResources();
</string-array> String [] sa = res.getStringArray(R.array.sArray);
int [] ia = res.getIntArray(R.array.iArray);
int id = R.array.planets;
TypedArray da = res.obtainTypedArray(id);
Drawable dw0 = array.getDrawable(0);
Drawable dw1 = array.getDrawable(1); 53
Interfaces gráficas - 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">
<color name="branco">#FFFFFF</color>
<dimen name="spacing">80dip</dimen>
<drawable name="gray">#888888</drawable>
</resources> 55
Interfaces gráficas - Widgets
• View • DatePicker
• TextView • TimePicker
• EditText • ProgressBar
• AutoCompleteTextView • RatingBar
• Button
• Toast
• ImageButton
• Dialogs
• CheckBox
• ProgressDialog
• ToggleButton
• Alertas
• RadioButton e RadioGroup
• Spinner (combo) • Menus e Submenus
• LayoutInflater
• AnalogClock
• TabActivity e TabWidget
• DigitalClock
• ListView e ListActivity
• Chronometer 56
Interfaces gráficas - View
Classe base para qualquer componente gráfico
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"
Métodos
invalidate() - invalida View para ser redesenhada
onDraw(Canvas) - responsável por desenhar componente
onKeyDown(...), onKeyUp() - chamados quando uma tecla e
pressione ou solta.
onTouchEvent(...) - quando há movimento por toque na tela
onFocusChange(...) 57
Interface gráfica - TextView's
TextView - apresenta texto na tela
EditText - apresenta caixa de edição de texto
AutoCompleteTextView - caixa de edição 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 sugestões
setAdapter(ArrayAdapter) - definir lista de opções 58
TextView's – Exercício 12
Crie um projeto chamado TesteViews
Crie /res/layout/texts.xml
Crie TextView, EditText e
AutoCompleteTextView
EditText - aceita um número indicando
quantos caracteres disparam as
sugestões
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 botões clicáveis 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
Botão de dois estados, que
permite marcar um item na tela
CheckBox
android:text="@string/..."
ToggleButton
android:textOn="@string/..."
android:textOff="@string/..."
Métodos
boolean isChecked() - retorna estado
void toggle() - alterna estado
void setChecked(boolean) - define estado
boolen performClick() - simula click chamando o método
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="Não"
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);
<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 opções 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);
@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)
<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 operação
Estilos como percentual ou indeterminado
Estilos (atributo style no XML):
?android:progressBarStyle (padrão) Indeterminado circular de tamanho médio
Métodos
setProgress(int) Determina o nível de progresso para uma barra percentual
setSecondaryProgress(int) Determina o nível secundário 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 classificação com estrelas
A barra pode ser interativa ou apenas um indicator
Métodos
int getNumStars() Retorna quantidade de estrelas totais
float getRating() Retorna a classificação (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 classificação
Estilos
?android:ratingBarStyle (default) Exibe estrelas grandes e permite alteração da
classificação. Pode-se usar isIndicator=“true” para ser
apenas um indicador.
?android:ratingBarStyleSmall Exibe estrelas pequenas. Apenas indicador.
?android:ratingBarStyleIndicator Exibe estrelas médias. 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
Exibição de alertas por tempo determinado
View personalizada
Toast toast = new Toast(this);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(view);
toast.show();
80
AlertDialog
Exibe um alerta ao usuário
Conteúdo e botões de escolha personalizados
Classe AlertDialog.Builder para construir alertas
setIcon(int resId) Determina o ícone a ser mostrado
setTitle(String) Determina o título do alerta
setMessage(String) Mensagem a ser mostrada no interior do alerta
setPositiveButton(String, listener) Texto do botão positivo (Sim, Yes, Ok, etc)
setNegativeButton(String, listener) Texto do botão negativo (Não, No, etc)
setItems(String [], listener) Items a serem mostrados para usuário selecionar
setSingleChoiceItems(String [], int Determina lista de RadioButtons a serem mostrados ao
checkedItem, listener) usuário
setCancelable(boolean) Alerta cancelável ou não. Cancelável significa que usuário
não pode fechar com botão voltar.
show() Exibe o alerta para o usuário
cancel() Cancela o alerta
85
ListActivity
Cria uma activity que mostra uma lista de itens
Simplifica codificação Java
Evita criação de XML de layout
Apenas listas personalizadas precisariam
Métodos adicionais em relação à 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, Callback chamado quando um item da lista é selecionado
View, int pos, long id) pelo usuário. A parâmetro pos indica a posição 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 método 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 conteúdo da aba
• TabHost.addTab(TabSpec) para adicionar a aba
87
TabActivity
A classe TabSpec possui variantes em seus métodos:
setContent(int viewId) Especifica o id da View que deve ser usada como o conteúdo
da aba.
setContent(Intent) Especifica a Intent que deve ser usada para iniciar uma
activity que será o conteúdo da aba.
setContent(TabContentFactory) Especifica um TabHost.TabContentFactory que será
responsável por criar o conteúdo 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 próximas aulas
Intent filter
BroadcastReceiver, Services e Notification
AlarmManager e Handler
Banco de Dados e ContentProvider
Mapas e GPS
Sockets e Web Services
Projeto
89