You are on page 1of 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); Exemplos: XML android:textSize =10px android:textStyle =20sp setTextSize(int

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 propriedade: TextView,

android:password Com essa propriedade voc habilita a digitao de senhas. Mtodos setKeyTransformationMethod(TransformationMethod arg); 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 relacionados:

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

You might also like