Escolar Documentos
Profissional Documentos
Cultura Documentos
Apostila Android2
Apostila Android2
Programando Passo-a-Passo
ndice analtico
Apresentao ..................................................................................................... 3
Introduo .......................................................................................................... 4
Instalando o Eclipse e o Android ..................................................................... 4
Criando a nossa primeira aplicao em Android......................................... 10
Usando Widgets............................................................................................... 18
Desenvolvendo uma aplicao que soma nmeros....................................... 18
Desenvolvendo uma aplicao simples de compras...................................... 23
Desenvolvendo uma aplicao de clculo de salrio ..................................... 26
Desenvolvendo uma aplicao de lista telefnica .......................................... 31
Desenvolvendo uma aplicao que visualiza imagens .................................. 34
Mudando de layouts ........................................................................................ 38
Desenvolvendo uma aplicao de cadastro................................................... 42
Lista de atributos............................................................................................. 53
Concluso ........................................................................................................ 58
Apresentao
Esta apostila tem por objetivo mostrar de modo fcil como programar na
nova plataforma para dispositivos mveis da Google (Android) usando o eclipse,
por meio de vrios programas e exemplos bem explicados.
Introduo
O Android a nova plataforma do Google voltada para dispositivos mveis.
Em 5 de novembro de 2007, a empresa tornou pblica a primeira plataforma
Open Source de desenvolvimento para dispositivos moveis baseada na
plataforma Java com sistema operacional Linux, na qual foi chamada de
Android. Essa plataforma mantida pela OHA (Open Handset Alliance), um
grupo formado por mais de 30 empresas as quais se uniram para inovar e
acelerar o desenvolvimento de aplicaes, servios, trazendo aos consumidores
uma experincia mais rica em termos de recursos, menos dispendiosa em
ternos financeiros para o mercado mvel.pode-se dizer que a plataforma
Android a primeira plataforma mvel completa, aberta e livre.
http://java.sun.com/javase/downloads/index.jsp
Depois de obter os programas e plugins citados acima, o primeiro
programa e ser instalado o eclipse. Para instalar o eclipse, simplesmente
descompacte-o em um local desejado.
Agora vamos instalar o SDK Android. o mesmo procedimento do eclipse,
descompactar em um local apropriado.
Por ultimo, vamos instalar o plugin do Android. Para isso, descompacte-o o
plugin do Android em um local desejado.
Agora execute o eclipse, se voc estiver executando-o pela primeira vez,
ele ir pedir para definir uma pasta padro (um Workspace). Defina a pasta e
continue o carregamento do eclipse. Depois de carregado, se for a primeira
vez, feche a Janela do Welcome (Bem-vindo). Agora vamos instalar o plugin
do Android, v no menu Help / Softwares Updates / Find and Install, conforme
figura abaixo:
Feito isso, clique no boto New Local site e indique o diretrio do ADT
j descompactado no local onde voc extraiu. Para ficar mais claro, dento do
diretrio ADT existem dois diretrios __MACOSX e um outro chamado ADTx.x.x , selecione este. Feito isso, clique em OK e ser exibida uma caixa de
dilogo conforme figura abaixo:
Na caixa de dilogo acima, basta clicar no boto OK. Pronto! O item foi
inserido, conforme a figura abaixo. Agora s clicar em Finish.
Depois de clicar em Finish na tela acima, ser mostrado uma nova tela
conforme figura abaixo.
Feito isso, clique no boto Next, e ser exibida uma tela de licensa de
software. Nesta tela s selecionar a opo I accpet the terms in the license
agreement e clique no boto Next. Na prxima tela, simplesmente clique no
boto Finish e na prxima tela, que mostrada na figura abaixo, clique no
boto Install All.
Aps clicar em Next na figura acima, ser exibida uma tela conforme
figura abaixo. Vamos chamar o nosso projeto Project name de ProjetoAndroid.
Em Package name vamos digitar com.android.hello. Em Activity name
digitaremos AppHello e em Application name digitaremos App Hello World,
s conferir na figura abaixo. Depois s clicar em Finish.
10
Pronto! Nosso projeto foi criado. Em Package Explorer, vamos dar uma
olhada na estrutura do Projeto, simplesmente clicando no boto +. s seguir
a figura abaixo, aproveite e abra o arquivo AppHello.java , tambm conforme
figura abaixo:
}
}
Diferentemente das aplicaes comuns de Java, toda classe para
aplicao Android deve ser derivada da classe Activity (Atividade) e possui
como mtodo principal, o mtodo onCreate. Dentro desse mtodo ele invoca o
mtodo onCreate da super classe passando mesmo parmetro (o icicle), logo
aps esse mtodo, vem o mtodo setContentView, responsvel por exibir a tela
da minha aplicao , baseado nos layouts xml, por padro ele chama o arquivo
main.xml.
11
Observe que aps o a primeira linha (prlogo xml), existe uma tag
chamada LinearLayout, responsvel por organizar os componentes exibidos na
tela, por padro os componentes so distribudos na vertical pelo atributo
android:orientation="vertical".
Dentro desta tag, existe uma chamada TextView, que representa um texto
a ser exibido na tela , por padro, ele ir exibir Hello World, AppHello atrvs do
atributo android:text="Hello World, AppHello".
- O diretrio values armazena valores estticos que podem ser utilizados por
um arquivo .XML. Normalmente esses valores estticos devem ser
armazenados no arquivo strings.xml. Veja o cdigo desse arquivo abaixo :
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">App Hello World</string>
</resources>
obtido
pela
atribuio
android:label="@string/app_name".
Como havia falado a aplicao Android nada pais do que a combinao
Java + XML. Agora, como um cdigo Java vai acessar um componente que est
escrito em XML ? Ah, essa a finalidade do arquivo R.java, ele funciona como
uma interface entre o cdigo Java e o cdigo XML, logo, se eu quiser
manipular em tempo de execuo um componente via Java, tenho que fazer
interface com esse arquivo. Em breve vamos ver como.
OBS: O arquivo R.java no pode ser modificado manualmente. Ele
modificado automaticamente de acordo com as mudanas feitas no projeto.
Vamos executar nossa aplicao. Va no Run / Open Run Dialog. Ser
aberta uma caixa de dilogo com vrios itens. Clique com o boto direito do
mouse no item Android Application e selecione a opo New, conforme a
figura abaixo:
13
Pra vocs que esto executando pela primeira vez o emulador do Android,
v que o emulador uma espcie de IPhone vermelho com umas teclas ao
lado. No incio mostra o ttulo Android. Depois, vem aquela bolinha vermelha
que fica batendo de um lado para outro, quando chega essa parte, normalmente
demora em torno de 2 a 10 minutos (dependendo da sua mquina.
recomendvel que voc tenha no mnimo 512 MB de memria e um
14
15
16
17
Usando Widgets
O que so os widgets ? Os widgets so os componentes que compem
uma aplicao Android, como o TextView, um Button, um EditText , um
RadioButton e etc.
19
Digite:
import android.widget.*;
import android.view.*;
Antes da linha:
@Override
Digite:
EditText ednum1,ednum2,edres;
20
Digite:
btMostrar.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
double num1 = Double.parseDouble(ednum1.getText().toString());
double num2 = Double.parseDouble(ednum2.getText().toString());
double res = num1 + num2;
edres.setText(String.valueOf(res));
}
});
Double.parseDouble(ednum1.getText().toString());
Cria uma varivel chamada num1 e atribui a ela o valor que est contido
em num1. Eu fao uso do mtodo parseDouble da classe Double pois o
contedo uma String. Observem que chamo o mtodo getText de ednum1
para retornar o contedo. Diferente de muitos mtodos de retorno de String,
esse mtodo getText no retorna uma String, mais sim um tipo chamado
Editable. Por isso, chamei o mtodo toString de getText para que me
retornasse uma string. A descrio da prxima linha e a mesma.
A linha:
edres.setText(String.valueOf(res));
22
/>
23
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Arroz (R$ 2,69)"
/>
<CheckBox
android:id="@+item/chkleite"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Leite (R$ 5,00)"
/>
<CheckBox
android:id="@+item/chkcarne"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Carne (R$ 10,00)"
/>
<CheckBox
android:id="@+item/chkfeijao"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Feijo (R$ 2,30)"
/>
<CheckBox
android:id="@+item/chkcoca"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Refrigerante Coca-Cola (R$ 2,00)"
/>
<Button
android:id="@+botao/bttotal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Total da compra"
/>
</LinearLayout>
android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;
24
CharSequence
message,
25
26
27
28
android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;
salario =
Double.parseDouble(edsalario.getText().toString());
RadioGroup rg = (RadioGroup)
findViewById(R.opcao.rbopcoes);
int op = rg.getCheckedRadioButtonId();
if(op==R.opcao.rb40)
novo_sal = salario + (salario * 0.4);
else
if(op==R.opcao.rb45)
novo_sal = salario + (salario * 0.45);
else
novo_sal = salario + (salario * 0.5);
});
}
}
29
30
31
package com.android.applist;
import
import
import
import
import
android.app.Activity;
android.os.Bundle;
android.widget.*;
android.widget.AdapterView.OnItemClickListener;
android.view.*;
lista.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView arg0, View arg1, int
arg2,long arg3) {
showAlert("Contato selecionado",0,lista.getSelectedItem().toString(),
"OK",false);
}
});
}
static final String[] contatos = new String[] {
"Alline","Lucas","Rafael","Gabriela","Silvana"
};
Cria uma constante chamada contatos, onde nela coloco alguns nomes.
Essa constante vai ser utilizada pela nossa lista. Para que eu posssa carregar
dos dados em uma ListView, preciso fazer uso da classe ArrayAdapter, como
mostra a instruo abaixo:
32
lista.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView arg0, View arg1, int
arg2,long arg3) {
showAlert("Contato selecionado",0,lista.getSelectedItem().toString(),
"OK",false);
}
});
33
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Imagem: Foto 1"
android:id="@+label/label"
/>
</LinearLayout>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Exibir Foto 1"
android:id="@+botao/bt1"
35
/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Exibir Foto 2"
android:id="@+botao/bt2"
/>
</LinearLayout>
android.app.Activity;
android.os.Bundle;
android.view.*;
android.widget.*;
36
}
}
(Foto 1)
37
(Foto 2)
Mudando de layouts
At agora, fizemos aplicaes em Android que utilizassem um nico layout.
Agora vamos fazer aplicaes Android que utilizem mais de um layout.
Vamos criar um novo projeto de demonstrao chamado ProjetoLayout,
conforme os dados abaixo:
Project Name: ProjetoLayout
Package Name : com.android.applayout
Activity Name: AppLayout
Application Name: Mudando de layouts
No arquivo main.xml, coloque o cdigo que exibido abaixo:
38
android:layout_height="fill_parent"
>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Voc est na tela principal"
/>
<Button
android:id="@+botao/botao1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ir para tela 2"
/>
</LinearLayout>
android.app.Activity;
android.os.Bundle;
android.view.*;
android.widget.*;
39
}
});
}
public void CarregaTela2() {
setContentView(R.layout.tela2);
Button bt2 = (Button) findViewById(R.botao.botao2);
bt2.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
CarregaTelaPrincipal();
}
});
}
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
CarregaTelaPrincipal();
}
}
40
(Tela Principal)
(Tela 2)
41
42
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Bem vindo a aplicao de Cadastro de Pessoas. Este
um pequeno programa de demonstrao de cadastro. Selecione uma das
opes abaixo:"
/>
<Button android:id="@+id/btcadpess"
android:text="Cadastrar Pessoas"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
<Button android:id="@+id/btlistpess"
android:text="Listar pessoas cadastradas"
android:layout_width="fill_parent"
android:layout_height="wrap_content"/>
</LinearLayout>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nome:"
/>
<EditText android:id ="@+campo/nome"
android:text=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Profisso:"
/>
43
</LinearLayout>
</LinearLayout>
44
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textSize="20sp"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Nome:"
/>
<TextView android:id ="@+field/nome"
android:textSize="20sp"
android:textColor="#FFFFFF"
android:text=""
android:layout_width="wrap_content"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textSize="20sp"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Profisso:"
/>
<TextView android:id ="@+field/profissao"
android:textColor="#FFFFFF"
android:textSize="20sp"
android:text=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<TextView
android:textSize="20sp"
android:textColor="#FFFF00"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Idade:"
/>
<TextView android:id ="@+field/idade"
android:textSize="20sp"
android:textColor="#FFFFFF"
android:text=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
</LinearLayout>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
45
android:layout_height="wrap_content">
<Button
android:id="@+lista/btvoltar"
android:text="Voltar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+lista/btanterior"
android:text="Anterior"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+lista/btproximo"
android:text="Proximo"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
</LinearLayout>
</LinearLayout>
import
import
import
import
android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;
int numreg,pos;
void CarregaTelaPrincipal () {
setContentView(R.layout.main);
btcadpess.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
CarregaTelaCadastro();
46
}});
btlistapess.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
CarregaListaPessoas();
}});
}
void CarregaTelaCadastro() {
setContentView(R.layout.cadastro);
reg.nome = ednome.getText().toString();
reg.profissao = edprof.getText().toString();
reg.idade = edidade.getText().toString();
if(pri==null)
pri=reg;
reg.Ant = ult;
if(ult==null)
ult=reg;
else {
ult.Prox = reg;
ult=reg;
}
numreg++;
showAlert("Aviso", 0,"Cadastro efetuado com sucesso", "OK",
false);
}
catch(Exception e) {
showAlert("Erro", 0,"Erro ao cadastrar", "OK", false);
}}
});
btvoltar.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
47
CarregaTelaPrincipal();
}
});
}
void CarregaListaPessoas() {
if(numreg==0) {
showAlert("Aviso", 0,"Nenhum registro cadastrado", "OK",
false);
CarregaTelaPrincipal();
return;
}
setContentView(R.layout.listacadastrados);
pos=1;
aux=pri;
TextView fnome = (TextView)findViewById(R.field.nome);
TextView fidade = (TextView)findViewById(R.field.idade);
TextView fprof = (TextView)findViewById(R.field.profissao);
Button btanterior = (Button) findViewById(R.lista.btanterior);
Button btproximo = (Button) findViewById(R.lista.btproximo);
Button btvoltar = (Button) findViewById(R.lista.btvoltar);
fnome.setText(aux.nome);
fidade.setText(aux.idade);
fprof.setText(aux.profissao);
btvoltar.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
CarregaTelaPrincipal();
}
});
btanterior.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
if(pos==1)
return;
pos--;
aux=aux.Ant;
TextView fnome = (TextView)findViewById(R.field.nome);
TextView fidade =
(TextView)findViewById(R.field.idade);
TextView fprof =
(TextView)findViewById(R.field.profissao);
fnome.setText(aux.nome);
fidade.setText(aux.idade);
fprof.setText(aux.profissao);
}
});
btproximo.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
if(pos==numreg)
return;
pos++;
48
aux=aux.Prox;
TextView fnome = (TextView)findViewById(R.field.nome);
TextView fidade =
(TextView)findViewById(R.field.idade);
TextView fprof =
(TextView)findViewById(R.field.profissao);
fnome.setText(aux.nome);
fidade.setText(aux.idade);
fprof.setText(aux.profissao);
}
});
}
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
numreg=0;
pri=ult=null;
CarregaTelaPrincipal();
}}
49
com a utilizao essas variveis que fao o cadastro dos dados das
pessoas. Vamos para o evento click do boto btcadastrar situado dentro do
mtodo CarregaTelaCadastro e analisar algumas linhas de cdigo. A linha:
reg = new Registro();
(Tela Principal)
51
(Tela de cadastro)
52
Lista de atributos
Agora irei mostrar alguns atributos comumente usados em uma aplicao
Android de alguns componentes, principalmente os componentes que ns
usamos nas aplicaes acima.
Aqui vou descrever os atributos usados nos componentes (no formato
XML) e quais so os mtodos referentes aos atributos descritos, ou seja, vamos
supor que queira modificar o valor de um determinado atributo em tempo de
execuo, ento cada atributo possui um mtodo, para que seu valor possa ser
modificado em tempo de execuo.
android:text: Essa propriedade serve para mostrar o texto que passado
como parmetro.
Mtodo relacionado: setText(CharSequence)
Exemplos:
XML
android:Text=Hello World
Java
texto.setText(Hello World)
Widgets que possuem
RadioButton, CheckBox, Button
essa
propriedade:
TextView,
EditText,
essa
propriedade:
TextView,
EditText,
53
essa
propriedade:
TextView,
EditText,
Exemplos:
XML
54
android:numeric =true
Java
Em Java voc deveria definir um conjunto de instrues para capturar as
entradas de dados de modo que as entradas atendam a essa finalidade.
Widgets que possuem essa propriedade: TextView, EdiText
android:textStyle: Essa propriedade serve para definir um estilo a fonte
(negrito e/ou itlico).
Mtodos relacionados: setTypeface(Typeface);
Exemplos:
XML
android:textStyle =bold
android:textStyle =italic
android:textStyle =bold_italic
Java
texto. setTypeface (Typeface.DEFAULT_BOLD);
texto. setTypeface (Typeface.DEFAULT_ITALIC);
texto. setTypeface (Typeface.DEFAULT_BOLD_ITALIC);
OBS:A classe Typeface se encontra no pacote android.graphics.
Widgets
que
possuem
EdiText,RadioButton,CheckBox,Button.
essa
propriedade:
TextView,
setTextSize(int
Exemplos:
XML
android:textSize =10px
android:textStyle =20sp
55
Java
texto. setTextSize (TypedValue.COMPLEX_UNIT_PX,10); //Unidade em
pixels
essa
propriedade:
TextView,
essa
propriedade:
TextView,
Exemplos:
XML
android:capitalize =sentences
Java
Em Java voc deveria definir um conjunto de instrues para
capturar as entradas de dados de modo que as entradas atendam a essa
finalidade.
Widgets
que
possuem
EdiText,RadioButton,CheckBox,Button.
essa
TextView,
propriedade:
relacionados:
Exemplos:
XML
android:password =true
Java
Em Java voc deveria definir um conjunto de instrues para capturar as
entradas de dados de modo que as entradas atendam a essa finalidade.
Widgets que possuem essa propriedade: TextView, EdiText
57
Concluso
Nesta apostila aprendemos a programar o bsico do Android. Vimos um
pouco sobre a plataforma Android, como ela surgiu e tudo mais. Aprendemos a
instalar o eclipse e os plugins necessrios para o funcionamento do Android,
incluindo o SDK. Aprendemos a construir uma aplicao Android bsica e
depois conhecemos os componentes (widgets) que constituem uma aplicao
Android para a construo de aplicaes mais interessantes. Vimos tambm
como trocar de layouts em uma aplicao Android tendo como exemplo prtico,
uma aplicao de cadastro e por ltimo, conhecemos algumas propriedades
comumente usadas em alguns widgets que constituem uma aplicao Android.
Abraos
58