Buscar

Eventos em Android

Prévia do material em texto

Conteúdos 
- Eventos em Android
- Exemplos e exercícios
Programação para 
Dispositivos Móveis 
Método onCreate 
• Quando criamos nossos layouts com XML, é necessário um código Java que esteja
relacionado com os elementos da interface e que consiga acessar esses elementos.
• A classe R.java faz a ponte nessa ligação do XML com o Java
• Ao criar um novo projeto para Android, é criado automaticamente um arquivo de Layout
(res -> layout -> nomedolayout.xml) e uma classe Java (java –> nome_do_pacote ->
nome_da_classe.java
• Observe que na classe Java de uma tela, existe um método OnCreate:
Método onCreate 
• No método onCreate(Bundle) iniciamos nossa Activity e também é onde definimos o
layout do aplicativo através do método setContentView.
• Após carregar o layout, é possível acessar seus elementos utilizando o método
findViewById(). Isso pode ser feito no método onCreate e em outros métodos e eventos.
• Em uma Activity gerada pelo Android Studio, é possível observar que o código em
onCreate já vem com um layout configurado:
setContentView(R.layout.activity_main); 
• A classe R.java faz a ligação de todos os recursos da aplicação em atributos Java.
• Os elementos do layout podem ser usados no nosso código Java. Cada elemento da View
possui uma classe Java associada. Por exemplo, se no código XML tivermos um elemento
EditText, para acessar esse componente no código Java, é preciso criar um objeto com a
classe EditText.
Acessando elementos do layout 
• Para acessar os elementos do layout, utilizaremos os
atributos fornecidos pela classe R.java através do id,
usando o método findViewById. Com a referência ao
objeto, podemos executar os métodos da classe específica.
Classe obj = (Classe)findViewById(R.id.nomeDoElemento); 
• Exemplos:
EditText v1 = (EditText) findViewById(R.id.editv1); 
EditText v2 = (EditText) findViewById(R.id.editv2); 
TextView r = (TextView) findViewById(R.id.textresp); 
Button btnsomar = (Button) findViewById(R.id.button1); 
Button btnmult = (Button) findViewById(R.id.button2); 
Eventos 
• Todos os aplicativos precisam tratar eventos. Estes eventos são geralmente
disparados pelo usuário quando interage com a UI, ou até mesmo através de algum
sensor.
• Os eventos são o mecanismo que podemos usar para coletar dados da interação do
usuário com a UI.
• Para trabalhar com eventos, é necessário configurar um listener (ouvinte).
• Os listener são classes dedicadas a tratamento de eventos, como por exemplo, o
clique em um botão que aciona o evento/método onClick().
• Podemos tratar os eventos de três formas:
1. Associando um método no layout XML.
2. Através de classes anônimas: programamos o evento diretamente no objeto.
3. Através de um método único para todos os elementos que receberão atenção a
eventos, implementando um Listener.
Eventos 
• Event Listener
São interfaces que possuem métodos que são acionados pelo
Android quando o usuário interage com a UI. Geralmente são
registrados em algum componente do layout.
• Event handlers
Quando um evento registrado ocorre em um elemento, o
event listener chama um método que irá fazer alguma ação,
manipular/atender esse evento. Esse método é conhecido
como event handler (manipulador de evento).
Eventos frequentes 
• onClick() é acionado pelo OnClickListener() quando o usuário clica ou toca em
algum elemento.
• onLongClick() é acionado pelo OnLongClickListener() quando o usuário clica ou toca
em algum elemento por mais de 1 segundo ("click longo").
• onFocusChange() é acionado pelo OnFocusChangeListener() quando um elemento
ganha ou perde o foco.
• onTouch() é acionado pelo OnTouchListener() quando o usuário toca em um
componente. É semelhante ao onClick, porém com este evento podemos verificar
ações diferenciadas para UP, DOWN e MOVE, por exemplo.
• onMenuItemClick() é acionado pelo OnMenuItemClickListener() quando o usuário
seleciona um item de menu.
Outros eventos 
Como mencionado, existem outros tipos de eventos. Por exemplo, Android prevê 
atender o evento de click longo: onLongClick, bastante útil. Frequentes, também, são os 
eventos: onKey (usar setOnKeyListener) e onTouch (usar setOnTouchListener). 
public class Eventos extends Activity { 
 public void onCreate(Bundle savedInstanceState) { 
 ... 
 final Button botao = (Button) findViewById(R.id.btnmult); 
 botao.setOnLongClickListener (new View.OnLongClickListener() { 
 public boolean onLongClick(View v) { 
 Toast.makeText(Eventos.this, "\nMuito bem! Evento click longo \n", 
 Toast.LENGTH_LONG).show(); 
 return true; 
 } 
 }); 
 } 
 ... 
} 
Eventos em outros objetos 
O evento onClick não é exclusivo para botões. No exemplo mostrado a seguir 
atendemos este evento para trocar, na execução do programa, a figura mostrada no 
objeto ImageView foto1, que faz parte do visual de uma Activity. 
public class Sobre extends Activity { 
 private boolean flag = false; 
 public void onCreate(Bundle savedInstanceState) { 
 ... 
 final ImageView foto1 
 = (ImageView) findViewById(R.id.foto1); 
 foto1.setImageResource(R.drawable.onp); 
 foto1.setOnClickListener(new View.OnClickListener() { 
 public void onClick(View v) { 
 if (!flag) 
 foto1.setImageResource(R.drawable.ong); 
 else 
 foto1.setImageResource(R.drawable.onp); 
 flag = !flag; 
 } 
 }); 
 ... 
 } 
} 
<?xml version="1.0" encoding="utf-8"?> 
<RelativeLayout 
 xmlns:android="http://schemas.android.com/apk/res/android" 
 android:layout_width="match_parent" 
 android:layout_height="match_parent" 
 android:background="#990000"> 
... 
 <ImageView 
 android:id="@+id/foto1" 
 android:layout_width="match_parent" 
 android:layout_height="wrap_content" 
 android:layout_marginTop="3px" /> 
... 
</RelativeLayout> 
Event handler no XML 
• Para inserir o evento click no XML, utilize o atributo
android:onClick="nomeDoMetodo" 
Na Activity que usa o layout, implemente o método abaixo 
seguindo exatamente a mesma assinatura, alterando somente o 
nome do método. 
public void nomeDoMetodo(View view) 
{ 
 // instruções 
} 
Event handler no XML 
... 
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginLeft="28dp" 
android:onClick="calcularSoma“ 
android:text="Soma" /> 
... 
public void calcularSoma(View v){ 
float v1 = Float.parseFloat(((EditText)findViewById(R.id.editv1)) 
 .getText().toString()); 
float v2 = Float.parseFloat(((EditText) findViewById(R.id.editv2)) 
 .getText().toString()); 
TextView r = (TextView)findViewById(R.id.textresp); 
r.setText("A soma é: " + (v1+v2));
} 
Event listener com classe anônima 
• É possível implementar a atenção de eventos através de classes
anônimas internas para cada elemento que queremos chamar o
event handler.
• Primeiro devemos 'setar' o listener no objeto, logo em seguida
implementar o event handler com a chamada classe anônima. Em
forma geral:
objeto.set[event listener](new View.[event listener](){ 
@Override 
public [tipo][nome do event listener] (View v){ 
... 
} 
}); 
Event listener com classe anônima 
... 
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginLeft="28dp" 
android:text="Soma" /> 
... 
... 
private Button btns; 
... 
protected void onCreate(Bundle savedInstanceState) { 
... 
btns = (Button)findViewById(R.id.button1); 
//... pegar as referências r, v1, v2 
btns.setOnClickListener(new View.OnClickListener(){ 
@Override 
public void onClick(View v){ 
r.setText(Float.parseFloat(
v1.getText().toString())+ 
Float.parseFloat( 
v2.getText().toString())+""); 
} 
}); 
} 
private Button btns; 
no XML 
Event Listener com método único 
• Podemos também, implementar somente um método para um event listener e com
isso atender esse evento para diversos objetos que estarão associados ao mesmo
listener.
• Para isso é necessário primeiro implementarna classe o respectivo listener. Utilize o
implements e o nome da interface que necessita.
• Em seguida set o event listener no objeto que deseja atender eventos.
• Implemente o respectivo event handler. Em forma geral:
 public class NomeClass extends AppCompatActivity implements View.On[event listener] 
@Override 
public [tipo] on[event handler](View v) { 
... 
} 
objeto.set[event listener](this); 
Event Listener com método único para vários objetos 
... 
<Button 
android:id="@+id/button1" 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:layout_marginLeft="28dp" 
android:text="Soma" /> 
... 
 public class Exe1 extends AppCompatActivity implements View.OnClickListener { 
private Button btns; 
protected void onCreate(Bundle savedInstanceState) { 
... 
btns = (Button)findViewById(R.id.button1); 
btns.setOnClickListener(this); 
//... podemos atender o evento onClick para outros botões 
} 
@Override 
public void onClick(View v) { 
if (v.getId() == R.id.button1) {
r.setText(Float.parseFloat(v1.getText().toString()) 
+ Float.parseFloat(v2.getText().toString()) + "");
} 
} 
} 
Trabalhando com RadioButton 
<RadioGroup 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:id="@+id/estado_civil"> 
 <RadioButton 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Solteirx" 
 android:id="@+id/solteiro" 
 android:checked="false" /> 
 <RadioButton 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Casadx" 
 android:id="@+id/casado" 
 android:checked="false" /> 
 <RadioButton 
 android:layout_width="wrap_content" 
 android:layout_height="wrap_content" 
 android:text="Viúvx" 
 android:id="@+id/viuvo" 
 android:checked="false" /> 
</RadioGroup> 
Trabalhando com CheckBox 
<CheckBox 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
android:text="Terror" 
android:id="@+id/terror" 
android:checked="false" /> 
<CheckBox 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
 android:text="Ação" 
android:id="@+id/acao" 
android:checked="false" /> 
<CheckBox 
android:layout_width="wrap_content" 
android:layout_height="wrap_content" 
 android:text="Comédia" 
android:id="@+id/comedia" 
android:checked="false" /> 
Trabalhando com RadioButton 
• Veja abaixo como acessar os elementos de tipo RadioButton, ou seja, como
verificar qual é a opção selecionada pelo usuário. Observe que
estado_civil é o id do grupo de radiobuttons e solteiro e casado
são os id dos radiobuttons.
int est_civil = ((RadioGroup)findViewById( 
R.id.estado_civil)).getCheckedRadioButtonId();
if (est_civil == R.id.solteiro) { 
Toast.makeText(this,"Opc Solteiro",Toast.LENGTH_LONG).show(); 
} 
else if (est_civil == R.id.casado){ 
... 
} 
else { 
... 
} 
Trabalhando com CheckBox 
boolean terror = ((CheckBox)findViewById(R.id.terror)).isChecked(); 
if (terror) { 
 Toast.makeText(this,"\n Você selecionou a opção TERROR.\n", 
 Toast.LENGTH_LONG).show(); 
} 
else { 
Toast.makeText(this,"\n A opçao de TERROR não está 
 selecionada.\n", Toast.LENGTH_LONG).show(); 
} 
String result = ""; 
result += "Terror check : "+ 
((CheckBox)findViewById(R.id.terror)).isChecked(); 
... 
Toast.makeText(this, result,Toast.LENGTH_LONG).show(); //ver próx. slide 
Veja abaixo como acessar os elementos de CheckBox: 
Atender evento click em um CheckBox ou RadioButton 
@Override 
protected void onCreate (Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 CheckBox chkbox = ( CheckBox ) findViewById( R.id.checkBox ); 
 final TextView txt = ( TextView ) findViewById( R.id.textView); 
 chkbox.setOnClickListener(new View.OnClickListener() { 
 @Override 
 public void onClick(View v) { 
 txt.setText("Boa esta promoção mesmo!"); 
 } 
 }); 
} 
Atender evento quando um CheckBox mudou de estado 
@Override 
protected void onCreate (Bundle savedInstanceState) { 
 super.onCreate(savedInstanceState); 
 setContentView(R.layout.activity_main); 
 CheckBox chkbox = ( CheckBox ) findViewById( R.id.checkBox); 
 final TextView txt2 = ( TextView ) findViewById( R.id.textView2); 
 chkbox.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() 
 { 
 @Override 
 public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) 
 { 
 if(isChecked) 
 txt2.setText("Mudou de opinião, que bom!"); 
 else 
 txt2.setText("Pense bem, não desista, esta promoção é boa!"); 
 } 
 }); 
} 
• Uma caixa de mensagem simples para dar avisos
ao usuário.
 
Janela Toast 
Toast toast = Toast.makeText(contexto, texto, duracao); 
toast.show(); 
Toast.makeText(contexto, texto, duracao).show(); 
ou 
Toast.makeText(this,"\n A opção de TERROR não está 
selecionada.\n",Toast.LENGTH_LONG).show(); 
Toast.makeText(view.getContext(),"\n A opção de TERROR não está 
selecionada.\n",Toast.LENGTH_LONG).show(); 
Exemplos 
Snackbar 
Uma caixa de mensagem simples para dar um retorno 
ao usuário. 
FloatingActionButton fab = (FloatingActionButton) findViewById(R.id.fab); 
fab.setOnClickListener(new View.OnClickListener() { 
@Override 
public void onClick(View view) { 
 Snackbar.make(view, "Opção futura enviar e-mail", Snackbar.LENGTH_LONG) 
 .setAction("Action", null).show(); 
} 
}); 
“Snackbars provide lightweight feedback about an operation. They show 
a brief message at the bottom of the screen on mobile and lower left on 
larger devices. Snackbars appear above all other elements on screen and 
only one can be displayed at a time. 
They automatically disappear after a timeout or after user interaction 
elsewhere on the screen…” 
https://developer.android.com/reference/android/support/design/widge
t/Snackbar.html 
“Floating action buttons are used for a special type of promoted 
action. They are distinguished by a circled icon floating above the 
UI…” 
https://developer.android.com/reference/android/support/design/widge
t/FloatingActionButton.html 
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/Snackbar.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
https://developer.android.com/reference/android/support/design/widget/FloatingActionButton.html
Exercícios 
1) Crie uma calculadora conforme o layoutabaixo.
Crie o método OnClick para cada botão, 
utilizando o conceito de classe anônima 
(método 2. descrito neste material). 
obj.setOnClickListener(new 
View.OnClickListener() { 
 public void onClick(View v) { 
 ...... 
 } 
}); 
Exercícios 
2) Crie uma calculadora conforme o layout abaixo.
Associe o método setOnClickListener(this) 
ao botão, em seguida crie o método 
onClick para avaliar qual opção dos 
radiobuttons foi selecionada e faça a 
respectiva operação (método 3. descrito 
neste material). 
. 
Exercícios 
3) Uma seguradora quer disponibilizar para seus clientes um app Android
com os formulários para solicitação de orçamento, crie uma Activity com
seis (6) arquivos de layouts, conforme descrito abaixo:
– Layout 1 (main): layout com seus dados NOME e RGM e uma imagem de um logotipo,
insira 6 botões nesse layout (Principal, Auto, Portáteis, Empresarial, Residencial e
Viagem), procure trabalhar os botões com imagem (atributo drawable)
– Layout 2 (Formulário de Cotação – Auto)
– Layout 3 (Formulário de Cotação - Equipamentos Portáteis)
– Layout 4 (Formulário de Cotação - Seguro Empresarial)
– Layout 5 (Formulário de Cotação - Seguro Residencial)
– Layout 6 (Formulário de Cotação - Seguro Viagem)
– Cada botão deverá chamar um método que mostrará o layout escolhido na tela, utilize
nesses métodos o setContentView e o respectivo layout.
– OBS: coloque os mesmos botões em todos os arquivos de layout.
• ■ 100 
Exercic103 
RGM: 1111111 
Fulano da Silva 
� ÜJ 
PRINCIPAL 
AUTO PORTÁTEIS 
A -ê 111 
EMPRESARIAL RESIDENCIAL VIAGEM 
•■ 100 
Exercic103 
Auto 
... ÜJ 
PRINCIPAL 
AUTO PORTÁTEIS 
A -ê 111 
EMPRESARIAL RESIDENCIAL VIAGEM 
• ■ 100 
Exercic103 
RESIDENCIAL 
� ÜJ 
PRINCIPAL 
AUTO PORTÁTEIS 
A ê 111 
EMPRESARIAL RESIDENCIAL VIAGEM 
•■ 100 
Exerc1c103 
PORTÁTEIS 
� [l:J 
PRINCIPAL 
AUTO PORl"ÁTeS 
A -ê 111 
EMPRESARIAL RESIDENCIAL VIAGEM 
•■ 100 
Exerc1cio3 
VIAGEM 
� 
PRINCIPAL 
AUTO PORTÁTEIS 
A -ê • 
EMPRESARIAL RESIDENCIAL VIAGEM 
• ■ 100 
Exercic103 
EMPRESARIAL 
� C'o 
PRINCIPAL 
AUTO PORTÁTEIS 
& -ê 111 
EMPAESAAIAL RESIDENCIAL VIAGEM 
public void openPortateis(View view) { //Evento click do button2. 
 //Outra estratégia para resolver este exercício poderia ser selecionar 
 //sempre o mesmo layout em activity_main.xml, alterar as cores de background 
 //de dois botões, alterar os textos dos TextView internos e, opcionalmente, 
 //alterar o título da Activity. Isto deverá ser feito em todos os botões, 
 //mas evitaria ter que criar seis layouts diferentes. 
 //Por exemplo, para o botão (button2) dos portáteis, colocaríamos esta lógica: 
 setContentView(R.layout.activity_main); 
 ((Button)findViewById(R.id.button0)).setBackgroundColor(Color.rgb(220,220,220)); 
 ((Button)findViewById(R.id.button2)).setBackgroundColor(Color.rgb(51,181,229)); 
 ((TextView)findViewById(R.id.textView1)).setText("Seguradora Lopes"); 
 ((TextView)findViewById(R.id.textView2)).setText("PORTÁTEIS"); 
 setTitle("Seguradora - PORTÁTEIS"); //para alterar o título da Activity 
} 
Outra estratégia para resolver este exercício 
Bibliografia sugerida sobre Android 
• ANDROID. Android Developers. Disponível em http://developer.android.com.
• LECHETA, RICARDO R. Google Android, Aprenda a criar aplicações para
dispositivos móveis com o Android SDK. São Paulo: Novatec, 2010.
• MEDNIEKS, Z. et. al. Desenvolvimento de Aplicações Android. São Paulo:
Novatec, 2009.
• LEE, Wei-Meng. Introdução ao Desenvolvimento de Aplicativos para o Android.
Rio de Janeiro: Editora Ciência Moderna, 2011

Continue navegando