Apostila android

  • 473 views
Uploaded on

 

  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
473
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
67
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide

Transcript

  • 1. Apostila de Programando Passo-a-PassoDe : Luciano Alves (lucianopascal@yahoo.com.br)
  • 2. Índice analíticoApresentação ..................................................................................................... 3Introdução .......................................................................................................... 4Instalando o Eclipse e o Android ..................................................................... 4Criando a nossa primeira aplicação em Android......................................... 10Usando Widgets............................................................................................... 18 Desenvolvendo uma aplicação que soma números....................................... 18 Desenvolvendo uma aplicação simples de compras...................................... 23 Desenvolvendo uma aplicação de cálculo de salário ..................................... 26 Desenvolvendo uma aplicação de lista telefônica .......................................... 31 Desenvolvendo uma aplicação que visualiza imagens .................................. 34Mudando de layouts ........................................................................................ 38 Desenvolvendo uma aplicação de cadastro................................................... 42Lista de atributos............................................................................................. 53Conclusão ........................................................................................................ 58 2
  • 3. Apresentação Esta apostila tem por objetivo mostrar de modo fácil como programar nanova plataforma para dispositivos móveis da Google (Android) usando o eclipse,por meio de vários programas e exemplos bem explicados. 3
  • 4. Introdução O Android é a nova plataforma do Google voltada para dispositivos móveis.Em 5 de novembro de 2007, a empresa tornou pública a primeira plataformaOpen Source de desenvolvimento para dispositivos moveis baseada naplataforma Java com sistema operacional Linux, na qual foi chamada deAndroid. Essa plataforma é mantida pela OHA (Open Handset Alliance), umgrupo formado por mais de 30 empresas as quais se uniram para inovar eacelerar o desenvolvimento de aplicações, serviços, trazendo aos consumidoresuma experiência mais rica em termos de recursos, menos dispendiosa emternos financeiros para o mercado móvel.pode-se dizer que a plataformaAndroid é a primeira plataforma móvel completa, aberta e livre. Instalando o Eclipse e o Android Para a elaboração desse material, eu fiz o uso do Eclipse Europa (Eclipse3.3.1.1 para Windows) e o SDK do Android versão m5-rc15 e o plugin doAndroid para o Eclipse ADT-0.4.0. Qualquer versão (de preferência superior)dos programas citados acima serve. Claro , para que toda essa aplicaçãofuncione é necessário que você tenha instalado antes de tudo, a Máquina VirtualJava (de preferência a versão 5 ou posterior). Bom, mãos a obra. Deixo aqui os links para download dos itens citados acima: SDK do Android e o plugin do Android (mesmas versões citadas acima ousuperiores): http://code.google.com/android/download.html Eclipse Europa (ou superior) http://www.eclipse.org/downloads/ Para saber se você possui uma Maquina virtual Java, entre no prompt decomando de digite a seguinte linha: java –version Se mostrar algo parecido como mostra o código abaixo: java version "1.6.0_07" Java(TM) SE Runtime Environment (build 1.6.0_07-b06) Java HotSpot(TM) Client VM (build 10.0-b23, mixed mode, sharing) Beleza, você possui uma máquina virtual Java instalada no seucomputador, caso contrário, entre no Site da Sun e faça o seu download. Aquiestá o link 4
  • 5. http://java.sun.com/javase/downloads/index.jsp Depois de obter os programas e plugins citados acima, o primeiroprograma e ser instalado é o eclipse. Para instalar o eclipse, simplesmentedescompacte-o em um local desejado. Agora vamos instalar o SDK Android. É o mesmo procedimento do eclipse,descompactar em um local apropriado. Por ultimo, vamos instalar o plugin do Android. Para isso, descompacte-o oplugin do Android em um local desejado. Agora execute o eclipse, se você estiver executando-o pela primeira vez,ele irá pedir para definir uma pasta padrão (um Workspace). Defina a pasta econtinue o carregamento do eclipse. Depois de carregado, se for a primeiravez, feche a Janela do “Welcome” (Bem-vindo). Agora vamos instalar o plugindo Android, vá no menu “Help / Softwares Updates / Find and Install”, conformefigura abaixo: Selecione a opção “Search for new features to install” e clique no botão“Next”. Será exibida uma tela conforme a figura abaixo: 5
  • 6. Feito isso, clique no botão “New Local site” e indique o diretório do ADTjá descompactado no local onde você extraiu. Para ficar mais claro, dento dodiretório ADT existem dois diretórios __MACOSX e um outro chamado ADT-x.x.x , selecione este. Feito isso, clique em “OK” e será exibida uma caixa dediálogo conforme figura abaixo: Na caixa de diálogo acima, basta clicar no botão “OK”. Pronto! O item foiinserido, conforme a figura abaixo. Agora é só clicar em “Finish”. 6
  • 7. Depois de clicar em “Finish” na tela acima, será mostrado uma nova telaconforme figura abaixo. Clique no sinal “+” e faça as seleções dos plugins de acordo com apróxima figura que é exibida a seguir. Caso você esteja utilizando uma outraversão do plugin você pode selecionar todas as opções desde nenhuma delasresulte em alguma mensagem de erro, como no caso nesta versão do pluginque utilizei, o último item (Android Editors) não pode ser instalado pois requer aexistência de um outro plugin. 7
  • 8. Feito isso, clique no botão “Next”, e será exibida uma tela de licensa desoftware. Nesta tela é só selecionar a opção “I accpet the terms in the licenseagreement” e clique no botão “Next”. Na próxima tela, simplesmente clique nobotão “Finish” e na próxima tela, que é mostrada na figura abaixo, clique nobotão “Install All”. 8
  • 9. Após instalar os plugins, será exibida uma mensagem, conforme a figuraabaixo, recomendando ao usuário que ele reinicie o eclipse. Simplesmenteclique no botão “Yes”. Após o eclipse ter reiniciado, vamos fazer agora as configurações parafazer conexão com o emulador do Android. Vamos no menu “Window” /“Preferences”. Aberta a caixa de diálogo, selecione o item “Android”, serámostrada duas mensagens de erro, ignore-as. Agora vamos indicar o local ondese encontra o emulador do Android, simplesmente clicando no botão“Browse...” e indicando o seu local onde foi instalado. Feito isso, se a sua telaestá de acordo com a tela da figura abaixo, se estiver (mostrando lá no topo otítulo Android) o diretório indica está correto, é só clicar em “OK”. 9
  • 10. Criando a nossa primeira aplicação em Android Agora vamos criar um novo projeto Android indo no menu “File” / “New” /“Other”. Selecion o projeto Android conforme figura abaixo. Depois deselecionar, clique em “Next”: Após clicar em “Next” na figura acima, será exibida uma tela conformefigura abaixo. Vamos chamar o nosso projeto “Project name” de ProjetoAndroid.Em “Package name” vamos digitar “com.android.hello”. Em Activity namedigitaremos “AppHello” e em “Application name” digitaremos “App Hello World”,é só conferir na figura abaixo. Depois é só clicar em “Finish”. 10
  • 11. Pronto! Nosso projeto foi criado. Em Package Explorer, vamos dar umaolhada na estrutura do Projeto, simplesmente clicando no botão “+”. É só seguira figura abaixo, aproveite e abra o arquivo AppHello.java , também conformefigura abaixo: Bom, agora irei descrever a estrutura de um projeto Android. Observemque dentro da pasta ProjetoAndroid existe uma pasta chamada “src”, dentrodela é que ficam os códigos fonte java das aplicações. Observem que o arquivoAppHello.java se encontra dentro do pacote “com.android.hello” (Esse pacotetambém é uma pasta). Esse arquivo é a nossa aplicação Android. Voudescrever em detalhes o arquivo AppHello.java (Veja o código abaixo):package com.android.hello;import android.app.Activity;import android.os.Bundle;public class AppHello extends Activity { /** Called when the activity is first created. */ @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); } } Diferentemente das aplicações comuns de Java, toda classe paraaplicação Android deve ser derivada da classe Activity (Atividade) e possuicomo método principal, o método onCreate. Dentro desse método ele invoca ométodo onCreate da super classe passando mesmo parâmetro (o icicle), logoapós esse método, vem o método setContentView, responsável por exibir a telada minha aplicação , baseado nos layouts xml, por padrão ele chama o arquivo“main.xml”. 11
  • 12. Dentro da pasta ProjetoAndroid existe um diretório chamado “res”, ondeficam armazenados todos os recursos utilizados pela aplicação. Dentro dodiretório “res” existem três diretórios, cada um deles com uma finalidade, quedescreverei agora: - O diretório drawable armazena todas as imagens que irei utilizar naminha aplicação. Por padrão , ele tem uma imagem chamada “Icon.png”, que éusada como ícone da aplicação Android. - O diretório layout armazena todas os layouts da aplicação Android, quenormalmente são arquivos “.xml”. Para quem conhece a combinação HTML +JavaScript, o Android é similar, é a combinação de XML + Java, logo todos osnosso componentes vão ser adicionados usando tags XML. Por padrão, oarquivo de layout é o main.xml. Veja o seu código abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Hello World, AppHello" /></LinearLayout> Observe que após o a primeira linha (prólogo xml), existe uma tagchamada LinearLayout, responsável por organizar os componentes exibidos natela, por padrão os componentes são distribuídos na vertical pelo atributoandroid:orientation="vertical". Dentro desta tag, existe uma chamada TextView, que representa um textoa ser exibido na tela , por padrão, ele irá exibir “Hello World, AppHello” atrvés doatributo android:text="Hello World, AppHello". - O diretório values armazena valores estáticos que podem ser utilizados porum arquivo “.XML”. Normalmente esses valores estáticos devem serarmazenados no arquivo “strings.xml”. Veja o código desse arquivo abaixo :<?xml version="1.0" encoding="utf-8"?><resources> <string name="app_name">App Hello World</string></resources> Observem que dentro desse arquivo eu declaro um valor estático chamadoapp_name, cujo valor é App Hello World. 12
  • 13. Dentro da pasta ProjetoAndroid, existe um arquivo chamado“AndroidManifest.xml” , esse arquivo é o sistema nervoso de uma aplicação emAndroid. É nele que ficam as definições referentes à aplicação. Veja o códigodele abaixo:<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.android.hello"> <application android:icon="@drawable/icon"> <activity android:name=".AppHello"android:label="@string/app_name"> <intent-filter> <action android:name="android.intent.action.MAIN" /> <categoryandroid:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> </application></manifest> Observem algumas tags interessantes. A tag <application> possui oatributo android:icon, no qual especifico o ícone da aplicação. Como haviacitado anteriormente, todas as imagens ficam no diretório drawable e nessediretório existe um arquivo de chamado “icon.png” que será o ícone da minhaaplicação. Logo, para usar esse ícone neste atributo, deve-se passar o valor“@drawable/icon” .Observem que quando informamos o ícone, ele deve serinformado sem a extensão (nesse caso, PNG). Observem agora a tag <activity>, ela define uma atividade (Activity),.Dentro desta tag, eu possuo o atributo chamado android:label que define o títuloda minha aplicação. O título que será exibido e o valor que está armazenado novalor estático app_name. Isso é obtido pela atribuiçãoandroid:label="@string/app_name". Como havia falado a aplicação Android nada pais é do que a combinaçãoJava + XML. Agora, como um código Java vai acessar um componente que estáescrito em XML ? Ah, essa é a finalidade do arquivo R.java, ele funciona comouma “interface” entre o código Java e o código XML, logo, se eu quisermanipular em tempo de execução um componente via Java, tenho que fazerinterface com esse arquivo. Em breve vamos ver como. OBS: O arquivo R.java não pode ser modificado manualmente. Ele émodificado automaticamente de acordo com as mudanças feitas no projeto. Vamos executar nossa aplicação. Va no Run / Open Run Dialog. Seráaberta uma caixa de diálogo com vários itens. Clique com o botão direito domouse no item “Android Application” e selecione a opção New, conforme afigura abaixo: 13
  • 14. Feito isso, na propriedade name ao lado digite AppAndroid. Em projectselecione o projeto que criamos em clicando no botão Browse, com o nome deProjetoAndroid. E por último, em Activity, selecione a atividade“com.android.hello.AppHello”. Qualquer dúvida, siga a figura abaixo: Agora é só clicar em Run e rodar a aplicação. Quando o emulador Androidé executado, abre junto com ele uma caixa de dialogo, conforme a figura abaixo.Normalmente, eu desmarco a opção “Send usage statistics to Google” e clicoem “Proceed”. Pra vocês que estão executando pela primeira vez o emulador do Android,vê que o emulador é uma espécie de IPhone vermelho com umas teclas aolado. No início mostra o título Android. Depois, vem aquela bolinha vermelhaque fica batendo de um lado para outro, quando chega essa parte, normalmentedemora em torno de 2 a 10 minutos (dependendo da sua máquina. Érecomendável que você tenha no mínimo 512 MB de memória e um 14
  • 15. processador bem rápido para um bom desempenho da execução) para aaplicação ser exibida , mesmo sendo essa aplicação algo muito simples. Passado o tempo que citei acima, será mostrada a nossa aplicação etambém duas mensagens (ou uma dependendo de alguns casos). Se aparecer,clique no botão “Force Close” ou com o mouse ou com o botão vermelho centralsituado no aparelho. Uma demonstração dessa situação situa-se na figuraabaixo: Pronto, nossa aplicação está rodando sem problemas. Veja a figuraabaixo: 15
  • 16. Esse emulador já vem com uma série de recursos como Navegador,Aplicações de demonstração, Mapas, Lista de contatos e etc. Se você neste exato momento fechou o emulador após a execução daaplicação, vou te dizer uma coisa: “Não era para você ter feito isso”. Se vocêesperou muito tempo para ver essa aplicação em execução, ao executarnovamente a aplicação, você vai esperar o mesmo. Nessa situação, ao executarpela primeira vez o emulador, e caso vá executar outros programas, minimize oemulador ao invés de fechar, pois se você esperou muito tempo para executaresse programa, com ele minimizado, ao executar um outro programa, o eclipsevai fazer uso do emulador já aberto em vez de abrir outro, com isso, a aplicaçãolevará em torno de 7 a 12 segundos em média para ser executada. Nuncaesqueça isso! Vamos modificar essa aplicação. Minimize o emulador e vamos abrir oarquivo “main.xml”. Na tag TextView que já havia explicado a vocês, possui umatributo chamdado android:text, onde nele defino o título que será exibido,modifique agora essa prorpiedade com o seguinte valor (título), conforme ocódigo abaixo: android:text="Fala cara, beleza ???" 16
  • 17. Feito isso, salve a aplicação e execute novamente a aplicação. O resultadoé mostrado abaixo: Vamos fazer mais uma outra modificação na nossa aplicação. Abranovamente o arquivo main.xml, observe que ele possui um TextView certo ?Vamos colocar mais duas TextViews, a primeira TextView, no atributoandroid:text terá o título “Primeira frase”, o segundo TextView terá o título“Segunda Frase” e assim sucessivamente. Veja como ficará o código do arquivomain.xml :<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Primeira Frase." /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Segunda Frase" /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Terceira Frase???" /></LinearLayout> Feito isso, salve o arquivo e execute novamente a aplicação, o resultado émostrado na figura abaixo: 17
  • 18. E aeh, ta entendo aos poucos como se faz aplicações Android ? Comceretza que sim! Agora vamos aprofundar um pouco e fazer aplicações maisinteressantes com o uso dos Widgets (componentes) existentes na plataformaAndroid. Usando Widgets O que são os widgets ? Os widgets são os componentes que compõemuma aplicação Android, como o TextView, um Button, um EditText , umRadioButton e etc. Desenvolvendo uma aplicação que soma números Vamos criar agora uma aplicação que faça uso de um desses widgets. Crieum novo projeto Android com os seguintes dados: Project Name: ProjetoSoma Package Name : com.android.appsoma Activity Name: AppSoma Application Name: Soma Números Criado o projeto, vamos no arquivo main.xml desse projeto. Pelo nome doprojeto, podemos ver que essa aplicação é uma aplicação de calculo. Essaaplicação vai ler dois números inteiros e no final, irá mostrar a soma deles,simples. Vamos no arquivo main.xml desse projeto e vamos fazer as seguintesmodificações. Quero que você copie e cole o abaixo e coloque no arquivomain.xml. 18
  • 19. <?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Digite o primeiro número" /><EditText android:id="@+campo/num1" android:layout_width="fill_parent" android:layout_height="wrap_content" /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Digite o segundo número" /><EditText android:id="@+campo/num2" android:layout_width="fill_parent" android:layout_height="wrap_content" /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Resultado" /><EditText android:id="@+campo/res" android:layout_width="fill_parent" android:layout_height="wrap_content" /><Button android:id="@+botao/btmostrar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Mostrar" /></LinearLayout> Bom, vamos a explicação do código acima. Observem que possuo umaTextView com o título “Digite o primeiro número”. Logo abaixo dela , eu possuouma widget do tipo EditText, que exibe um campo onde vou digitar o número.Essa widget possui uma propriedade chamada android:id, que serve para darnome ao componente, ou seja, funciona como um identificador daquelecomponente. 19
  • 20. O nome de um widget, deve estar nesse formato: “@+<nome>/<nome>” Se observamos, o valor desse atributo é : “@+campo/num1”. É como se“campo” representasse um grupo e “num1” representasse o nome docomponente. Você irá entender essa notação mais a frente. Abaixo dessa widget, temos outra do tipo TextView com o título “Digite osegundo número”. Depois temos um outro widget do tipo EditText, cujo nome é:“@+campo/num2”. Abaixo dessa widget, temos um terceiro TextView com o título “Resultado”.Depois temos um outro widget do tipo EditText, cujo nome é: “@+campo/res”. Por último, temos uma widget do tipo Button, cuja finalidade é mostrar umbotão para podermos clicá-lo. Ele possui um título com o valor “Mostrar” e seunome é: “@+botao/btmostrar”. Beleza, agora vamos abrir o código do arquivo AppSoma.java, paraacessar via código Java, os componentes que adicionamos via XML. Siga ospassos aqui descritos para você como esse processo é feito. Após a linha import android.os.Bundle; Digite: import android.widget.*; import android.view.*; Antes da linha: @Override Digite: EditText ednum1,ednum2,edres; Agora vamos a explicação do código acima. Como você pode ver , oswidgets também podem ser usados no nosso código Java. Se no código XMLeu possuir um widget do tipo EditText, para acessar esse componente peloJava, é preciso fazer uso da classe EditText. Cada widget no XML possui o seurespectivo em classe Java, logo, se possui um widget Button, para acessa-lodevo fazer uso da classe Button e assim vai. Agora, após a linha: setContentView(R.layout.main); Digite as seguintes linhas de código: 20
  • 21. ednum1 = (EditText) findViewById(R.campo.num1); ednum2 = (EditText) findViewById(R.campo.num2); edres = (EditText) findViewById(R.campo.res); Button btMostrar = (Button) findViewById(R.botao.btmostrar); Agora vou explicar as linhas acima. A linha: EditText ednum1 = (EditText) findViewById(R.campo.num1); Faz referência ao primeiro EditText, através do método “findViewById” como parâmetro “R.campo.num1”. Ah, se lembra o nome da primeira EditText que está no código XML? Elase chama “@+campo/num1”. Vamos entender, observe que para fazer referência ao EditText pelométodo “findViewById” eu passei o parâmetro R.campo.num1. Já na segunda linha, para fazer a referência à segunda EditText, cujonome é “@+campo/num2”, pelo método “findViewById”, passei o parâmetroR.campo.num2. Como você pode ver, estou fazendo uso da classe R, que funciona comointerface entre o código Java e o arquivo XML. O procedimento é o mesmo tanto para o terceiro EditText e o Button. Agora iremos adicionar um evento Click, no nosso Button, pois quando euclicar no botão, ele deverá mostrar a soma dos números. Então, logo após alinha: Button btMostrar = (Button) findViewById(R.botao.btmostrar); Digite: btMostrar.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { double num1 = Double.parseDouble(ednum1.getText().toString()); double num2 = Double.parseDouble(ednum2.getText().toString()); double res = num1 + num2; edres.setText(String.valueOf(res)); } }); Toda vez que eu clicar no botão, ele irá mostrar o resultado na terceiraEditText referente ao resultado da soma. Ótimo! Vamos executar a nossa 21
  • 22. aplicação ? Para executar faça os mesmos procedimentos que já mostrei. Oresultado da execução dessa aplicação você vê na figura abaixo: Irei descrever o código do evento Click. O método “setOnClickLisneter”serve para definir um evento de Click a um componente. Como parâmetro,criamos uma instância de OnClickListener e dentro dessa instância existe ométodo chamado “onClick”, que será disparado toda vez que o botão for clicado. A linha: double num1 = Double.parseDouble(ednum1.getText().toString()); Cria uma variável chamada num1 e atribui a ela o valor que está contidoem num1. Eu faço uso do método parseDouble da classe Double pois oconteúdo é uma String. Observem que chamo o método “getText” de ednum1para retornar o conteúdo. Diferente de muitos métodos de retorno de String,esse método “getText” não retorna uma String, mais sim um tipo chamado“Editable”. Por isso, chamei o método toString de getText para que meretornasse uma string. A descrição da próxima linha e a mesma. A linha: edres.setText(String.valueOf(res)); Retorna para a terceira EditText referenciada por edres, a soma dosvalores. Isso é possível chamado o método setText, como o resultado está numtipo double e setText aceita somente parâmetros do tipo String e Editable, fiz aconversão desse valor através do método valueOf da classe String. 22
  • 23. Beleza! Com esse conhecimento obtido até agora, você já tem capacidadepara fazer uma aplicação básica em Android. Bom , ainda temos muitos mais pela frente. Desenvolvendo uma aplicação simples de compras Agora vamos fazer uma outra aplicação Android. Essa aplicação vai fazeruso da widget CheckBox, que funciona como uma opção onde podemos marcare desmarcar. Nossa aplicação consiste em um simples sistemas de comprasonde possuo cinco produtos, Arroz (R$ 2,69) , Leite (R$ 5,00) , Carne (R$10,00), Feijão (R$ 2,30) e Refrigerante coca-cola (R$ 2,00). Nessa aplicação eumarco os itens que quero comprar e no final o sistema mostra o valor total dascompras. Como havia dito, a gente vai fazer uso da CheckBox, a estrutura dela asimilar ao da EditText e TextView, conforme o código abaixo:<CheckBox android:id="@+campo/chkleite" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Leite" /> Bom, vamos criar um novo projeto chamado ProjetoCompras. Siga osdados do projeto abaixo: Project Name: ProjetoCompras Package Name : com.android.appcompra Activity Name: AppCompra Application Name: Sistema de Compras Vamos no arquivo main.xml desse projeto e coloque o código abaixo:<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Escolha o seu produto" /><CheckBox android:id="@+item/chkarroz" 23
  • 24. android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Arroz (R$ 2,69)" /><CheckBox android:id="@+item/chkleite" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Leite (R$ 5,00)" /><CheckBox android:id="@+item/chkcarne" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Carne (R$ 10,00)" /><CheckBox android:id="@+item/chkfeijao" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Feijão (R$ 2,30)" /><CheckBox android:id="@+item/chkcoca" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Refrigerante Coca-Cola (R$ 2,00)" /><Button android:id="@+botao/bttotal" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Total da compra" /></LinearLayout> Bom , esse é o nosso layout com cinco CheckBoxs referentes ao itens decompra e um Button, que quando clicado mostra o valor total de compras. Agora vamos modificar o arquivo AppCompra.java. O código desse arquivoserá como o código que é exibido abaixo:package com.android.appcompra;import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.view.*;public class AppCompra extends Activity { CheckBox chkarroz,chkleite,chkcarne,chkfeijao,chkcoca; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); 24
  • 25. chkarroz = (CheckBox) findViewById(R.item.chkarroz); chkleite = (CheckBox) findViewById(R.item.chkleite); chkcarne = (CheckBox) findViewById(R.item.chkcarne); chkfeijao = (CheckBox) findViewById(R.item.chkfeijao); chkcoca = (CheckBox) findViewById(R.item.chkcoca); Button bttotal = (Button) findViewById(R.botao.bttotal); bttotal.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { double total=0; if(chkarroz.isChecked()) total += 2.69; if(chkleite.isChecked()) total += 5.00; if(chkcarne.isChecked()) total += 10.00; if(chkfeijao.isChecked()) total += 2.30; if(chkcoca.isChecked()) total += 2.00; showAlert("Valor total da compra", 0,String.valueOf(total),"OK", false); } }); } } Descrevendo o código do evento click: Dentro do evento eu crio umavariável chamada “total” que armazena o valor total da compra. Observe que eutenho cinco estruturas if’s onde cada uma verifica se um determinado item foimarcado, se foi, incrementa o valor do item com o valor da variável “total”.Observe que eu faço uso do método showAlert cuja finalidade é mostrar umamensagem na tela. A mensagem a ser mostrada é o valor total da compra. Os parâmetros do showAlert são: showAlert(CharSequence title, int iconId, CharSequence message,CharSequence buttonText, boolean cancelable) title : Corresponde ao título da mensagem iconId: Corresponde ao ícone a ser exibido, quando o valor é zero, significaque não será usado nenhum ícone. message: Corresponde a mensagem cancelable: Define se ela será cancelável. Vamos roda nossa aplicação ? O resultado você confere na figura abaixo: 25
  • 26. Desenvolvendo uma aplicação de cálculo de salário Bom, agora vamos fazer uma outra aplicação. Essa aplicação que vamosdesenvolver agora consiste em um sistema que vai ler o salário de umfuncionário e vai permitir que você escolha o seu percentual de aumento quepode ser de 40% , 45% e 50% e no final o sistema irá mostrar o salárioreajustado com o novo aumento. Bom, vamos lá! Crie um novo projeto Androidcom os seguintes dados: Project Name: ProjetoSalario Package Name : com.android.appsal Activity Name: AppSalario Application Name: Cálculo do salário Nessa aplicação vamos fazer uso da widget RadioButton, que funcionacomo um item de opção, podendo ser selecionado entre vários outros. Veja asua sintaxe abaixo:<RadioButton android:id="@+item/chkcoca" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Refrigerante Coca-Cola (R$ 2,00)" /> Porém, para que a múltipla escolha funcione, é necessário que osRadioButtons fiquem dentro de uma RadioGroup, que funciona como agrupadorde RadioButons. Veja um exemplo abaixo: 26
  • 27. <?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" > <TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Escolha uma opção:" /><RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" android:id="@+opcao/opcoes" > <RadioButton android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Opcão 1" /> <RadioButton android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Opcão 2" /></RadioGroup></LinearLayout> Executando a aplicação, será exibido a seguinte tela: 27
  • 28. Bom, agora vamos fazer a nossa aplicação. No arquivo main.xml, coloqueo código abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Digite seu salário (R$)" /><EditText android:id="@+campo/edsalario" android:layout_width="fill_parent" android:layout_height="wrap_content" /><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Qual será o percentual ?" /><RadioGroup xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" android:id="@+opcao/rbopcoes" ><RadioButton android:id="@+opcao/rb40" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="40%" /><RadioButton android:id="@+opcao/rb45" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="45%" /><RadioButton android:id="@+opcao/rb50" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="50%" /></RadioGroup><Button android:id="@+botao/btmostrar" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Mostrar novo salário" /></LinearLayout> 28
  • 29. No arquivo AppSalario.java, coloque o código abaixo:package com.android.appsal;import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.view.*;public class AppSalario extends Activity { @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Button btmostrar = (Button) findViewById(R.botao.btmostrar); btmostrar.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { double salario, novo_sal; EditText edsalario = (EditText)findViewById(R.campo.edsalario); salario =Double.parseDouble(edsalario.getText().toString()); RadioGroup rg = (RadioGroup)findViewById(R.opcao.rbopcoes); int op = rg.getCheckedRadioButtonId(); if(op==R.opcao.rb40) novo_sal = salario + (salario * 0.4); else if(op==R.opcao.rb45) novo_sal = salario + (salario * 0.45); else novo_sal = salario + (salario * 0.5); showAlert("Novo salário", 0,"Seu novo salário é : R$" +String.valueOf(novo_sal), "OK", false); } }); }} 29
  • 30. Vamos a explicação de alguns códigos interessantes. Dentro do eventoclick, eu realizo o cálculo do novo salário do funcionário. Os primeiros códigosdo evento são similares a de programas anteriores que já foram devidamenteexplicados. A linha: int op = rg.getCheckedRadioButtonId(); Cria uma variável op e retorna para ela o Id da opção selecionada, ou seja,qual RadioButton foi selecionada. Agora na condição: if(op==R.opcao.rb40) Verifico se a opção de 40% foi selecionada, se for, realize o cálculo dosalário com o reajuste de 40%. A mesma explicação e válida para o cálculo dosoutros reajustes. Agora vamos executar a nossa aplicação. O resultado você vêna figura abaixo: Até aqui você já pode fazer ótimas aplicações em Android. 30
  • 31. Desenvolvendo uma aplicação de lista telefônica Agora vamos fazer uma nova aplicação em Android. Essa aplicaçãoconsiste em uma lista telefônica já pronta com contatos. Quando selecionamosum contato, ele mostra na tela uma mensagem com o nome selecionado. Anossa aplicação vai fazer uso do widget chamado ListView, que exiba uma listacontendo valores que podem ser selecionados. Veja a estrutura de umaListView abaixo: <ListView android:id="@+id/lista" android:layout_width="fill_parent" android:layout_height="fill_parent" /> Bom, vamos criar um novo projeto chamado ProjetoLista. Siga os dadosabaixo: Project Name: ProjetoLista Package Name : com.android.applist Activity Name: AppList Application Name: Lista de contatos No arquivo main.xml, coloque o seguinte código:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Escolha um contato" /><ListView android:id="@+id/lista" android:layout_width="fill_parent" android:layout_height="fill_parent" /></LinearLayout> 31
  • 32. package com.android.applist;import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.widget.AdapterView.OnItemClickListener;import android.view.*;public class AppList extends Activity { public ListView lista; public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); ArrayAdapter<String> adapter = newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contatos); lista = (ListView) findViewById(R.id.lista); lista.setAdapter(adapter); lista.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView arg0, View arg1, intarg2,long arg3) { showAlert("Contato selecionado",0,lista.getSelectedItem().toString(),"OK",false); } }); } static final String[] contatos = new String[] { "Alline","Lucas","Rafael","Gabriela","Silvana" };} Vamos analisar alguns códigos acima. A linha static final String[] contatos = new String[] { "Alline","Lucas","Rafael","Gabriela","Silvana" }; Cria uma constante chamada contatos, onde nela coloco alguns nomes.Essa constante vai ser utilizada pela nossa lista. Para que eu posssa carregardos dados em uma ListView, preciso fazer uso da classe ArrayAdapter, comomostra a instrução abaixo: 32
  • 33. ArrayAdapter<String> adapter = newArrayAdapter<String>(this,android.R.layout.simple_list_item_1,contatos); A instrução mostrada acima cria uma instância da classe ArrayAdapterchamada “adapter” onde carrego nela o vetor de Strings da constante contatos.A instrução: lista.setAdapter(adapter); Carrega os valores para a ListView, que está contido o objeto adapter. Como havia falado, quando clicássemos em um item, o sistema mostrariauma mensagem do item selecionado. Isso é conseguido fazendo uso dainterface OnItemClickListener, como mostra a instrução abaixo: lista.setOnItemClickListener(new OnItemClickListener(){ public void onItemClick(AdapterView arg0, View arg1, intarg2,long arg3) { showAlert("Contato selecionado",0,lista.getSelectedItem().toString(),"OK",false); } }); Toda vez que clicarmos em um item da lista, o método onItemClick serádisparado e será executado o comando abaixo: showAlert("Contatoselecionado",0,lista.getSelectedItem().toString(), "OK",false); Que exibe o item selecionado. A obtenção do item clicado e feitachamando o método “getSelectedItem()” . Porém, como ele retorna um tipo“Object”, preciso converter para String o item clicado, através do métodotoString. Vamos executar a aplicação. O resultado você vê na figura abaixo: 33
  • 34. Desenvolvendo uma aplicação que visualiza imagens Agora vamos desenvolver mais uma aplicação. Essa aplicação permiteque você visualize images, tudo através do widget ImageView. A sua estruturavocê confere abaixo: <ImageView id="@+id/imagem" android:src="@drawable/foto1" android:layout_width="wrap_content" android:layout_height="wrap_content"/> Agora crie um novo projeto conforme os dados abaixo: Project Name: ProjetoImagem Package Name : com.android.appimage Activity Name: AppImage Application Name: Visualizando Imagens Antes de codificar, quero que você coloque duas imagens JPEG (com aextensão .jpg) dentro da pasta “res/drawable”. Um arquivo deve se chamarfoto1.jpg e o outro foto2.jpg. Para importar um arquivo, clique com o botãodireito do mouse e selecione “Import”, depois selecione File System. Clique nobotão browser para selecionar o diretório onde se encontram as imagens,depois de selecionado, marque os dois arquivos (imagens) para que eles sejamimportados para a pasta “res/drawable” . Veja a figura abaixo: 34
  • 35. Depois disso, é só clicar em “Finish”. Agora no arquivo main.xml, coloque o código abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content" ><ImageView android:id="@+id/imagem" android:src="@drawable/foto1" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Imagem: Foto 1" android:id="@+label/label" /></LinearLayout><Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Exibir Foto 1" android:id="@+botao/bt1" 35
  • 36. /><Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Exibir Foto 2" android:id="@+botao/bt2" /></LinearLayout> Vamos analisar o atributo android:src da widget ImageView. Esse atributopermite especificar a imagem a ser aberta, no caso, será exibida a imagem“foto1.jpg” através do seguinto valor: @drawable/foto1. “@drawable “corresponde a pasta onde se encontra a imagem e “foto1” é o nome da imagem,que deve ser informada sem a sua extensão. Logo se eu ver de inicio a segundaimagem, usaria o seguinte valor: @drawable/foto2. Agora no arquivo AppImage.java coloque o código abaixo:package com.android.appimage;import android.app.Activity;import android.os.Bundle;import android.view.*;import android.widget.*;public class AppImage extends Activity { /** Called when the activity is first created. */ ImageView imagem; TextView txt; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); Button btfoto1 = (Button) findViewById(R.botao.bt1); Button btfoto2 = (Button) findViewById(R.botao.bt2); imagem = (ImageView) findViewById(R.id.imagem); txt = (TextView) findViewById(R.label.label); btfoto1.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { imagem.setImageResource(R.drawable.foto1); txt.setText("Imagem: Foto 1"); } }); btfoto2.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { imagem.setImageResource(R.drawable.foto2); txt.setText("Imagem: Foto 2"); } }); 36
  • 37. } } Agora vamos analisar alguns trechos de códigos. Vamos no evento Clickreferente a abertura da primeira imagem. O código: imagem.setImageResource(R.drawable.foto1); É responsável por abrir a imagem “foto1.jpg” e exibi-la no componente.Observe que foi passado o parâmetro “R.drawable.foto1” onde “drawable”corresponde a pasta e “foto1” corresponde ao arquivo “foto1.jpg”. Logo apósvem o código: txt.setText("Imagem: Foto 1"); Cuja finalidade é mudar o título da TextView , de acordo com a Stringpassada como parâmetro. O comentário acima é o mesmo para o segundo botão referente a aberturada segunda imagem. Vamos executar a nossa aplicação. O resultado você vê nas imagensabaixo: (Foto 1) 37
  • 38. (Foto 2) Mudando de layouts Até agora, fizemos aplicações em Android que utilizassem um único layout.Agora vamos fazer aplicações Android que utilizem mais de um layout. Vamos criar um novo projeto de demonstração chamado ProjetoLayout,conforme os dados abaixo: Project Name: ProjetoLayout Package Name : com.android.applayout Activity Name: AppLayout Application Name: Mudando de layouts No arquivo main.xml, coloque o código que é exibido abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" 38
  • 39. android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Você está na tela principal" /><Button android:id="@+botao/botao1" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Ir para tela 2" /> </LinearLayout> Ótimo! Agora dentro da pasta “res/layout” , crie um novo arquivo embranco chamado tela2.xml e coloque o código abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><TextView android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Você está na tela 2" /><Button android:id="@+botao/botao2" android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="Ir para tela principal" /> </LinearLayout> Depois disso, modifique o arquivo AppLayout.java, conforme o códigoabaixo:package com.android.applayout;import android.app.Activity;import android.os.Bundle;import android.view.*;import android.widget.*;public class AppLayout extends Activity { /** Called when the activity is first created. */ public void CarregaTelaPrincipal() { setContentView(R.layout.main); Button bt1 = (Button) findViewById(R.botao.botao1); bt1.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { CarregaTela2(); 39
  • 40. } }); } public void CarregaTela2() { setContentView(R.layout.tela2); Button bt2 = (Button) findViewById(R.botao.botao2); bt2.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0) { CarregaTelaPrincipal(); } }); } @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); CarregaTelaPrincipal(); } } Observem que nesta classe eu criei dois métodos : CarregaTelaPrincipal eCarregaTela2. Toda aplicação que utilize mais de um layout, o carregamentodos layouts e de seus respectivos widgets devem estar separados em funçõesdesenvolvidas para esse propósito. Logo, o método CarregaTelaPrincipalcarrega o layout principal e seus respectivos componentes, o mesmo válidopara o método CarregaTela2, que carrega o layout da tela 2 e seus respectivoscomponentes. Feito isso, execute a aplicação. Veja o resultado abaixo: 40
  • 41. (Tela Principal) (Tela 2) 41
  • 42. Desenvolvendo uma aplicação de cadastro Agora para encerrar, vamos desenvolver uma aplicação de cadastro. Essaaplicação consiste em um cadastro de pessoas onde posso cadastrar dadoscomo: Nome, Profissão e Idade. Essa aplicação vai fazer uso de três layouts: O layout principal: Esse layout dará acesso ao layout de cadastro e olayout de visualização de dados. O layout de cadastro: Nesse layout é onde será efetuado o cadastro dosdados da pessoa. O layout de visualização de dados: Nesse layout é onde serão visualizadosos dados cadastrados. Se nenhum dado foi cadastrado, será exibida umamensagem informando essa situação. Nessa aplicação, para armazenar os dados, eu faço um de uma estruturade dados FIFO ou Fila. Nessa estrutura, os dados são armazenados emseqüência, e acessados em seqüência , ou seja, o primeiro dado a entrar será oprimeiro a ser exibido. Bom, vamos construir a nossa aplicação. Crie um novo projeto com osdados abaixo: Project Name: ProjetoAppCadastro Package Name : com.android.appcadastro Activity Name: AppCadastro Application Name: Aplicação de Cadastros Dentro da pasta “res/drawable”, coloque a figura que acompanha estematerial, ela se chama “profile.png”. Agora no arquivo main.xml coloque o código abaixo:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="wrap_content" ><ImageView android:id="@+id/imagebutton" android:src="@drawable/profile" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView 42
  • 43. android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Bem vindo a aplicação de Cadastro de Pessoas. Este éum pequeno programa de demonstração de cadastro. Selecione uma dasopções abaixo:" /><Button android:id="@+id/btcadpess" android:text="Cadastrar Pessoas" android:layout_width="fill_parent" android:layout_height="wrap_content"/><Button android:id="@+id/btlistpess" android:text="Listar pessoas cadastradas" android:layout_width="fill_parent" android:layout_height="wrap_content"/> </LinearLayout> Dentro da pasta “res/layout” , crie um arquivo chamado cadastro.xml com oseguinte código:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ImageView android:id="@+id/imagebutton" android:src="@drawable/profile" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Módulo de cadastro. Cadastre seus dados abaixo:" /><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Nome:" /><EditText android:id ="@+campo/nome" android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Profissão:" /> 43
  • 44. <EditText android:id ="@+campo/profissao" android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content"/><TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Idade:" /><EditText android:id ="@+campo/idade" android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content"/><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"><Button android:id="@+cadastro/btcadastro" android:text="Cadastrar" android:layout_width="wrap_content" android:layout_height="wrap_content"/><Button android:id="@+cadastro/btvoltar" android:text="Voltar" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout></LinearLayout> Agora dentro da pasta “res/layout” , crie um arquivo chamadolistacadastros.xml com o seguinte código:<?xml version="1.0" encoding="utf-8"?><LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent" ><ImageView android:id="@+id/imagebutton" android:src="@drawable/profile" android:layout_width="wrap_content" android:layout_height="wrap_content"/><TextView android:textSize="20sp" android:textColor="#FFFFFF" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Lista das pessoas cadastradas." 44
  • 45. /><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"><TextView android:textSize="20sp" android:textColor="#FFFF00" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Nome:" /><TextView android:id ="@+field/nome" android:textSize="20sp" android:textColor="#FFFFFF" android:text="" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"><TextView android:textSize="20sp" android:textColor="#FFFF00" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Profissão:" /><TextView android:id ="@+field/profissao" android:textColor="#FFFFFF" android:textSize="20sp" android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" android:layout_height="wrap_content"><TextView android:textSize="20sp" android:textColor="#FFFF00" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Idade:" /><TextView android:id ="@+field/idade" android:textSize="20sp" android:textColor="#FFFFFF" android:text="" android:layout_width="fill_parent" android:layout_height="wrap_content"/></LinearLayout><LinearLayout android:orientation="horizontal" android:layout_width="fill_parent" 45
  • 46. android:layout_height="wrap_content"><Button android:id="@+lista/btvoltar" android:text="Voltar" android:layout_width="wrap_content" android:layout_height="wrap_content"/><Button android:id="@+lista/btanterior" android:text="Anterior" android:layout_width="wrap_content" android:layout_height="wrap_content"/><Button android:id="@+lista/btproximo" android:text="Proximo" android:layout_width="wrap_content" android:layout_height="wrap_content"/></LinearLayout></LinearLayout> Agora no arquivo AppCadastro.java, coloque o seguinte código:package com.android.appcadastro;import android.app.Activity;import android.os.Bundle;import android.widget.*;import android.view.*;public class AppCadastro extends Activity { /** Called when the activity is first created. */ Registro pri,reg,ult,aux; EditText ednome,edprof,edidade; int numreg,pos; void CarregaTelaPrincipal () { setContentView(R.layout.main); Button btcadpess = (Button) findViewById(R.id.btcadpess); Button btlistapess = (Button) findViewById(R.id.btlistpess); btcadpess.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ CarregaTelaCadastro(); 46
  • 47. }}); btlistapess.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ CarregaListaPessoas(); }}); } void CarregaTelaCadastro() { setContentView(R.layout.cadastro); Button btcadastrar = (Button)findViewById(R.cadastro.btcadastro); Button btvoltar = (Button) findViewById(R.cadastro.btvoltar); btcadastrar.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ try { reg = new Registro(); ednome = (EditText)findViewById(R.campo.nome); edprof = (EditText)findViewById(R.campo.profissao); edidade = (EditText)findViewById(R.campo.idade); reg.nome = ednome.getText().toString(); reg.profissao = edprof.getText().toString(); reg.idade = edidade.getText().toString(); if(pri==null) pri=reg; reg.Ant = ult; if(ult==null) ult=reg; else { ult.Prox = reg; ult=reg; } numreg++; showAlert("Aviso", 0,"Cadastro efetuado com sucesso", "OK",false); } catch(Exception e) { showAlert("Erro", 0,"Erro ao cadastrar", "OK", false); }} }); btvoltar.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ 47
  • 48. CarregaTelaPrincipal(); } }); } void CarregaListaPessoas() { if(numreg==0) { showAlert("Aviso", 0,"Nenhum registro cadastrado", "OK",false); CarregaTelaPrincipal(); return; } setContentView(R.layout.listacadastrados); pos=1; aux=pri; TextView fnome = (TextView)findViewById(R.field.nome); TextView fidade = (TextView)findViewById(R.field.idade); TextView fprof = (TextView)findViewById(R.field.profissao); Button btanterior = (Button) findViewById(R.lista.btanterior); Button btproximo = (Button) findViewById(R.lista.btproximo); Button btvoltar = (Button) findViewById(R.lista.btvoltar); fnome.setText(aux.nome); fidade.setText(aux.idade); fprof.setText(aux.profissao); btvoltar.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ CarregaTelaPrincipal(); } }); btanterior.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ if(pos==1) return; pos--; aux=aux.Ant; TextView fnome = (TextView)findViewById(R.field.nome); TextView fidade =(TextView)findViewById(R.field.idade); TextView fprof =(TextView)findViewById(R.field.profissao); fnome.setText(aux.nome); fidade.setText(aux.idade); fprof.setText(aux.profissao); } }); btproximo.setOnClickListener(new View.OnClickListener(){ public void onClick(View arg0){ if(pos==numreg) return; pos++; 48
  • 49. aux=aux.Prox; TextView fnome = (TextView)findViewById(R.field.nome); TextView fidade =(TextView)findViewById(R.field.idade); TextView fprof =(TextView)findViewById(R.field.profissao); fnome.setText(aux.nome); fidade.setText(aux.idade); fprof.setText(aux.profissao); } }); } public void onCreate(Bundle icicle) { super.onCreate(icicle); numreg=0; pri=ult=null; CarregaTelaPrincipal();}} Agora no mesmo local onde se encontra o arquivo AppCadastro.java (nopacote com.android.appcadastro), você vai criar uma classe Chamada Registro.Depois de criar a classe, coloque o código que é exibido abaixo:package com.android.appcadastro;public class Registro { String nome; String profissao; String idade; Registro Prox; Registro Ant;} Agora vamos analisar aos poucos os códigos dessa aplicação. Observeque nessa aplicação ou possuo três métodos: um método chamadoCarregaTelaPrincipal , responsável por carregar o layout da tela principal. Ométodo CarregaTelaCadastro é responsável por carregar a tela de cadastro. Vamos analisar alguns códigos do método CarregaTelaCadastro. Se vocêobservar nessa aplicação, que eu declarei quatro variáveis chamadas pri,ult ereg e aux do tipo “Registro”. A variável pri, serve para apontar para o endereçodo primeiro registro. A variável ult aponta para o endereço do último registro. Avariável reg armazena os dados do registro corrente e a variável aux funcionacomo uma variável auxiliar. 49
  • 50. É com a utilização essas variáveis que faço o cadastro dos dados daspessoas. Vamos para o evento click do botão btcadastrar situado dentro dométodo CarregaTelaCadastro e analisar algumas linhas de código. A linha: reg = new Registro(); Cria uma nova instância da classe da classe “Registro” e coloca em .”reg”.As linhas: reg.nome = ednome.getText().toString(); reg.profissao = edprof.getText().toString(); reg.idade = edidade.getText().toString(); Gravam os dados dos campos no objeto “reg”. Já as linhas abaixo: if(pri==null) pri=reg; reg.Ant = ult; if(ult==null) ult=reg; else { ult.Prox = reg; ult=reg; } Fazem todo o processo de armazenamento dos dados. Agora vamos para o método CarregaListaPessoas. Quando esse método échamado, é feita uma verificação se há dados cadastrados. Se não houverdados cadastrados, será exibida uma mensagem indicando essa situação evocê será retornado a tela principal. Vou comentar algumas linhas. A linha: aux=pri; Retorna para a variável “aux” o endereço do primeiro registro, que estáarmazenado em “pri” . Já as linhas: fnome.setText(aux.nome); fidade.setText(aux.idade); fprof.setText(aux.profissao); Joga as informações obtidas (nome, idade e profissão) para os campos(TextViews), para que eles possam ser exibidas. Vamos agora para o evento click do botão btanterior. Esse botão mostra osregistros anteriores. Antes de voltar um registro, verifico se eu me encontro noprimeiro registro pela condição: if(pos==1) Se a condição for verdadeira, saio do evento, senão, continuo executandoas instruções. A linha: aux=aux.Ant; Retorna para aux o endereço do registro anterior. Depois disso sãoexecutados instruções para que os dados possam ser exibidos. 50
  • 51. Já no evento click do botão btproximo, antes de passar para o próximoregistro, verifico se já está no último registro pela instrução: if(pos==numreg) Se a condição for verdadeira, saio do evento, senão, continuo executandoas instruções. A linha: aux=aux.Prox; Retorna para aux o endereço do próximo registro. Depois disso sãoexecutados instruções para que os dados possam ser exibidos. Agora vamos no arquivo de layout listacadastrados.xml, quero comentaralgumas propriedades interessantes. Se você observar, algumas TextViewspossuem um atributo chamado android.textColor e android:textSize, essesatributos definem a cor e o tamanho do texto respectivamente. Bom, vamos executar a nossa aplicação ? O resultado você confere nasfiguras abaixo: (Tela Principal) 51
  • 52. (Tela de cadastro)(Tela de visualização dos dados cadastrados) 52
  • 53. Lista de atributos Agora irei mostrar alguns atributos comumente usados em uma aplicaçãoAndroid de alguns componentes, principalmente os componentes que nósusamos nas aplicações acima. Aqui vou descrever os atributos usados nos componentes (no formatoXML) e quais são os métodos referentes aos atributos descritos, ou seja, vamossupor que queira modificar o valor de um determinado atributo em tempo deexecução, então cada atributo possui um método, para que seu valor possa sermodificado em tempo de execução. android:text: Essa propriedade serve para mostrar o texto que é passadocomo parâmetro. Método relacionado: setText(CharSequence) Exemplos: XML android:Text=”Hello World” Java texto.setText(“Hello World”) Widgets que possuem essa propriedade: TextView, EditText,RadioButton, CheckBox, Button android:textColor: Essa propriedade serve para definir uma cor para otexo exibido. Método relacionado: setTextColor(int color) Exemplos: XML android:textColor=”#FFFF00” Java texto.setTextColor(Color.YELLOW); OBS:A classe Color se encontra no pacote “android.graphics”. Widgets que possuem essa propriedade: TextView, EditText,RadioButton, CheckBox, Button 53
  • 54. android:background: Essa propriedade serve para definir uma cor defundo. Métodos relacionados: setBackgroundColor(int color); Exemplos: XML android:background=”#FF0000” Java texto. setBackgroundColor (Color.RED); Widgets que possuem essa propriedade: TextView, EditText,RadioButton, CheckBox, Button android:phoneNumber Essa propriedade serve para definir uma entradade valores no formato de número telefônico. O valor padrão desse atributo é“falso”. Métodos relacionados: setKeyListener(KeyListener Arg); Exemplos: XML android: phoneNumber =”true” Java Em Java você deveria definir um conjunto de instruções para capturar asentradas de dados de modo que as entradas atendam a essa finalidade. Widgets que possuem essa propriedade: TextView, EditText android:numeric Com essa propriedade habilitada, o widget com essapropriedade só irá aceitar números (inteiros e decimais). O valor padrão desseatributo é “falso”. Métodos relacionados: setKeyListener(KeyListener Arg); Exemplos: XML 54
  • 55. android:numeric =”true” Java Em Java você deveria definir um conjunto de instruções para capturar asentradas de dados de modo que as entradas atendam a essa finalidade. Widgets que possuem essa propriedade: TextView, EdiText android:textStyle: Essa propriedade serve para definir um estilo a fonte(negrito e/ou itálico). Métodos relacionados: setTypeface(Typeface); Exemplos: XML android:textStyle =”bold” android:textStyle =”italic” android:textStyle =”bold_italic” Java texto. setTypeface (Typeface.DEFAULT_BOLD); texto. setTypeface (Typeface.DEFAULT_ITALIC); texto. setTypeface (Typeface.DEFAULT_BOLD_ITALIC); OBS:A classe Typeface se encontra no pacote “android.graphics”. Widgets que possuem essa propriedade: TextView,EdiText,RadioButton,CheckBox,Button. android:textSize: Essa propriedade serve para definir o tamanho da fonte.O tamanho da fonte pode ser especificado em várias notações : px(pixels),sp(scaled-pixels) , mm(milímetros), in (inches) e etc. Métodos relacionados: setTextSize(float tamanho) ou setTextSize(intunidade, int tamanho); Exemplos: XML android:textSize =”10px” android:textStyle =”20sp” 55
  • 56. Java texto. setTextSize (TypedValue.COMPLEX_UNIT_PX,10); //Unidade empixels texto. setTypeface (TypedValue.COMPLEX_UNIT_SP,10); //Unidadeem scaled-pixels texto. setTypeface (20); //Unidade em scaled-pixels OBS: A classe Typeface se encontra no pacote “android.util”. Widgets que possuem essa propriedade: TextView,EdiText,RadioButton,CheckBox,Button. android:typeface: Essa propriedade serve para definir uma fonte ao texto(Arial , Times NewRoman, Courier New e etc). Métodos relacionados: setTypeface(Typeface); Exemplos: XML android:typeface =”Arial” android:typeface =”Times New Roman” Java texto. setTypeface (Typeface.create(“Arial”,0)); texto. setTypeface (Typeface.create(“times New Roman”,0)); Widgets que possuem essa propriedade: TextView,EdiText,RadioButton,CheckBox,Button. android:capitalize: Essa propriedade serve para definir o tipocapitalização das palavras. Por padrão, o valor e “none”(nenhum). Os valoresusados nessa propriedade são: none Nenhuma capitalização ocorrerá sentences Capitaliza a primeira letra da primeira palavra de qualquer sentença words Capitaliza a primeira letra de qualquer sentença characters Capitaliza todos os caracteres 56
  • 57. Métodos relacionados: setKeyListener(KeyListener Arg); Exemplos: XML android:capitalize =”sentences” Java Em Java você deveria definir um conjunto de instruções paracapturar as entradas de dados de modo que as entradas atendam a essafinalidade. Widgets que possuem essa propriedade: TextView,EdiText,RadioButton,CheckBox,Button. android:password Com essa propriedade você habilita a digitação desenhas. Métodos relacionados:setKeyTransformationMethod(TransformationMethod arg); Exemplos: XML android:password =”true” Java Em Java você deveria definir um conjunto de instruções para capturar asentradas de dados de modo que as entradas atendam a essa finalidade. Widgets que possuem essa propriedade: TextView, EdiText 57
  • 58. Conclusão Nesta apostila aprendemos a programar o “básico” do Android. Vimos umpouco sobre a plataforma Android, como ela surgiu e tudo mais. Aprendemos ainstalar o eclipse e os plugins necessários para o funcionamento do Android,incluindo o SDK. Aprendemos a construir uma aplicação Android básica edepois conhecemos os componentes (widgets) que constituem uma aplicaçãoAndroid para a construção de aplicações mais interessantes. Vimos tambémcomo trocar de layouts em uma aplicação Android tendo como exemplo prático,uma aplicação de cadastro e por último, conhecemos algumas propriedadescomumente usadas em alguns widgets que constituem uma aplicação Android. Espero que esse material lhe tenha sido útil. Abraços 58