Les différentes méthodes d'utilisation des Toast sous Android
- Création d'un Toast basique
Pour créer un toast, on utilise la méthode statique makeText() qui nécessite trois paramètres :
- Le contexte de l'applicasion (
getApplicationContext()outhis) - Le message à afficher (soit une chaîne directe, soit un identifiant de ressource
R.string) - La durée d'affichage (
Toast.LENGTH_LONG,Toast.LENGTH_SHORTou une valeur en millisecondes)
Toast notification = Toast.makeText(getApplicationContext(), "Notification affichée", Toast.LENGTH_SHORT);
notification.show();
Attention : L'appel à la méthode show() est obligatoire pour que le toast soit visible à l'écran.
- Personnalisation de la position du Toast
La méthode setGravity() permet de positionner le toast où vous le souhaitez sur l'écran. Elle accepte jusqu'à trois paramètres :
- Le premier définit l'ancrage (ex:
Gravity.CENTER,Gravity.TOP,Gravity.BOTTOM) - Le deuxième représente le décalage horizontal (positif vers la droite, négatif vers la gauche)
- Le troisième correspond au décalage vertical
notification.setGravity(Gravity.TOP | Gravity.CENTER, 0, 150);
notification.show();
Si les valeurs de décalage dépassent les limites de l'écran, le toast s'affichera contre le bord correspondant.
- Insertion d'une image dans le Toast
Il est possible d'enrichir un toast en y ajoutant une image. Pour cela, il faut manipuler la vue racine du toast :
Toast toastAvecImage = Toast.makeText(getApplicationContext(), "Toast avec illustration", Toast.LENGTH_LONG);
toastAvecImage.setGravity(Gravity.CENTER, 0, 0);
ImageView vueImage = new ImageView(getApplicationContext());
vueImage.setImageResource(R.drawable.ic_launcher);
LinearLayout vueToast = (LinearLayout) toastAvecImage.getView();
vueToast.setOrientation(LinearLayout.HORIZONTAL);
vueToast.addView(vueImage, 0);
toastAvecImage.show();
- Création d'un Toast entièrement personnalisé
Pour un contrôle total sur l'apparence, on peut créer un layout personnalisé via un fichier XML :
LayoutInflater inflateurg = getLayoutInflater();
Vue vuePerso = inflateurg.inflate(R.layout.toast_perso, (ViewGroup) findViewById(R.id.conteneurToast));
ImageView img = (ImageView) vuePerso.findViewById(R.id.imageToast);
img.setImageResource(R.drawable.ic_ custom);
TextView titre = (TextView) vuePerso.findViewById(R.id.titreToast);
titre.setText("Information");
TextView message = (TextView) vuePerso.findViewById(R.id.messageToast);
message.setText("Contenu personnalisé");
Toast toastPerso = new Toast(getApplicationContext());
toastPerso.setGravity(Gravity.CENTER, 0, 0);
toastPerso.setDuration(Toast.LENGTH_LONG);
toastPerso.setView(vuePerso);
toastPerso.show();
- Affichage d'un Toast depuis un thread secondaire
Android exige que les manipulations d'interface utilisateur s'effectuent sur le thread principal. Pour afficher un toast depuis un autre thread, on utilise un Handler :
private Handler gestionnaire = new Handler(Looper.getMainLooper());
// Méthode à appeler depuis le thread principal
private void afficherNotification() {
Toast.makeText(getApplicationContext(), "Toast depuis un thread secondaire", Toast.LENGTH_SHORT).show();
}
// Depuis le thread principal uniquement
gestionnaire.post(new Runnable() {
@Override
public void run() {
afficherNotification();
}
});
// Alternative avec sendMessage
private Handler handlerUI = new Handler() {
@Override
public void handleMessage(Message msg) {
if (msg.what == 1) {
afficherNotification();
}
}
};
// Depuis le thread secondaire
new Thread(new Runnable() {
@Override
public void run() {
handlerUI.sendEmptyMessage(1);
}
}).start();