Android - Gestion des événements

Events are a useful way to collect data about a user's interaction with interactive components of Applications.Comme les pressions sur les boutons ou l'écran tactile, etc. Le cadre Android maintient une file d'attente d'événements comme base du premier entré, premier sorti (FIFO). Vous pouvez capturer ces événements dans votre programme et prendre les mesures appropriées selon les exigences.

Il existe trois concepts suivants liés à la gestion des événements Android -

  • Event Listeners- Un écouteur d'événements est une interface de la classe View qui contient une seule méthode de rappel. Ces méthodes seront appelées par le framework Android lorsque la vue dans laquelle l'écouteur a été enregistré est déclenchée par l'interaction de l'utilisateur avec l'élément dans l'interface utilisateur.

  • Event Listeners Registration - L'inscription d'événement est le processus par lequel un gestionnaire d'événements est enregistré auprès d'un écouteur d'événements afin que le gestionnaire soit appelé lorsque l'écouteur d'événements déclenche l'événement.

  • Event Handlers - Lorsqu'un événement se produit et que nous avons enregistré un écouteur d'événement pour l'événement, l'écouteur d'événements appelle les gestionnaires d'événements, qui est la méthode qui gère réellement l'événement.

Écouteurs d'événements et gestionnaires d'événements

Gestionnaire d'événements Écouteur d'événement et description
sur clic()

OnClickListener()

Ceci est appelé lorsque l'utilisateur clique ou touche ou se concentre sur un widget comme un bouton, un texte, une image, etc. Vous utiliserez le gestionnaire d'événements onClick () pour gérer un tel événement.

onLongClick ()

OnLongClickListener()

Ceci est appelé lorsque l'utilisateur clique ou touche ou se concentre sur un widget comme un bouton, du texte, une image, etc. pendant une ou plusieurs secondes. Vous utiliserez le gestionnaire d'événements onLongClick () pour gérer un tel événement.

onFocusChange ()

OnFocusChangeListener()

Ceci est appelé lorsque le widget perd son focus ie. l'utilisateur s'éloigne de l'élément d'affichage. Vous utiliserez le gestionnaire d'événements onFocusChange () pour gérer un tel événement.

onKey ()

OnFocusChangeListener()

Ceci est appelé lorsque l'utilisateur se concentre sur l'élément et appuie ou relâche une touche matérielle sur l'appareil. Vous utiliserez le gestionnaire d'événements onKey () pour gérer un tel événement.

onTouch ()

OnTouchListener()

Ceci est appelé lorsque l'utilisateur appuie sur la touche, relâche la touche ou tout mouvement de mouvement sur l'écran. Vous utiliserez le gestionnaire d'événements onTouch () pour gérer un tel événement.

onMenuItemClick ()

OnMenuItemClickListener()

Ceci est appelé lorsque l'utilisateur sélectionne un élément de menu. Vous utiliserez le gestionnaire d'événements onMenuItemClick () pour gérer un tel événement.

onCreateContextMenu ()

onCreateContextMenuItemListener()

Ceci est appelé lorsque le menu contextuel est en cours de construction (suite à un clic prolongé "long")

De nombreux autres écouteurs d'événements sont disponibles dans le cadre de Viewclasse comme OnHoverListener, OnDragListener, etc. qui peuvent être nécessaires pour votre application. Je recommande donc de consulter la documentation officielle pour le développement d'applications Android au cas où vous allez développer des applications sophistiquées.

Inscription des auditeurs d'événements

L'inscription d'événement est le processus par lequel un gestionnaire d'événement est enregistré avec un écouteur d'événement afin que le gestionnaire soit appelé lorsque l'écouteur d'événement déclenche l'événement. Bien qu'il existe plusieurs façons délicates d'enregistrer votre auditeur d'événement pour n'importe quel événement, je ne vais énumérer que les 3 meilleures façons, parmi lesquelles vous pouvez utiliser l'une d'entre elles en fonction de la situation.

  • Utilisation d'une classe interne anonyme

  • La classe Activity implémente l'interface Listener.

  • Utilisation du fichier de mise en page activity_main.xml pour spécifier directement le gestionnaire d'événements.

La section ci-dessous vous fournira des exemples détaillés sur les trois scénarios -

Mode tactile

Les utilisateurs peuvent interagir avec leurs appareils en utilisant des touches ou des boutons matériels ou en touchant l'écran. Toucher l'écran met l'appareil en mode tactile. L'utilisateur peut ensuite interagir avec lui en touchant les boutons virtuels à l'écran, les images, etc. Vous pouvez vérifier si l'appareil est en mode tactile en appelant la méthode isInTouchMode () de la classe View.

Concentrer

Une vue ou un widget est généralement mis en surbrillance ou affiche un curseur clignotant lorsqu'il est au point. Cela indique qu'il est prêt à accepter les entrées de l'utilisateur.

  • isFocusable() - il retourne vrai ou faux

  • isFocusableInTouchMode()- vérifie si la vue peut être mise au point en mode tactile. (Une vue peut être mise au point lors de l'utilisation d'une clé matérielle mais pas lorsque l'appareil est en mode tactile)

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) ;
}

Exemples de gestion d'événements

Inscription des écouteurs d'événements à l'aide d'une classe interne anonyme

Ici, vous allez créer une implémentation anonyme de l'écouteur et sera utile si chaque classe est appliquée à un seul contrôle et que vous avez l'avantage de passer des arguments au gestionnaire d'événements. Dans cette approche, les méthodes de gestion d'événements peuvent accéder aux données privées d'Activity. Aucune référence n'est nécessaire pour appeler à Activity.

Mais si vous avez appliqué le gestionnaire à plusieurs contrôles, vous devrez couper et coller le code du gestionnaire et si le code du gestionnaire est long, cela rend le code plus difficile à maintenir.

Voici les étapes simples pour montrer comment nous utiliserons une classe d'écouteur distincte pour enregistrer et capturer l'événement de clic. De la même manière, vous pouvez implémenter votre écouteur pour tout autre type d'événement requis.

Étape La description
1 Vous utiliserez l'IDE de studio Android pour créer une application Android et la nommerez myapplication sous un package com.example.myapplication comme expliqué dans le chapitre Exemple de Hello World .
2 Modifiez le fichier src / MainActivity.java pour ajouter des écouteurs et des gestionnaires d'événements de clic pour les deux boutons définis.
3 Modifiez le contenu Detault du fichier res / layout / activity_main.xml pour inclure les contrôles de l'interface utilisateur Android.
4 Pas besoin de déclarer les constantes de chaîne par défaut, Android Studio prend soin des constantes par défaut.
5 Exécutez l'application pour lancer l'émulateur Android et vérifier le résultat des modifications apportées à l'application.

Voici le contenu du fichier d'activité principal modifié src/com.example.myapplication/MainActivity.java. Ce fichier peut inclure chacune des méthodes fondamentales du cycle de vie.

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);
         }
      });
   }
}

Voici le contenu de res/layout/activity_main.xml fichier -

Ici abc indique le logo 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>

Voici le contenu de res/values/strings.xml pour définir deux nouvelles constantes -

<?xml version="1.0" encoding="utf-8"?>
<resources>
   <string name="app_name">myapplication</string>
</resources>

Voici le contenu par défaut 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>

Essayons d'exécuter votre myapplicationapplication. Je suppose que vous avez créé votreAVDlors de la configuration de l'environnement. Pour exécuter l'application à partir d'Android Studio, ouvrez l'un des fichiers d'activité de votre projet et cliquez sur l' icône Exécuter dans la barre d'outils. Android Studio installe l'application sur votre AVD et la démarre et si tout va bien avec votre configuration et votre application, elle affichera la fenêtre Emulator suivante -

Maintenant, vous essayez de cliquer sur deux boutons, un par un et vous verrez cette police du Hello World le texte changera, ce qui se produit car la méthode de gestionnaire d'événements de clic enregistrée est appelée pour chaque événement de clic.

Exercice

Je recommanderai d'essayer d'écrire différents gestionnaires d'événements pour différents types d'événements et de comprendre la différence exacte entre les différents types d'événements et leur gestion. Les événements liés aux widgets de menu, de spinner et de sélecteur sont peu différents mais ils sont également basés sur les mêmes concepts que ceux expliqués ci-dessus.