Anda di halaman 1dari 26

Programao para Android

Aula 03: Manipulando dados e eventos de uma Activity.


Parte 01: Relacionando widgets no
cdigo Java
Manipulando widgets atravs de cdigo
JAVA
Para manipular os componentes que adicionamos via XML necessrio um cdigo
JAVA que esteja relacionado com a interface grfica do aplicativo.
Na programao em Android, temos em geral um arquivo .XML que contm o layout e
interface grfica do aplicativo e uma classe JAVA associada a uma Activity.
Ao criar um novo projeto para Android, foi criado automaticamente pela ferramenta
um Layout .XML ( res -> layout -> nome do layout.xml) e uma classe Java ( src >
nome do pacote -> nome da classe.java
Observe que na classe JAVA, existe um mtodo OnCreate

public class MainActivity extends Activity {


@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
Manipulando widgets atravs de cdigo
JAVA
O mtodo onCreate(Bundle) onde voc inicia sua atividade e define
a interface grfica a qual est relacionada atravs do mtodo
setContentView.
Assim podemos obter os widgets (elementos de tela) atravs de um
mtodo chamado findViewById().
Para que um arquivo .JAVA consiga se comunicar com o layout XML e
outros recursos, existe uma classe intermediria, criada e atualizada
automaticamente pela ferramenta, responsvel por realizar esta
ligao. Esta classe chamada de R.Java.
Observe que o mtodo setContentView relaciona a interface grfica
usando a classe R:
(setContentView(R.layout.activity_main);
Manipulando widgets atravs de cdigo
JAVA
O mtodo onCreate() - a primeira funo a ser executada em uma
Activity (Tela). Geralmente a responsvel por carregar os layouts
XML e outras operaes de inicializao. executada apenas uma
vez.
O mtodo onCreate() importante pois nele que iniciaremos nossos
objetivos visuais e relacionamos os eventos(onClick,onTouch, etc)
Neste mtodo, programamos todas as funes que gostaramos que
fossem inicializadas quando o aplicativo for executado.
OBS: Este mtodo s executado uma nica vez, no incio da
aplicao.
A classe R.Java

Esta classe o corao do sistema Android. Ela representa, em forma


de atributos Java, todos os recursos da sua aplicao que esto dentro
dos diretrios explicados de um aplicativo Android.
Ela gerada e atualizada automaticamente e no deve ser editada
manualmente; oEclipse far isto automaticamente.
Por exemplo, temos dentro do diretrio res/drawable a imagem
icon.png; podemos acess-la de dentro da nossa aplicao Android com
a seguinte expresso: R.drawable.icon, onde R a classe,
drawable o diretrio e icon o nome do recurso.
Isto serve para quaisquer recursos presentes dentro dos diretrios de
recursos.
Relacionando widgets atravs de cdigo
JAVA
Os widgets podem ser usados no nosso cdigo Java. Se no cdigo XML tivermos um
widget do tipo EditText, para acessar esse componente pelo Java, preciso fazer
uso da classe EditText.
Cada widget no XML possui o seu respectivo em classe Java, logo, se possui um
widget TextView, para acessa-lo devemos fazer uso da classe TextView e assim vai.
Podemos relacionar um widget a qualquer momento(onCreate, no clique de um
boto, etc.)
No exemplo abaixo, associamos os widget no mtodo onCreate da activity:

TextView tvBoasVindas;
tvBoasVindas = (TextView)findViewById(R.id.tvBoasVindas);

EditText txtNome;
txtNome = (EditText)findViewById(R.id.txtNome);
Relacionando widgets atravs de cdigo
JAVA
O cdigo abaixo cria um objeto do tipo EditText no cdigo java

EditText txtNome;

Para relacionar o objeto criado com o seu respectivo correspondente na interface


grfica usamos o mtodo findViewById e especificamos qual elemento est
relacionado atravs da classe R.id.
Como JAVA uma linguagem fortemente tipada, faz-se obrigatrio converter o
elemento para o tipo correto de dado, e isto feito fazendo o casting (EditText),
(TextView), etc.

txtNome = (EditText)findViewById(R.id.txtNome);
Este processo feito semelhantemente para quaisquer recursos presentes dentro
da interface grfica XML.
Parte 02: Programando eventos
Programando eventos

A programao para Android, semelhantemente a outros ambientes,


linguagens e ferramentas grficas, orientada a eventos, neste caso, aos
cliques e toques na tela.
Cada vez que um usurio clica em um boto, seleciona um item em uma
lista, ou pressiona uma tecla, o sistema operacional gera um evento
Se uma aplicao est interessada em um evento especfico (por exemplo,
clique em um boto), deve solicitar ao sistema para escutar o evento. Se
a aplicao no est interessada, seu processamento continua de forma
normal.
importante observar que a aplicao no espera pela ocorrncia de
eventos isso controlado pelo sistema.
Programando eventos

Para que um componente ou container possa escutar eventos,


preciso instalar um listener. Listeners so classes criadas
especificamente para o tratamento de eventos.
Um event listener uma interface da classe View que contm um
mtodo simples de chamada. Esse mtodo pode ser chamado pela
framework Android quando a View a qual o listener est registrado
chamado por uma interao de usurio com um item da interface, ou
seja, quando a ao correspondente ocorre no objeto.
Por exemplo, quando um boto clicado, o mtodo onClick()
chamado no objeto.
Programando eventos

Os principais eventos presentes na programao para Android so:


onClick()
Vem de View.OnClickListener. chamado quando o usurio toca o
item (quando estiver em modo de toque) ou foca o item atravs
de teclas de navegao ou trackball e pressiona o boto de enter
correspondente ou pressiona o trackbak (que tambm serve como
enter).
onLongClick()
Vem de View.OnLongClickListener. chamado quando o usurio
toca um item e o segura (quando estiver em modo de toque) ou
foca o itematravs de teclas de navegao ou trackball e
pressiona o boto de enter correspondente e o segura ou pressiona
o trackbak por pelo menos um segundo.
Programando eventos

Os principais eventos presentes na programao para Android so:


onFocusChange()
Vem de View.OnFocusChangeListener. chamado quando o usurio
navega para dentro ou para fora de um item, usando as teclas de
navegao ou trackball.
onKey()
Vem de View.OnKeyListener. chamado quando o usurio foca em
um item e pressiona ou solta uma tecla no dispositivo. Exemplo:
quando se est escrevendo uma mensagem, voc pode tocar no
boto virtual (ou fsico) da letra A e, ao solt-lo, a letra A
mostrada na tela.
Programando eventos

Os principais eventos presentes na programao para Android so:


onTouch()
Vem de View.OnTouchListener. chamado quando o usurio
performa uma ao qualificada como um evento de toque,
incluindo pressionar, soltar ou qualquer movimento de gesto na
tela (dentro dos limites do item).
onCreateContextMenu()
Vem de View.OnCreateContextMenuListener. chamado qunado
um menu de contexto est sendo criado (como resultado de um
long click).
Exemplo 01 - Verificar idade

Para exemplificar os listeners relacionados aos


eventos, construa um layout semelhante ao
apresentado ao lado.
Este layout contm um TextView, um EditText e um
Button
Neste aplicativo chamaremos 2 listernes:
onClick para o boto verificar idade
onLonClick para o LinearLayout que envolve os widgets
inseridos
Exemplo 01 - Verificar idade

No mtodo onCreate, iremos referenciar os objetos: EditText(txtIdade),


Button(btVerificarIdade) e LinearLayout(layoutFormulario)
//referenciando o LinearLayout
LinearLayout layoutFormulario;
layoutFormulario =
(LinearLayout)findViewById(R.id.layoutFormulario);

//referenciando a EditText da idade


EditText txtIdade;
txtIdade = (EditText)findViewById(R.id.txtIdade);

//referenciando o boto de verificar idade


Button btVerificarIdade;
btVerificarIdade =
(Button)findViewById(R.id.btVerificarIdade);
Exemplo 01 - Verificar idade

Para programar o listener referente ao toque longo (onLongClick) na


tela (Linear Layout):
View.OnLongClickListener toqueNaTela = new View.OnLongClickListener()
Ao criar o Listener toqueNaTela o NetBeans cuidar automaticamente
de inserir o cdigo relacionado ao evento LongClick. Voc dever
programar o que ser realizado dentro da funo public boolean
onLongClick(View v) {}
Aps a programao do LongClick, dever ser atribudo ao Layout,
no mtodo onCreate, o listener que acabou de ser criado:
layoutFormulario.setOnLongClickListener(toqueNaTela);
Exemplo 01 - Verificar idade
View.OnLongClickListener toqueNaTela = new View.OnLongClickListener() {

@Override
public boolean onLongClick(View v) {

//referenciando a EditText referente a idade


EditText txtIdade;
txtIdade = (EditText)findViewById(R.id.txtIdade);

//cria uma verivel inteira e coloca o valor da txtIdade nesta varivel


int idade;
idade = Integer.parseInt(txtIdade.getText().toString());

//A classe Toast usada para mostrar uma mensagem na tela


Toast.makeText(getBaseContext(), "A idade informada foi " + idade,
Toast.LENGTH_SHORT).show();

return false;
}
};
Exemplo 01 - Verificar idade

No cdigo apresentado recebemos o valor digitado na EditText


(txtIdade). Este valor foi colocado em uma varivel do tipo inteiro
(int). Observe atentamente que antes da varivel idade receber o
valor que foi digitado, foi realizado uma converso, utilizando o
mtodo Integer.parseInt()
O mtodo getText da EditText retorna o valor informado pelo
usurio na caixa de texto.
A classe Toast usada para exibir uma mensagem na tela
O mtodo makeText composto de 3 parmetros: getBaseContext,
o texto a ser exibido e a durao da mensagem.
Exemplo 01 - Verificar idade - Resultado
Exemplo 02 - Verificar faixa etria

Aps a criao do layout mostrado no exemplo anterior ser programado um


novo listener referente ao boto VERIFICAR IDADE. O listener com o evento
dever ser programado fora do mtodo onCreate.
OBS: Digite apenas a criao da classe, que o NetBeans cuidar de criar
automaticamente o mtodo onClick: View.OnClickListener verificarIdade =
new View.OnClickListener()
Cdigo gerado pelo NetBeans:

ViewOnClickListener verificarIdade = new {


View.OnClickListener()
@Override
public void onClick(View v) {
// TODO Auto-generated method stub

}
};
Exemplo 02 - Verificar faixa etria

Dentro do mtodo public void onClick(View v) escreveremos


o cdigo associado ao clique. Neste caso, faremos um cdigo para
verificar a idade e classificar o valor informado e faixa etria(criana,
adolescente, adulto)
Usaremos a estrutura if...else para verificar uma faixa de
idade(criana, adolescente e adulto)
Ao final, exibiremos a faixa etria utilizando a classe Toast.
Exemplo 02 - Verificar faixa etria

if ((idade > 0) && (idade <= 12))


{
faixaEtaria = "Criana";

}
else if ((idade > 12) && (idade <= 18))
{
faixaEtaria = "Adolescente";
}
else
{
faixaEtaria = "Adulto";
}

//A classe Toast usada para mostrar uma mensagem na tela


Toast.makeText(getBaseContext(), "Voc um(a) " + faixaEtaria,
Toast.LENGTH_SHORT).show();
Exemplo 02 - Verificar faixa etria
Exerccio 01 - IMC

Desenvolver o layout a
apresentado ao lado e em
seguida programar um
listener para o boto
Verificar IMC. Ao toca-lo a
APP dever apresentar o
diagnstico referente ao
IMC.
Na prxima aula...

Mais widgets: Checkbox, RadioButton, SeekBar,


ToogleButton, DatePicker, TimePicker