Toasts et messages d'alerte

 

Android, comme toutes les interfaces graphiques qui existent, peut afficher des messages d'alerte ou d'information à l'utilisateur.

Il existe deux solutions pour cela:

  • Les toasts
  • et les messages d'alerte.

 

Les toasts

A considérer comme un message d'information, d'avertissement. Ce message est dit transitoire car il ne nécessite aucune intervention de la part de l'utilisateur et ne prend même pas le focus: dans le cas où l'utilisateur serait en train d'effectuer une saisie dans un champ, la saisie continuera dans ce même champ durant tout le temps de l'affichage du message. Enfin, le message disparait de lui même.

 

Image non trouvée !Aucune intervention de l'utilisateur n'est autorisée dans ou plutôt sur un toast. Donc si vous voulez mettre des boutons, ... n'y comptez pas, ou alors orientez vous vers une dialogue !

Image non trouvée !Comme l'utilisateur n'a pas intervenir, il n'est pas certain que celui-ci voit ce message. Il ne faudra donc utiliser les toasts que pour afficher des messages qui ont peu d'importance (pour indiquer qu'un traitement est terminé, ...) !

 

Le toast de base

Le toast de base a besoin de 3 paramètres: Généralement le contexte de notre application, le texte à afficher et enfin la durée d'affichage (La durée pourra prendre deux valeurs: Toast.LENGTH_SHORT ou Toast.LENGTH_LONG):

public static Toast makeText (Context context, CharSequence text, int duration)

Toast toast = Toast.makeText(getApplicationContext(), "Hello toast!", Toast.LENGTH_SHORT);
toast.show();

(repris à la base de http://developer.android.com/guide/topics/ui/notifiers/toasts.html, il n'y a pas grand chose à dire là dessus en fait !)

La méthode makeText construit une instance de Toast avec ces paramètres que vous n'aurez plus qu'à afficher via la méthode show()

 

Il est possible d'utiliser makeText avec un identifiant sur le texte à afficher en passant ainsi par une ressource texte:

public static Toast makeText (Context context, int resId, int duration)

Avec le context est qui celui de l'activité en cours ou celui passé en paramètre (par exemple dans les broadcast receivers).

Avec resId = R.string.Nom_resource_string

Le toast personnalisé

Vouss pourrez éguailler votre Toast en utilisant une View. Dans ce cas, construisez votre View via un fichier XML ou par code et utilisez la méthode setView() de votre instance de toast.

Là encore, pas grand chose à ajouter, voici donc un exemple très fortement inspiré de http://developer.android.com/guide/topics/ui/notifiers/toasts.html

Un fichier toast_layout.xml

 

Positionner un toast

Comme pour les widgets, un toast a un point d'attraction (qui est vers le bas de l'écran et centré horizontalement par défaut). Vous pouvez cependant le personnaliser en utilisant la méthode setGravity()

setGravity(int gravity, int offset x, int offset y)

Par exemple: toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);

 

Autres

Il existe d'autres méthodes, mais vous n'en aurez à priori pas besoin:

Récupération de la gravité, des offsets x et y ou encore la durée d'affichage. Voire la possibilité de faire disparaître immédiatement le toast (au cas où le message n'aurait plus lieu d'être avant sa disparition automatique) via la méthode cancel().

 

Les messages d'alerte

Les messages d'alerte sont en fait des dialogues de type modale, ce qui signifie que l'utilisateur doit répondre à la dialogue pour pouvoir continuer.

Ce type de message est donc intéressant pour afficher à l'utilisateur des informations importantes dont il doit impérativement prendre connaissance.

Pour créer un message d'alerte, vous passerez par une instance de la classe AlertDialog.Builder (pattern builder):

AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());

 

Les méthodes à utiliser seront:

setTitle pour définir le titre: setTitle(CharSequence title) ou setTitle(int titleId) ou titleId est un id de ressource.

setIcon pour définir éventuellement l'icone à afficher

setMessage pour préciser le message à afficher dans la dialogue:setMessage(CharSequence message) ou setMessage(int messageId)

 

Enfin l'un des boutons suivant (ou tous, c'est vous qui voyez) setPositiveButton(), setNeutralButton() et setNegativeButton() pour préciser les boutons que l'on veut afficher dans le message:

setPositiveButton(CharSequence text, DialogInterface.OnClickListener listener) ou

setPositiveButton(int textId, DialogInterface.OnClickListener listener)

les paramètres étant identiques pour les deux autres boutons...

 

Reste alors à afficher le message en utilisant la classe AlertDialog.

Pour cela il suffit de demander à l'instance AlertDialog.Builder de créer une instance AlertDialog tel que nous venons de le définir:

AlertDialog alertDialog = builderAlert.create();

Puis de l'afficher via la métode show():

alertDialog.show();

 

Complément sur les messages d'alerte

Il sera possible de mettre des items, des checkboxs, des radio-set ou encore un edit text:

Exemple d'items:

final String[] items = {"item1","item2","item3"};

alert.setItems(items, new DialogInterface.OnClickListener(){ public void onClick(DialogInterface dialog, int idx) {
Toast.makeText(MainActivity.this, String.format("%s Selectionné", items[idx]), Toast.LENGTH_LONG).show(); }});

 

Exemple de checkbox - nommé SingleChoiceItems sous android:

alert.setSingleChoiceItems(items,alertCheckedItem,new DialogInterface.OnClickListener(){

public void onClick(DialogInterface dialog, int which) {
Toast.makeText(MainActivity.this, String.format("%s Selectionné", items[which]), Toast.LENGTH_LONG).show();
alertCheckedItem = which;
}});

avec alertCheckedItem de type int déclaré en global pour être accessible de partout...

 

Exemple de radio-set - nommé MultiChoiceItems sous android:

alert.setMultiChoiceItems(items, alertCheckedItem, new DialogInterface.OnMultiChoiceClickListener(){

public void onClick(DialogInterface dialog, int which, boolean isChecked) {
alertCheckedItem[which] = isChecked;
}});

Et enfin un EditText, dont voici un exemple:

 

Le fichier res/layout/alert.xml

res/value/activity_main.xml

res/value/strings.xml

 

Un exemple général

Voici un exemple qui regroupe l'utilisation des messages d'alertes et des Toasts.

Un premier Toast affiche que l'on fait des essais.

Un message d'alerte s'affiche, et propose les 3 boutons Valider, Annuler et Fermer. On notera au passage que l'ordre de déclaration des boutons importe peu, puisqu'au final, le système affichera toujours le bouton "positif", puis le "negatif" et enfin le "neutre". Enfin, deux solutions pour passer le context à Toast.

 

Autre solution

Image non trouvée !Il existe d'autres cas pour alerter ou informer l'utilisateur: