Você está na página 1de 58

Luiz Carlos Querino Filho

Novatec

Novatec Editora Ltda. [2014].


Todos os direitos reservados e protegidos pela Lei 9.610 de 19/02/1998. proibida a reproduo desta
obra, mesmo parcial, por qualquer processo, sem prvia autorizao, por escrito, do autor e da Editora.
Editor: Rubens Prates
Capa: Carolina Kuwabata
Reviso gramatical: Marta Almeida de S
Editorao eletrnica: Carolina Kuwabata
ISBN: 978-85-7522-378-9
Histrico de impresses:
Dezembro/2013

Primeira edio

Novatec Editora Ltda.


Rua Lus Antnio dos Santos 110
02460-000 So Paulo, SP Brasil
Tel.: +55 11 2959-6529
Fax: +55 11 2950-8869
Email: novatec@novatec.com.br
Site: www.novatec.com.br
Twitter: twitter.com/novateceditora
Facebook: facebook.com/novatec
LinkedIn: linkedin.com/in/novatec
XXXX

captulo 1

Prepare-se para se render ao


robozinho verde do Google!

O ano: 2003. O local: Vale do Silcio, Estados Unidos da Amrica. Neste


verdadeiro osis da tecnologia, no meio da ensolarada Califrnia, surgia
a Android Inc., empresa fundada por Andy Rubin, Rich Miner, Nick Sears
e Chris White, voltada ao desenvolvimento de sistemas mveis.
No se sabe ao certo o porqu do nome Android... Talvez uma singela homenagem aos clebres R2-D2 e C3PO de Guerra nas Estrelas? Ou um reconhecimento tardio a Data, o androide de Jornada nas Estrelas: A Nova Gerao?
Isso realmente no importa. O que interessa de verdade que o Google,
sempre atenta s inovaes que surgiam ao seu redor, percebeu que muitas ideias interessantes ainda poderiam sair da Android Inc. e passou a
financiar as pesquisas realizadas pela empresa.
Em pouco tempo, a empresa Android daria o seu nome a um sistema operacional que, assim como o Windows, dominaria seu segmento de mercado...

1.1 Uma breve histria do sistema operacional Android


Em 2005, o Google adquiriu a Android Inc., e esta passou a fazer parte da
gigante das buscas na Internet. Essa aquisio serviu tambm para aguar
a curiosidade de especialistas em tecnologia: quais seriam os planos da
empresa de Larry Page e Sergey Brin no mercado de dispositivos mveis?
Tudo comeou a ficar mais claro logo aps a Apple apresentar ao mundo
o iPhone, em janeiro de 2007, causando uma verdadeira revoluo na
forma que as pessoas usavam os seus telefones celulares.
15

16

Desenvolvendo seu primeiro aplicativo Android

Inicialmente, parecia que o Google seria uma espcie de parceira da Apple


no iPhone. O aparelho usava o Google como seu principal mecanismo
de busca, e os mapas usados na navegao GPS do aparelho provinham
do Google Maps. At Eric Schmidt, na poca CEO do Google, fazia parte
do conselho de direo da Apple, chegando at mesmo a participar do
evento de lanamento do aparelho.
Mas os fortes rumores que indicavam que o Google estaria preparando
algo que competiria de igual para igual com o iPhone serviram para acabar
com a lua de mel entre a empresa de Steve Jobs e a Google...
Diz a lenda que Steve Jobs se enfureceu com Eric Schmidt e sua empresa
assim que ficou sabendo dos planos do Google para o mercado mvel.
Seguiu-se a isso a sada de Eric Schmidt do conselho da Apple e a deciso da grande ma de remover o Google Maps do iPhone, criando seu
prprio servio de mapas (o Apple Maps)...
Fofocas do mundo dos negcios parte, os fatos so estes: em 5 de novembro
de 2007, quando o iPhone j tinha se tornado um grande sucesso de vendas,
a Google anunciou a criao da Open Handset Alliance, uma associao
encabeada por ela que contava com a participao de peixes grandes do
mercado de dispositivos mveis, como Motorola, Samsung e HTC.
Nas palavras da prpria Google, o intuito na criao da Open Handset
Alliance era desenvolver padres abertos para dispositivos mveis. E neste
mesmo dia a associao apresentou seu primeiro produto: o sistema operacional Android, que equiparia uma nova gerao de telefones celulares,
os smartphones, que seriam lanados comercialmente em 2008.
Fruto direto da Android Inc., o Android foi anunciado como um sistema
operacional baseado no ncleo do Linux e que consequentemente herdaria o pedigree deste, oferecendo estabilidade e segurana aos usurios.
Para completar, seguiria a mesmo filosofia aberta (baseada no conceito
de software livre/open source) do Linux: estaria disponvel livremente,
podendo ser usado simultaneamente por vrios fabricantes.
Em pouco tempo, assim como previsto pelos especialistas, o Android tornou-se o lder no mercado de sistemas operacionais para dispositivos mveis.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

17

Isso, obviamente, se deve a vrios fatores, como a evidente qualidade do sistema e sua arquitetura aberta, que possibilitou seu uso em diversos aparelhos
(se voc no sabe, o iOS, sistema operacional do iPhone e do iPad, no pode
ser usado em outros aparelhos que no sejam os produzidos pela Apple).
Outro fato que tambm levou popularizao do sistema foi a escolha
da linguagem Java para o desenvolvimento dos aplicativos que executam
no Android. Afinal de contas, Java uma das linguagens de programao
mais populares do mundo j h algum tempo, com uma base enorme de
desenvolvedores experientes. Em junho de 2013, o ndice Tiobe apontava
Java como a segunda linguagem de programao mais usada no mundo
(www.tiobe.com/index.php/content/paperinfo/tpci/index.html).
Os desenvolvedores Java poderiam, ento, facilmente comear a desenvolver aplicativos para Android. E isso realmente aconteceu: especialistas estimam que, em janeiro de 2013, mais de 800 mil aplicativos para
Android estavam disponveis na Google Play Store e que em breve seria
alcanada a marca de 1 milho de programas, de acordo com as fontes:
www.rssphone.com/google-play-store-800000-apps-and-overtake-apple-appstore/ e
readwrite.com/2013/01/08/google-play-to-hit-1-million-apps-before-apple-app-store.
Quer mais uma prova do domnio do Android? O IDC informa que, no
primeiro quadrimestre de 2013, o Android possua 75% do mercado (seu
market share) de sistemas operacionais mveis, como pode ser observado
no grfico da figura 1.1 (criado de acordo com os dados disponibilizados
pelo IDC em www.idc.com/getdoc.jsp?containerId=prUS24108913).
O mercado de desenvolvimento de aplicativos mveis est literalmente
pegando fogo. hora de arregaar as mangas e aproveitar o momento,
deixando sua marca neste novo e promissor segmento.
Qual seria a melhor forma de comear se no pelo sistema lder do mercado? E o melhor: voc pode comear a criar seus aplicativos Android
agora: o kit de desenvolvimento bsico, sua caixa de ferramentas para
desenvolver os programas, pode ser instalado e usado livremente em
qualquer computador com os principais sistemas operacionais: Windows,
Linux ou Mac OS X!
Ento? Vamos nessa?

18

Desenvolvendo seu primeiro aplicativo Android

Figura 1.1 Fatias de mercado dos principais sistemas operacionais para


dispositivos mveis.

AS VERSES DO ANDROID
O sistema operacional do rob verde evoluiu bastante desde sua
primeira verso (1.0), lanada oficialmente em 2008. No momento da
elaborao deste livro, a verso mais recente do Android a 4.3, codinome Jelly Bean que conta com muitos recursos e avanos grficos
que no existiam inicialmente. A verso 4.4, chamada KitKat, tambm
est prestes a ser lanada.
Uma curiosidade: as verses do Android, desde a 1.5, passaram a receber codinomes sempre um tipo de doce ou sobremesa , seguindo
a ordem alfabtica. A verso 1.5 era a Cupcake; a 1.6 foi chamada de
Donut, e assim sucessivamente. Neste livro, usaremos a verso 4.3, a
"Jelly Bean" jelly bean como os norte-americanos chamam as nossas
"gominhas" ou "jujubas".
Em outubro de 2013 chega a verso 4.4, com a sequncia alfabtica na
letra K, e adequadamente batizada de KitKat (o famoso chocolatinho
com wafer em barras da Nestl).

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

19

1.2 Obtendo e instalando sua caixa de ferramentas


O primeiro e imprescindvel passo deixar seu computador preparado
para o processo de desenvolvimento de aplicativos para Android.
Independentemente do sistema operacional do seu computador, isso
envolver duas etapas bsicas:
Baixar e instalar o Java JDK 7: O Java Development Kit contm o conjunto
essencial de ferramentas e bibliotecas para criao de programas em
Java. Voc j sabe que programas para Android so escritos nesta
linguagem, no mesmo?
Baixar e instalar o Android SDK (Software Development Kit): Este pacoto
traz os outros dois elementos que, junto do JDK, completam o
quebra-cabea dos recursos necessrios para criar aplicativos para
o sistema operacional do rob: o ambiente de desenvolvimento
integrado Eclipse e as bibliotecas de classes Java especficas do
Android (entre outros arquivos, como utilitrios e documentao).
Se voc j um programador experiente, sabe que o ideal, na hora de
criar um software, usar um ambiente de desenvolvimento integrado, o
chamado IDE (Integrated Development Environment). Os IDEs agrupam
um conjunto de funcionalidades que otimizam todo o processo de elaborao de um software, como edio, compilao e depurao. O Eclipse
um dos mais famosos e usados IDEs para Java.
O Google, com o intuito de facilitar cada vez mais a criao de aplicativos
para o Android, criou uma verso customizada do Eclipse, denominada
Eclipse ADT, com recursos exclusivos para criao de software para seu sistema operacional mvel. Um desses recursos, por exemplo, o editor visual
de telas, que ajuda bastante a criao das interfaces dos aplicativos Android.
Pois bem: justamente este Eclipse ADT que est incluso no Android
SDK, prontinho para ser usado. O que um alvio, j que nos primrdios
do desenvolvimento para o Android era necessrio baixar o Eclipse "padro" e acrescentar o suporte ao Android posteriormente nada muito
trabalhoso, mas com certeza mais um empecilho na hora de se conquistar
usurios inexperientes para a plataforma...

20

Desenvolvendo seu primeiro aplicativo Android

Alm do Eclipse e das bibliotecas do Android, o SDK traz tambm um


recurso indispensvel: um emulador do Android. Com ele, voc pode
testar seus aplicativos em qualquer verso do Android j disponibilizada,
sem a necessidade de ter um aparelho fsico com o sistema. Bom, mas
chega de conversa. Vamos comear a colocar a casa em ordem!
Os exemplos a seguir, de obteno e instalao do Java e do Android
SDK, so apresentados em um computador com o sistema operacional
Windows 7 instalado. Se voc usa Mac OS X ou Linux, no se preocupe: o
processo praticamente o mesmo (afinal de contas, estamos trabalhando
com desenvolvimento em Java uma linguagem multiplataforma).
Outra considerao importante: estamos dentro de uma rea em evoluo aceleradssima nos tempos atuais a programao para dispositivos
mveis! Por isso, pode ser que, enquanto voc l este livro e segue estes
tutoriais, um ou outro detalhe pode ter sido mudado, como uma tela ou
um procedimento. Com certeza no ser muito, mas lembre-se de fazer
as adaptaes que forem necessrias.

1.2.1 Baixando e instalando o Java JDK


muito provvel que voc j tenha o JRE (Java Runtime Environment)
na sua mquina. Ele possibilita a execuo de aplicativos Java. Muitos
sites e aplicativos fazem uso dele. Porm, a no ser que voc j tenha programado em Java no seu computador, voc no deve ter o JDK instalado.
Ele usado para criar aplicativos em Java.
Mesmo se tiver, ou caso no saiba se tem ou no, recomendvel baixar
e instalar uma verso mais atual. Ah! Tambm no h problema se voc
no tiver o JRE instalado, viu? O JDK vem com ele.
Para baixar o JDK, acesse o endereo de download oficial na Oracle:
http://www.oracle.com/technetwork/java/javase/downloads/index.html

A verso mais atualizada do JDK, no momento da finalizao deste livro,


era a 7u45. Isso indica que estamos usando o Java na sua verso 7, com a
atualizao nmero 45. Como o Java constantemente atualizado pela
Oracle, pode ser que, quando voc estiver lendo isso, uma nova verso j
esteja disponvel. V em frente e baixe a verso mais nova.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

21

Para fazer o download, clique no link indicado na figura 1.2.

Figura 1.2 Site para download do Java JDK.

Ao clicar, voc ser levado a uma pgina onde escolher a verso do JDK
especfica para o seu sistema operacional. Voc tambm dever aceitar os
termos da Oracle para poder fazer o download (Figura 1.3).

Figura 1.3 Escolhendo a verso adequada do JDK.

22

Desenvolvendo seu primeiro aplicativo Android

Escolha a verso adequada ao seu sistema operacional. Para alguns sistemas operacionais (como o Windows), existe a opo de baixar a verso 32
bits ou a 64 bits. Se voc sabe que seu Windows executa em 64 bits, baixe
a verso correspondente do JDK. Na dvida, clique na verso de 32 bits.
Aps a concluso do download, clique duas vezes sobre o arquivo baixado para iniciar a instalao. Ser apresentada uma tela semelhante
da figura 1.4.

Figura 1.4 Instalao do JDK.

O processo de instalao do JDK bastante simples e rpido. Basta seguir


o famoso Next....Next....Next........Finish. Ao trmino da instalao, ser
mostrada uma tela parecida com a da figura 1.5.
Neste ponto, voc j possui no seu computador os recursos necessrios
para executar e criar programas Java tradicionais.
Agora precisamos do Android SDK para que possamos criar programas
em Java para a plataforma!

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

23

Figura 1.5 Instalao do JDK 7 concluda.

1.2.2 Baixando e instalando o Android SDK


Nesta etapa, vamos obter o pacoto de desenvolvimento especfico para
o Android, que engloba o Android SDK (bibliotecas e ferramentas), o
ambiente de desenvolvimento preparado para criar programas Android
(Eclipse ADT) e o emulador.
Por isso, o pacote do Android SDK significativamente maior que o do
Java JDK. Mas no se preocupe: ele j vem com tudo de que precisamos
para comear a programar. Para obt-lo, acesse o endereo:
http://developer.android.com

Voc entrar no melhor local para encontrar informaes sobre o desenvolvimento em Android: o site oficial de desenvolvedores Android do
Google! Alm do SDK, aqui voc encontra notcias, tutoriais e a documentao completa do SDK. Recomendo que voc adicione este site aos
seus favoritos e faa dele um ponto de parada obrigatria na rede!
Na parte inferior da tela, clique em Get the SDK (Obtenha o SDK), como
mostrado na figura 1.6.

24

Desenvolvendo seu primeiro aplicativo Android

Figura 1.6 Site developer.android.com e link para download do SDK.

Voc ser levado pgina de download. Nela, com base em informaes


do seu navegador, ser sugerida automaticamente a verso do SDK adequada ao seu sistema operacional. Basta ento clicar no boto para iniciar
o download (Figura 1.7).
Antes de o download comear, voc dever concordar com os termos do
Google e escolher se deseja a verso de 32 ou 64 bits. Se voc baixou o JDK
64 bits, marque esta opo. Caso contrrio, escolha 32 bits. Finalmente,
clique sobre o boto Download the SDK ADT Bundle... (Figura 1.8).
Terminado o download do Android SDK, voc ter um arquivo denominado adt-bundle-<sistema-operacional>-<data-da-verso>.zip.
Para deixar tudo organizado, abra sua pasta pessoal no seu sistema operacional, crie nela uma subpasta denominada Developer e descompacte o
arquivo baixado dentro dela.
Na figura 1.9, por exemplo, eu criei a pasta Developer dentro da pasta do
usurio atual (Anita). Copiei o arquivo baixado para dentro dela e vou
iniciar o processo de descompactao clicando com o boto direito do
mouse sobre ele e selecionando Extrair Tudo....

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

Figura 1.7 Boto para incio do download do Android SDK.

Figura 1.8 Iniciando o download do Android SDK.

25

26

Desenvolvendo seu primeiro aplicativo Android

Figura 1.9 Iniciando a descompactao do arquivo com o Android SDK.

Na janela que ser aberta, indique que o contedo dever ser extrado
para a pasta C:\Users\<seu-usuario>\Developer (em sistemas Windows se
voc usa Mac OS X ou Linux, ser, respectivamente, /Users/<seu-usuario>
ou /home/<seu-usuario>), como no exemplo da figura 1.10 (onde o usurio
em questo Anita), e clique sobre o boto Extrair.

Figura 1.10 Descompactando o arquivo.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

27

SE O SEU SISTEMA OPERACIONAL FOR MAC OS X OU LINUX...


... no tema! Todos os procedimentos descritos neste livro sero os
mesmos, no que diz respeito ao uso do Android SDK, Eclipse e cdigo
Java. Isso uma das grandes vantagens do uso da linguagem Java
totalmente multiplataforma no Android!

Aps descompactar, voc encontrar dentro da nova pasta adt-bundle<sistema-operacional>-<data-da-verso> duas subpastas: sdk e eclipse. A pasta
sdk contm as bibliotecas e os utilitrios bsicos do Android SDK. A pasta
eclipse possui a verso do IDE Eclipse customizada para desenvolvimento
em Android, prontinha para ser usada.
Para executar o Eclipse ADT (Android Developer Tools), voc pode simplesmente clicar duas vezes sobre o cone do aplicativo Eclipse (Figura 1.11).

Figura 1.11 Aplicativo Eclipse.

Como vamos us-lo bastante, recomendo a voc criar um atalho para ele
na sua rea de trabalho. Para fazer isso rapidamente, clique com o boto
direito do mouse sobre o arquivo eclipse.exe, segure e arraste para a rea
de trabalho. Ao soltar, selecione a opo Criar atalho aqui.
J abriu o Eclipse? Se ainda no, v em frente! Vamos encarar a fera.

28

Desenvolvendo seu primeiro aplicativo Android

1.3 Executando o Eclipse pela primeira vez


O Eclipse uma das mais populares ferramentas de desenvolvimento
para a linguagem Java segundo seus fs, a mais popular (algo ainda
contestado pelos entusiastas do NetBeans...).
Provavelmente por esse fato, alm da caracterstica de ser open-source e de
distribuio livre, acabou sendo escolhido pelo Google como a ferramenta
oficial de desenvolvimento para o Android.
Na realidade, o Eclipse distribudo junto do Android SDK uma verso
customizada desse IDE, contendo funcionalidades especficas para o desenvolvimento de aplicativos Android. Essa verso acabou sendo chamada
pelo Google de Eclipse ADT (Android Developer Tools). Porm isso no
significa que voc no poder desenvolver aplicativos Java padro nele
essa possibilidade continua presente.

1.3.1 Definindo o workspace do Eclipse e as configuraes iniciais


Quando abrimos o Eclipse pela primeira vez, ele solicita um caminho
para armazenamento dos seus projetos, que ele chama de workspace
(Figura 1.12).

Figura 1.12 Definindo o worskpace para o Eclipse.

Escolha um local de sua preferncia. Pode ser dentro da pasta Developer, que
foi criada anteriormente na sua pasta pessoal, ou pode ser em Documentos
voc decide. Se quiser, no precisa tambm cham-la necessariamente
de workspace pode ser simplesmente Projetos.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

29

IMPORTANTE: Evite ao mximo colocar seu workspace de projetos em


um caminho que contenha acentuao no nome ou espaos. Existem
algumas situaes em que isso pode ocasionar problemas na abertura
e execuo dos projetos.
Se no marcar a opo Use this as the default..., toda vez que voc iniciar o
Eclipse, precisar confirmar o local do workspace. Por isso, deixe-a marcada, como na figura 1.12. Se precisar mudar o workspace futuramente,
basta troc-lo nas Preferncias (pelo menu Windows > Preferences) do Eclipse.
Aps clicar em OK, o Eclipse continuar seu carregamento. Pode ser que
seja apresentada uma tela solicitando a autorizao do envio de estatstica
de uso ao Google, com o ttulo Contribute Usage Statistics?. Se voc concordar,
deixando Yes marcado, o Eclipse ADT enviar periodicamente dados de
uso da ferramenta ao Google, visando melhor-la futuramente (Figura
1.13). Basta ento clicar em Finish.

Figura 1.13 Confirmando o envio (ou no) de estatsticas de uso ao Google.

Aps alguns segundos, ser apresentada a tela da figura 1.14.

30

Desenvolvendo seu primeiro aplicativo Android

Figura 1.14 Tela de boas-vindas do Eclipse.

apenas uma tela de boas-vindas, com algumas dicas de como criar seu
primeiro projeto. Voc no precisa dela j tem este livro para isso! Basta
clicar no cone de X indicado na figura 1.14, para exibir a tela principal
do Eclipse.

1.3.2 A perspectiva padro do Eclipse


O Eclipse chama o conjunto de elementos que compem sua tela de
perspective (perspectiva). Como ele atualmente d suporte a vrias linguagens alm de Java, e usado para diversas outras finalidades alm de
edio de cdigo (infelizmente, ele no faz caf pelo menos ainda no),
uma perspectiva configura a tela do Eclipse de acordo com a linguagem/
plataforma/funo ativa no momento.
O desenvolvimento para Android usa a perspectiva padro do Eclipse,
denominada Java (sim, a mesma usada na criao de aplicativos Java
tradicionais). Voc pode ter uma ideia de como essa perspectiva pela
figura 1.15.
Nessa perspectiva, a tela dividida basicamente em:
(a) Barra de ferramentas: com os botes usados para criar projetos, salvar,
executar aplicativos, entre outros.
(b) Package Explorer: o explorador de pacotes mostra os projetos existentes no workspace e o que eles contm.
(c) Editor de cdigo: aqui que vamos fazer o que mais gostamos programar!

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

31

(d) Outline: um resumo da estrutura do arquivo-fonte aberto no editor


esquerda. Basicamente, um recurso para voc localizar rapidamente elementos do cdigo, como um mtodo.
(e) Problems: ningum gosta de problemas, mas uma hora eles aparecem. aqui que vamos localiz-los. Existe uma frase que diz que h
apenas duas certezas na vida de uma pessoa: os impostos e a morte.
Podemos acrescentar encontrar bugs em software a essa lista...

Figura 1.15 A perspectiva Java do Eclipse.

Bem, j temos agora uma ideia da cara do Eclipse. Antes de criar nosso
primeiro projeto, vamos apenas configurar alguns aspectos dele para
facilitar nossa vida.

1.3.3 Configurando o Eclipse


As configuraes bsicas do Eclipse podem ser acessadas nas verses Windows e Linux do aplicativo, pelo menu Window > Preferences. No Mac OS X,
elas esto no menu ADT, direita da ma da Apple.

32

Desenvolvendo seu primeiro aplicativo Android

Se tem algo que o Eclipse oferece bastante mesmo so opes de configurao, como voc pode perceber pela figura 1.16. Nessa mesma figura,
voc vai ver uma opo que, ao ser marcada, facilita muito a vida do
desenvolvedor na incansvel busca por bugs!

Figura 1.16 Configuraes do Eclipse.

Abra as chaves de configurao General > Editors, nesta ordem. Dentro de


Editors, clique sobre Text Editors. Nas opes que so apresentadas, localize
Show line numbers e marque-a (Figura 1.16), clicando em seguida no boto
Apply. Dessa forma, na tela de edio de cdigo do Eclipse, sero exibidos os
nmeros das linhas, o que ajuda na hora de localizar os erros do programa.
Antes de fechar a janela de preferncias, d uma olhada nestas outras
duas chaves de configurao e tente lembrar-se delas elas podem ser
teis futuramente:

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

33

General > Startup and shutdown > Workspaces: aqui voc pode mudar o
local em que o Eclipse guarda os projetos o workspace, lembra?
General > Appearance > Colors and Fonts: abrindo esta chave e depois,
direita, clicando duas vezes sobre Basic > Text font, voc pode mudar
a fonte base do editor de cdigo. Mas lembre-se: todo bom programador s usa fontes de largura fixa para o cdigo! Por isso, nada
de Arial ou Helvetica. Prefira Consolas, Menlo ou, na pior das hipteses,
Courier New...
Android: contm as configuraes especficas para desenvolvimento
em Android. Clicando sobre a chave principal (Android), existe
a opo de configurao do caminho para o SDK. Se por alguma
razo o Eclipse ADT no fez essa configurao automaticamente
para voc, possvel defini-la manualmente aqui.
Para poder testar o programa que vamos criar, precisaremos do emulador.
E, antes de us-lo, temos que configur-lo: qual verso do Android ele
executar? Qual dispositivo ele vai emular (na questo do tamanho e da
resoluo da tela, por exemplo)?
Fazemos essas configuraes em um dispositivo virtual do Android, um
AVD (Android Virtual Device).

1.3.4 Criando um dispositivo virtual para o emulador


Os AVDs so criados usando uma ferramenta includa no Android SDK
denominada Android Virtual Device Manager. Ela to importante que
um cone de atalho a ela foi adicionado barra de ferramentas do Eclipse
(Figura 1.17):

Figura 1.17 cone do Android Virtual Device Manager.

34

Desenvolvendo seu primeiro aplicativo Android

Clicando no boto indicado, ser aberta uma janela que lista todos os
dispositivos virtuais j criados (sim, voc pode criar mais de um por
exemplo, quando precisar testar seu programa em verses diferentes do
Android), vista na figura 1.18.

Figura 1.18 Tela do Android Virtual Device Manager.

Em uma instalao nova do Android SDK, voc ainda no possui nenhum


AVD criado. Ento v em frente: clique sobre o boto New... para faz-lo
(Figura 1.18)!
Na tela de configurao do novo AVD (Figura 1.19), voc dever definir
alguns aspectos importantes, que vo facilitar o desenvolvimento do seu
aplicativo.
As principais configuraes que voc deve fazer so as seguintes:
(a) AVD Name: um nome para o dispositivo virtual. Pode ser qualquer
um neste exemplo, usamos somente avd.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

35

(b) Device: aqui voc pode definir um modelo de aparelho, que servir
apenas como base para teste do tamanho da tela e da resoluo
usada. No se espante pelo fato de serem poucos os aparelhos
mostrados aqui trata-se apenas de uma referncia para um tipo de
tela. Neste exemplo, usamos o modelo Nexus One, principalmente
por trazer um tamanho de tela mdio (3.7 polegadas), semelhante
ao de muitos aparelhos existentes no mercado (que ficam entre 3.5
e 4 polegadas). Depois falaremos mais sobre como seus aplicativos
ficaro compatveis com aparelhos com tela e/ou resoluo diferente.
No se preocupe com isso no momento.

Figura 1.19 Criando um novo Android Virtual Device (AVD).

36

Desenvolvendo seu primeiro aplicativo Android

(c) Target: Escolha a verso mais recente disponvel: Android 4.2.2 API
Level 17, Android 4.3 API Level 18, ou posterior. No exemplo da
figura 1.19, escolhemos Android 4.3. Isso indica que o dispositivo
virtual criado executar na verso aqui especificada. Para poder
usar outra verso, voc precisa ter baixado a imagem da mesma
usando o aplicativo SDK Manager. Mas relaxe: voc pode testar o
seu aplicativo na verso mais recente (que sempre vem junto do pacote do Android SDK) e mesmo assim garantir que o seu aplicativo
funcione em verses anteriores. Tambm falaremos mais sobre isso
posteriormente.
(d) Keyboard: certifique-se de deixar ativada a opo Hardware keyboard
present. Com ela ativa, voc poder usar o teclado fsico do seu
computador para digitar texto no aplicativo, sem necessidade de
recorrer ao teclado virtual do aparelho.
(e) Emulation options: marque a opo Snapshot. Por meio dela, seu emulador ficar sempre congelado no estado em que foi usado pela
ltima vez (de maneira semelhante ao que acontece com aplicativos de virtualizao). Se voc no marc-lo, toda vez que iniciar o
emulador dever esperar o longo e tedioso boot do Android...
Dependendo do computador usado, pode dar tempo de fazer um
caf e at deix-lo esfriar antes de beber, o que irrita qualquer
programador...
Clicando no boto OK, seu novssimo AVD ser criado (Figura 1.20)!
praticamente um aparelho novinho para voc testar (sem, claro, possibilidade de fazer chamadas ou receber SMS de promoes da operadora
o que uma grande vantagem)!

Figura 1.20 Tela do AVD Manager com o novo dispositivo virtual criado.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

37

Pode fechar a janela do AVD Manager agora. Finalmente, estamos com


tudo pronto para criar nosso aplicativo de teste!

1.4 Testando tudo com um exemplo prtico: conversor de medidas


O sistema mtrico o padro de unidades de medida em praticamente
todo o mundo. Se voc for para algum outro pas, provavelmente tambm
vai se deparar com metro, centmetro e quilmetro. A no ser que esse
pas seja os Estados Unidos...
Sim, a terra do Tio Sam o nico pas industrializado que no adotou o
sistema mtrico como padro! E, consequentemente, temos de nos resignar (e nos adaptar) a este fato! Se um dia voc tiver que saber sua altura
em ps (esta a unidade de medida que os norte-americanos usam para
essa finalidade), dever fazer uma converso.
Nada que a boa e velha matemtica no resolva. Mas vamos tornar tudo
um pouco mais fcil: vamos carregar em nosso bolso um aplicativo de
converso de metros para ps!
A converso simples: um p (foot) equivale a 30,48 centmetros. Se uma
pessoa possui 1,83 metro de altura, totalizamos 183 centmetros. Aps
fazer a diviso (183/30,48), ficamos sabendo que este indivduo mede
exatamente seis ps (feets)!
claro que este no o aplicativo principal do nosso livro trata-se
apenas de um teste inicial para verificar que a casa est em ordem, e para
aprendermos os conceitos mais bsicos do desenvolvimento para Android.
Mas no por isso que ele deve ser sem graa, no verdade?
Teremos uma barra com um botozinho deslizante (chamada de SeekBar
no Android SDK), onde o usurio poder especificar sua altura. Aps
marcar a altura, o usurio tocar em outro boto e o valor da medida
em metros ser convertido para ps. Vai ficar razoavelmente interessante,
como voc pode ver na figura 1.21.

38

Desenvolvendo seu primeiro aplicativo Android

Figura 1.21 Tela final do aplicativo Conversor.

1.4.1 Criao do projeto no Eclipse


Para criar o projeto no Eclipse, na barra de ferramentas, clique sobre a
seta para baixo no lado direito do primeiro boto (Figura 1.22). No menu
que ser exibido, selecione Android Application Project.

Figura 1.22 Criando o novo projeto no Eclipse.

Ser exibida a primeira tela do processo de criao de um novo projeto


(Figura 1.23).
Nessa tela, fazemos vrias configuraes importantes sobre o projeto:
(a) Application Name: o nome do aplicativo, que ser mostrado na lista
de programas instalados no aparelho e na Google Play Store. Para
este exemplo, informe Conversor.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

39

Figura 1.23 Tela inicial da criao de um novo projeto Android.

(b) Project Name: o nome do projeto dentro do Eclipse. Geralmente, usamos o mesmo nome do aplicativo (Conversor). Voc vai perceber que
o Eclipse colocar aqui o mesmo nome informado em Application
Name.
(c) Package Name: o nome do pacote das classes Java do seu projeto.
Basicamente, um pacote em Java uma forma de categorizar corretamente as unidades bsicas de cdigo-fonte que voc escreve
(chamadas de classes). A conveno na definio de pacotes do
Java usar um domnio da internet em forma reversa, seguido de
um identificador para o programa. Voc pode ver no exemplo da
figura 1.23 que usei meu domnio particular (querino.net) invertido
(net.querino) seguido de um ponto e o nome do aplicativo em letras
minsculas (net.querino.conversor). Evite ao mximo usar valores
fictcios ou invlidos neste caso, pois este nome de pacote tambm

40

Desenvolvendo seu primeiro aplicativo Android

servir para identificar seu aplicativo na Google Play Store (se voc
public-lo l). Ento, se no possuir um domnio prprio, use o da
empresa onde trabalha, da sua faculdade ou o domnio de algum
que conhece (no deixe de, obviamente, pedir permisso para us-lo ao responsvel).
(d) Minimum Required SDK: mantenha selecionado API 8: Android 2.2 (Froyo).
Essa configurao especifica a verso mnima do Android necessria para que seu programa funcione. Marcando a 2.2, temos duas
consequncias: uma muito boa (seu aplicativo vai funcionar na
esmagadora maioria dos aparelhos existentes no mercado, j que
muitos deles ainda executam o Android 2.2 ou 2.3) e uma no to
boa assim (somente poderemos usar no aplicativo recursos que j
existiam desde essa verso, ou seja, nada feito para funes inovadoras acrescentadas nas verses mais recentes, como a Jelly Bean).
Mas isso no to ruim quanto parece, e vai por mim: se o seu
interesse alcanar a maior quantidade possvel de usurios, vale
a pena manter Android 2.2 nesta configurao!
(e) Target SDK: deixe marcada a verso sugerida (API 18: Android 4.3 (Jelly
Bean), no exemplo) ou uma verso mais recente (caso disponvel),
como a KitKat. Isso indica que, apesar de manter compatibilidade
com as verses >= 2.2 (voc um programador, ento com certeza
leu isso como maior ou igual a...), vamos testar nosso aplicativo
com a verso mais recente. Sem entrar em muitos detalhes, isso quer
dizer o seguinte: apesar de o seu aplicativo funcionar em verses
anteriores, vai rodar legalzinho e sem modo de compatibilidade
na verso mais recente, que equipa os smartphones Android mais
poderosos e novos do mercado. Bom isso, no mesmo?
(f) Compile With: tambm mantenha o recomendado pelo assistente de
criao do projeto (API 18: Android 4.3 (Jelly Bean)). Isso indica que o
seu aplicativo ser compilado com a verso mais atual do SDK, o
que uma boa ideia, pois traz melhorias e correes que as verses
anteriores no tm. Mas no entre em pnico: a retrocompatibilidade com verses mais antigas est garantida pela seleo feita em
Minimum Required SDK!

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

41

(g) Theme: Finalmente, o tema que ser usado pelo aplicativo. O tema
estabelece o visual padro do programa: suas cores, suas fontes,
seus tamanhos, o aspecto dos botes e demais controles etc. Deixe
Holo Light with Dark Action Bar marcado, pois o tema padro das novas
verses do Android.

NOTA SOBRE A VERSO 4.3


A verso 4.3 uma atualizao menor do Android e foi lanada pela
Google em 24 de julho de 2013. Possui pequenas melhorias e correes
em relao verso anterior (4.2.2), sem nenhuma mudana muito
significativa. No decorrer deste livro, manteremos o uso da 4.2 como
"Target" dos projetos e a 4.3 em "Compile With", mas sinta-se vontade para usar uma verso mais recente (se disponvel). Como a rea de
computao mvel a atual menina dos olhos do setor de TI e sua
evoluo est aceleradssima, pode ser que uma verso ainda mais nova
que a 4.3 j esteja em uso quando voc estiver lendo este pargrafo (e
tudo indica que o Android 4.4 KitKat ser ela)...

Finalmente, clique em Next para passar prxima tela. Nela (Figura


1.24), indicaremos se desejamos definir um cone personalizado para o
aplicativo (a Create custom launcher icon, no para este caso) e se queremos
que uma primeira tela seja criada para o programa (b Create activity, sim,
pode deixar marcada).
As demais opes podem ser mantidas como esto. Clique em Next para
passar tela seguinte.
Como indicamos na tela da figura 1.24 que queremos uma tela inicial
neste projeto (com a opo Create activity), devemos especificar na tela da
figura 1.25 que tipo de tela ser esta.
Existem trs opes iniciais:
Blank Activity: uma tela em branco padro. Mantenha-a selecionada,
pois essa de que precisamos.
Fullscreen Activity: essa opo permite a criao de uma tela com barra de navegao e/ou ferramentas e que possa ocupar a tela toda
quando o usurio interagir com seu contedo.

42

Desenvolvendo seu primeiro aplicativo Android

Master/detail Activity: este tipo de tela apresenta uma lista de opes


esquerda e quando um dos itens selecionado mostra um contedo
diferente direita. ideal para uso em dispositivos com tela maior,
como tablets.

Figura 1.24 Segunda tela de criao do projeto.

Como indicado na figura 1.25, deixe a caixa Create Activity marcada, com a
opo Blank Activity selecionada logo abaixo. Clique em Next.
Finalmente, passamos ltima tela (Figura 1.26).
No vamos mudar os valores das opes, mas bom saber o que cada
um significa:
(a) Activity Name: o nome da classe em que ficar o cdigo responsvel
pelo controle do ciclo de vida da tela principal do seu programa,
assim como todos os eventos relacionados aos elementos na tela.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

43

Se voc no muito familiarizado com Java, saiba que escrevemos


o cdigo dos programas criados nesta linguagem em classes, e que
dentro delas ficam os mtodos e eventos, que so como funes
relacionadas tela ou algum existente dentro delas (como botes
e caixas de entrada de texto). Neste caso, vamos manter o nome
MainActivity para a classe de nossa tela principal.
(b) Layout Name: activity_main o nome do arquivo em XML que contm
a especificao do layout da tela, ou seja, o que esta tela possui
(botes, texto etc.), como estes elementos esto posicionados nela
e quais suas configuraes de exibio (tamanho, cor, alinhamento,
entre outros). Vamos manter este valor padro.
(c) Navigation Type: mantenha None (nenhum), pois criaremos um aplicativo com uma nica tela. Se estivssemos criando um programa
com mais de uma tela, poderamos especificar aqui uma forma para
a navegao entre as vrias telas.

Figura 1.25 Terceira tela de criao do projeto.

44

Desenvolvendo seu primeiro aplicativo Android

Figura 1.26 Tela final de criao de um novo projeto Android.

MAS O QUE ESSA TAL ACTIVITY?


O Android SDK fornece a classe Java Activity como a base para a implementao de uma tela dentro de um aplicativo. Dentro do cdigo
de uma Activity, controlamos o ciclo de vida de uma tela (o que fazer
quando ela criada, encerrada etc.) assim como o que deve acontecer
quando o usurio interage com os elementos existentes na mesma
(chamamos essas interaes de eventos). Um aplicativo com uma nica tela possui uma Activity s, como esse que estamos criando, mas
bastante comum possuir vrias delas em um mesmo projeto, quando
este possuir mltiplas telas.

Agora voc pode clicar em Finish, aguardar uns segundinhos e ver como
um projeto Android recm-criado!

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

45

Na figura 1.27 voc pode ter uma ideia do aspecto do Eclipse com um
novo projeto Android.

Figura 1.27 Eclipse com um novo projeto.

So estes os elementos aos quais voc deve estar atento:


(a) Package Explorer: aqui voc vai encontrar seu projeto (Conversor) e as
pastas que o compem. Por enquanto, ns vamos nos preocupar
com apenas duas: src, que contm o cdigo-fonte Java do aplicativo,
e res\layout, onde fica o arquivo com XML para o layout da tela.
(b) activity_main.xml: esta aba mostra a interface atual da nossa tela,
dentro do editor de interface. Repare bem neste nome: estamos com
o arquivo activity_main.xml aberto, e este fica dentro da pasta layout,
que por sua vez est dentro de res!
(c) Pallete: a palheta contm os vrios widgets que colocamos na tela
do nosso aplicativo Android. Os mais usados esto nos grupos
Form Widgets (que contm rtulos de texto e botes) e Text Fields
(onde ficam os campos de entrada de texto).

46

Desenvolvendo seu primeiro aplicativo Android

(d) Graphical Layout | activity_main.xml: aqui voc pode alternar entre a


visualizao grfica da tela (onde ns estamos no momento e podemos simplesmente arrastar os widgets para algum local na tela) e
a visualizao do arquivo em XML, onde caras dures e corajosos,
do tipo Chuck Norris, preferem editar a interface. Obviamente, os
acrscimos e mudanas feitos em um refletem diretamente no outro.
Como ns no queremos arrumar encrenca pra cabea e queremos
maximizar nossa produtividade, vamos usar o layout grfico sempre
que possvel.
(e) Outline: uma visualizao hierrquica dos widgets existentes na tela.
Podemos ver por ele que temos na nossa tela um RelativeLayout e,
dentro dele, um TextView (falaremos mais sobre estes widgets em breve).
(f) Properties: aqui podem ser vistas e alteradas as configuraes do
widget atualmente selecionado. Quem conhece o Visual Studio,
NetBeans ou o prprio Eclipse com o plugin WindowBuilder instalado j conhece estas famosas janelinhas.

WIDGET: MAIS UM TERMO ESTRANHO...


Na verdade, este termo estranho, cuja traduo literal seria algo como
dispositivo ou mecanismo, usado para indicar elementos que so
usados na criao de interfaces grficas com o usurio (as famosas
GUI Graphical User Interfaces). Portanto, um boto, um rtulo de
texto em uma tela grfica seja ela Android ou Windows so todos
widgets. E voc achando que se tratava de alguma criatura de um RPG
ou de Guerra nas Estrelas...

1.4.2 Comeando pela interface: muito alm do simples arrastar e soltar


Voc pode perceber pela tela da figura 1.27 que estamos com o arquivo
activity_main.xml aberto. Este o arquivo que contm a definio da interface do nosso aplicativo em linguagem XML, ou seja, a especificao
dos widgets contidos na tela e suas respectivas configuraes (posio,
tamanho etc.).

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

47

Como estamos comeando, vamos editar o layout do nosso aplicativo


diretamente pelo editor visual, sem mexer (por enquanto) no cdigo XML.
Inicie removendo o rtulo de texto esttico (um widget do tipo TextView)
que exibe o texto Hello world! na tela existente: clique sobre ele para
selecion-lo e pressione a tecla delete.

A TRADIO DO HELLO, WORLD!


Todo estudante de programao conhece o tradicional Hello, world!.
Trata-se de uma tradio criar um programa que simplesmente mostra
essa mensagem na tela quando se est aprendendo uma nova linguagem
(ou a sua primeira linguagem)... Como um costume mundial, os engenheiros do Android SDK colocaram a mensagem exibida por padro
nas telas iniciais dos aplicativos novos criados dentro do Eclipse. Diz a
lenda que o uso desse tipo de programinha comeou com o livro The
C Programming Language (A Linguagem de Programao C), de Brian
Kernighan e Dennis Ritchie, em que um Hello, world! o primeiro
exemplo apresentado para ensinar ao leitor seu primeiro programa em
C. Este livro foi lanado em 1978! Ou seja, o Hello, world! j serviu
para comear a ensinar mais de uma gerao a programar!

Estes so os widgets de que vamos precisar (todos ficam na categoria Form


Widgets da Palette veja sua localizao na figura 1.28):
Um TextView de tamanho Mdio (Medium), contendo uma mensagem
informativa.
Um SeekBar, que ser usado para especificar a altura em metros,
bastando para isso deslizar seu boto com o dedo.
Um segundo TextView de tamanho Mdio (Medium), logo abaixo do
SeekBar, que exibir o valor correspondente posio do SeekBar.
Um Button, que, ao ser tocado, realizar a converso.
Um ltimo TextView, s que agora Grande (Large), onde ser exibida
a altura convertida em ps.

48

Desenvolvendo seu primeiro aplicativo Android

Figura 1.28 Widgets necessrios para o aplicativo Conversor.

Comece removendo o TextView pequeno com a mensagem Hello world:


clique sobre ele e pressione Delete (ou Del) no teclado.
Clique sobre o TextView Medium (Figura 1.28) com o boto esquerdo do
mouse, mantenha-o pressionado e arraste o widget para o canto superior
esquerdo da tela (deixe um pequeno espao direita e esquerda).
Note que, medida que voc move o widget pela tela, o Eclipse mostra
linhas de guia para que voc se oriente com relao ao posicionamento
do objeto.
Isso acontece pois estamos usando um widget container, que serve para
agrupar um conjunto de outros widgets dentro dele de alguma maneira
especfica. Estes containers so chamados gerenciadores de layout. Estamos usando o default em uma tela do Android, o RelativeLayout (layout
relativo). Ele estabelece que todo elemento na tela posicionado em
relao a algum outro. Isso facilita a organizao e ajuda na adaptao
para tamanhos de tela diferentes.
Quando voc soltar o TextView na tela, poder ver pelo Outline (a pequena
janelinha no canto superior direito do Eclipse) que o TextView est contido
no RelativeLayout, de uma maneira hierrquica (Figura 1.29):

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

49

Figura 1.29 Exibio da hierarquia de widgets da tela no Outline.

OUTLINE, MAS NO OUTLAW (FORA DA LEI)


Janelinhas acessrias como o Outline costumam ser tratadas como os
renegados das ferramentas de software muita gente nem sabe que
eles existem e costumam fech-los assim que aparecem. Mas espere!
Neste caso aqui, o Outline pode ser um grande aliado!
Muitas vezes, widgets podem sumir da tela ou ficar em locais onde
difcil clicar sobre eles para selecion-los. Lembre-se nesse momento do
Outline: com ele voc pode ser usado para caar um widget perdido
ou de difcil seleo!

Uma informao importantssima de cada widget seu Id (de identificador). Trata-se de um nome usado para identific-lo dentro do layout e
posteriormente acess-lo via programao. Todo widget colocado na tela
recebe um id automtico formado pelo seu tipo iniciado em letras minsculas (por exemplo, TextView comea com textView, e Button com button)
seguido por um nmero. Um jeito fcil de descobrir o Id de um widget
visualiz-lo no Outline: o seu Id aquele mostrado ao lado do seu cone.
Tambm possvel mudar o Id de um widget na tela. Isso particularmente
interessante quando temos mais de um widget do mesmo tipo na tela
(como dois ou mais TextView, por exemplo) e precisamos diferenci-los
depois no cdigo. Vamos fazer isso para os dois TextView que mostraro a
altura em metros e depois em ps.

50

Desenvolvendo seu primeiro aplicativo Android

Antes de adicionar o prximo widget (o SeekBar), vamos trocar o texto


que exibido no TextView para algo mais informativo que simplesmente
Medium Text... Para isso, vamos trocar o contedo da sua propriedade
Text (Texto).
Clique sobre ele para selecion-lo (se ainda no estiver selecionado). No
canto inferior direito do Eclipse, fica a janela de propriedades (Properties
Figura 1.30). Ela mostra os atributos (ou seja, as configuraes) do widget
atualmente selecionado. Localize a propriedade Text e mude seu valor para
Informe sua altura em metros:, como mostrado na figura 1.30.

Figura 1.30 Mudando a propriedade Text.

DICA: Voc pode acessar as propriedades mais comuns de um widget


clicando com o boto direito do mouse sobre ele! Em alguns casos, esse
procedimento ainda mais fcil que usar a janela Properties.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

51

Depois de digitar o texto e pressionar Enter, voc ver o texto atualizado


aparecendo no widget.
Acrescente agora o SeekBar, posicionando-o logo abaixo do TextView.
Para exibir a medida em metros escolhida pela movimentao do SeekBar,
precisaremos de um novo TextView. Arraste um TextView Medium para logo
abaixo do SeekBar e procure coloc-lo no centro da tela. Em seguida, mude
sua propriedade Text para 0,00 m (veja a figura 1.32 para se orientar).
Quando o usurio movimentar a bolinha do SeekBar, vamos, por meio
da programao em Java, exibir o valor correspondente sua posio
neste TextView de tamanho mdio que acabamos de inserir. Por isso, seria
interessante mudar seu Id, de algo genrico como textView2 para algo mais
significativo. Uma boa ideia de Id seria txtMetros as primeiras trs letras
minsculas indicam seu tipo (TextView), e a segunda parte, seu contedo!
O melhor e mais rpido jeito de mudar o Id clicar com o boto direito
do mouse sobre o widget e selecionar Edit ID no menu. Ser exibida a tela
da figura 1.31, onde voc pode digitar o novo Id:

Figura 1.31 Mudando o ID de um widget.

Agora podemos passar aos prximos widgets, colocando-os na sequncia


indicada pela figura 1.32. No caso dos outros TextView e Button, assim que
posicion-los, modifique sua propriedade Text para exibir o texto mostrado na figura 1.32:

52

Desenvolvendo seu primeiro aplicativo Android

Figura 1.32 Tela do aplicativo com todos os widgets posicionados.

Coloque o ltimo widget, um TextView Large que exibir a altura convertida em ps, logo abaixo do Button, alinhado esquerda deste. Preste
ateno nas linhas verdes, que mostram a relao do alinhamento com
outro widgets. Evite deixar este ltimo TextView alinhado em relao ao
TextView que exibe a altura em metros (txtMetros), para evitar surpresas no
posicionamento.
No deixe de definir o ID deste ltimo TextView para txtPes, clicando com
o boto direito sobre ele e selecionando Edit ID.
Pronto! Com isso, completamos a interface da tela do nosso programa. Alternando para a aba de exibio do cdigo XML do arquivo (activity_main.
xml), ele deve estar semelhante ao da listagem 1.1:

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

RELATIVELAYOUT: NO FUTEBOL, MAS PODE SER UMA CAIXINHA DE SURPRESAS


Parece discurso de jogador de futebol no final do jogo, mas a pura
verdade: o utilssimo RelativeLayout pode se tornar uma verdadeira
caixinha de surpresas se voc no souber utiliz-lo. Por qu?
Bem, como j vimos, esse tipo de layout posiciona um novo elemento
em relao a outro j existente. Isso significa que seu posicionamento
est diretamente relacionado ao posicionamento do anterior. Ou seja,
ao mudar a posio de um elemento, todos aqueles que tiverem sua
posio definida em relao a este sero reposicionados e os resultados podem ser os mais variados (e esquisitos) possveis...
Por isso, a vai uma dica valiosa: procure primeiro rascunhar o seu
layout antes de pass-lo para o arquivo XML e somente v para o prximo elemento quando definir com certeza onde ficar o atual no
deixe para reposicion-lo depois.

Listagem 1.1: cdigo do arquivo activity_main.xml


<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity" >
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_alignParentTop="true"
android:layout_marginLeft="36dp"
android:layout_marginTop="34dp"
android:text="Informe sua altura em metros:"
android:textAppearance="?android:attr/textAppearanceMedium" />

53

54

Desenvolvendo seu primeiro aplicativo Android

<SeekBar
android:id="@+id/seekBar1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_alignParentLeft="true"
android:layout_below="@+id/textView1"
android:layout_marginTop="16dp" />
<TextView
android:id="@+id/txtMetros"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_below="@+id/seekBar1"
android:layout_centerHorizontal="true"
android:layout_marginTop="22dp"
android:text="0,00 m"
android:textAppearance="?android:attr/textAppearanceMedium" />
<Button
android:id="@+id/button1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/seekBar1"
android:layout_below="@+id/txtMetros"
android:layout_marginTop="28dp"
android:text="Converter" />
<TextView
android:id="@+id/txtPes"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_alignLeft="@+id/button1"
android:layout_below="@+id/button1"
android:layout_marginTop="34dp"
android:text="0,00 p(s)"
android:textAppearance="?android:attr/textAppearanceLarge" />
</RelativeLayout>

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

55

E ESTES RETNGULOS AMARELOS PRXIMOS AOS WIDGETS E/OU S LINHAS DO XML?


No precisa entrar em pnico. Se estes cones aparecem em widgets que
exibem texto, ou nas linhas do XML relativas aos atributos android:text,
eles simplesmente indicam que estamos definindo texto hard-coded
para estes widgets e que esse valor ser fixo, no se adaptando ao idioma
do aparelho. Para conseguir essa traduo automtica, o Android SDK
recomenda que usemos strings em XML para especificar o texto que
ser exibido nos widgets. Essa abordagem facilita o processo de internacionalizao (sim, eu tambm acho isso um verdadeiro palavro)
do app. Para saber mais sobre como fazer isso no seu aplicativo, acesse
este endereo no site oficial dos desenvolvedores do Android: developer.
android.com/guide/topics/resources/localization.html.

Como nos diria o mestre chins do kung fu: agora, pequenos gafanhotos,
vocs esto prontos para entrar no caminho que os levar sabedoria
plena na arte da programao em Android escrever cdigo em Java!

1.4.3 Escrevendo o cdigo Java


Em uma linguagem de programao orientada a objetos como Java, as
classes e os objetos so os blocos fundamentais que constroem um aplicativo. neles que escrevemos o cdigo que vai fazer o programa funcionar.
Vamos ver uma explicao mais detalhada sobre eles no captulo 3. Por
enquanto, voc pode j ficar sabendo que, no Android SDK, a tela de um
aplicativo representada por uma classe especial denominada Activity.
Outro recurso legal que uma linguagem como Java possui voc reutilizar
facilmente algo que j foi feito, evitando ter de reinventar a roda. Por
exemplo, voc no precisa ter de criar uma janela de um aplicativo do zero,
partindo de detalhes to complexos como o processo de desenh-la na tela
etc. Os caras da Google j fizeram isso para voc, criando a classe Activity!
Para se beneficiar dessa janela em branco que j existe, basta voc reutilizar
a Activity que eles criaram, usando-a como base para sua janela personalizada. Fazemos isso criando uma nova classe que herda as caractersticas
da Activity original.

56

Desenvolvendo seu primeiro aplicativo Android

Assim, a sua tela j nasce sabendo como pelo menos aparecer para o
usurio! Basta agora voc customiz-la.
Ns j comeamos a fazer isso na seo anterior, quando definimos o
layout da tela no arquivo activity_main.xml. Porm esse arquivo no contm
a alma da tela, ou seja, aquilo que ela pode fazer, mas somente o que ela
apresenta. Deveremos definir o que ela pode fazer diretamente na classe
que controla a tela, que se chama MainActivity.
Pois bem, vamos ver de perto essa tal Activity. Abra a sua MainActivity clicando duas vezes sobre o arquivo indicado na figura 1.33 (o Package Explorer
a aba localizada esquerda no Eclipse).

Figura 1.33 Localizao do arquivo MainActivity.java dentro do projeto.

A pasta src onde ficam os arquivos com cdigo Java (as classes) do seu
projeto. Como possvel ter muitos arquivos (muitas classes) em um
mesmo projeto, estes so organizados em pacotes. No exemplo da Figura
1.33, o arquivo est dentro do pacote net.querino.conversor. No seu caso, o
pacote pode ser esse mesmo ou qualquer outro que voc definiu ao criar
o projeto (veja a seo 1.4.1).
Clique duas vezes sobre o arquivo MainActivity.java para abri-lo no editor
de cdigo do Eclipse (a parte central da janela). O contedo inicial do
arquivo deve ser semelhante ao da listagem 1.2.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

57

Listagem 1.2: cdigo do arquivo MainActivity.java


1 package net.querino.conversor;
2 import android.os.Bundle;
3 import android.app.Activity;
4 import android.view.Menu;
5 public class MainActivity extends Activity {
6 @Override
7 protected void onCreate(Bundle savedInstanceState) {
8 super.onCreate(savedInstanceState);
9 setContentView(R.layout.activity_main);
10 }
11 @Override
12 public boolean onCreateOptionsMenu(Menu menu) {
13 // Inflate the menu; this adds items to the action bar if it is present.
14 getMenuInflater().inflate(R.menu.main, menu);
15 return true;
16 }
17 }

Antes de mud-lo para o que precisamos, vamos analisar este esqueleto


inicial da Activity:
Linha 1: O arquivo comea com a definio do pacote ao qual a classe
pertence. Um pacote em Java um grupo de classes. Quando criamos
um aplicativo em Java, as classes do nosso projeto devem pertencer a
um pacote, e este definido no momento da criao do projeto. Neste
caso, indicamos que a classe pertence ao package (pacote) net.querino.
conversor. No seu caso, o pacote mostrado aqui ser aquele definido na
criao do projeto.
Linhas 2 a 4: Estas linhas contm comandos import do Java, que indicam
os nomes (e os respectivos pacotes) de outras classes usadas dentro
desta classe. So de certa forma semelhantes aos include de linguagem
C. Repare que, para economizar espao na tela, o Eclipse oculta os
imports, colocando apenas primeiro na tela do cdigo. Para exibir todos,
como na Listagem 1.2, clique sobre o sinal de + existente esquerda
do primeiro import.

58

Desenvolvendo seu primeiro aplicativo Android

Linha 5: aqui comea nossa unidade bsica de cdigo em Java a classe.


Esta linha declara e abre a classe MainActivity, indicando que esta pblica (public falaremos mais sobre isso no captulo 3) e herda (extends)
as caractersticas bsicas de outra classe preexistente, denominada
simplesmente Activity. Como veremos tambm no captulo 3 (voc j
deve estar ficando curioso em relao a ele neste momento...), a herana
uma das principais vantagens da programao orientada a objetos.
Com ela, podemos reutilizar facilmente algo que j foi programado
antes. Neste exemplo, vamos reutilizar a tela bsica de um aplicativo
Android, criada pelos prprios engenheiros da Google, que serve de
modelo inicial para todas as demais. Esta classe a classe Activity, e
ela pertence ao pacote android.app ou seja, j veio pronta no Android
SDK para voc usar. Como vamos reutiliz-la, voc pode notar que
seu nome completo (formado pelo nome do seu pacote seguido de
um ponto e o nome da classe android.app.Activity) est especificado
em um import na linha 3. A chave no final da linha indica o incio da
classe. Ela s termina com a outra chave, existente na linha 17.
Linhas 6 a 10: aqui definido o primeiro mtodo desta classe. Um mtodo em Java semelhante a uma funo de linguagem C ele criado
para fazer algo e pode (ou no) retornar um valor ao ser executado.
A anotao (annotation em ingls) @Override na linha 6 indica que estamos reescrevendo este mtodo. O que isso quer dizer? Bem, trata-se
de um mtodo preexistente na nossa superclasse (tambm chamada
classe-pai ou classe-me bom, voc entendeu o que eu quis dizer...), a
Activity. Como herdamos Activity, j recebemos dela este mtodo. Mas
agora vamos criar uma nova verso dele, para que possamos fazer algo
diferente e especfico com nossa tela. Na linha 7 definido o nome
deste mtodo: onCreate(). Traduzindo seu nome literalmente, temos
algo como na criao isso indica o momento em que este mtodo
ser executado: na criao da tela. Este um tipo de mtodo especial,
associado a um evento. Um evento algum tipo de ao que acontece
no aplicativo, muitas vezes associada ao que o usurio fez.

O comando super na linha 8 chama o onCreate() da superclasse, que serve


para comear o processo de elaborao da tela. J na linha 9, algo muito
importante: graas ao comando setContentView() que a tela mostra o
layout que definimos no arquivo activity_main.xml. Sem esta linha, a classe

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

59

MainActivity e o layout em XML de activity_main.xml estariam totalmente


desconectados e a tela seria mostrada em branco, sem nenhum widget...
A seria muito sem graa o programinha, concorda?

Linhas 11 a 16: nestas linhas encontramos outro mtodo criado automaticamente com a classe, o onCreateOptionsMenu(). Trata-se tambm de
um evento, que disparado quando o usurio pressiona a tecla de
menu existente em certos modelos de aparelhos Android. Dentro dele,
podemos definir os botes do menu que ser apresentado na tela e
suas respectivas aes. Como no possuiremos menu em nosso app
Conversor, podemos tranquilamente excluir as linhas referentes a este
mtodo para deixar nosso cdigo mais enxuto.
Se voc deixasse este arquivo dessa forma e o executasse, j poderia ver a
tela principal do programa, mas nada funcionaria. Para dar vida ao aplicativo, precisamos escrever nosso prprio cdigo e fazer algumas mudanas.
Modifique seu arquivo MainActivity.java de acordo com a listagem 1.3.
Listagem 1.3: cdigo do arquivo MainActivity.java
1 package net.querino.conversor;
2 import java.util.Locale;
3 import
4 import
5 import
6 import
7 import
8 import
9 import
10 import

android.os.Bundle;
android.app.Activity;
android.view.View;
android.view.View.OnClickListener;
android.widget.Button;
android.widget.SeekBar;
android.widget.SeekBar.OnSeekBarChangeListener;
android.widget.TextView;

11 public class MainActivity extends Activity {


12

int alturaEmCentimetros = 0;

13 @Override
14 protected void onCreate(Bundle savedInstanceState) {
15 super.onCreate(savedInstanceState);
16 setContentView(R.layout.activity_main);

60
17
18

Desenvolvendo seu primeiro aplicativo Android



final TextView txtMetros = (TextView)findViewById(R.id.txtMetros);


final TextView txtPes = (TextView)findViewById(R.id.txtPes);

19 final SeekBar seekBar1 = (SeekBar)findViewById(R.id.seekBar1);


20 seekBar1.setMax(230);
21 seekBar1.setOnSeekBarChangeListener(new OnSeekBarChangeListener() {
22 @Override
23 public void onStopTrackingTouch(SeekBar seekBar) {
24 }
25 @Override
26 public void onStartTrackingTouch(SeekBar seekBar) {
27 txtPes.setText("p(s): toque em Converter");
28 }
29 @Override
30 public void onProgressChanged(SeekBar seekBar, int progress,
boolean fromUser) {
31 alturaEmCentimetros = progress;
32 String texto = formataValorComDoisDigitos(progress / 100.0);
33 texto += " m.";
34 txtMetros.setText(texto);
35 }
36 });
37 final Button button1 = (Button)findViewById(R.id.button1);
38 button1.setOnClickListener(new OnClickListener() {
39 @Override
40 public void onClick(View v) {
41 double alturaEmPes = alturaEmCentimetros / 30.48;
42 String texto = formataValorComDoisDigitos(alturaEmPes);
43 texto += " p(s)";
44 txtPes.setText(texto);
45 }
46 });
47 }
48 private String formataValorComDoisDigitos(double valor) {
49 return String.format(Locale.FRANCE, "%.2f", valor);
50 }
51 }

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

61

Vamos analisar por partes o que estamos fazendo aqui.


Linha 2: o comando import da linguagem Java semelhante ao #include
de linguagem C. Ele serve para importar no arquivo atual outro
arquivo (melhor dizendo: importar na classe atual uma outra classe)
que utilizaremos dentro do cdigo. Neste caso, estamos importando
a classe Locale, existente no pacote java.util e que serve para obtermos
informaes sobre configuraes regionais (como formatos numricos
de diferentes pases). Seu uso ser explicado na linha 49.
Linhas 5 a 10: essa sucesso de imports disponibiliza em nosso cdigo
o uso direto das classes View, Button, SeekBar e TextView. So classes existentes no Android SDK (repare que seu pacote comea com android) e
que so usadas para representar, dentro do cdigo Java, os widgets na
tela. Tambm importamos duas subclasses: uma de View (denominada
OnClickListener) e outra de SeekBar (OnSeekBarChangeListener). Essas duas
so classes especiais (na realidade, so interfaces em Java uma espcie
de molde para uma classe), usadas para que possamos programar
eventos (aes) que acontecem com os widgets.
Linha 12: declaramos uma varivel bsica do tipo int (o mesmo tipo int
de linguagem C), denominada alturaEmCentimetros, a qual vai guardar
o valor definido pelo usurio quando movimentar o SeekBar. Armazenamos o valor em centmetros, e no diretamente em metros, pois o
valor definido pelo movimento da bolinha do SeekBar um nmero
inteiro. Para obter o valor em metros, basta ento dividir por cem.
Outro detalhe importante: declarando a varivel neste ponto, estamos
fazendo com que a mesma seja global dentro da classe. Assim, todo e
qualquer mtodo declarado dentro da classe ter acesso varivel.
Linhas 17 e 18: estamos agora dentro do evento onCreate() aquele que
ser disparado automaticamente no momento da criao da tela. Por
mais incrvel que possa parecer, a maior parte do cdigo do nosso
aplicativo ficar aqui dentro! Comeamos declarando dois objetos da
classe TextView: txtMetros e txtPes. Estes dois objetos, variveis locais do
mtodo onCreate(), sero amarrados aos respectivos TextViews da tela,
que exibem o valor em metros e em ps. Aps estas linhas, sempre que
usarmos txtMetros ou txtPes no cdigo Java, ns estaremos nos referindo

62

Desenvolvendo seu primeiro aplicativo Android

aos respectivos widgets do XML. Essas linhas so to importantes que


merecem at receber um box explicativo s pra elas... L vai:

A (INICIALMENTE INEXISTENTE) RELAO ENTRE WIDGETS NO XML E NO CDIGO JAVA


Prepare-se para o choque: widgets colocados na interface por meio do
arquivo XML no esto diretamente acessveis no cdigo Java! Para quem
vem do Visual C#, ou at mesmo do Swing com Java desktop, isso realmente meio chocante. Mas nem tudo est perdido! Nesses momentos,
o mtodo findViewById() da Activity e a classe R.java vm para nos salvar.
Basta usar o mtodo findViewById(), passando para ele o Id do widget
na tela, que ele magicamente nos devolve uma referncia ao widget.
Armazenando esta referncia em uma varivel local do cdigo Java,
passamos ento a acessar o objeto na tela. Fcil, no mesmo?
Mas preste ateno aos detalhes: o Id que deve ser passado para
findViewById() tem de ser especificado usando o prefixo R.id . Por
exemplo, para localizar o widget com Id txtMetros, no podemos usar
findViewById(txtMetros), mas, sim, findViewById(R.id.txtMetros). Por qu? Bem,
se voc curioso, abra a pasta gen do seu projeto e clique duas vezes
sobre a classe R.java, para abri-la. L dentro, voc ver uma srie de
constantes Java (as linhas iniciadas com public static final) que possuem
como nome o Id do widget e um valor atribudo a elas. por meio
desse valor que o Android SDK consegue localizar o widget no XML
e disponibilizar o acesso a ele no cdigo Java.
Parece confuso? Mas no , no. Apenas lembre-se que, sempre que
precisar acessar um widget existente na interface em XML pelo cdigo
Java, dever usar o findViewById(). Ele um dos melhores amigos do
programador Android!

Linhas 17 e 18 (de novo!): estas linhas so realmente to importantes


que precisamos falar mais sobre elas! Notou o final no incio de cada
linha? Trata-se de uma palavra chave do Java usada na declarao de
variveis e que determina que esta no poder mais ser modificada
aps sua atribuio inicial. Ns a usamos aqui para garantir que os
mtodos que sero disparados na interao do usurio com os widgets
(quando ele move o SeekBar, por exemplo) tenham acesso a estes mesmos valores, e no a algo acidentalmente atribudo a mesma varivel
em outro momento. Basicamente, um requisito para poder acessar

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

63

os widgets dentro dos mtodos dos eventos. Outro detalhe: o TextView


entre parnteses existente antes de findViewById() est l para fazer um
casting. Um casting faz com que um tipo genrico seja tratado de uma
forma mais especfica. Isso acontece porque o findViewById() pode ser
usado para achar qualquer tipo de widget na tela. E, no Android,
todo widget colocado na tela descendente de uma me comum, a
classe android.view.View. Huuummm, eu acho que precisaremos de mais
um box explicativo...

A DINASTIA DAS VIEWS DO ANDROID


Uma das principais caractersticas (e vantagens) da POO (Programao
Orientada a Objetos no confunda com a famosa e to exercida POG,
Programao Orientada a Gambiarras) a herana de cdigo. Isso significa que os elementos bsicos em um programa orientado a objetos,
as classes, podem herdar outras classes, recebendo automaticamente
seus mesmos atributos e mtodos. Isso facilita a reutilizao do cdigo!
Percebendo que os elementos existentes em uma tela (os widgets) compartilhariam caractersticas em comum, os engenheiros de software
da Google sabiamente os elaboraram seguindo uma hierarquia de
herana. No topo da rvore, est a classe me de todos os widgets, a
View (veja na figura 1.34).

Figura 1.34 "rvore genealgica" (parcial) das views do Android.

64

Desenvolvendo seu primeiro aplicativo Android


Uma View basicamente qualquer espao delimitado em uma tela do
Android. Inicialmente vazio, o contedo especfico de uma View ser
determinado pelas suas subclasses, ou suas classes filhas.
Como a View a classe-me, suas caractersticas passam automaticamente
para todas as suas filhas e consequentemente netas, bisnetas, tataranetas etc. Isso significa que um TextView uma view, assim como um
Button tambm ! Alis, como podemos ver na figura 1.34, alm de ser
uma View, um Button tambm um TextView. Outra curiosidade: os widgets
containers, como RelativeLayout e LinearLayout, tambm so subclasses de
View afinal de contas, eles so espaos delimitados em uma tela que possuem a funo adicional de agrupar elementos colocados dentro deles.
E o que isso tudo tem a ver com o findViewById() da linha 24 do cdigo?
Bem, este mtodo serve para retornar qualquer tipo de elemento existente na tela. Como qualquer elemento existente na tela, seja ele um
Button, seja um TextView, necessariamente uma View, faz total sentido o
retorno desse mtodo ser mais genrico do que especfico, no mesmo?

Linha 19: aqui fazemos tambm um findViewById() para obter uma referncia ao SeekBar, a barra deslizante que ser usada para a definio da
altura em metros. O SeekBar um widget diferente dos usados nas linhas
anteriores (TextView), mas o conceito o mesmo: a varivel local seekBar1
ser uma referncia a R.id.seekBar1, colocado na interface. Como todo
SeekBar uma View, o findViewById() tambm funciona para encontr-lo na
selva do layout XML. LEMBRE-SE: estamos criando estas referncias
no cdigo para os widgets da interface em XML porque precisaremos
acessar e modificar suas propriedades (como o Text dos TextView) como
objetos Java!
Linha 20: nesta linha, com o mtodo setMax(230), configuramos o valor
mximo possvel na escala do SeekBar. A escala de um SeekBar comea
em 0 e vai at o valor (inteiro) especificado aqui (no caso, 230). Por
que este valor de 230? Como a escala do SeekBar inteira, ele vai, na
realidade, medir a altura em centmetros. Apenas na hora de mostrar
o valor ao usurio que ser exibido em metros. Para mostrar o valor
em metros, basta pegar a posio atual do SeekBar e dividi-la por 100!
Obviamente, nosso pequeno app tem um bug para usurios gigantes:
quem medir mais de 2,30 metros ficar de fora...

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

65

Linha 21: definimos aqui um listener para o SeekBar. Um listener um


objeto que vai ficar escutando por um evento que pode acontecer
a um widget. Neste caso, estamos definindo um SeekBarChangeListener,
que ficar monitorando por mudanas no SeekBar, ou seja, quando o
seu boto for deslizado pelo usurio. Ele pode detectar (e fazer algo)
em trs eventos bsicos: onStartTrackingTouch, quando o usurio comea a deslizar o boto da barra; onStopTrackingTouch, quando para de
deslizar o boto da barra; e onProgressChanged, que ocorre em qualquer
ocasio onde o progresso da barra for modificado ou seja, sempre
que o boto for movido. Basta implementar SeekBarChangeListener e os
mtodos relativos a esses eventos para conseguirmos fazer a SeekBar
trabalhar a nosso favor! E justamente isso que comeamos a fazer
aqui. Comeamos a implementao do SeekBarChangeListener nesta linha
e finalizamos na linha 36. importante saber que essa implementao
feita por meio do uso de um poderoso recurso da linguagem Java,
que so as classes internas annimas. Sem entrar em muitos detalhes,
trata-se basicamente de uma forma rpida e prtica de se escrever uma
segunda classe dentro de uma primeira.
Linhas 22 a 24: o mtodo do evento onStopTrackingToch() est vazio. Isso
acontece porque, neste caso, no precisamos fazer nada de diferente
quando o usurio parar de mover o boto da SeekBar. Porm, mesmo
vazio, ele precisa ficar aqui declarado se voc remov-lo, vai receber
um puxo de orelha do compilador Java ao executar o projeto...
Linhas 25 a 28: a implementao de onStartTrackingTouch() serve para,
assim que o usurio comear a mover o boto deslizante do SeekBar,
exibir a mensagem p(s): toque em Converter em txtPes (o TextView logo
abaixo do boto), indicando que o valor correspondente em ps ser
calculado quando o usurio tocar no boto com o rtulo Converter.
Linhas 29 a 35: aqui fica o evento mais importante (pelo menos em nosso
caso) do SeekBar, o onProgressChanged(). Ele ser executado sempre que
o boto deslizante for movido, ocasionando consequentemente uma
mudana no progresso do SeekBar (que, como vimos antes, vai de 0 a
230, de acordo com a posio do boto). Esse mtodo o que podemos
chamar de um cara gente fina: alm de disparado automaticamente,

66

Desenvolvendo seu primeiro aplicativo Android

traz de presente uma varivel contendo o progresso atual, por meio do


seu parmetro progress, do tipo int (veja a linha 30). Isso quer dizer
que dentro do mtodo podemos usar esta varivel para saber a medida atualmente selecionada pelo usurio. Na linha 31, aproveitamos
a deixa e guardamos o valor de progress na varivel global da classe,
alturaEmCentimetros, pois tudo que precisaremos quando o usurio
tocar em Converter.

Em seguida, na linha 32, chamamos o mtodo formataValorComDoisDigitos


(implementado nas linhas 48 a 50), passando a ele o valor de progress
dividido por 100, obtendo ento a altura em metros. Como voc ver
na explicao das linhas 48 a 50, o mtodo retorna uma String relativa
ao valor, sempre com duas casas decimais (assim, 1,8 ser mostrado
como 1,80, por exemplo), e que fica armazenada como texto. Para ficar
ainda mais informativo, concatenamos m. String, na linha 33. E,
finalmente, na linha 34, exibimos a string texto em txtMetros (o TextView
existente abaixo da barra), por meio do seu mtodo setText().

Linha 36: nesta linha, fechamos a implementao do listener, iniciada


na linha 21.
Linha 37: assim como fizemos nas linhas 17, 18 e 19, "laamos" agora
com findViewById() o boto R.id.button1 na interface em XML, para que
possamos programar o que acontece quando ele clicado (melhor
dizendo, tocado, mas a tradio do evento onClick na programao de
sistemas desktop acabou "contaminando" os aplicativos mveis...).
Linhas 38 a 46: mais um listener para a nossa coleo, s que agora se
trata do mais famoso de todos (conheo at empresas batizadas com
o nome desse evento) aquele que disparado quando um widget
tocado (clicado), o onClickListener! A implementao desse listener
abrange apenas a programao do mtodo onClick(), que efetivamente
disparado quando o usurio tocar no boto. Comeamos, na linha
41, fazendo a converso de centmetros para ps, e armazenando o
resultado na varivel alturaEmPes, do tipo double. Em seguida, na linha
42, convertemos o valor de alturaEmPes para String, adequado para colocao em um TextView, e que fica guardado em texto. Veja que, assim

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

67

como acontece no evento onProgressChanged() do SeekBar, tambm usamos


o mtodo formataValorComDoisDigitos, definido nas linhas 48 a 50, para
deixar o nmero com duas casas decimais fixas. Adicionamos string
texto o valor " p(s)" na linha 43 e, finalmente, colocamos texto no
TextView txtPes (aquele logo abaixo do boto), para que o usurio veja
o resultado. A linha 46 encerra a definio do onClickListener, iniciada
na linha 38.
Linhas 48 a 50: nestas linhas definido o mtodo formataValorComDoisDigitos,
que usamos nos eventos onProgressChanged() e onClick(). A palavra-chave
private, existente no incio da linha 48, indica que esse mtodo privado, ou seja, pertence classe MainActivity e s pode ser usado dentro
dela. O String logo em seguida indica o tipo de retorno do nosso mtodo.
Voc tambm v na linha 48 que, assim como as funes de linguagem
C, este mtodo recebe um parmetro do tipo double, denominado valor
trata-se do nmero que ser convertido para String e formatado para
duas casas decimais. Existem vrias maneiras de fazer essa formatao
em Java. Uma delas por meio da classe DecimalFormat, mas o mtodo
format da classe String quebra bem o galho nesse caso. Na linha 49,
passamos a ele trs parmetros: um Locale do Java, indicando um pas
que use o padro de separador de casas decimais igual ao nosso (a
vrgula no caso, como no temos um Locale para o Brasil, usamos o
da Frana); uma String como mscara da formatao, que deve seguir
o mesmo padro da usada no comando printf() de linguagem C no
caso, estamos formatando um valor real com duas casas (%.2f); e, por
fim, o nmero que ser formatado: o parmetro valor passado ao mtodo formatarValorComDoisDigitos. O mtodo String.format retorna ento a
String formatada, que por sua vez devolvida ao "chamador" do nosso
mtodo com return.
Pronto! Agora s ver como o nosso "mini-app" ficou!

1.4.4 Testando no emulador


Temos uma aplicativo, temos um emulador com um dispositivo virtual
configurado e temos curiosidade para ver como esse app funciona! Por
isso, vamos execut-lo!

68

Desenvolvendo seu primeiro aplicativo Android

Clique sobre o nome do projeto no Project Explorer e depois no boto


Run da barra de ferramentas do Eclipse, como mostrado na figura 1.35.

Figura 1.35 Executando o projeto.

Quando executamos um projeto no Eclipse pela primeira vez, exibida


uma pequena janela questionando que tipo de aplicativo ns estamos
compilando. Selecione Android Application e clique em OK, como indicado
na figura 1.36.

Figura 1.36 Especificando que o projeto ser executado como um aplicativo


Android.

Captulo 1 Prepare-se para se render ao robozinho verde do Google!

69

Seu aplicativo ser ento compilado e um arquivo chamado Conversor.apk


ser gerado. Este arquivo ser automaticamente instalado pelo Eclipse
no emulador. Se voc curioso (como eu), pode encontrar este arquivo
dentro da pasta do projeto, em uma subpasta chamada bin (de binrio).
Em alguns segundos, voc dever visualizar seu aplicativo em execuo
no emulador, como mostra a figura 1.37. Se for a primeira vez que voc
est abrindo o emulador, o processo de inicializao do Android pode
demorar um pouquinho...

Figura 1.37 O aplicativo Conversor em execuo no emulador.

Caso ocorra algum erro, confira seu cdigo com relao ao apresentado
nas listagens. Se mesmo sem erros o programa insistir em no aparecer,
clique novamente sobre o boto Run e aguarde pode ser que o Eclipse no
tenha conseguido instalar o aplicativo no emulador na primeira tentativa.

70

Desenvolvendo seu primeiro aplicativo Android

1.5 E agora? Para onde vamos?


Como poderemos incrementar nosso modesto aplicativo de converso?
Bem, voc neste momento j deve ter pensado em vrias formas de
melhor-lo... Uma delas pode ser feita bem facilmente: que tal aproveitar
o evento onProgressChanged() e matar dois coelhos com uma cajadada s
( apenas um provrbio, hein, sociedade protetora dos animais...)? Mas
como assim?
Alm de usar este evento para atualizar a visualizao da medida em
centmetros no TextView, podemos perfeitamente fazer a converso diretamente nele! Ou seja, em vez de acion-la no click do Button, voc pode
colocar o cdigo referente converso e exibio do texto no mesmo
onProgressChanged() que exibe o valor da medida em centmetros escolhida.
Dessa forma, assim que o usurio deslizar o dedo pelo SeekBar, aparecer
a mesma medida em centmetros e polegadas simultaneamente!
Tente realizar essa mudana sozinho, enquanto nos aquecemos para enfim comear a nossa sensacional calculadora este o tema do prximo
captulo.

Você também pode gostar