meu aplicativo android

58
Luiz Carlos Querino Filho Novatec

Upload: daniel-pinto

Post on 20-Nov-2015

26 views

Category:

Documents


5 download

DESCRIPTION

Desenvolvimento adroid

TRANSCRIPT

  • 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 PratesCapa: Carolina KuwabataReviso gramatical: Marta Almeida de SEditorao eletrnica: Carolina Kuwabata

    ISBN: 978-85-7522-378-9

    Histrico de impresses:

    Dezembro/2013 Primeira edio

    Novatec Editora Ltda.Rua Lus Antnio dos Santos 11002460-000 So Paulo, SP BrasilTel.: +55 11 2959-6529Fax: +55 11 2950-8869Email: [email protected]: www.novatec.com.brTwitter: twitter.com/novateceditoraFacebook: facebook.com/novatecLinkedIn: linkedin.com/in/novatecXXXX

  • 15

    captulo 1Prepare-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 home-nagem aos clebres R2-D2 e C3PO de Guerra nas Estrelas? Ou um reconhe-cimento 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 mui-tas 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 ope-racional que, assim como o Windows, dominaria seu segmento de mercado...

    1.1 Uma breve histria do sistema operacional AndroidEm 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.

  • Desenvolvendo seu primeiro aplicativo Android16

    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 deci-so 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 ope-racional 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 her-daria 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.

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

    Isso, obviamente, se deve a vrios fatores, como a evidente qualidade do siste-ma 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 desen-volver aplicativos para Android. E isso realmente aconteceu: especialis-tas 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 mer-cado? 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?

  • Desenvolvendo seu primeiro aplicativo Android18

    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, codi-nome 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 rece-ber 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).

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

    1.2 Obtendo e instalando sua caixa de ferramentasO 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 elabo-rao 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 sis-tema 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 "pa-dro" 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...

  • Desenvolvendo seu primeiro aplicativo Android20

    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 evolu-o 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 pro-gramado 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.

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

    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.

  • Desenvolvendo seu primeiro aplicativo Android22

    Escolha a verso adequada ao seu sistema operacional. Para alguns siste-mas 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 bai-xado 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!

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

    Figura 1.5 Instalao do JDK 7 concluda.

    1.2.2 Baixando e instalando o Android SDKNesta 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 desen-volvimento em Android: o site oficial de desenvolvedores Android do Google! Alm do SDK, aqui voc encontra notcias, tutoriais e a docu-mentao 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.

  • Desenvolvendo seu primeiro aplicativo Android24

    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 ade-quada 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 denomi-nado adt-bundle--.zip.

    Para deixar tudo organizado, abra sua pasta pessoal no seu sistema ope-racional, 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....

  • 25Captulo 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.

  • Desenvolvendo seu primeiro aplicativo Android26

    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\\Developer (em sistemas Windows se voc usa Mac OS X ou Linux, ser, respectivamente, /Users/ ou /home/), 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.

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

    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-- 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 sim-plesmente 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.

  • Desenvolvendo seu primeiro aplicativo Android28

    1.3 Executando o Eclipse pela primeira vezO 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 de-senvolvimento 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 iniciaisQuando 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.

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

    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 mar-cada, 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.

  • Desenvolvendo seu primeiro aplicativo Android30

    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 EclipseO Eclipse chama o conjunto de elementos que compem sua tela de perspective (perspectiva). Como ele atualmente d suporte a vrias lin-guagens 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 exis-tentes no workspace e o que eles contm.

    (c) Editor de cdigo: aqui que vamos fazer o que mais gostamos pro-gramar!

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

    (d) Outline: um resumo da estrutura do arquivo-fonte aberto no editor esquerda. Basicamente, um recurso para voc localizar rapida-mente elementos do cdigo, como um mtodo.

    (e) Problems: ningum gosta de problemas, mas uma hora eles apare-cem. 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 EclipseAs configuraes bsicas do Eclipse podem ser acessadas nas verses Win-dows e Linux do aplicativo, pelo menu Window > Preferences. No Mac OS X, elas esto no menu ADT, direita da ma da Apple.

  • Desenvolvendo seu primeiro aplicativo Android32

    Se tem algo que o Eclipse oferece bastante mesmo so opes de confi-gurao, 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:

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

    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 progra-mador 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 emuladorOs 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.

  • Desenvolvendo seu primeiro aplicativo Android34

    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.

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

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

  • Desenvolvendo seu primeiro aplicativo Android36

    (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 pa-cote 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 emu-lador ficar sempre congelado no estado em que foi usado pela ltima vez (de maneira semelhante ao que acontece com aplicati-vos 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, possi-bilidade 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.

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

    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 medidasO 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 resig-nar (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.

  • Desenvolvendo seu primeiro aplicativo Android38

    Figura 1.21 Tela final do aplicativo Conversor.

    1.4.1 Criao do projeto no EclipsePara 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.

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

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

    (b) Project Name: o nome do projeto dentro do Eclipse. Geralmente, usa-mos 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 cor-retamente 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

  • Desenvolvendo seu primeiro aplicativo Android40

    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 necess-ria 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 inova-doras 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 retrocompatibili-dade com verses mais antigas est garantida pela seleo feita em Minimum Required SDK!

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

    (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 vonta-de 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 bar-ra de navegao e/ou ferramentas e que possa ocupar a tela toda quando o usurio interagir com seu contedo.

  • Desenvolvendo seu primeiro aplicativo Android42

    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.

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

    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 apli-cativo 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.

  • Desenvolvendo seu primeiro aplicativo Android44

    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 im-plementao 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 ni-ca 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!

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

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

  • Desenvolvendo seu primeiro aplicativo Android46

    (d) Graphical Layout | activity_main.xml: aqui voc pode alternar entre a visualizao grfica da tela (onde ns estamos no momento e po-demos 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 ins-talado 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 soltarVoc 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 in-terface do nosso aplicativo em linguagem XML, ou seja, a especificao dos widgets contidos na tela e suas respectivas configuraes (posio, tamanho etc.).

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

    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 en-genheiros 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):

    UmTextView de tamanho Mdio (Medium), contendo uma mensagem informativa.

    UmSeekBar, que ser usado para especificar a altura em metros, bastando para isso deslizar seu boto com o dedo.

    UmsegundoTextView de tamanho Mdio (Medium), logo abaixo do SeekBar, que exibir o valor correspondente posio do SeekBar.

    UmButton, que, ao ser tocado, realizar a converso.

    UmltimoTextView, s que agora Grande (Large), onde ser exibida a altura convertida em ps.

  • Desenvolvendo seu primeiro aplicativo Android48

    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. Esta-mos 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):

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

    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 identifi-cador). 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 mi-nsculas (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.

  • Desenvolvendo seu primeiro aplicativo Android50

    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.

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

    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 mos-trado na figura 1.32:

  • Desenvolvendo seu primeiro aplicativo Android52

    Figura 1.32 Tela do aplicativo com todos os widgets posicionados.

    Coloque o ltimo widget, um TextView Large que exibir a altura conver-tida 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. Al-ternando para a aba de exibio do cdigo XML do arquivo (activity_main.xml), ele deve estar semelhante ao da listagem 1.1:

  • 53Captulo 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 resul-tados 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 pr-ximo elemento quando definir com certeza onde ficar o atual no deixe para reposicion-lo depois.

    Listagem 1.1: cdigo do arquivo activity_main.xml

  • Desenvolvendo seu primeiro aplicativo Android54

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

    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 inter-nacionalizao (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 JavaEm uma linguagem de programao orientada a objetos como Java, as classes e os objetos so os blocos fundamentais que constroem um aplica-tivo. 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 persona-lizada. Fazemos isso criando uma nova classe que herda as caractersticas da Activity original.

  • Desenvolvendo seu primeiro aplicativo Android56

    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 cli-cando 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.

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

    Listagem 1.2: cdigo do arquivo MainActivity.java1 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 //Inflatethemenu;thisaddsitemstotheactionbarifitispresent.

    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.

  • Desenvolvendo seu primeiro aplicativo Android58

    Linha 5: aqui comea nossa unidade bsica de cdigo em Java a classe. Esta linha declara e abre a classe MainActivity, indicando que esta p-blica (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 mto-do 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 esta-mos 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

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

    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 auto-maticamente 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 aplica-tivo, 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.java1 package net.querino.conversor;

    2 import java.util.Locale;

    3 import android.os.Bundle;

    4 import android.app.Activity;

    5 import android.view.View;

    6 import android.view.View.OnClickListener;

    7 import android.widget.Button;

    8 import android.widget.SeekBar;

    9 import android.widget.SeekBar.OnSeekBarChangeListener;

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

  • Desenvolvendo seu primeiro aplicativo Android60

    17 finalTextViewtxtMetros=(TextView)findViewById(R.id.txtMetros);

    18 finalTextViewtxtPes=(TextView)findViewById(R.id.txtPes);

    19 finalSeekBarseekBar1=(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 finalButtonbutton1=(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 }

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

    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 exis-tentes 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. Armaze-namos 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

  • Desenvolvendo seu primeiro aplicativo Android62

    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 real-mente 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 publicstaticfinal) 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 mes-mos valores, e no a algo acidentalmente atribudo a mesma varivel em outro momento. Basicamente, um requisito para poder acessar

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

    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 sig-nifica 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) com-partilhariam 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.

  • Desenvolvendo seu primeiro aplicativo Android64

    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, tata-ranetas 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 pos-suem 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 exis-tente 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 refe-rncia 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...

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

    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 co-mea 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,

  • Desenvolvendo seu primeiro aplicativo Android66

    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 me-dida 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 co-locao em um TextView, e que fica guardado em texto. Veja que, assim

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

    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 pri-vado, 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 m-todo 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 emuladorTemos uma aplicativo, temos um emulador com um dispositivo virtual configurado e temos curiosidade para ver como esse app funciona! Por isso, vamos execut-lo!

  • Desenvolvendo seu primeiro aplicativo Android68

    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.

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

    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.

  • Desenvolvendo seu primeiro aplicativo Android70

    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 dire-tamente 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 en-fim comear a nossa sensacional calculadora este o tema do prximo captulo.