Android - tratamento de eventos
Events are a useful way to collect data about a user's interaction with interactive components of Applications.Como o pressionamento de botões ou toque na tela, etc. A estrutura do Android mantém uma fila de eventos como primeiro a entrar, primeiro a sair (FIFO). Você pode capturar esses eventos em seu programa e tomar as medidas adequadas de acordo com os requisitos.
Existem três conceitos a seguir relacionados ao gerenciamento de eventos Android -
Event Listeners- Um ouvinte de evento é uma interface na classe View que contém um único método de retorno de chamada. Esses métodos serão chamados pela estrutura Android quando a Visualização na qual o ouvinte foi registrado for acionada pela interação do usuário com o item na IU.
Event Listeners Registration - Registro de evento é o processo pelo qual um manipulador de eventos é registrado com um listener de eventos para que o manipulador seja chamado quando o listener de eventos dispara o evento.
Event Handlers - Quando ocorre um evento e registramos um ouvinte de evento para o evento, o ouvinte de evento chama os Manipuladores de Eventos, que é o método que realmente trata o evento.
Ouvintes e manipuladores de eventos
Manipulador de Eventos | Listener de eventos e descrição |
---|---|
onClick () | OnClickListener() Isso é chamado quando o usuário clica ou toca ou focaliza qualquer widget, como botão, texto, imagem, etc. Você usará o manipulador de eventos onClick () para lidar com esse evento. |
onLongClick () | OnLongClickListener() Isso é chamado quando o usuário clica ou toca ou focaliza qualquer widget como botão, texto, imagem etc. por um ou mais segundos. Você usará o manipulador de eventos onLongClick () para lidar com esse evento. |
onFocusChange () | OnFocusChangeListener() Isso é chamado quando o widget perde seu foco, ou seja. o usuário sai do item de visualização. Você usará o manipulador de eventos onFocusChange () para lidar com esse evento. |
onKey () | OnFocusChangeListener() Isso é chamado quando o usuário está focado no item e pressiona ou solta uma tecla de hardware no dispositivo. Você usará o manipulador de eventos onKey () para lidar com esse evento. |
onTouch () | OnTouchListener() Isso é chamado quando o usuário pressiona a tecla, solta a tecla ou qualquer gesto de movimento na tela. Você usará o manipulador de eventos onTouch () para lidar com esse evento. |
onMenuItemClick () | OnMenuItemClickListener() Isso é chamado quando o usuário seleciona um item de menu. Você usará o manipulador de eventos onMenuItemClick () para lidar com esse evento. |
onCreateContextMenu () | onCreateContextMenuItemListener() É chamado quando o menu de contexto está sendo construído (como resultado de um "clique longo prolongado) |
Existem muitos outros ouvintes de eventos disponíveis como parte de Viewclasse como OnHoverListener, OnDragListener etc, que pode ser necessária para seu aplicativo. Portanto, recomendo consultar a documentação oficial para o desenvolvimento de aplicativos Android, caso você vá desenvolver aplicativos sofisticados.
Registro de ouvintes de eventos
Registro de evento é o processo pelo qual um Event Handler é registrado com um Event Listener para que o manipulador seja chamado quando o Event Listener dispara o evento. Embora existam várias maneiras complicadas de registrar seu ouvinte de evento para qualquer evento, vou listar apenas as 3 maneiras principais, das quais você pode usar qualquer uma delas com base na situação.
Usando uma classe interna anônima
A classe Activity implementa a interface Listener.
Usando o arquivo de layout activity_main.xml para especificar o manipulador de eventos diretamente.
A seção abaixo irá fornecer exemplos detalhados em todos os três cenários -
Modo de toque
Os usuários podem interagir com seus dispositivos usando teclas ou botões de hardware ou tocando na tela. Tocar na tela coloca o dispositivo no modo de toque. O usuário pode interagir com ele tocando nos botões virtuais na tela, imagens, etc. Você pode verificar se o dispositivo está no modo de toque chamando o método isInTouchMode () da classe View.
Foco
Uma visualização ou widget geralmente é destacado ou exibe um cursor piscando quando está em foco. Isso indica que está pronto para aceitar a entrada do usuário.
isFocusable() - retorna verdadeiro ou falso
isFocusableInTouchMode()- verifica se a visualização pode ser focalizada no modo de toque. (A visualização pode ser focalizada ao usar uma chave de hardware, mas não quando o dispositivo está no modo de toque)
android:foucsUp="@=id/button_l"
onTouchEvent ()
public boolean onTouchEvent(motionEvent event){
switch(event.getAction()){
case TOUCH_DOWN:
Toast.makeText(this,"you have clicked down Touch button",Toast.LENTH_LONG).show();
break();
case TOUCH_UP:
Toast.makeText(this,"you have clicked up touch button",Toast.LENTH_LONG).show();
break;
case TOUCH_MOVE:
Toast.makeText(this,"you have clicked move touch button"Toast.LENTH_LONG).show();
break;
}
return super.onTouchEvent(event) ;
}
Exemplos de tratamento de eventos
Registro de ouvintes de eventos usando uma classe interna anônima
Aqui, você criará uma implementação anônima do ouvinte e será útil se cada classe for aplicada a um único controle apenas e você tiver a vantagem de passar argumentos para o manipulador de eventos. Nesta abordagem, os métodos de tratamento de eventos podem acessar dados privados de Activity. Nenhuma referência é necessária para chamar a atividade.
Mas se você aplicou o manipulador a mais de um controle, você teria que recortar e colar o código do manipulador e se o código do manipulador for longo, isso torna o código mais difícil de manter.
A seguir estão as etapas simples para mostrar como usaremos uma classe Listener separada para registrar e capturar o evento de clique. De maneira semelhante, você pode implementar seu ouvinte para qualquer outro tipo de evento necessário.
Degrau | Descrição |
---|---|
1 | Você usará o Android Studio IDE para criar um aplicativo Android e nomeá-lo como myapplication em um pacote com.example.myapplication, conforme explicado no capítulo Exemplo Hello World . |
2 | Modifique o arquivo src / MainActivity.java para adicionar ouvintes e manipuladores de eventos de clique para os dois botões definidos. |
3 | Modifique o conteúdo de detecção do arquivo res / layout / activity_main.xml para incluir controles de IU do Android. |
4 | Não há necessidade de declarar constantes de string padrão. O Android Studio cuida das constantes padrão. |
5 | Execute o aplicativo para iniciar o emulador Android e verifique o resultado das alterações feitas no aplicativo. |
A seguir está o conteúdo do arquivo de atividade principal modificado src/com.example.myapplication/MainActivity.java. Este arquivo pode incluir cada um dos métodos fundamentais do ciclo de vida.
package com.example.myapplication;
import android.app.ProgressDialog;
import android.os.Bundle;
import android.support.v7.app.ActionBarActivity;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends ActionBarActivity {
private ProgressDialog progress;
Button b1,b2;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
progress = new ProgressDialog(this);
b1=(Button)findViewById(R.id.button);
b2=(Button)findViewById(R.id.button2);
b1.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView txtView = (TextView) findViewById(R.id.textView);
txtView.setTextSize(25);
}
});
b2.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
TextView txtView = (TextView) findViewById(R.id.textView);
txtView.setTextSize(55);
}
});
}
}
A seguir estará o conteúdo de res/layout/activity_main.xml arquivo -
Aqui abc indica sobre o logotipo do tutorialspoint
<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="@dimen/activity_vertical_margin"
tools:context=".MainActivity">
<TextView
android:id="@+id/textView1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Event Handling "
android:layout_alignParentTop="true"
android:layout_centerHorizontal="true"
android:textSize="30dp"/>
<TextView
android:id="@+id/textView2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Tutorials point "
android:textColor="#ff87ff09"
android:textSize="30dp"
android:layout_above="@+id/imageButton"
android:layout_centerHorizontal="true"
android:layout_marginBottom="40dp" />
<ImageButton
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/imageButton"
android:src="@drawable/abc"
android:layout_centerVertical="true"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Small font"
android:id="@+id/button"
android:layout_below="@+id/imageButton"
android:layout_centerHorizontal="true" />
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Large Font"
android:id="@+id/button2"
android:layout_below="@+id/button"
android:layout_alignRight="@+id/button"
android:layout_alignEnd="@+id/button" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:id="@+id/textView"
android:layout_below="@+id/button2"
android:layout_centerHorizontal="true"
android:textSize="25dp" />
</RelativeLayout>
A seguir estará o conteúdo de res/values/strings.xml para definir duas novas constantes -
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">myapplication</string>
</resources>
A seguir está o conteúdo padrão de AndroidManifest.xml -
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.example.myapplication" >
<application
android:allowBackup="true"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name"
android:theme="@style/AppTheme" >
<activity
android:name="com.example.myapplication.MainActivity"
android:label="@string/app_name" >
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
</application>
</manifest>
Vamos tentar executar o seu myapplicationinscrição. Suponho que você tenha criado o seuAVDao fazer a configuração do ambiente. Para executar o aplicativo no Android Studio, abra um dos arquivos de atividade do seu projeto e clique no ícone Executar na barra de ferramentas. O Android Studio instala o aplicativo em seu AVD e o inicia e se tudo estiver bem com sua configuração e aplicativo, ele será exibido a seguir a janela do emulador -
Agora você tenta clicar em dois botões, um por um, e verá a fonte do Hello World o texto mudará, o que acontece porque o método manipulador de eventos de clique registrado está sendo chamado para cada evento de clique.
Exercício
Recomendarei tentar escrever diferentes manipuladores de eventos para diferentes tipos de eventos e entender a diferença exata em diferentes tipos de eventos e sua manipulação. Os eventos relacionados aos widgets de menu, spinner e selecionadores são um pouco diferentes, mas também se baseiam nos mesmos conceitos explicados acima.