+ curso de android 19ª jornada de cursos. + apresentação luiz felipe de oliveira libório 23...
TRANSCRIPT
+
Curso de Android
19ª Jornada de Cursos
+Apresentação
Luiz Felipe de Oliveira Libório 23 anos; Graduação em Ciência da Computação – UFPE –
2011.1; 1 ano de experiência com a plataforma:
Testes manuais e automáticos; Manutenção de scripts de testes;
Usuário Android há 1 ano: Android 1.5; Android 2.1 e 2.2.
+1. Introdução
+Android
Android é um sistema operacional mobile que roda sobre um núcleo Linux;
Foi inicialmente desenvolvido pelo Google e posteriormente pela Open Handset Alliance Google, HTC, Dell, Intel, Motorola, Qualcomm, Texas
Instruments, Samsung, LG, T-Mobile e Nvidia; A Google é a responsável pela gerência do produto e
engenharia de processos.
+Android
O primeiro telefone comercialmente disponível a rodar no sistema Android foi o HTC Dream, lançado a 22 de outubro de 2008;
12 milhões de linhas de código, das quais 3 milhões em XML; 2.8 milhões de linhas de C; 2.1 milhões de linhas de código Java; 1.75 milhões de linhas de código em C++;
+Android
OK. Linux... Google... Mas por que eu iria querer desenvolver aplicações para Android?? Mais de 200 milhões de dispositivos ativados (550.000
por DIA); 137 países e regiões; Somente no terceiro trimestre de 2011, os usuários
baixaram 2.4 BILHÕES de aplicações para os seus Androids.
+Android SDK
O Android SDK (Software Development Kit) permite o desenvolvimento e teste de aplicações.;
Fornece ferramentas para a comunicação do computador com um dispositivo Android;
Suporte a várias versões do Android.
+Android SDK
Instalação Requisitos mínimos:
Eclipse Indigo (3.7); JDK 7.
http://developer.android.com/sdk/index.html Baixar a versão .zip
+ADT – Plug-in para Eclipse
O ADT (Android Development Tools) é um plug-in para o Eclipse que foi projetado para fornecer um ambiente poderoso para desenvolvimento de aplicativos para Andriod.
+ADT – Plug-in para Eclipse
Prover um rápido setup de novos projetos Android, além de: criar interfaces gráficas para aplicações; adicionar componentes de acordo com a API do
Andriod; debugar os aplicativos; exportar o resultado disso na extensão padrão do
Android (.apk) para distribuição da mesma.
+ADT – Plugin para Eclipse
“Help > Install New Software...”
+ADT – Plug-in para Eclipse
+ADT – Plug-in para Eclipse
Window > Android SDK Manager SDK Tools; SDK Platform-tools; Android platforms; Google APIs by Google Inc.; USB Driver for Windows;
Baixar os arquivos referentes à versão 2.3.3 da plataforma Uso nos exemplos; Tempo necessário para fazer o download de todos.
+ADT – Plugin para Eclipse
Window > AVD Manager
+Criando um projeto Android
New > Project > Android > Android Project
+Criando um projeto Android
Nome da aplicação — Nome que vai aparecer no menu de aplicações do Android e no Android Market;
Nome do pacote – Nome do processo a ser gerenciado pelo Android;
Nome da Activity — Inicialmente, pense como o nome que aparecerá na janela do aplicativo;
+Estrutura de um projeto Android
+Estrutura de um projeto Android
Pasta src/: Inclui o pacote para a aplicação, que no exemplo
é br.ufpe.cin.android.myapk.
R.java: O ADT cria esse arquivo automaticamente e representa
as constantes necessárias para acessar diversos recursos da aplicação Android.
MyApkActivity.java: Implementação da classe principal da aplicação.
+Estrutura de um projeto Android
Bibliotecas de referência (Android <versão>): Contém o arquivo android.jar, que é o arquivo da classe
de runtime do Android, localizado no Android SDK.
Pasta res/: Contém os recursos para a aplicação, incluindo:
Ícones (por exemplo, o arquivo ic_laucher.png); Arquivos de layout (o arquivo main.xml); Strings (o arquivo strings.xml), que contém as constantes ligadas
à strings.
+Estrutura de um projeto Android
AndriodManifest.xml Descritor de implementação da aplicação de exemplo.
Contém uma descrição mais detalhada da aplicação do que a que é encontrada no arquivo main.xml.
+Simulador
+Simulador
+Simulador
+Simulador
Observações importantes: Os passos mostrados acima devem ser feitos para todos
os projetos criados; É necessário criar uma AVD para cada tipo de projeto;
Mesmo que seja Android 2.3.3 e Google APIs 2.3.3! Todas as aplicações contidas no workspace que foram
executadas no mesmo AVD são carregadas quando o simulador é iniciado.
+2. A plataforma
+Sobre a plataforma
+Activity
A classe Activity é uma parte importante de um ciclo de vida de uma aplicação Android, e a maneira como as Activities são lançadas e interagem entre si é parte fundamental do modelo de aplicação da plataforma.
Uma Activity é um componente simples, que o usuário pode dispor livremente. Interação com o usuário; A classe Activity pode ser associada à criação de uma janela no
qual o desenvolvedor pode colocar a GUI da aplicação.
+Activity
Geralmente, uma Acitivity é apresentada para o usuário como uma janela full-screen, mas ela também pode ser usada de outras formas: como janelas flutuantes; dentro de outra Activity.
Ela possui dos métodos que devem ser implementados por todas as suas subclasses: onCreate(Bundle): é onde a Activity é iniciada. onPause(): é chamando quando o usuário deixa a aplicação.
+Service
Um Service é um componente de aplicação representando tanto uma operação de longa duração, quanto oferecendo uma funcionalidade suplementar para outras aplicações. Estas tem um tempo de vida igual ao do serviço ao qual estão ligadas.
Muitas confusões sobre a classe Service são resolvidas sabendo-se o que ela não representa: Um Service não é um processo separado. O objeto em si não
executa ações num processo próprio. Um Service não é uma thread. Não é recomendado usar um
Service para realizar algum trabalho fora da thread principal.
+Service
Um Service, no entanto, é algo bastante simples, fornecendo duas funcionalidades principais: Um meio para a aplicação informar ao sistema algo que ela quer
que seja executado em background. Isso corresponde a chamar o método Context.startService(), que pede ao sistema para alocar ações para o Service, para ser executado enquanto este ou outro componente o termine.
Uma facilidade para uma aplicação compartilhar alguma de suas funcionalidades com outras aplicações. Isto corresponde a chamar o método Context.bindService(), que permite uma conexão entre aplicações para que haja a interação entre estas.
+Intent
Um Intent é uma descrição abstrata de uma operação que será executada. lançar uma Acitivity comunicação com um Service que está executando em
background.
Um Intent provê uma facilidade para fazer uma ligação tardia entre códigos de diferentes aplicações.
+Intent
O uso mais significativo disto é no lançamento de Activities, onde um Intent pode ser considerado como um intermediário entre duas Activities. Estrutura de dados passiva mantendo uma descrição
abstrata de uma ação a ser realizada.
+Content Providers
Content Providers armazenam e retornam dados, e fazem estes serem acessíveis a todas as aplicações. O único meio de compartilhar dados entre aplicações; No Android não há uma área de armazenamento comum onde
todos os pacotes Android possam acessar estes dados.
Um Content Provider NÃO persiste dados.
+Content Providers
O Android é embarcado com um determinado número de Content Providers para tipos pré-definidos de dados Arquivos de mídia; Informações de contatos Etc...
Se o desenvolvedor quiser tornar os dados de suas aplicações visíveis a outras, ele tem duas opções: criar seu próprio Content Provider (como uma subclasse de
ContentProvider.java); adicionar os dados a um Provider existente (observando sempre o
tipo do dado armazenado, para não haver erros de tipo).
+Widgets
São os componentes da interface da aplicação. Botões; Imagens; Textos; Layouts; Etc...
+Notifications
Representa o quão persistente é uma notificação que será apresentada ao usuário.
Uma notificação na barra de status adiciona um ícone na barra de status do sistema (com uma mensagem de texto opcional), e uma mensagem na tela de notificações.
Quando o usuário seleciona a notificação, o Android dispara um Intent definido na instância do objeto Notification (em geral para lançar uma Activity). É possível ainda configurar a notificação para emitir sons, vibrar o
dispositivo ou acender uma luz.
+Notifications
Uma notificação na barra de status deve ser usada para qualquer caso em que um serviço rodando em background precise alertar sobre um evento que requer alguma intervenção direta do usuário.
Um serviço rodando em background nunca deve lançar uma Activity por ele mesmo, nem mesmo através de um Intent, se para isto for necessária a interação com o usuário. Em vez disto, o serviço deve criar uma notificação que irá lançar a
Activity quando selecionada pelo usuário.
+Resources
Gerencia o acesso a um ou mais recursos de aplicação, estando no topo do controle de ativos da aplicação.
Um ativo significa algum elemento compartilhado por uma estrutura, que precisa ser acessados por um ou mais componentes desta.
Além disso, se comporta como uma API de alto nível para acesso aos dados tipificados desses ativos.
+Resources
O sistema de recursos do Android mantém um registro de todo ativo que não seja código associado a uma aplicação.
A classe Resources é utilizada para acessar esses recursos. As ferramentas do Android SDK compilam os recursos da aplicação no arquivo binário da aplicação em tempo de construção.
+Resources
Para usar o recurso, este deve estar no local correto da hierarquia de classes (isto é, dentro da pasta res/) e, a cada mudança nesse diretório, o projeto deve ser construído. Então, durante essa construção as ferramentas do SDK geram
símbolos para cada recurso, que podem ser referenciados no código da aplicação.
+Resources
Utilizar recursos de aplicação torna mais fácil a atualização de várias características de uma aplicação sem modificar o código-fonte, e, provendo um conjunto de recursos alternativos, otimizar a aplicação para uma variedade de configurações de dispositivos
+R.java
A classe R.java funciona como uma lista indexada, onde todos os recursos do projeto estão definidos.
Esta classe é usada como um atalho para referenciar os recursos da pasta “res” no código.
+R.java
Essa função da classe se torna bastante útil quando estamos utilizando uma IDE que contém um recurso de auto complemento de código (Como o Ctrl+Space do Eclipse).
Isto torna muito mais rápida e interativa a localização da referência que o desenvolvedor procura.
Além disto, quando o desenvolvedor adiciona outros recursos ao projeto, a classe R.java é alterada para manter as referências atualizadas.
+3. Componentes de Tela
+TextView e EditText
Exibe um texto para o usuário e, opcionalmente, permite a edição do mesmo.
Uma TextView é um editor de texto completo, mas a classe básica não permite edição.
Para isto, é usada a EditText, que é uma extensão do TextView. O funcionamento dos dois componentes será explicado em detalhes na seção seguinte.
+Gallery
Uma view que mostra itens no centro da tela, com scroll horizontal.
A view Gallery possui valores default, mas estes podem ser configurados de acordo com a necessidade da aplicação.
+Button
Representa um widget que o usuário pode pressionar ou clicar para realizar uma ação.
+Listeners
Um listener é uma interface em uma View que contém um método que retorna um comportamento. Este método é chamado pelo Android em resposta à determinada interação do usuário com a GUI da aplicação.
onClick() De View.OnClickListener. É chamado quando o usuário apenas
toca no item da tela, ou coloca o foco com as setas de navegação e toca o enter no teclado.
+Listeners
onLongClick() De View.OnLongClickListener. É chamado quando o usuário toca e
pressiona um item da tela ou coloca o foco com as setas de navegação e toca e pressiona o enter no teclado. O tempo padrão de ativação é de 1 segundo.
onFocusChange() De View.OnFocusChangeListener. É chamado quando o usuário
coloca ou tira o foco de algum item.
onKey() De View.OnKeyListener. É chamado quando o usuário tem o foco
sobre algum item da tela e pressiona alguma tecla do dispositivo.
+Listeners
onTouch() De View.OnTouchListener. É chamado quando o usuário realiza
qualquer ação que caracterize um toque na tela, independente da duração. A única condição é que seja dentro da região que delimita o item.
onCreateContextMenu() De View.OnCreateContextMenuListener. É chamado quando um
menu de context é exibido (como resultado de um toque longo na tela).
+Listeners
O método onClick dos exemplos acima não possuem retorno, embora alguns métodos de callback possuam. A razão para o retorno depende do evento em si. onLongClick() e onKey() – Retornam um booleano que indica se o
desenvolvedor se o evento foi concluído ou se ainda nao foi. Isto é, retorna true para indicar que o evento foi tratado e pode ser encerrado; retorna falso se ele não foi tratado e/ou deve continuar para algum outro listener.
onTouch() – Retorna um booleano que indica que o evento foi tratado. É importante notar que este evendo pode ter muitas ações que se sucedem. Sendo assim, se o retorno for false quando a ação de tocar estiver sendo iniciada, isso indica que o evento ainda não foi concluído e que as ações subsequentes não importam no contexto.
+RadioGroup e RadioButton
Um radio button é um botão com dois estados possíveis: marcado ou não-marcado. Quando o radio button não está marcado, o usuário pode pressioná-lo ou clicar sobre ele para marcar. Não é possível ao usuário remover a marcação de um radio button,
uma vez feita.
Radio buttons são geralmente usados juntos em um Radio Group. Quando alguns radio buttons são colocados em um grupo, marcar
um dos membros desmarca outro, se este estiver selecionado.
+RadioGroup e RadioButton
Inicialmente, todos os radio buttons estão desmarcados. É impossível desmarcar um radio button arbitrariamente, mas pode-se desmarcar todos ao mesmo tempo. A seleção é indicada através do id único definido no XML layout.
+Checkbox
Um checkbox é um tipo específico de botão de dois estados que pode ser marcado ou não-marcado.
A diferença de um checkbox e um radio button é que o checkbox pode ser marcado e desmarcado pelo usuário, sem que isso afete outros checkboxes.
+ImageView
Exibe uma imagem arbitrária, como um ícone.
A classe ImageView pode carregar imagens de várias fontes (como ContentProviders), cuidar da computação das medidas da imagem, para então esta poder ser utilizada em algum layout, oferece vários efeitos de visualização, como redimensionamento e coloração.
+ImageButton
Exibe um botão com uma imagem no lugar do texto, que pode ser pressionado ou clicado pelo usuário.
Por padrão, um ImageButton parece um Button, com um background que muda a cor de acordo com o estado do botão.
+ImageButton
A imagem na superfície do botão é definida através do atributo “android:src” no XML do elemento ou pelo setImageResource(int) method.
Podemos associar uma imagem diferente a cada um dos diferentes estados do botão (selecionado, com o foco, etc).
+Spinner
Uma View que exibe um elemento de uma lista de elementos e permite ao usuário escolher entre eles. Os itens no Spinner vêm do Adapter associado a ele.
+ListView
Uma view que mostra os itens em uma lista vertical, permitindo o scroll entre estes elemente. Os itens vêm do ListAdpater associado a esta view.
+Adapters
Um adapter é um objeto que atua como uma ponte entre uma AdapterView e os dados que compõem essa view.
Ele também é responsável por fazer a View para cada item no conjunto de dados.
+Alert
Um Alerta é, geralmente, uma pequena janela que aparece em cima de uma Activity.
A Activity perde o foco e o alerta aceita toda a interação do usuário. Alertas são normalmente usados para notificações que devem interromper o uso e para realizar alguma tarefa que direciona algo relacionado com a aplicação em uso.
A classe Dialog é a classe básica para criação de alertas. Porém, o desenvolvedor não deve instanciar uma classe Dialog diretamente.
+Alerts
AlertDialog Um alerta que pode ter nenhum, um, dois ou três botões e/ou
uma lista de itens selecionáveis, que inclui checkboxes ou radio buttons.
ProgressDialog Um alerta que exibe uma barra de progresso. Como é uma
subclasse de AlertDialog, ela pode ter botões.
DatePickerDialog Um alerta que permite ao usuário selecionar uma data.
TimePickerDialog Um alerta que permite ao usuário selecionar a hora.
+Toast
Uma Toast é uma view que contém uma mensagem curta e rápida para o usuário. Quando a view é mostrada ao usuário, aparece como uma view flutuante sobre a aplicação. Ela nunca vai receber o foco. O usuário pode estar até interagindo com algum widget.
A idéia do Toast é ser um mínimo intrusivo possível. Exemplos disso são o controle de volume, ou uma mensagem
informando que as configurações foram salvas.
A maneira mais simples de utilizar essa classe é chamar algum dos métodos estáticos que retornam um objeto Toast.
+Atributos XML
São atributos que definem a aparência dos widgets em um determinado layout, bem como como eles são identificados no código durante o desenvolvimento. Eles será discutidos com mais detalhes na seção seguinte.
+4. Propriedades e eventos dos componentes trabalhados
+Ação e Estilo
Precisamos conhecer como podemos implementar as ações que desejamos que nossas aplicações realizem. Isso é feito através de um ou mais eventos Bem como dos seus respectivos Listeners.
Queremos também moldar a aparência dos componentes da nossa aplicação. Para isso, são usadas as propriedades do widget.
+Widget TextView
Propriedade Em XML Em Java Descrição
Text
android:text
setText(CharSequence c)
Nessa propriedade, você define o texto a ser exibido na tela.
Text color
android:textColor
setTextColor(Color c)
Nessa propriedade, você define a cor de texto.
Background android:background
setBackGroundColor(Color c)
Nessa propriedade , você define o cor de fundo do componenteexibido.Valor: #000000 até #FFFFFF.
+Widget TextView
Propriedade Em XML Em Java DescriçãoText size
android:textSize
setTextSize(float tamanho) ou setTextSize(int unidade, inttamanho)
Define o tamanho do texto. O tamanho da fonte pode serespecificado em várias notações : px (pixels),sp(scaled-pixels) ,mm(milímetros), in (polegadas) e etc.
Typeface
android:typeface
setTypeface(Typefacefonte)
Essa propriedade serve para definir uma fonte ao texto(normal,sans,serif,monospace).
+Widget TextView
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
+Widget EditText
Propriedade Em XML Em Java DescriçãoCapitalize
android:capitalize - Essa propriedade serve para definir o tipo capitalização daspalavras. Por padrão, o valor e “none”(nenhum). Os possíveisvalores para essa propriedade são : “words”,”sentences” e”characters”
Password
android:password
- Com essa propriedade você habilita a digitação de senhas. Ovalor padrão desse atributo é “false”.
Hintestivervazia.
android:hint
setHint(CharSequence c)
define uma mensagem que aparecerá quando a EditText
+Widget EditText
Propriedade Em XML Em Java DescriçãoText
android:text
setText(CharSequence c)
Nessa propriedade, você define o texto a ser exibido na tela.
Text color
android:textColor
setTextColor(Color c)
Nessa propriedade, você define a cor de texto.
Background android:background
setBackGroundColor(Color c)
Nessa propriedade , você define o cor de fundo do componenteexibido.Valor: #000000 até #FFFFFF.
Text size
android:textSize
setTextSize(floattamanho) ousetTextSize(intunidade, inttamanho)
Define o tamanho do texto. O tamanho da fonte pode serespecificado em várias notações : px (pixels),sp(scaled-pixels) ,mm(milímetros), in (polegadas) e etc.
+Widget EditText
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
setOnKeyListener
OnKeyListener
onKey(View v,int KeyCode,KeyEventevent)
Esse evento é disparado toda vez que a tecla é acionada,disparando o método onKey.
setOnFocusChangeListener
OnFocusChangeListener
onFocusChange(View v,booleanhasFocus)
Esse método é disparado toda vez quando um componenteEditText ganha ou perde foco.
+Widget Button
Propriedade Em XML Em Java DescriçãoText
android:text
setText(CharSequence c)
Nessa propriedade, você define o texto a ser exibido na tela.
Text color
android:textColor
setTextColor(Color c)
Nessa propriedade, você define a cor de texto.
Text size
android:textSize
setTextSize(floattamanho) ousetTextSize(intunidade, inttamanho)
Define o tamanho do texto. O tamanho da fonte pode serespecificado em várias notações : px (pixels),sp(scaled-pixels) ,mm(milímetros), in (polegadas) e etc.
Typeface
android:typeface
setTypeface(Typefacefonte)
Essa propriedade serve para definir uma fonte ao texto(normal,sans,serif,monospace).
+Widget Button
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
setOnKeyListener
OnKeyListener
onKey(Viewv,int KeyCode,KeyEventevent)
Esse evento é disparado toda vez que a tecla é acionada,disparando o método onKey.
+Widgets Checkbox/RadioButton
Propriedade Em XML Em Java DescriçãoText
android:text
setText(CharSequence c)
Nessa propriedade, você define o texto a ser exibido na tela.
Text color
android:textColor
setTextColor(Color c)
Nessa propriedade, você define a cor de texto.
Checked android:checked setChecked(booleanestado)
Nessa propriedade você define o estado do CheckBox, se estarámarcado (true) ou não (false).
+Widgets Checkbox/RadioButton
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
setOnCheckedChangeListener
OnCheckedChangeListener
onCheckedChanged(CompoundButtoncb,booleanb)
Esse evento será disparado toda vez que o estado do CheckBoxfor modificado, ou seja, marcado ou desmarcado, disparando o método onCheckedChanged.
+Widgets Spinner / ListView
Propriedade DescriçãosetAdapter(SpinnerAdapter a)
Nesse método você define os elementos que irão compor esse componente através de um vetor (array).
int getSelectedPosition()
Essa função retorna a posição do elemento selecionado. Por exemplo, se for o primeiro elemento, retorna 0, se for o segundo, retorna 1 e assim sucessivamente.
Object getItemAtPosition(intposicao)
Retorna em um tipo Object o elemento de uma determinada posição, passada como parâmetro
Object getSelectedItem()
Essa função retorna em um tipo Object, o item selecionado.
+Widgets Spinner / ListView
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
setOnItemClickListener
OnItemClickListener
onItemClick(AdapterView<?> a, Viewv, int I,long l)
Esse evento será disparado toda vez que um derminado item forclicado, disparando o método onItemClick.
setOnItemSelectedListeneronNothingSelected(AdapterView av)
OnItemSelectedListener
onItemSelected(AdapterView av, Viewv,int posição,longid)
Esse evento será disparado toda vez que um determinado item forselecionado, disparando o método onItemSelected.
+Widget ImageView
Propriedade Em XML Em Java DescriçãoSrc
android:src
setImageResource(intId)
Nessa propriedade, você define a imagem que será exibida natela.
Propriedade DescriçãosetAdapter(SpinnerAdapter a)
Nesse método você define os elementos que irão compor esse componente através de um vetor (array).
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
+Widget Gallery
Propriedade DescriçãosetAdapter(SpinnerAdapter a)
Nesse método você define os elementos que irão compor esse componente através de um vetor (array).
Método do evento
Evento Métodos de callback
Descrição
setOnClickListener
OnClickListener
onClick(View v)
Esse evento é disparado toda vez que o componente for clicado,disparando o método onClick.
setOnItemClickListener
OnItemClickListener
onItemClick(AdapterView<?> a, Viewv, int I,long l)
Esse evento será disparado toda vez que um derminado item forclicado, disparando o método onItemClick.
+O que foi visto até agora:
1. Introdução
2. A plataforma
3. Componentes de Tela
4. Propriedades e eventos dos componentes trabalhados