Você está na página 1de 58

Apostila de

Programando Passo-a-Passo

De : Luciano Alves (lucianopascal@yahoo.com.br)

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.

Instalando o Eclipse e o Android


Para a elaborao desse material, eu fiz o uso do Eclipse Europa (Eclipse
3.3.1.1 para Windows) e o SDK do Android verso m5-rc15 e o plugin do
Android para o Eclipse ADT-0.4.0. Qualquer verso (de preferncia superior)
dos programas citados acima serve. Claro , para que toda essa aplicao
funcione necessrio que voc tenha instalado antes de tudo, a Mquina Virtual
Java (de preferncia a verso 5 ou posterior). Bom, mos a obra.
Deixo aqui os links para download dos itens citados acima:
SDK do Android e o plugin do Android (mesmas verses citadas acima ou
superiores):
http://code.google.com/android/download.html
Eclipse Europa (ou superior)
http://www.eclipse.org/downloads/
Para saber se voc possui uma Maquina virtual Java, entre no prompt de
comando de digite a seguinte linha:
java version
Se mostrar algo parecido como mostra o cdigo abaixo:
java version "1.6.0_07"
Java(TM) SE Runtime Environment (build 1.6.0_07-b06)
Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing)
Beleza, voc possui uma mquina virtual Java instalada no seu
computador, caso contrrio, entre no Site da Sun e faa o seu download. Aqui
est o link
4

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:

Selecione a opo Search for new features to install e clique no boto


Next. Ser exibida uma tela conforme a 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.

Clique no sinal + e faa as selees dos plugins de acordo com a


prxima figura que exibida a seguir. Caso voc esteja utilizando uma outra
verso do plugin voc pode selecionar todas as opes desde nenhuma delas
resulte em alguma mensagem de erro, como no caso nesta verso do plugin
que utilizei, o ltimo item (Android Editors) no pode ser instalado pois requer a
existncia de um outro plugin.
7

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 instalar os plugins, ser exibida uma mensagem, conforme a figura


abaixo, recomendando ao usurio que ele reinicie o eclipse. Simplesmente
clique no boto Yes.

Aps o eclipse ter reiniciado, vamos fazer agora as configuraes para


fazer conexo com o emulador do Android. Vamos no menu Window /
Preferences. Aberta a caixa de dilogo, selecione o item Android, ser
mostrada duas mensagens de erro, ignore-as. Agora vamos indicar o local onde
se encontra
o emulador do Android, simplesmente clicando no boto
Browse... e indicando o seu local onde foi instalado. Feito isso, se a sua tela
est de acordo com a tela da figura abaixo, se estiver (mostrando l no topo o
ttulo Android) o diretrio indica est correto, s clicar em OK.

Criando a nossa primeira aplicao em Android


Agora vamos criar um novo projeto Android indo no menu File / New /
Other. Selecion o projeto Android conforme figura abaixo. Depois de
selecionar, clique em Next:

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:

Bom, agora irei descrever a estrutura de um projeto Android. Observem


que dentro da pasta ProjetoAndroid existe uma pasta chamada src, dentro
dela que ficam os cdigos fonte java das aplicaes. Observem que o arquivo
AppHello.java se encontra dentro do pacote com.android.hello (Esse pacote
tambm uma pasta). Esse arquivo a nossa aplicao Android. Vou
descrever em detalhes o arquivo AppHello.java (Veja o cdigo abaixo):
package com.android.hello;
import android.app.Activity;
import android.os.Bundle;
public class AppHello extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

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

Dentro da pasta ProjetoAndroid existe um diretrio chamado res, onde


ficam armazenados todos os recursos utilizados pela aplicao. Dentro do
diretrio res existem trs diretrios, cada um deles com uma finalidade, que
descreverei agora:
- O diretrio drawable armazena todas as imagens que irei utilizar na
minha aplicao. Por padro , ele tem uma imagem chamada Icon.png, que
usada como cone da aplicao Android.
- O diretrio layout armazena todas os layouts da aplicao Android, que
normalmente so arquivos .xml. Para quem conhece a combinao HTML +
JavaScript, o Android similar, a combinao de XML + Java, logo todos os
nosso componentes vo ser adicionados usando tags XML. Por padro, o
arquivo de layout o main.xml. Veja o seu cdigo abaixo:
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Hello World, AppHello"
/>
</LinearLayout>

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>

Observem que dentro desse arquivo eu declaro um valor esttico chamado


app_name, cujo valor App Hello World.
12

Dentro da pasta ProjetoAndroid, existe um arquivo chamado


AndroidManifest.xml , esse arquivo o sistema nervoso de uma aplicao em
Android. nele que ficam as definies referentes aplicao. Veja o cdigo
dele abaixo:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.android.hello">
<application android:icon="@drawable/icon">
<activity android:name=".AppHello"
android:label="@string/app_name">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category
android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>

Observem algumas tags interessantes. A tag <application> possui o


atributo android:icon, no qual especifico o cone da aplicao. Como havia
citado anteriormente, todas as imagens ficam no diretrio drawable e nesse
diretrio existe um arquivo de chamado icon.png que ser o cone da minha
aplicao. Logo, para usar esse cone neste atributo, deve-se passar o valor
@drawable/icon .Observem que quando informamos o cone, ele deve ser
informado sem a extenso (nesse caso, PNG).
Observem agora a tag <activity>, ela define uma atividade (Activity),.
Dentro desta tag, eu possuo o atributo chamado android:label que define o ttulo
da minha aplicao. O ttulo que ser exibido e o valor que est armazenado no
valor
esttico
app_name.
Isso

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

Feito isso, na propriedade name ao lado digite AppAndroid. Em project


selecione o projeto que criamos em clicando no boto Browse, com o nome de
ProjetoAndroid. E por ltimo, em Activity, selecione a atividade
com.android.hello.AppHello. Qualquer dvida, siga a figura abaixo:

Agora s clicar em Run e rodar a aplicao. Quando o emulador Android


executado, abre junto com ele uma caixa de dialogo, conforme a figura abaixo.
Normalmente, eu desmarco a opo Send usage statistics to Google e clico
em Proceed.

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

processador bem rpido para um bom desempenho da execuo) para a


aplicao ser exibida , mesmo sendo essa aplicao algo muito simples.

Passado o tempo que citei acima, ser mostrada a nossa aplicao e


tambm duas mensagens (ou uma dependendo de alguns casos). Se aparecer,
clique no boto Force Close ou com o mouse ou com o boto vermelho central
situado no aparelho. Uma demonstrao dessa situao situa-se na figura
abaixo:

Pronto, nossa aplicao est rodando sem problemas. Veja a figura


abaixo:

15

Esse emulador j vem com uma srie de recursos como Navegador,


Aplicaes de demonstrao, Mapas, Lista de contatos e etc.
Se voc neste exato momento fechou o emulador aps a execuo da
aplicao, vou te dizer uma coisa: No era para voc ter feito isso. Se voc
esperou muito tempo para ver essa aplicao em execuo, ao executar
novamente a aplicao, voc vai esperar o mesmo. Nessa situao, ao executar
pela primeira vez o emulador, e caso v executar outros programas, minimize o
emulador ao invs de fechar, pois se voc esperou muito tempo para executar
esse programa, com ele minimizado, ao executar um outro programa, o eclipse
vai fazer uso do emulador j aberto em vez de abrir outro, com isso, a aplicao
levar em torno de 7 a 12 segundos em mdia para ser executada. Nunca
esquea isso!
Vamos modificar essa aplicao. Minimize o emulador e vamos abrir o
arquivo main.xml. Na tag TextView que j havia explicado a vocs, possui um
atributo chamdado android:text, onde nele defino o ttulo que ser exibido,
modifique agora essa prorpiedade com o seguinte valor (ttulo), conforme o
cdigo abaixo:
android:text="Fala cara, beleza ???"

16

Feito isso, salve a aplicao e execute novamente a aplicao. O resultado


mostrado abaixo:

Vamos fazer mais uma outra modificao na nossa aplicao. Abra


novamente o arquivo main.xml, observe que ele possui um TextView certo ?
Vamos colocar mais duas TextViews, a primeira TextView, no atributo
android:text ter o ttulo Primeira frase, o segundo TextView ter o ttulo
Segunda Frase e assim sucessivamente. Veja como ficar o cdigo do arquivo
main.xml :
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Primeira Frase."
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Segunda Frase"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Terceira Frase???"
/>
</LinearLayout>

Feito isso, salve o arquivo e execute novamente a aplicao, o resultado


mostrado na figura abaixo:

17

E aeh, ta entendo aos poucos como se faz aplicaes Android ? Com


ceretza que sim! Agora vamos aprofundar um pouco e fazer aplicaes mais
interessantes com o uso dos Widgets (componentes) existentes na plataforma
Android.

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.

Desenvolvendo uma aplicao que soma nmeros


Vamos criar agora uma aplicao que faa uso de um desses widgets. Crie
um novo projeto Android com os seguintes dados:
Project Name: ProjetoSoma
Package Name : com.android.appsoma
Activity Name: AppSoma
Application Name: Soma Nmeros
Criado o projeto, vamos no arquivo main.xml desse projeto. Pelo nome do
projeto, podemos ver que essa aplicao uma aplicao de calculo. Essa
aplicao vai ler dois nmeros inteiros e no final, ir mostrar a soma deles,
simples.
Vamos no arquivo main.xml desse projeto e vamos fazer as seguintes
modificaes. Quero que voc copie e cole o abaixo e coloque no arquivo
main.xml.
18

<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Digite o primeiro nmero"
/>
<EditText
android:id="@+campo/num1"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Digite o segundo nmero"
/>
<EditText
android:id="@+campo/num2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Resultado"
/>
<EditText
android:id="@+campo/res"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<Button
android:id="@+botao/btmostrar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mostrar"
/>
</LinearLayout>

Bom, vamos a explicao do cdigo acima. Observem que possuo uma


TextView com o ttulo Digite o primeiro nmero. Logo abaixo dela , eu possuo
uma widget do tipo EditText, que exibe um campo onde vou digitar o nmero.
Essa widget possui uma propriedade chamada android:id, que serve para dar
nome ao componente, ou seja, funciona como um identificador daquele
componente.

19

O nome de um widget, deve estar nesse formato:


@+<nome>/<nome>
Se observamos, o valor desse atributo : @+campo/num1. como se
campo representasse um grupo e num1 representasse o nome do
componente. Voc ir entender essa notao mais a frente.
Abaixo dessa widget, temos outra do tipo TextView com o ttulo Digite o
segundo nmero. Depois temos um outro widget do tipo EditText, cujo nome :
@+campo/num2.
Abaixo dessa widget, temos um terceiro TextView com o ttulo Resultado.
Depois temos um outro widget do tipo EditText, cujo nome : @+campo/res.
Por ltimo, temos uma widget do tipo Button, cuja finalidade mostrar um
boto para podermos clic-lo. Ele possui um ttulo com o valor Mostrar e seu
nome : @+botao/btmostrar.
Beleza, agora vamos abrir o cdigo do arquivo AppSoma.java, para
acessar via cdigo Java, os componentes que adicionamos via XML. Siga os
passos aqui descritos para voc como esse processo feito. Aps a linha
import android.os.Bundle;

Digite:
import android.widget.*;
import android.view.*;

Antes da linha:
@Override

Digite:
EditText ednum1,ednum2,edres;

Agora vamos a explicao do cdigo acima. Como voc pode ver , os


widgets tambm podem ser usados no nosso cdigo Java. Se no cdigo XML
eu possuir um widget do tipo EditText, para acessar esse componente pelo
Java, preciso fazer uso da classe EditText. Cada widget no XML possui o seu
respectivo em classe Java, logo, se possui um widget Button, para acessa-lo
devo fazer uso da classe Button e assim vai.
Agora, aps a linha:
setContentView(R.layout.main);

Digite as seguintes linhas de cdigo:

20

ednum1 = (EditText) findViewById(R.campo.num1);


ednum2 = (EditText) findViewById(R.campo.num2);
edres = (EditText) findViewById(R.campo.res);
Button btMostrar = (Button) findViewById(R.botao.btmostrar);

Agora vou explicar as linhas acima. A linha:


EditText ednum1 = (EditText) findViewById(R.campo.num1);

Faz referncia ao primeiro EditText, atravs do mtodo findViewById com


o parmetro R.campo.num1.
Ah, se lembra o nome da primeira EditText que est no cdigo XML? Ela
se chama @+campo/num1.
Vamos entender, observe que para fazer referncia ao EditText pelo
mtodo findViewById eu passei o parmetro R.campo.num1.
J na segunda linha, para fazer a referncia segunda EditText, cujo
nome @+campo/num2, pelo mtodo findViewById, passei o parmetro
R.campo.num2.
Como voc pode ver, estou fazendo uso da classe R, que funciona como
interface entre o cdigo Java e o arquivo XML.
O procedimento o mesmo tanto para o terceiro EditText e o Button.
Agora iremos adicionar um evento Click, no nosso Button, pois quando eu
clicar no boto, ele dever mostrar a soma dos nmeros. Ento, logo aps a
linha:
Button btMostrar = (Button) findViewById(R.botao.btmostrar);

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

}
});

Toda vez que eu clicar no boto, ele ir mostrar o resultado na terceira


EditText referente ao resultado da soma. timo! Vamos executar a nossa
21

aplicao ? Para executar faa os mesmos procedimentos que j mostrei. O


resultado da execuo dessa aplicao voc v na figura abaixo:

Irei descrever o cdigo do evento Click. O mtodo setOnClickLisneter


serve para definir um evento de Click a um componente. Como parmetro,
criamos uma instncia de OnClickListener e dentro dessa instncia existe o
mtodo chamado onClick, que ser disparado toda vez que o boto for clicado.
A linha:
double num1 =

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

Retorna para a terceira EditText referenciada por edres, a soma dos


valores. Isso possvel chamado o mtodo setText, como o resultado est num
tipo double e setText aceita somente parmetros do tipo String e Editable, fiz a
converso desse valor atravs do mtodo valueOf da classe String.

22

Beleza! Com esse conhecimento obtido at agora, voc j tem capacidade


para fazer uma aplicao bsica em Android.
Bom , ainda temos muitos mais pela frente.

Desenvolvendo uma aplicao simples de compras


Agora vamos fazer uma outra aplicao Android. Essa aplicao vai fazer
uso da widget CheckBox, que funciona como uma opo onde podemos marcar
e desmarcar. Nossa aplicao consiste em um simples sistemas de compras
onde possuo cinco produtos, Arroz (R$ 2,69) , Leite (R$ 5,00) , Carne (R$
10,00), Feijo (R$ 2,30) e Refrigerante coca-cola (R$ 2,00). Nessa aplicao eu
marco os itens que quero comprar e no final o sistema mostra o valor total das
compras.
Como havia dito, a gente vai fazer uso da CheckBox, a estrutura dela a
similar ao da EditText e TextView, conforme o cdigo abaixo:
<CheckBox
android:id="@+campo/chkleite"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Leite"

/>

Bom, vamos criar um novo projeto chamado ProjetoCompras. Siga os


dados do projeto abaixo:
Project Name: ProjetoCompras
Package Name : com.android.appcompra
Activity Name: AppCompra
Application Name: Sistema de Compras
Vamos no arquivo main.xml desse projeto e coloque o cdigo abaixo:
<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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Escolha o seu produto"
/>
<CheckBox
android:id="@+item/chkarroz"

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>

Bom , esse o nosso layout com cinco CheckBoxs referentes ao itens de


compra e um Button, que quando clicado mostra o valor total de compras.
Agora vamos modificar o arquivo AppCompra.java. O cdigo desse arquivo
ser como o cdigo que exibido abaixo:
package com.android.appcompra;
import
import
import
import

android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;

public class AppCompra extends Activity {


CheckBox chkarroz,chkleite,chkcarne,chkfeijao,chkcoca;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);

24

chkarroz = (CheckBox) findViewById(R.item.chkarroz);


chkleite = (CheckBox) findViewById(R.item.chkleite);
chkcarne = (CheckBox) findViewById(R.item.chkcarne);
chkfeijao = (CheckBox) findViewById(R.item.chkfeijao);
chkcoca = (CheckBox) findViewById(R.item.chkcoca);
Button bttotal = (Button) findViewById(R.botao.bttotal);
bttotal.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
double total=0;
if(chkarroz.isChecked())
total += 2.69;
if(chkleite.isChecked())
total += 5.00;
if(chkcarne.isChecked())
total += 10.00;
if(chkfeijao.isChecked())
total += 2.30;
if(chkcoca.isChecked())
total += 2.00;
showAlert("Valor total da compra", 0,String.valueOf(total),
"OK", false);
}
});
}
}

Descrevendo o cdigo do evento click: Dentro do evento eu crio uma


varivel chamada total que armazena o valor total da compra. Observe que eu
tenho cinco estruturas ifs onde cada uma verifica se um determinado item foi
marcado, se foi, incrementa o valor do item com o valor da varivel total.
Observe que eu fao uso do mtodo showAlert cuja finalidade mostrar uma
mensagem na tela. A mensagem a ser mostrada o valor total da compra.
Os parmetros do showAlert so:
showAlert(CharSequence title, int iconId,
CharSequence buttonText, boolean cancelable)

CharSequence

message,

title : Corresponde ao ttulo da mensagem


iconId: Corresponde ao cone a ser exibido, quando o valor zero, significa
que no ser usado nenhum cone.
message: Corresponde a mensagem
cancelable: Define se ela ser cancelvel.
Vamos roda nossa aplicao ? O resultado voc confere na figura abaixo:

25

Desenvolvendo uma aplicao de clculo de salrio


Bom, agora vamos fazer uma outra aplicao. Essa aplicao que vamos
desenvolver agora consiste em um sistema que vai ler o salrio de um
funcionrio e vai permitir que voc escolha o seu percentual de aumento que
pode ser de 40% , 45% e 50% e no final o sistema ir mostrar o salrio
reajustado com o novo aumento. Bom, vamos l! Crie um novo projeto Android
com os seguintes dados:
Project Name: ProjetoSalario
Package Name : com.android.appsal
Activity Name: AppSalario
Application Name: Clculo do salrio
Nessa aplicao vamos fazer uso da widget RadioButton, que funciona
como um item de opo, podendo ser selecionado entre vrios outros. Veja a
sua sintaxe abaixo:
<RadioButton
android:id="@+item/chkcoca"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Refrigerante Coca-Cola (R$ 2,00)"
/>

Porm, para que a mltipla escolha funcione, necessrio que os


RadioButtons fiquem dentro de uma RadioGroup, que funciona como agrupador
de RadioButons. Veja um exemplo abaixo:

26

<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Escolha uma opo:"
/>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:id="@+opcao/opcoes"
>
<RadioButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Opco 1"
/>
<RadioButton
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Opco 2"
/>
</RadioGroup>
</LinearLayout>

Executando a aplicao, ser exibido a seguinte tela:

27

Bom, agora vamos fazer a nossa aplicao. No arquivo main.xml, coloque


o cdigo abaixo:
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Digite seu salrio (R$)"
/>
<EditText
android:id="@+campo/edsalario"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<TextView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Qual ser o percentual ?"
/>
<RadioGroup xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:id="@+opcao/rbopcoes"
>
<RadioButton
android:id="@+opcao/rb40"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="40%"
/>
<RadioButton
android:id="@+opcao/rb45"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="45%"
/>
<RadioButton
android:id="@+opcao/rb50"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="50%"
/>
</RadioGroup>
<Button
android:id="@+botao/btmostrar"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Mostrar novo salrio"
/>
</LinearLayout>

28

No arquivo AppSalario.java, coloque o cdigo abaixo:


package com.android.appsal;
import
import
import
import

android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;

public class AppSalario extends Activity {


@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button btmostrar = (Button) findViewById(R.botao.btmostrar);
btmostrar.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
double salario, novo_sal;
EditText edsalario = (EditText)
findViewById(R.campo.edsalario);

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

showAlert("Novo salrio", 0,"Seu novo salrio : R$" +


String.valueOf(novo_sal), "OK", false);

});
}
}

29

Vamos a explicao de alguns cdigos interessantes. Dentro do evento


click, eu realizo o clculo do novo salrio do funcionrio. Os primeiros cdigos
do evento so similares a de programas anteriores que j foram devidamente
explicados. A linha:
int op = rg.getCheckedRadioButtonId();

Cria uma varivel op e retorna para ela o Id da opo selecionada, ou seja,


qual RadioButton foi selecionada.
Agora na condio:
if(op==R.opcao.rb40)

Verifico se a opo de 40% foi selecionada, se for, realize o clculo do


salrio com o reajuste de 40%. A mesma explicao e vlida para o clculo dos
outros reajustes. Agora vamos executar a nossa aplicao. O resultado voc v
na figura abaixo:

At aqui voc j pode fazer timas aplicaes em Android.

30

Desenvolvendo uma aplicao de lista telefnica


Agora vamos fazer uma nova aplicao em Android. Essa aplicao
consiste em uma lista telefnica j pronta com contatos. Quando selecionamos
um contato, ele mostra na tela uma mensagem com o nome selecionado. A
nossa aplicao vai fazer uso do widget chamado ListView, que exiba uma lista
contendo valores que podem ser selecionados. Veja a estrutura de uma
ListView abaixo:
<ListView
android:id="@+id/lista"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>

Bom, vamos criar um novo projeto chamado ProjetoLista. Siga os dados


abaixo:
Project Name: ProjetoLista
Package Name : com.android.applist
Activity Name: AppList
Application Name: Lista de contatos
No arquivo main.xml, coloque o seguinte cdigo:
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Escolha um contato"
/>
<ListView
android:id="@+id/lista"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
/>
</LinearLayout>

31

package com.android.applist;

import
import
import
import
import

android.app.Activity;
android.os.Bundle;
android.widget.*;
android.widget.AdapterView.OnItemClickListener;
android.view.*;

public class AppList extends Activity {


public ListView lista;
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
ArrayAdapter<String> adapter = new
ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,
contatos);
lista = (ListView) findViewById(R.id.lista);
lista.setAdapter(adapter);

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"
};

Vamos analisar alguns cdigos acima. A linha


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

ArrayAdapter<String> adapter = new


ArrayAdapter<String>(this,android.R.layout.simple_list_item_1,
contatos);

A instruo mostrada acima cria uma instncia da classe ArrayAdapter


chamada adapter onde carrego nela o vetor de Strings da constante contatos.
A instruo:
lista.setAdapter(adapter);

Carrega os valores para a ListView, que est contido o objeto adapter.


Como havia falado, quando clicssemos em um item, o sistema mostraria
uma mensagem do item selecionado. Isso conseguido fazendo uso da
interface OnItemClickListener, como mostra a instruo abaixo:

lista.setOnItemClickListener(new OnItemClickListener(){
public void onItemClick(AdapterView arg0, View arg1, int
arg2,long arg3) {

showAlert("Contato selecionado",0,lista.getSelectedItem().toString(),
"OK",false);
}
});

Toda vez que clicarmos em um item da lista, o mtodo onItemClick ser


disparado e ser executado o comando abaixo:
showAlert("Contato
selecionado",0,lista.getSelectedItem().toString(),
"OK",false);

Que exibe o item selecionado. A obteno do item clicado e feita


chamando o mtodo getSelectedItem() . Porm, como ele retorna um tipo
Object, preciso converter para String o item clicado, atravs do mtodo
toString.
Vamos executar a aplicao. O resultado voc v na figura abaixo:

33

Desenvolvendo uma aplicao que visualiza imagens


Agora vamos desenvolver mais uma aplicao. Essa aplicao permite
que voc visualize images, tudo atravs do widget ImageView. A sua estrutura
voc confere abaixo:
<ImageView id="@+id/imagem"
android:src="@drawable/foto1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

Agora crie um novo projeto conforme os dados abaixo:


Project Name: ProjetoImagem
Package Name : com.android.appimage
Activity Name: AppImage
Application Name: Visualizando Imagens
Antes de codificar, quero que voc coloque duas imagens JPEG (com a
extenso .jpg) dentro da pasta res/drawable. Um arquivo deve se chamar
foto1.jpg e o outro foto2.jpg. Para importar um arquivo, clique com o boto
direito do mouse e selecione Import, depois selecione File System. Clique no
boto browser para selecionar o diretrio onde se encontram as imagens,
depois de selecionado, marque os dois arquivos (imagens) para que eles sejam
importados para a pasta res/drawable . Veja a figura abaixo:
34

Depois disso, s clicar em Finish.


Agora no arquivo main.xml, coloque o cdigo abaixo:
<?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"
>
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
>
<ImageView android:id="@+id/imagem"
android:src="@drawable/foto1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

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

Vamos analisar o atributo android:src da widget ImageView. Esse atributo


permite especificar a imagem a ser aberta, no caso, ser exibida a imagem
foto1.jpg atravs do seguinto valor: @drawable/foto1. @drawable
corresponde a pasta onde se encontra a imagem e foto1 o nome da imagem,
que deve ser informada sem a sua extenso. Logo se eu ver de inicio a segunda
imagem, usaria o seguinte valor: @drawable/foto2.
Agora no arquivo AppImage.java coloque o cdigo abaixo:
package com.android.appimage;
import
import
import
import

android.app.Activity;
android.os.Bundle;
android.view.*;
android.widget.*;

public class AppImage extends Activity {


/** Called when the activity is first created. */
ImageView imagem;
TextView txt;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
setContentView(R.layout.main);
Button btfoto1 = (Button) findViewById(R.botao.bt1);
Button btfoto2 = (Button) findViewById(R.botao.bt2);
imagem = (ImageView) findViewById(R.id.imagem);
txt = (TextView) findViewById(R.label.label);
btfoto1.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
imagem.setImageResource(R.drawable.foto1);
txt.setText("Imagem: Foto 1");
}
});
btfoto2.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
imagem.setImageResource(R.drawable.foto2);
txt.setText("Imagem: Foto 2");
}
});

36

}
}

Agora vamos analisar alguns trechos de cdigos. Vamos no evento Click


referente a abertura da primeira imagem. O cdigo:
imagem.setImageResource(R.drawable.foto1);

responsvel por abrir a imagem foto1.jpg e exibi-la no componente.


Observe que foi passado o parmetro R.drawable.foto1 onde drawable
corresponde a pasta e foto1 corresponde ao arquivo foto1.jpg. Logo aps
vem o cdigo:
txt.setText("Imagem: Foto 1");

Cuja finalidade mudar o ttulo da TextView , de acordo com a String


passada como parmetro.
O comentrio acima o mesmo para o segundo boto referente a abertura
da segunda imagem.
Vamos executar a nossa aplicao. O resultado voc v nas imagens
abaixo:

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

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

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>

timo! Agora dentro da pasta res/layout , crie um novo arquivo em


branco chamado tela2.xml e coloque o cdigo abaixo:
<?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:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Voc est na tela 2"
/>
<Button
android:id="@+botao/botao2"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Ir para tela principal"
/>
</LinearLayout>

Depois disso, modifique o arquivo AppLayout.java, conforme o cdigo


abaixo:
package com.android.applayout;
import
import
import
import

android.app.Activity;
android.os.Bundle;
android.view.*;
android.widget.*;

public class AppLayout extends Activity {


/** Called when the activity is first created. */
public void CarregaTelaPrincipal() {
setContentView(R.layout.main);
Button bt1 = (Button) findViewById(R.botao.botao1);
bt1.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0) {
CarregaTela2();

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

Observem que nesta classe eu criei dois mtodos : CarregaTelaPrincipal e


CarregaTela2. Toda aplicao que utilize mais de um layout, o carregamento
dos layouts e de seus respectivos widgets devem estar separados em funes
desenvolvidas para esse propsito. Logo, o mtodo CarregaTelaPrincipal
carrega o layout principal e seus respectivos componentes, o mesmo vlido
para o mtodo CarregaTela2, que carrega o layout da tela 2 e seus respectivos
componentes. Feito isso, execute a aplicao. Veja o resultado abaixo:

40

(Tela Principal)

(Tela 2)

41

Desenvolvendo uma aplicao de cadastro


Agora para encerrar, vamos desenvolver uma aplicao de cadastro. Essa
aplicao consiste em um cadastro de pessoas onde posso cadastrar dados
como: Nome, Profisso e Idade. Essa aplicao vai fazer uso de trs layouts:
O layout principal: Esse layout dar acesso ao layout de cadastro e o
layout de visualizao de dados.
O layout de cadastro: Nesse layout onde ser efetuado o cadastro dos
dados da pessoa.
O layout de visualizao de dados: Nesse layout onde sero visualizados
os dados cadastrados. Se nenhum dado foi cadastrado, ser exibida uma
mensagem informando essa situao.
Nessa aplicao, para armazenar os dados, eu fao um de uma estrutura
de dados FIFO ou Fila. Nessa estrutura, os dados so armazenados em
seqncia, e acessados em seqncia , ou seja, o primeiro dado a entrar ser o
primeiro a ser exibido.
Bom, vamos construir a nossa aplicao. Crie um novo projeto com os
dados abaixo:
Project Name: ProjetoAppCadastro
Package Name : com.android.appcadastro
Activity Name: AppCadastro
Application Name: Aplicao de Cadastros
Dentro da pasta res/drawable, coloque a figura que acompanha este
material, ela se chama profile.png.
Agora no arquivo main.xml coloque o cdigo abaixo:
<?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="wrap_content"
>
<ImageView android:id="@+id/imagebutton"
android:src="@drawable/profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView

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>

Dentro da pasta res/layout , crie um arquivo chamado cadastro.xml com o


seguinte cdigo:
<?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"
>
<ImageView android:id="@+id/imagebutton"
android:src="@drawable/profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Mdulo de cadastro. Cadastre seus dados abaixo:"
/>

<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

<EditText android:id ="@+campo/profissao"


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="Idade:"
/>
<EditText android:id ="@+campo/idade"
android:text=""
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:id="@+cadastro/btcadastro"
android:text="Cadastrar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<Button
android:id="@+cadastro/btvoltar"
android:text="Voltar"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

</LinearLayout>
</LinearLayout>

Agora dentro da pasta res/layout , crie um arquivo chamado


listacadastros.xml com o seguinte cdigo:
<?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"
>
<ImageView android:id="@+id/imagebutton"
android:src="@drawable/profile"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>
<TextView
android:textSize="20sp"
android:textColor="#FFFFFF"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Lista das pessoas cadastradas."

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>

Agora no arquivo AppCadastro.java, coloque o seguinte cdigo:


package com.android.appcadastro;

import
import
import
import

android.app.Activity;
android.os.Bundle;
android.widget.*;
android.view.*;

public class AppCadastro extends Activity {


/** Called when the activity is first created. */
Registro pri,reg,ult,aux;
EditText ednome,edprof,edidade;

int numreg,pos;

void CarregaTelaPrincipal () {
setContentView(R.layout.main);

Button btcadpess = (Button) findViewById(R.id.btcadpess);


Button btlistapess = (Button) findViewById(R.id.btlistpess);

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

Button btcadastrar = (Button)


findViewById(R.cadastro.btcadastro);
Button btvoltar = (Button) findViewById(R.cadastro.btvoltar);
btcadastrar.setOnClickListener(new View.OnClickListener(){
public void onClick(View arg0){
try {
reg = new Registro();
ednome = (EditText)findViewById(R.campo.nome);
edprof = (EditText)findViewById(R.campo.profissao);
edidade = (EditText)findViewById(R.campo.idade);

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

}}

Agora no mesmo local onde se encontra o arquivo AppCadastro.java (no


pacote com.android.appcadastro), voc vai criar uma classe Chamada Registro.
Depois de criar a classe, coloque o cdigo que exibido abaixo:
package com.android.appcadastro;
public class Registro {
String nome;
String profissao;
String idade;
Registro Prox;
Registro Ant;
}

Agora vamos analisar aos poucos os cdigos dessa aplicao. Observe


que nessa aplicao ou possuo trs mtodos: um mtodo chamado
CarregaTelaPrincipal , responsvel por carregar o layout da tela principal. O
mtodo CarregaTelaCadastro responsvel por carregar a tela de cadastro.
Vamos analisar alguns cdigos do mtodo CarregaTelaCadastro. Se voc
observar nessa aplicao, que eu declarei quatro variveis chamadas pri,ult e
reg e aux do tipo Registro. A varivel pri, serve para apontar para o endereo
do primeiro registro. A varivel ult aponta para o endereo do ltimo registro. A
varivel reg armazena os dados do registro corrente e a varivel aux funciona
como uma varivel auxiliar.

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

Cria uma nova instncia da classe da classe Registro e coloca em .reg.


As linhas:
reg.nome = ednome.getText().toString();
reg.profissao = edprof.getText().toString();
reg.idade = edidade.getText().toString();

Gravam os dados dos campos no objeto reg. J as linhas abaixo:


if(pri==null)
pri=reg;
reg.Ant = ult;
if(ult==null)
ult=reg;
else {
ult.Prox = reg;
ult=reg;
}

Fazem todo o processo de armazenamento dos dados.


Agora vamos para o mtodo CarregaListaPessoas. Quando esse mtodo
chamado, feita uma verificao se h dados cadastrados. Se no houver
dados cadastrados, ser exibida uma mensagem indicando essa situao e
voc ser retornado a tela principal. Vou comentar algumas linhas. A linha:
aux=pri;

Retorna para a varivel aux o endereo do primeiro registro, que est


armazenado em pri . J as linhas:
fnome.setText(aux.nome);
fidade.setText(aux.idade);
fprof.setText(aux.profissao);

Joga as informaes obtidas (nome, idade e profisso) para os campos


(TextViews), para que eles possam ser exibidas.
Vamos agora para o evento click do boto btanterior. Esse boto mostra os
registros anteriores. Antes de voltar um registro, verifico se eu me encontro no
primeiro registro pela condio:
if(pos==1)

Se a condio for verdadeira, saio do evento, seno, continuo executando


as instrues. A linha:
aux=aux.Ant;

Retorna para aux o endereo do registro anterior. Depois disso so


executados instrues para que os dados possam ser exibidos.
50

J no evento click do boto btproximo, antes de passar para o prximo


registro, verifico se j est no ltimo registro pela instruo:
if(pos==numreg)

Se a condio for verdadeira, saio do evento, seno, continuo executando


as instrues. A linha:
aux=aux.Prox;

Retorna para aux o endereo do prximo registro. Depois disso so


executados instrues para que os dados possam ser exibidos.
Agora vamos no arquivo de layout listacadastrados.xml, quero comentar
algumas propriedades interessantes. Se voc observar, algumas TextViews
possuem um atributo chamado android.textColor e android:textSize, esses
atributos definem a cor e o tamanho do texto respectivamente.
Bom, vamos executar a nossa aplicao ? O resultado voc confere nas
figuras abaixo:

(Tela Principal)

51

(Tela de cadastro)

(Tela de visualizao dos dados cadastrados)

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,

android:textColor: Essa propriedade serve para definir uma cor para o


texo exibido.
Mtodo relacionado: setTextColor(int color)
Exemplos:
XML
android:textColor=#FFFF00
Java
texto.setTextColor(Color.YELLOW);
OBS:A classe Color se encontra no pacote android.graphics.
Widgets que possuem
RadioButton, CheckBox, Button

essa

propriedade:

TextView,

EditText,

53

android:background: Essa propriedade serve para definir uma cor de


fundo.
Mtodos relacionados: setBackgroundColor(int color);
Exemplos:
XML
android:background=#FF0000
Java
texto. setBackgroundColor (Color.RED);
Widgets que possuem
RadioButton, CheckBox, Button

essa

propriedade:

TextView,

EditText,

android:phoneNumber Essa propriedade serve para definir uma entrada


de valores no formato de nmero telefnico. O valor padro desse atributo
falso.
Mtodos relacionados: setKeyListener(KeyListener Arg);
Exemplos:
XML
android: phoneNumber =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, EditText
android:numeric Com essa propriedade habilitada, o widget com essa
propriedade s ir aceitar nmeros (inteiros e decimais). O valor padro desse
atributo falso.
Mtodos relacionados: setKeyListener(KeyListener Arg);

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,

android:textSize: Essa propriedade serve para definir o tamanho da fonte.


O tamanho da fonte pode ser especificado em vrias notaes : px
(pixels),sp(scaled-pixels) , mm(milmetros), in (inches) e etc.
Mtodos relacionados: setTextSize(float tamanho) ou
unidade, int tamanho);

setTextSize(int

Exemplos:
XML
android:textSize =10px
android:textStyle =20sp

55

Java
texto. setTextSize (TypedValue.COMPLEX_UNIT_PX,10); //Unidade em
pixels

texto. setTypeface (TypedValue.COMPLEX_UNIT_SP,10); //Unidade


em scaled-pixels
texto. setTypeface (20); //Unidade em scaled-pixels
OBS: A classe Typeface se encontra no pacote android.util.
Widgets
que
possuem
EdiText,RadioButton,CheckBox,Button.

essa

propriedade:

TextView,

android:typeface: Essa propriedade serve para definir uma fonte ao texto


(Arial , Times NewRoman, Courier New e etc).
Mtodos relacionados: setTypeface(Typeface);
Exemplos:
XML
android:typeface =Arial
android:typeface =Times New Roman
Java
texto. setTypeface (Typeface.create(Arial,0));
texto. setTypeface (Typeface.create(times New Roman,0));
Widgets
que
possuem
EdiText,RadioButton,CheckBox,Button.

essa

propriedade:

TextView,

android:capitalize: Essa propriedade serve para definir o tipo


capitalizao das palavras. Por padro, o valor e none(nenhum). Os valores
usados nessa propriedade so:
none
sentences
words
characters

Nenhuma capitalizao ocorrer


Capitaliza a primeira letra da primeira
palavra de qualquer sentena
Capitaliza a primeira letra de qualquer
sentena
Capitaliza todos os caracteres
56

Mtodos relacionados: setKeyListener(KeyListener Arg);

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:

android:password Com essa propriedade voc habilita a digitao de


senhas.
Mtodos
setKeyTransformationMethod(TransformationMethod arg);

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.

Espero que esse material lhe tenha sido til.

Abraos

58

Você também pode gostar