Professional Documents
Culture Documents
Fundamentos
Apostila do Aluno
Elaborao do Contedo
Jonas Baggio
Elaborao dos Exerccios
Jonas Baggio
Diagramao
Samuel Sano de Moura
Edio n1
Junho /2011
http://iai.art.br
Android - Fundamentos
Android: Fundamentos
Sobre o iai?
A histria do iai?
O iai? Instituto de Artes Interativas foi fundada em maro de 2009 com cursos de desenvolvimento
de aplicativos para iOS contando com uma proposta inovadora e atualizada, nestes ltimos 3 anos
tivemos mais de 2000 alunos em nossos cursos.
A produtora j trabalha a 2 anos atendendo a demanda do mercado por aplicativos para
plataformas mveis como o iOS e Android.
Dessa forma, procuramos uma equipe coesa, criativa, e eficiente para desenvolver solues e
inovaes no mundo das artes interativas e educao.
Galeria
Exposio de artes e locao
para eventos corporativos
Escola
Cursos prticos, rpidos
e objetivos
Produtora
Desenvolvimento de
aplicativos mveis
Na rea educacional, O Iai? se destaca na oferta cursos com aprendizagem rpida, presencial e a
distncia, contando com know how em sistemas mveis como iPhone SDK, Android SDK e Windows
phone 7, alm de Lgica de programao, design, interfacesentre outros. Os cursos do iai? so
voltados para profissionais que buscam a capacitao por meio do conhecimento e domnio de
novas ferramentas tecnolgica com cursos prticos e objetivos aonde aprendem produzindo.
A Produtoraatua no mercado no desenvolvimento de projetos em diversos clientes em vrios
mercados. Aplicativos mveis, peas de marketing e publicidade nesses dispositivos,
Como um espao de exposio de novas idias, a Galeria
Nossa fora est nos profissionais qualificados, com professores que tambm atuam do mercado
em diversos projetos, essa forma de garanti alm do conhecimento tcnico, dicas, conceitos e
informaes sobre o mercado.
Android - Fundamentos
iai.art.br
instituto de artes interativas
@iaibrasil
iai? instituto de artes interativas
iai.art.br/clube-iai.html
Android - Fundamentos
IOS SDK
Programao para o sistema operacional da Apple
ANDROID SDK
Programao para o sistema operacional da Google
Lgica de programao
Conceitos Bsicos de programao
Orientao a objeto e Objective C
Conceitos de desenvolvimento de sistemas e Linguagem de programao base para o IOS.
Orientao a objeto e Java
Conceitos de desenvolvimento de sistemas e Linguagem de programao base para o Android.
Design
O objetivo do curso ensinar a montar um projeto de design utilizando como plataforma um
aplicativo para iPhone.
Interface
O curso focado nas guias da Apple e pretende discutir as melhores formas de interface.
Games
Focamos em estratgias e tcnicas para desenvolvimento de jogos para o Iphone, demonstrando o
funcionamento do Cocos2D.
Windows Phone 7
Venha desenvolver para o mais novo sistema operacional da Micrsoft que promete mexer com
Mercado de tecnologia.
Android - Fundamentos
Android: Fundamentos
Indces
Lista de Figuras
Figura 1 Tela de boas vindas do Eclipse.
Figura 2 Instalando o plugin ADT no Eclipse
Figura 3 Definindo diretrio do ADT.
Figura 4 ADT j instalado no Eclipse
Figura 5 Adicionando o SDK do Android
Figura 6 Bibliotecas do Android disponvel no SDK.
Figura 7 Assistente para criar/startar um AVD
Figura 8 Criando um novo emulador
Figura 9 Visualizao do emulador que criamos.
Figura 10 Emulador do Android baseado na verso 2.2
Figura 11 Acessando o JavaDoc.
Figura 12 Documentao de ajuda - JavaDoc
Figura 13 Criando um novo projeto
Figura 14 Definindo as propriedades do projeto
Figura 15 Estrutura de diretrios do projeto
Figura 16 Executando a aplicao
Figura 17 Devices
Figura 18 LogCat
Figura 19 Definindo um filtro no LogCat
Figura 20 Filtro PrimeiroAPP no LogCat
Android - Fundamentos
Lista de Figuras
Figura 21 HelloWorld Meu primeiro label
Figura 22 HelloWorld Meu primeiro label -2
Figura 23 HelloWorld Trocando texto do label
Figura 24 HelloWorld Trocando texto do label pela API
Figura 25 Acessando o editor visual do Android
Figura 26 Editor Visual do Android
Figura 27 DroidDraw
Figura 28 Exerccio Novo Boto e novo Label
Figura 29 LinearLayout - Vertical
Figura 30 LinearLayout Horizontal
Figura 31 FrameLayout Imagem tamanho normal
Figura 32 FrameLayout Imagem como fundo
Figura 33 TableLayout - ShrinkColumns
Figura 34 TableLayout - StretchColumns
Figura 35 RelativeLayout
Figura 36 SeekBar - RGB
Figura 37 ToggleButton
Figura 38 CheckBox
Figura 39 VISIBLE e INVISIBLE
Figura 40 VISIBLE e GONE
Android - Fundamentos
Lista de Figuras
Figura 41 ImageView API do Android
Figura 42 App Minhas Fotos
Figura 43 Spinner com valores e exibio da opo ecolhida
Figura 44 Exercicio Spinner com imagens
Figura 45 Exemplo de ScroolView
Figura 46 Exemplo de HorizontalScroolView
Figura 47 Exemplo de ProgressBar
Figura 48 Exemplo de ProgressDialog
Figura 49 Alert
Figura 50 Alerta de Confirmao
Figura 51 ListView
Figura 52 ListView com imagens
Figura 53 ListView + LongPress
Figura 54 Editando item do ListView
Figura 55 Trocando de Tela
Figura 56 Definindo uma nova Activity no AndroidManifest.xml
Figura 57 Passagem de paramretro entre telas
Figura 58 Cliclo de vida de uma Activity - Iniciando
Figura 59 Cliclo de vida de uma Activity - Encerrando
Figura 60 GridView de duas colunas
Android - Fundamentos
10
Lista de Figuras
Figura 61 Gallery com foco no personagem Toad
Figura 62 TabHost com Activitys
Figura 63 TabHost com provedor de contedo
Figura 64 TabHost com arquivo de layout
Android - Fundamentos
11
Sumrio
Captulo 1 Configurando o Ambiente
1.1 Site do Android
16
16
1.3 Eclipse
16
17
22
25
27
28
31
3.2 LogCat
36
3.3 HelloWorld
39
47
49
3.6 DroidDraw
51
52
54
Android - Fundamentos
12
Sumrio
Captulo 4 Formas de Layout
4.1 LinearLayout
56
4.2 FrameLayout
58
4.3 TableLayout
60
4.4 RelativeLayout
64
68
71
71
74
5.5 CheckBox
75
78
5.7 ImageView
81
83
86
86
90
5.12 Spinner
90
94
Android - Fundamentos
13
Sumrio
5.14 ScroolView
95
5.15 ProgressBar
99
5.16 ProgressDialog
102
5.17 AlertDialog
105
108
5.19 ListView
112
117
121
125
Captulo 6 Telas
6.1 StartActivity
130
134
135
135
145
7.2 Gallery
147
7.3 TabHost
150
Android - Fundamentos
14
Android: Fundamentos
Captulo
Configurando o Ambiente
1.3 Eclipse
Para realizarmos os exemplos dessa apostila, usaremos a IDE de
desenvolvimento Eclipse, disponibilizada para download no site (http://
www.eclipse.org). Aps baix-lo, s descompactar em uma pasta de
sua preferncia.
A figura 1 representa a tela incial do Eclipse.
Android - Fundamentos
16
Configurando o Ambiente
17
Configurando o Ambiente
Android - Fundamentos
18
Configurando o Ambiente
Android - Fundamentos
19
Configurando o Ambiente
Android - Fundamentos
20
Configurando o Ambiente
Android - Fundamentos
21
Configurando o Ambiente
Android - Fundamentos
22
Configurando o Ambiente
Android - Fundamentos
23
Configurando o Ambiente
Android - Fundamentos
24
Configurando o Ambiente
Android - Fundamentos
25
Android: Fundamentos
Captulo
Introduo ao Java
2.1 JavaDoc
O JavaDoc uma referncia de consulta para os desenvolvedores. Nele
encontra-se a documentao da linguagem, que vai desde um overview
do ambiente de desenvolvimento at a especificao dos recursos da
linguagem.
No Eclipse, pode-se acessar a documentao atravs do menu Help, na
opo Help Contents (F1).
Ser aberta uma janela, representada pela figura 12, onde procuramos
o contedo que nos interessa. Tambm possui uma caixa de busca para
refinar a nossa pesquisa no JavaDoc.
Android - Fundamentos
27
Introduo ao Java
Android - Fundamentos
28
Introduo ao Java
Declarao de variveis
//varivel privada (da classe) que aceita
apenas valores inteiros
private int var1;
//varivel pblica (pode ser acessada de
outras classes) aceita
conjuntos de caracteres
public static String var2;
//varivel local que aceita valores decimais
double var3;
//varivel booleana (verdadeiro ou falso)
boolean ok;
//declarando uma varivel com valor j
inicializado
private int var4 = 20;
//declarao de varivel booleana com valor
verdadeiro
boolean editMode = true;
//declarao de uma constante
final double VALOR_PI = 3.14;
Declarao de mtodos
//mtodo que vai somar dois valores inteiros
public void somar(int valor1, int valor2){
int resultado = valor1 + valor2;
}
//chamada ao mtodo
somar(10,25);
//mtodo que vai somar dois valores inteiros e
retornar o resultado da soma
public int somar(int valor1, int valor2){
int resultado = valor1 + valor2;
return resultado;
}
//chamamos o mtodo e armazenamos o retorno do
mtodo na varivel result
int result = somar(3,2);
//mtodo que s vai realizar uma tarefa
public void atualizaValor(){
//implementao do cdigo...
}
//chamada ao mtodo
atualizaValor();
Android - Fundamentos
29
Android: Fundamentos
Captulo
Android - Fundamentos
31
Android - Fundamentos
32
Android - Fundamentos
33
Consideraes:
Todas as classes e pacotes que precisarmos criar,sero criadas dentro
da pasta src.
Na pasta gen, podemos ver a classe R.java, esta classe a mais
importante do projeto, e nunca deve ser modificada manualmente.
Entraremos em mais detalhes no decorrer do assunto.
Na raiz do projeto, observamos o arquivo AndroidManisfest.xml,
aqui onde definimos todas as telas da aplicao, se ter ou no
Android - Fundamentos
34
package br.com.primeiroapp;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
public class Main extends Activity {
public static final String TAG = primeiro_
app;
@Override
public void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
int idade = 21;
double altura = 1.85;
String nome = Jonas;
String sobrenome = Baggio;
String texto = Meu nome + nome +
sobrenome + ,tenho + idade + anos de idade, e
+ altura + metros de altura.;
Log.e(TAG, texto);
Log.i(TAG, texto);
Log.w(TAG, texto);
Android - Fundamentos
35
3.2 LogCat
O LogCat uma ferramenta que possibilita a visualizao de todos os
logs que o sistema operacional do Android gera.
Na aplicao, podemos definir como o log ser gerado, se um log
de erro, informao, alerta, debug. Podemos filtrar essa informao
posteriormente no LogCat.
No cdigo que implementamos na classe Main, criamos uma constante
chamada TAG, cujo valor primeiro
_app, esse o identificador dos logs
que vamos usar na nossa aplicao. Observe que ela passada como
parmetro em todos os logs.
Para tornar visvel a ferramenta do LogCat, utilizamos o atalho ctrl+3,
e digitamos Logcat. Ento selecionamos a view LogCat e damos um
enter. Vamos aproveitar e fazer a mesma coisa para a view Devices,
nela podemos visualizar o device/emulador que esto disponveis para
uso.
Agora vamos executar o programa e ver o resultado. Para isso, clicamos
com o boto direito do mouse sobre o projeto, e acessamo a opo
run as Android Application.
Android - Fundamentos
36
37
Android - Fundamentos
38
3.3 HelloWorld
Vamos criar um novo projeto, chamado HelloWorld, baseado na
verso 2.2 do Android. Preencha o campo Create Activity com o
nome Main.
A classe Main ter o seguinte cdigo.
Android - Fundamentos
39
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
Android - Fundamentos
40
41
Android - Fundamentos
42
Android - Fundamentos
43
Android - Fundamentos
44
android.app.Activity;
android.os.Bundle;
android.view.View;
android.view.View.OnClickListener;
android.widget.Button;
android.widget.TextView;
private TextView label;
{
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
label = (TextView) findViewById(R.id.label);
Android - Fundamentos
45
Android - Fundamentos
46
android.app.Activity;
android.graphics.Color;
android.os.Bundle;
android.view.Gravity;
android.view.View;
android.view.View.OnClickListener;
android.view.ViewGroup.LayoutParams;
android.widget.Button;
android.widget.LinearLayout;
android.widget.TextView;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
LinearLayout layout = new LinearLayout(this);
layout.setOrientation(LinearLayout.VERTICAL);
layout.setLayoutParams(new
LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.
FILL_PARENT));
label = new TextView(this);
label.setLayoutParams(new
LayoutParams(LayoutParams.FILL_PARENT, LayoutParams.
WRAP_CONTENT));
label.setBackgroundColor(Color.RED);
label.setTextColor(Color.BLUE);
label.setGravity(Gravity.CENTER_HORIZONTAL);
label.setText(Meu label criado pela API);
layout.addView(label);
Button btTrocar = new Button(this);
btTrocar.setText(Trocar label);
btTrocar.setLayoutParams(new
LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.
WRAP_CONTENT));
btTrocar.setOnClickListener(new
Android - Fundamentos
47
Android - Fundamentos
48
Android - Fundamentos
49
50
3.6 DroidDraw
Uma outra opo para criar as telas do Android, utilizar uma
ferramenta terceirizada, chamada DroidDraw, que pode ser baixada no
site (http://droiddraw.org). O uso dela muito semelhante ao editor
do Eclipse, porm, aps criarmos a tela, precisamos clicar no boto
generate para gerar o cdigo correspondente a tela.
Figura 27.DroidDraw
Android - Fundamentos
51
android.app.Activity;
android.os.Bundle;
android.view.View;
android.view.View.OnClickListener;
android.widget.Button;
android.widget.TextView;
Android - Fundamentos
52
Android - Fundamentos
53
Android - Fundamentos
54
Android: Fundamentos
Captulo
Formas de Layout
4.1 LinearLayout
Podemos observar que em todos os nossos exemplos ns definimos
por primeiro dentro do arquivo .xml de layout o tipo de layout que
nossa tela vai ter. Por padro, quando criamos uma nova tela, o layout
definido como padro na vertical, e para ocupar todo o espao da
tela. Desta forma, conforme vamos adicionando elementos em nossa
tela, eles vo sendo posicionados um abaixo do outro. Segue abaixo 2
exemplos que implementaes diferentes de um LinearLayout.
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<!-- TextView e Button ignorados para o exemplo
-->
</LinearLayout>
Android - Fundamentos
56
Formas de Layout
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=horizontal
android:layout_width=wrap_content
android:layout_height=fill_parent
>
<!-- TextView e Button ignorados para o exemplo
-->
</LinearLayout>
57
Formas de Layout
4.2 FrameLayout
Geralmente, esse tipo de layout mais utilizado quando queremos
definir uma imagem de fundo para nossa tela. Usando o conceito de
pilha, onde o ltimo item da pilha o que fica visvel, adicionamos uma
imagem de fundo por primeiro e o restante dos elementos depois. Por
padro, os componentes so inseridos primeiramente no canto superior
esquerdo da tela.
<?xml version=1.0 encoding=utf-8?>
<FrameLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=wrap_content
android:layout_height=wrap_content
>
<ImageView
android:layout_width=wrap_content
android:layout_height=wrap_content
android:src=@drawable/toad
/>
</FrameLayout>
Android - Fundamentos
58
Formas de Layout
<?xml version=1.0 encoding=utf-8?>
<FrameLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<ImageView
android:layout_width=fill_parent
android:layout_height=fill_parent
android:src=@drawable/toad
/>
</FrameLayout>
Android - Fundamentos
59
Formas de Layout
4.3 TableLayout
Esta opo de layout muito utilizada na criao de formulrios, onde
podemos criar linha por linha e ir adicionando os componentes no
formato de uma tabela.
Junto com o TableLayout, muito comum a utilizao de duas
propriedades muito importantes:o stretchColumns e o shrinkColumns.
ShrinkColumns.
<?xml version=1.0 encoding=utf-8?>
<TableLayout
xmlns:android=http://schemas.android.com/apk/
res/android
android:id=@+id/widget27
android:layout_width=fill_parent
android:layout_height=fill_parent
android:shrinkColumns=1,2
android:orientation=vertical
>
<TableRow>
<TextView android:text=Coluna 1/>
<TextView android:text=Como o texto
dessa coluna muito grande utilizamos a propriedade
shrinkColumns para quebrar o seu contedo e manter
dentro da tela/>
<TextView android:text=Coluna 3/>
</TableRow>
<TableRow>
<TextView android:text=Coluna 1/>
<TextView android:text=Coluna 2/>
<TextView android:text=Como o texto
dessa coluna muito grande utilizamos a propriedade
shrinkColumns para quebrar o seu contedo e manter
dentro da tela/>
</TableRow>
<TableRow>
<TextView android:text=Coluna 1/>
<TextView android:text=Coluna 2/>
<TextView android:text=Coluna 3/>
</TableRow>
</TableLayout>
Android - Fundamentos
60
Formas de Layout
Android - Fundamentos
61
Formas de Layout
<?xml version=1.0 encoding=utf-8?>
<TableLayout
xmlns:android=http://schemas.android.com/apk/
res/android
android:layout_width=fill_parent
android:layout_height=fill_parent
android:stretchColumns=0
android:orientation=vertical
>
<TextView android:text=PRODUTOS
android:gravity=center_horizontal />
<View android:layout_height=2dip
android:background=@color/amarelo/>
<TableRow android:background=@color/verde>
<TextView
android:text=Arroz
android:gravity=left
android:background=@color/fundo_
cinza/>
<TextView
android:text=R$ 7,80
android:gravity=right
android:textColor=@color/preto/>
</TableRow>
<TableRow android:background=@color/verde>
<TextView
android:text=Aucar
android:gravity=left
android:background=@color/fundo_
cinza/>
<TextView
android:text=R$ 4,99
android:gravity=right
android:textColor=@color/preto/>
</TableRow>
<TableRow android:background=@color/verde>
<TextView
android:text=Caf
android:gravity=left
android:background=@color/fundo_
cinza/>
<TextView android:text=R$ 2,69
android:gravity=right android:textColor=@color/
preto/>
</TableRow>
<View android:layout_height=2dip
android:background=@color/azul/>
<TableRow>
<TextView
android:text=TOTAL
Android - Fundamentos
62
android:gravity=left/>
<TextView
android:text=R$ 15,48
android:gravity=right/>
</TableRow>
</TableLayout>
Android - Fundamentos
63
Formas de Layout
4.4 RelativeLayout
A caracterstica desse layout que podemos adicionar um prximo
componente na tela com relao ao componente anterior. Para isto,
precisamos definir a propriedade id aos componentes e declarar o
componente que vamos referenciar antes do componente atual, no
arquivo .xml.
Podemos utilizar as seguintes propriedades nesse layout.
android:layout_below=@id/id posiciona abaixo do
componente indicado
android:layout_above=@id/id posiciona acima do
componente indicado
android:layout_toRightOf=@id/id posiciona a
direita do componente indicado
android:layout_toLeftOf=@id/id posiciona a
esquerda do componente indicado
android:layout_alignParentTop=@id/id alinha ao
topo do componente indicado
android:layout_alignParentBottom=@id/id alinha
abaixo do componente indicado
android:layout_marginTop=@id/id utilizado para
definir um espao na margem superior do componente
android:layout_marginRight=@id/id utilizado para
definir um espao a direita do componente
android:layout_marginLeft=@id/id utilizado para
definir um espaco a esquerda do componente
64
Formas de Layout
<?xml version=1.0 encoding=utf-8?>
<RelativeLayout xmlns:android=http://schemas.
android.com/apk/res/android
android:layout_width=fill_parent
android:layout_height=wrap_content
android:background=@color/azul
>
<TextView
android:id=@+id/labelLogin
android:layout_width=50dip
android:layout_height=wrap_content
android:text=Login:
/>
<EditText
android:id=@+id/textLogin
android:layout_height=wrap_content
android:layout_width=fill_parent
android:layout_toRightOf=@id/
labelLogin
/>
<TextView
android:paddingTop=10dip
android:id=@+id/labelSenha
android:layout_below=@id/labelLogin
android:layout_width=50dip
android:layout_height=wrap_content
android:text=Senha:
/>
<EditText
android:id=@+id/textSenha
android:layout_toRightOf=@id/
labelSenha
android:layout_below=@id/textLogin
android:layout_height=wrap_content
android:layout_width=fill_parent
/>
<Button
android:id=@+id/btEntrar
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_below=@id/textSenha
android:text=Entrar
/>
</RelativeLayout>
Android - Fundamentos
65
Formas de Layout
Figura 35.RelativeLayout
Android - Fundamentos
66
Android: Fundamentos
Captulo
Componentes Visuais
5.1 SeekBar
uma espcie de barra de progresso, mas quem define o seu progresso
somos ns, clicando em sua rea de clique e arrastando o progresso para
onde desejamos.
Abaixo segue a implementao de um exemplo utilizando o SeekBar.
public class Main extends Activity implements
OnSeekBarChangeListener {
private TextView label;
private SeekBar seekBarRED;
private SeekBar seekBarGREEN;
private SeekBar seekBarBLUE;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.seek_
bar);
label = (TextView) findViewById(R.
id.label);
seekBarRED = (SeekBar) findViewById(R.
id.seekBar_R);
seekBarGREEN = (SeekBar) findViewById(R.
id.seekBar_G);
seekBarBLUE = (SeekBar) findViewById(R.
id.seekBar_B);
seekBarRED.setOnSeekBarChangeListener(th
is);
seekBarGREEN.setOnSeekBarChangeListener(
this);
seekBarBLUE.setOnSeekBarChangeListener(t
his);
updateTextColor();
}
@Override
public void onProgressChanged(SeekBar sBar,
int alpha, boolean b) {
updateTextColor();
}
private void updateTextColor() {
int red = seekBarRED.getProgress();
int green = seekBarGREEN.getProgress();
int blue = seekBarBLUE.getProgress();
Android - Fundamentos
68
Componentes Visuais
label.setTextColor(0xff000000 + red * 0x10000
+ green * 0x100 + blue);
}
@Override
public void onStartTrackingTouch(SeekBar
seekBar) {}
@Override
public void onStopTrackingTouch(SeekBar
seekBar) {}
}
Android - Fundamentos
69
Componentes Visuais
70
Componentes Visuais
71
Componentes Visuais
public class Main extends Activity implements
OnClickListener, OnSeekBarChangeListener {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.toogle_
button);
label = (TextView) findViewById(R.
id.label);
tButton = (ToggleButton) findViewById(R.
id.toggleBt);
tButton.setOnClickListener(this);
seekBar = (SeekBar) findViewById(R.
id.seekBar_R);
seekBar.setOnSeekBarChangeListener(th
is);
updateTextColor();
}
@Override
public void onClick(View v) {
if(v == tButton){
if(seekBar.isEnabled()){
seekBar.setEnabled(false);
}else{
seekBar.setEnabled(true);
}
}
}
@Override
public void onProgressChanged(SeekBar seekBar,
int progress,boolean fromUser) {
updateTextColor();
}
private void updateTextColor() {
int seekR = seekBar.getProgress();
label.setTextColor(0xff000000 + seekR *
0x10000 + 0 * 0x100 + 0);
}
Android - Fundamentos
72
Componentes Visuais
@Override
public void onStartTrackingTouch(SeekBar
seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar
seekBar) {}
}
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<TextView
android:id=@+id/label
android:textSize=20px
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=MUDANDO A COR
android:gravity=center_horizontal
/>
<SeekBar
android:id=@+id/seekBar_R
android:layout_width=fill_parent
android:layout_height=wrap_content
android:max=255
android:progress=0
/>
<ToggleButton
android:id=@+id/toggleBt
android:layout_width=wrap_content
android:layout_height=wrap_content
android:paddingTop=20dip
android:layout_gravity=center_horizontal
/>
</LinearLayout>
Android - Fundamentos
73
Componentes Visuais
Figura 37.ToggleButton
Android - Fundamentos
74
Componentes Visuais
5.5 CheckBox
Com a mesma idia do exemplo anterior, vamos utilizar dessa vez,
outro componente muito utilizado em diversos aplicativos, o CheckBox,
public class Main extends Activity implements
OnSeekBarChangeListener, OnCheckedChangeListener {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.check_box);
label = (TextView) findViewById(R.
id.label);
seekBar = (SeekBar) findViewById(R.
id.seekBar_R);
seekBar.setOnSeekBarChangeListener(th
is);
checkBox = (CheckBox) findViewById(R.
id.checkBox);
checkBox.setOnCheckedChangeListener(th
is);
}
@Override
public void onProgressChanged(SeekBar seekBar,
int progress,boolean fromUser) {
updateTextColor();
}
private void updateTextColor() {
int seekR = seekBar.getProgress();
label.setTextColor(0xff000000 + seekR *
0x10000 + 0 * 0x100 + 0);
}
@Override
public void onCheckedChanged(CompoundButton
buttonView, boolean isChecked) {
if(buttonView == checkBox && isChecked){
seekBar.setEnabled(true);
}else{
Android - Fundamentos
75
Componentes Visuais
seekBar.setEnabled(false);
}
}
@Override
public void onStartTrackingTouch(SeekBar
seekBar) { }
@Override
public void onStopTrackingTouch(SeekBar
seekBar) {}
}
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<TextView
android:id=@+id/label
android:textSize=20px
android:layout_width=fill_parent
android:layout_height=wrap_content
android:text=MUDANDO A COR
android:gravity=center_horizontal
/>
<SeekBar
android:id=@+id/seekBar_R
android:layout_width=fill_parent
android:layout_height=wrap_content
android:max=255
android:progress=0
/>
<CheckBox
android:id=@+id/checkBox
android:text=Ativar SeekBar
android:layout_width=wrap_content
android:layout_height=wrap_content
android:checked=true
/>
</LinearLayout>
Android - Fundamentos
76
Componentes Visuais
Figura 38.CheckBox
Android - Fundamentos
77
Componentes Visuais
Android - Fundamentos
78
Componentes Visuais
Android - Fundamentos
79
Componentes Visuais
Android - Fundamentos
80
Componentes Visuais
5.7 ImageView
O ImageView, utilizado quando queremos adicionar uma imagem na
tela, como por exemplo:
<ImageView
android:layout_width=fill_parent
android:layout_height=fill_parent
android:src=@drawable/toad
Android - Fundamentos
81
Componentes Visuais
Android - Fundamentos
82
Componentes Visuais
Android - Fundamentos
83
Componentes Visuais
/>
<Button
android:id=@+id/btAvancar
android:text=Avanar
android:layout_width=80px
android:layout_height=wrap_content
/>
</LinearLayout>
</LinearLayout>
public class Main extends Activity implements
OnClickListener{
private int idx = 0;
private Button btVoltar;
private Button btAvancar;
private int[] imagens;
private ImageView imagem;
@Override
public void onCreate(Bundle savedInstanceState)
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
updateList();
private void updateList() {
imagem.setImageResource(imagens[idx]);
}
@Override
public void onClick(View view) {
if(view == btVoltar){
if(idx == 0){
idx = 6;
Android - Fundamentos
84
Componentes Visuais
}
idx--;
updateList();
}else if(view == btAvancar){
if(idx == 5){
idx = -1;
}
idx++;
updateList();
}
}
}
Android - Fundamentos
85
Componentes Visuais
86
Componentes Visuais
import android.app.Activity;
import android.os.Bundle;
public class Main extends Activity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.
main);
}
}
Android - Fundamentos
87
Componentes Visuais
/>
<Button
android:id=@+id/btLogin
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
android:text=Login
/>
</LinearLayout>
Android - Fundamentos
88
Componentes Visuais
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:id=@+id/layout
// resto do cdigo continua o mesmo
public class Main extends Activity implements
OnTouchListener{
private LinearLayout layout;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
layout = (LinearLayout) findViewById(R.
id.layout);
layout.setOnTouchListener(this);
}
@Override
public boolean onTouch(View v, MotionEvent
event) {
fecharTecladoVirtual(this,layout);
return false;
}
public void fecharTecladoVirtual(Context
context, View view) {
InputMethodManager imm = (InputMethodManager)
context.getSystemService(Context.INPUT_METHOD_
SERVICE);
if(imm != null) {
imm.hideSoftInputFromWindow(view.
getWindowToken(), 0);
}
}
}
Android - Fundamentos
89
Componentes Visuais
5.12 Spinner
No Android, os famosos ComboBox, so chamados de Spinner. Sempre
que lidamos com este componente, estaremos trabalhando juntamente
com um conjunto de valores que vo popular esse combo. Abaixo,
vamos definir nosso Spinner no arquivo de layout.
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:id=@+id/layout
>
<Spinner
android:id=@+id/combo
android:layout_width=match_parent
android:layout_height=wrap_content
Android - Fundamentos
90
Componentes Visuais
/>
</LinearLayout>
public class Main extends Activity implements
OnItemSelectedListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
criarLista();
criarCombo();
private void criarLista(){
lista = new ArrayList<String>();
lista.add(Android);
lista.add(IPhone);
lista.add(J2ME);
lista.add(BlackBerry);
lista.add(WindowsPhone7);
}
private void criarCombo() {
combo = (Spinner) findViewById(R.
id.combo);
combo.setOnItemSelectedListener(this);
ArrayAdapter<CharSequence> adapter = new
ArrayAdapter<CharSequence>(this, android.R.layout.
simple_spinner_item);
adapter.setDropDownViewResource(android.
R.layout.simple_spinner_dropdown_item);
for (String s : lista) {
adapter.add(s);
}
combo.setAdapter(adapter);
combo.setSelection(0);
}
@Override
public void onItemSelected(AdapterView<?>
adapter, View view, int position,long id) {
String plataformaEscolhida = combo.
Android - Fundamentos
91
Componentes Visuais
getItemAtPosition(position).toString();
Toast.makeText(this,
plataformaEscolhida, Toast.LENGTH_LONG).show();
}
@Override
public void onNothingSelected(AdapterView<?>
arg0) {
}
}
Neste exemplo, criamos um mtodo que vai apenas popular uma lista
com os valores que sero usados no Spinner. E tambm criamos outro
mtodo que responsvel por criar um Spinner. Para isso, precisamos
definir um adapter, que o objeto que possui os seus valores, e
tambm o recurso que ele vai usar para mostrar os itens na tela.
Android - Fundamentos
92
Componentes Visuais
Podemos observar que usamos um recurso nativo do android, uma vez que
mencionamos o pacote android.R.layout.simple_spinner_
dropdown_item. Essa
uma das formas de mostrar o contedo na tela. Feito isso, percorremos
nossa lista criada anteriormente e adicionamos os valores no adapter.
Por ltimo, implementamos uma classe responsvel por verificar o item
selecionado no Spinner. E no mtodo que chamado ao trocar o valor do
spinner, mostramos na tela em um simples alerta, a opo selecionada.
Android - Fundamentos
93
Componentes Visuais
Android - Fundamentos
94
Componentes Visuais
5.14 ScroolView
Quanto o contedo que queremos inserir na tela muito maior do
que o espao disponvel, usamos uma view chamada ScroolView, que
responsvel for fazer a rolagem do contedo na tela do device.
Android - Fundamentos
95
Componentes Visuais
public class Main extends Activity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
LinearLayout layout = (LinearLayout)
findViewById(R.id.layout);
for (int i = 0; i < 100; i++) {
TextView text = new
TextView(this);
text.setText(Texto + i);
layout.addView(text);
}
}
}
Android - Fundamentos
96
Componentes Visuais
Android - Fundamentos
97
Componentes Visuais
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<HorizontalScrollView
android:id=@+id/scrollView1
android:layout_width=wrap_content
android:layout_height=wrap_content
>
<LinearLayout
xmlns:android=http://schemas.
android.com/apk/res/android
android:orientation=horizontal
android:layout_width=wrap_
content
android:layout_height=fill_parent
android:id=@+id/layout
>
</LinearLayout>
</HorizontalScrollView>
</LinearLayout>
Android - Fundamentos
98
Componentes Visuais
5.15 ProgressBar
O ProgreesBar utilizado quando queremos mostrar para o usurio que
algum processamento est acontecendo no aplicativo. Geralmente
uma busca na internet, ou qualquer processamento demorado.
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<ProgressBar
android:id=@+id/progressBar
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
<Button
android:text=Start
android:id=@+id/btStart
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
<Button
android:text=Stop
android:id=@+id/btStop
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
</LinearLayout>
Android - Fundamentos
99
Componentes Visuais
public class Main extends Activity implements
OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
progressBar = (ProgressBar)
findViewById(R.id.progressBar);
btStart = (Button) findViewById(R.
id.btStart);
btStart.setOnClickListener(this);
btStop = (Button) findViewById(R.
id.btStop);
btStop.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btStart){
progressBar.setVisibility(View.
VISIBLE);
}else if(v == btStop){
progressBar.setVisibility(View.
INVISIBLE);
}
}
}
Android - Fundamentos
100
Componentes Visuais
101
Componentes Visuais
5.16 ProgressDialog
Uma outra opo de mostrar para o usurio que algum processamento
est sendo feito pelo aplicativo, utilizar o ProgressDialog.
A vantagem dele que podemos informar ao usurio o qu esta
acontecendo. O ProgressDialog representado por uma caixa de alerta,
e dentro dessa caixa podemos escrever uma mensagem que desejamos
exibir para o usurio.
Para este exemplo, voc vai precisar definir um arquivo de layout, da
forma como preferir, com um boto e um id para este. Abaixo segue a
implementao da classe.
Android - Fundamentos
102
Componentes Visuais
public class Main extends Activity implements
OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
progress = new ProgressDialog(this);
progress.setMessage(Processando
solicitao...);
btStart = (Button) findViewById(R.
id.btStart);
btStart.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btStart){
progress.show();
}
}
}
Android - Fundamentos
103
Componentes Visuais
Android - Fundamentos
104
Componentes Visuais
5.17 AlertDialog
Como o prprio nome j diz, o AlertDialog, tem a idia de alertar/
informar o usurio de que aconteceu alguma coisa no aplicativo. Para
demonstrar, vamos voltar em um exemplo que criamos anteriormente
de uma tela de Login, e vamos acrescentar a validao nos campos de
usurio e senha.
Nosso arquivo de layout continuar o mesmo, abaixo segue a
implementao da classe. (exemplo na prxima pgina)
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.ex_login);
textLogin = (EditText) findViewById(R.
id.textLogin);
textSenha = (EditText) findViewById(R.
id.textSenha);
btLogin = (Button) findViewById(R.
id.btEntrar);
btLogin.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btLogin){
String login = textLogin.
getText().toString();
String senha = textSenha.
getText().toString();
Android - Fundamentos
105
Componentes Visuais
if(isEmpty(login)){
alert(this, Informe o
login!);
return;
}else if(isEmpty(senha)){
alert(this, Informe a
senha!);
return;
}
alert(this, Login realizado com
sucesso!!!);
}
}
public void alert(Activity context,String msg)
{
AlertDialog dialog = new AlertDialog.
Builder(context)
.setTitle(Informao!!!)
.setMessage(msg)
.create();
dialog.setButton(OK, new
DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
return;
} });
dialog.show();
}
public boolean isEmpty(String s) {
return s == null || s.trim().length() ==
0;
}
}
Android - Fundamentos
106
Componentes Visuais
Figura 49.Alert
Android - Fundamentos
107
Componentes Visuais
Android - Fundamentos
108
Componentes Visuais
public class Main extends Activity implements
OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
bt1 = (Button) findViewById(R.id.bt1);
bt1.setOnClickListener(this);
bt2 = (Button) findViewById(R.id.bt2);
bt2.
setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == bt1){
alert(this,Parabns, boto
correto! O que deseja fazer agora?);
}else if(v == bt2){
alert(this,Tsc Tsc... boto
errado!);
}
}
Android - Fundamentos
109
Componentes Visuais
public void alert(final Activity context,String
msg){
AlertDialog.Builder dialog = new
AlertDialog.Builder(context);
dialog.setTitle(Informao);
dialog.setMessage(msg);
dialog.setPositiveButton(Tentar
Novamente, new DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
//no faz nada por padro,
apenas encerra o dialog
return;
} });
dialog.setNegativeButton(Encerrar
Aplicativo, new DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
context.finish();
return;
} });
dialog.show();
}
}
Android - Fundamentos
110
Componentes Visuais
Android - Fundamentos
111
Componentes Visuais
5.19 ListView
Muito utilizado quando queremos representar uma listagem de itens,
que quando clicados, levam a detalhes do item, ou outras telas, como
se fosse um menu.
Quando trabalhamos com ListView, muito comum criarmos uma subclasse de BaseAdapter, que por sua vez, funciona como a estrutura do
nosso ListView.
Para esse exemplo, vamos criar uma classe que herda de BaseAdapter,
fazendo isso, precisaremos implementar uma serie de mtodos. Abaixo
segue o cdigo da nossa classe.
public class ListStringsAdapter extends BaseAdapter
{
public ListStringsAdapter(Activity context,
List<String> listString) {
this.listString = listString;
mInflater = (LayoutInflater) context.
getSystemService((Context.LAYOUT_INFLATER_SERVICE));
}
@Override
public int getCount() {
return listString.size();
}
@Override
public Object getItem(int position) {
return listString.get(position);
}
@Override
public long getItemId(int position) {
return position;
}
//continua...
Android - Fundamentos
112
Componentes Visuais
// ...
@Override
public View getView(int posicao, View view,
ViewGroup parent) {
ViewHolder holder;
if (view == null) {
view = mInflater.inflate(R.layout.
list_string_adapter, null);
holder = new ViewHolder();
holder.text = (TextView) view.
findViewById(R.id.tText);
view.setTag(holder);
} else {
holder = (ViewHolder) view.
getTag();
}
String string = listString.get(posicao);
holder.text.setText(string);
return view;
}
static class ViewHolder {
TextView text;
}
}
Android - Fundamentos
113
Componentes Visuais
Feito isso temos nosso adapter pronto para ser utilizado no nosso
ListView. Segue implementao do arquivo de layout da nossa tela
principal, onde definimos a existncia do nosso ListView.
Android - Fundamentos
114
Componentes Visuais
public class Main extends Activity implements
OnItemClickListener{
private ListView listview;
private List<String> listString;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
listString = new ArrayList<String>();
listString.add(Item 1);
listString.add(Item 2);
listString.add(Item 3);
listString.add(Item 4);
listString.add(Item 5);
listString.add(Item 6);
listString.add(Item 7);
listString.add(Item 8);
listString.add(Item 9);
listString.add(Item 10);
listview = (ListView) findViewById(R.
id.listview);
listview.setOnItemClickListener(this);
listview.setAdapter(new
ListStringsAdapter(this, listString));
}
@Override
public void onItemClick(AdapterView<?>
adapter, View view, int pos, long id) {
Toast.makeText(this, listview.
getItemAtPosition(pos).toString(), Toast.LENGTH_
LONG).show();
}
}
Android - Fundamentos
115
Componentes Visuais
Figura 51 ListView
Android - Fundamentos
116
Componentes Visuais
public ListItensAdapter(Activity context,
List<Item> listString) {
this.listItem = listString;
mInflater = (LayoutInflater) context.
getSystemService((Context.LAYOUT_INFLATER_SERVICE));
}
@Override
public int getCount() {
return listItem.size();
}
@Override
public Item getItem(int position) {
return listItem.get(position);
}
@Override
Android - Fundamentos
117
Componentes Visuais
public long getItemId(int position) {
return position;
}
//continua...
// ...
@Override
public View getView(int posicao, View view,
ViewGroup parent) {
ViewHolder holder;
if (view == null) {
view = mInflater.inflate(R.layout.
list_item_adapter, null);
holder = new ViewHolder();
holder.text = (TextView) view.
findViewById(R.id.tText);
holder.imagem = (ImageView) view.
findViewById(R.id.img);
view.setTag(holder);
} else {
holder = (ViewHolder) view.
getTag();
}
Item item = listItem.get(posicao);
holder.text.setText(item.nome);
holder.imagem.setImageResource(item.
imagem);
return view;
}
static class ViewHolder {
TextView text;
ImageView imagem;
}
}
118
Componentes Visuais
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
listItem = new ArrayList<Item>();
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
Android - Fundamentos
119
Componentes Visuais
up));
listItem.add(new Item(1UP,R.drawable.
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
listItem.add(new Item(1UP,R.drawable.
up));
listview = (ListView) findViewById(R.
id.listview);
listview.setAdapter(new
ListItensAdapter(this, listItem));
listview.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?>
adapter, View arg1, int pos, long arg3) {
Item item = listItem.get(pos);
Toast.makeText(this, item.nome, Toast.
LENGTH_LONG).show();
}
}
Android - Fundamentos
120
Componentes Visuais
Android - Fundamentos
121
Componentes Visuais
public class Main extends Activity implements
OnItemClickListener, OnItemLongClickListener {
private ListView listview;
private List<Item> listItem;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
listItem = new ArrayList<Item>();
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
listItem.add(new Item(1UP,R.drawable.
up));
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
listItem.add(new Item(1UP,R.drawable.
up));
listview = (ListView) findViewById(R.
id.listview);
listview.setAdapter(new
ListItensAdapter(this, listItem));
listview.setOnItemClickListener(this);
listview.setOnItemLongClickListener(th
is);
}
@Override
public void onItemClick(AdapterView<?>
adapter, View arg1, int pos, long arg3) {
Item item = listItem.get(pos);
Toast.makeText(this, item.nome, Toast.
LENGTH_LONG).show();
}
Android - Fundamentos
122
Componentes Visuais
@Override
public boolean onItemLongClick(AdapterView<?>
arg0, View arg1, int pos,long arg3) {
alert(this, pos);
return true;
}
// continua....
// ....
public void alert(final Activity context,final
int indexItem){
AlertDialog dialog = new AlertDialog.
Builder(context)
.setTitle(Informao)
.setMessage(Deseja excluir o item
selecionado?)
.create();
dialog.setButton(Sim, new
DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
//removo o item da lista e passo
a lista atualizada para o adapter
listItem.remove(indexItem);
listview.setAdapter(new
ListItensAdapter(context, listItem));
return;
} });
dialog.setButton2(No, new
DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
//no faz nada
return;
} });
dialog.show();
}
}
Android - Fundamentos
123
Componentes Visuais
restantes.
Android - Fundamentos
124
Componentes Visuais
Android - Fundamentos
125
Componentes Visuais
listview.setAdapter(new
ListItensAdapter(this, listItem));
listview.setOnItemClickListener(this);
listview.setOnItemLongClickListener(th
is);
}
@Override
public void onItemClick(AdapterView<?>
adapter, View arg1, int pos, long arg3) {
Item item = listItem.get(pos);
Toast.makeText(this, item.nome, Toast.
LENGTH_LONG).show();
}
@Override
public boolean onItemLongClick(AdapterView<?>
arg0, View arg1, int pos,long arg3) {
alert(this, pos);
return true;
}
public void alert(final Activity context,final
int indexItem){
AlertDialog dialog = new AlertDialog.
Builder(context)
.setTitle(Informao)
.setMessage(Deseja editar o item
selecionado?)
.create();
dialog.setButton(Sim, new
DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int index) {
alertEdit(context, indexItem).
show();
return;
} });
dialog.setButton2(No, new
DialogInterface.OnClickListener() {
public void
onClick(DialogInterface dialog, int which) {
//no faz nada
return;
} });
dialog.show();
}
public AlertDialog alertEdit(final Activity
context,final int indexItenFirstClick) {
Android - Fundamentos
126
Componentes Visuais
LayoutInflater factory = LayoutInflater.
from(context);
final View textEntryView = factory.
inflate(R.layout.alert_dialog_text_entry, null);
return new AlertDialog.Builder(context)
.setTitle(Edicao)
.setView(textEntryView)
.setPositiveButton(Salvar,new
DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int index) {
EditText tNome = (EditText)
textEntryView.findViewById(R.id.xxx);
Editable text = tNome.getText();
String t = text.toString();
Item i = listItem.
get(indexItenFirstClick);
i.nome = t;
listItem.remove(indexItenFirstClick);
listItem.add(indexItenFirstClick, i);
listview.setAdapter(new ListItensAdapter
(context,listItem));
}
}).setNegativeButton(Cancelar,
new DialogInterface.OnClickListener() {
public void onClick(DialogInterface dialog,
int whichButton) {
}
}).create();
}
Android - Fundamentos
127
Componentes Visuais
Android - Fundamentos
128
Android: Fundamentos
Captulo
Telas
6.1 StartActivity
Como o nome j diz, vamos fazer um exemplo de como chamar uma
outra tela de nossa aplicao a partir da tela atual.
Para isso, criamos duas telas, uma com um boto Trocar Tela e a
segunda tela com o boto Voltar, cada uma com um arquivo de
layout que diferencie uma tela da outra, e assim seja possvel visualizar
a troca de telas. (Uma simples cor de fundo resolve).
Abaixo segue o cdigo da primeira tela.
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
android:background=@color/amarelo
>
<TextView
android:text=Tela 1
android:textColor=@color/azul
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
<Button
android:text=Trocar Tela
android:id=@+id/btTrocarTela
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
</LinearLayout>
public class Main extends Activity implements
OnClickListener{
Android - Fundamentos
130
Telas
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
bt1 = (Button) findViewById(R.
id.btTrocarTela);
bt1.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == bt1){
abrirTela(this,Tela2.class);
}
}
private void abrirTela(Activity
context,Class<?> clazz) {
Intent intent = new
Intent(context,clazz);
context.startActivity(intent);
}
}
Android - Fundamentos
131
Telas
public class Tela2 extends Activity implements
OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.tela_dois);
btVoltar = (Button) findViewById(R.
id.btVoltar);
btVoltar.
setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btVoltar){
finish();
}
}
}
Android - Fundamentos
132
Telas
133
Telas
Android - Fundamentos
134
Telas
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:orientation=vertical
android:layout_width=fill_parent
android:layout_height=fill_parent
>
<TextView
android:text=Login
android:layout_width=fill_parent
android:layout_height=wrap_content
/>
<EditText
android:id=@+id/textLogin
android:layout_width=fill_parent
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
<Button
android:text=Login
android:id=@+id/btLogin
android:layout_width=wrap_content
android:layout_height=wrap_content
android:layout_gravity=center_horizontal
/>
</LinearLayout>
public class Main extends Activity implements
OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.main);
textLogin = (EditText) findViewById(R.
id.textLogin);
btLogin = (Button) findViewById(R.
id.btLogin);
btLogin.setOnClickListener(this);
}
@Override
Android - Fundamentos
135
Telas
public void onClick(View v) {
if(v == btLogin){
abrirTela(this,TelaBoasVindas.
class);
}
}
private void abrirTela(Activity
context,Class<? extends Activity> clazz) {
Bundle param = new Bundle();
String login = textLogin.getText().
toString();
param.putString(login_key, login);
Intent intent = new
Intent(context,clazz);
intent.putExtras(param);
context.startActivity(intent);
}
}
Android - Fundamentos
136
Telas
public class TelaBoasVindas extends Activity
implements OnClickListener{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.tela_boas_
vindas);
String login = (String) getIntent().
getSerializableExtra(login_key);
TextView textLogin = (TextView)
findViewById(R.id.labelLogin);
textLogin.setText(Bem vindo, + login
+ !);
btVoltar = (Button) findViewById(R.
id.btVoltar);
btVoltar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v == btVoltar){
finish();
}
}
}
Android - Fundamentos
137
Telas
138
Telas
Android - Fundamentos
139
Telas
public class Main extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
Log.i(TAG_LOG, onCreate());
}
@Override
protected void onStart() {
super.onStart();
Log.i(TAG_LOG, onStart());
}
@Override
protected void onRestart() {
super.onRestart();
Log.i(TAG_LOG, onRestart());
}
@Override
protected void onResume() {
super.onResume();
Log.i(TAG_LOG, onResume());
}
@Override
protected void onPause() {
super.onPause();
Log.i(TAG_LOG, onPause());
}
@Override
protected void onStop() {
super.onStop();
Log.i(TAG_LOG, onStop());
}
@Override
protected void onDestroy() {
super.onDestroy();
Log.i(TAG_LOG, onDestroy());
}
}
Android - Fundamentos
140
Telas
141
Telas
142
Telas
Android - Fundamentos
143
Android: Fundamentos
Captulo
Outros Containers
7.1 GridView
Semelhante ao ListView, esse tipo de view possibilita a visualizao dos
itens em forma de grade. Para este exemplo vamos definir um GridView
de 2 colunas.
<?xml version=1.0 encoding=utf-8?>
<LinearLayout xmlns:android=http://schemas.android.
com/apk/res/android
android:layout_width=fill_parent
android:layout_height=wrap_content
android:orientation=vertical
>
<GridView
android:id=@+id/gridView1
android:layout_width=match_parent
android:layout_height=wrap_content
android:padding=3dp
/>
</LinearLayout>
public class ExGridView extends Activity implements
OnItemClickListener {
private List<Item> listItem;
private GridView gridView;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceSta
te);
setContentView(R.layout.grid_view);
listItem = new ArrayList<Item>();
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
Android - Fundamentos
145
Outros Containers
up));
listItem.add(new Item(1UP,R.drawable.
listItem.add(new Item(Toad,R.drawable.
toad));
listItem.add(new Item(Enemy,R.
drawable.enemy));
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
listItem.add(new Item(1UP,R.drawable.
up));
gridView = (GridView) findViewById(R.
id.gridView1);
gridView.setNumColumns(2);
gridView.setAdapter(new
ListItensAdapter(this, listItem));
gridView.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?>
adapter, View arg1, int pos, long arg3) {
Item item = listItem.get(pos);
Toast.makeText(this, item.nome, Toast.
LENGTH_LONG).show();
}
}
Android - Fundamentos
146
Outros Containers
7.2 Gallery
um recurso do Android onde podemos adicionar componentes, ou em
casos mais comuns, imagens, sempre na horizontal.
O item em destaque sempre ocupa o centro da Gallery, e a rolagem
feita automaticamente.
Para demonstrar um exemplo com Gallery, utilizaremos nossa mesma
classa adapter dos exerccios com ListView, mas dessa vez no
visualizaremos o nome da imagem no Gallery.
Para isso basta comentarmos a declarao do atributo text na nossa
inner class ViewHolder e tambm onde ele for utilizado.
Android - Fundamentos
147
Outros Containers
static class ViewHolder {
//
TextView text;
ImageView imagem;
}
Android - Fundamentos
148
Outros Containers
listItem.add(new Item(Flamer,R.
drawable.flamer));
listItem.add(new Item(Ghost,R.
drawable.ghost));
listItem.add(new Item(1UP,R.drawable.
up));
gallery = (Gallery) findViewById(R.
id.gallery);
gallery.setAdapter(new
ListItensAdapter(this, listItem));
gallery.setOnItemClickListener(this);
}
@Override
public void onItemClick(AdapterView<?>
adapter, View arg1, int pos, long arg3) {
Item item = listItem.get(pos);
Toast.makeText(this, item.nome, Toast.
LENGTH_LONG).show();
}
}
Android - Fundamentos
149
Outros Containers
7.3 TabHost
Um layout muito utilizado em aplicativos Android, a navegao por
abas, onde cada aba representaria uma opo de menu.
Podemos fazer isso de trs formas diferentes.
No primeiro exemplo, que mostramos a seguir, podemos observar que
nossa tela herda de TabActivity, que tambm uma sub-classe de
Activity. Ela ser responsvel por nos fornecer o layout que desejamos
para nossa aplicao.
Para cada TabHost que definimos na nossa classe, indicamos que ela vai
Android - Fundamentos
150
Outros Containers
anteriormente.
public class ExTabHostOpenActivity extends
TabActivity {
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
final TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec(0).
setIndicator(Gallery).setContent(new Intent(this,
ExGallery.class)));
tabHost.addTab(tabHost.newTabSpec(1).
setIndicator(GridView).setContent(new Intent(this,
ExGridView.class)));
tabHost.addTab(tabHost.newTabSpec(2).
setIndicator(ListView).setContent(new Intent(this,
ExListViewImgLongPress.class)));
}
}
Android - Fundamentos
151
Outros Containers
Android - Fundamentos
152
Outros Containers
public class ExTabHostContentFactory extends
TabActivity implements TabHost.TabContentFactory {
private String TAB_ID_1 = toad;
private String TAB_ID_2 = up;
private String TAB_ID_3 = flamer;
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
tabHost.addTab(tabHost.newTabSpec(TAB_ID_1).
setIndicator(, getResources().getDrawable(R.
drawable.toad)).setContent(this));
tabHost.addTab(tabHost.newTabSpec(TAB_ID_2).
setIndicator(, getResources().getDrawable(R.
drawable.up)).setContent(this));
tabHost.addTab(tabHost.newTabSpec(TAB_ID_3).
setIndicator(, getResources().getDrawable(R.
drawable.flamer)).setContent(this));
}
public View createTabContent(String tag) {
if(tag.equals(TAB_ID_1)){
TextView text = new TextView(this);
text.setText(Neste exemplo, retornamos
o nome do personagem da TAB : + tag);
return text;
}else if(tag.equals(TAB_ID_2)){
ImageView image = new ImageView(this);
image.setBackgroundResource(R.drawable.
up);
return image;
}else if(tag.equals(TAB_ID_3)){
TextView text = new TextView(this);
text.setText(Para : + tag + , poderia
ser qualquer outro contedo.);
return text;
}
return null;
}
}
Android - Fundamentos
153
Outros Containers
Por fim, fazemos um simples teste para verificar qual aba selecionamos,
e dependendo do resultado, setamos o contedo do TabHost
que desejamos, e assim aprendemos a usar imagens como fundo/
identificao das Tabs da aplicao.
Temos tambm a opo de definir um layout para nossa tela, onde
cada aba, ao ser selecionada vai receber uma view do nosso arquivo de
layout.
Para nosso exemplo, ao selecionarmos uma das abas, trocaremos o
texto de contedo e a cor de fundo da tela.
Android - Fundamentos
154
Outros Containers
<?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>
<TextView android:id=@+id/text1
android:background=@color/amarelo
android:textColor=@color/preto
android:layout_width=match_parent
android:layout_height=match_parent
android:text=Tab 1/>
<TextView android:id=@+id/text2
android:background=@color/azul
android:textColor=@color/preto
android:layout_width=match_parent
android:layout_height=match_parent
android:text=Tab 2/>
<TextView android:id=@+id/text3
android:background=@color/verde
android:textColor=@color/preto
android:layout_width=match_parent
android:layout_height=match_parent
android:text=Tab 3/>
</FrameLayout>
public class ExTabHostFileLayout extends TabActivity
{
@Override
protected void onCreate(Bundle
savedInstanceState) {
super.onCreate(savedInstanceState);
TabHost tabHost = getTabHost();
LayoutInflater.from(this).inflate(R.layout.
tab_file_layout, tabHost.getTabContentView(), true);
tabHost.addTab(tabHost.newTabSpec(tab1).
setIndicator(TAB 1).setContent(R.id.text1));
tabHost.addTab(tabHost.newTabSpec(tab2).
setIndicator(TAB 2).setContent(R.id.text2));
tabHost.addTab(tabHost.newTabSpec(tab3).
setIndicator(TAB 3).setContent(R.id.text3));
}
}
Android - Fundamentos
155
Android - Fundamentos
156