Recherche…


Introduction

Un toast fournit des commentaires simples sur une opération dans une petite fenêtre contextuelle et disparaît automatiquement après un délai d'attente. Il ne remplit que la quantité d'espace requise pour le message et l'activité en cours reste visible et interactive.

Syntaxe

  • Toast makeText (Contexte contextuel, texte CharSequence, durée int)
  • Toast makeText (Contexte contextuel, int resId, int duration)
  • void setGravity (int gravity, int xOffset, int yOffset)
  • annuler le spectacle ()

Paramètres

Paramètre Détails
le contexte Le contexte d'affichage de votre Toast dans. this est couramment utilisé dans une activité et getActivity() est couramment utilisé dans un fragment.
texte Un CharSequence qui spécifie quel texte sera affiché dans le Toast. Tout objet qui implémente CharSequence peut être utilisé, y compris une chaîne
resId Un ID de ressource pouvant être utilisé pour fournir une chaîne de ressources à afficher dans le Toast
durée Drapeau entier représentant la durée d'affichage du Toast. Les options sont Toast.LENGTH_SHORT et Toast.LENGTH_LONG
la gravité Entier spécifiant la position ou "gravité" du pain grillé. Voir les options ici
xOffset Spécifie le décalage horizontal pour la position Toast
yOffset Spécifie le décalage vertical pour la position Toast

Remarques

Un toast fournit des commentaires simples sur une opération dans une petite fenêtre contextuelle. Il ne remplit que la quantité d'espace requise pour le message et l'activité en cours reste visible et interactive.

SnackBar est une alternative plus récente à Toast. SnackBar offre un style visuel mis à jour et permet à l'utilisateur de supprimer le message ou de prendre des mesures supplémentaires. Voir la documentation SnackBar pour plus de détails.

Documentation officielle:

https://developer.android.com/reference/android/widget/Toast.html

Définir la position d'un pain grillé

Une notification de toast standard apparaît en bas de l'écran, alignée au centre horizontal. Vous pouvez changer cette position avec setGravity(int, int, int) . Cela accepte trois paramètres: une constante de gravité, un décalage de la position x et un décalage de la position y.

Par exemple, si vous décidez que le toast doit apparaître dans le coin supérieur gauche, vous pouvez définir la gravité comme ceci:

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

Afficher un message de pain grillé

Dans Android, un Toast est un élément d'interface utilisateur simple qui peut être utilisé pour donner un retour contextuel à un utilisateur.

Pour afficher un simple message Toast, nous pouvons procéder comme suit.

// Declare the parameters to use for the Toast

Context context = getApplicationContext(); 
// in an Activity, you may also use "this"
// in a fragment, you can use getActivity()

CharSequence message = "I'm an Android Toast!";
int duration = Toast.LENGTH_LONG; // Toast.LENGTH_SHORT is the other option

// Create the Toast object, and show it!
Toast myToast = Toast.makeText(context, message, duration);
myToast.show();

Ou, pour afficher un toast en ligne, sans conserver l'objet Toast, vous pouvez:

Toast.makeText(context, "Ding! Your Toast is ready.", Toast.LENGTH_SHORT).show();

IMPORTANT: assurez-vous que la méthode show() est appelée à partir du thread d'interface utilisateur. Si vous essayez d'afficher un Toast partir d'un thread différent, vous pouvez par exemple utiliser la méthode runOnUiThread d'une Activity .

Ne pas le faire, c'est-à-dire essayer de modifier l'interface utilisateur en créant un Toast, lancera une RuntimeException qui ressemblera à ceci:

java.lang.RuntimeException: Can't create handler inside thread that has not called Looper.prepare()

La manière la plus simple de gérer cette exception est d'utiliser simplement runOnUiThread: la syntaxe est indiquée ci-dessous.

   runOnUiThread(new Runnable() {
        @Override
        public void run() {
            // Your code here
        }
    });

Création d'un toast personnalisé

Si vous ne souhaitez pas utiliser la vue Toast par défaut, vous pouvez fournir la vôtre à l'aide de la setView(View) sur un objet Toast .

Tout d'abord, créez la disposition XML que vous souhaitez utiliser dans votre Toast.

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/toast_layout_root"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:padding="8dp"
    android:background="#111">

    <TextView android:id="@+id/title"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFF"/>

    <TextView android:id="@+id/description"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:textColor="#FFF"/>

</LinearLayout>

Ensuite, lors de la création de votre Toast, gonflez votre vue personnalisée à partir de XML et appelez setView

// Inflate the custom view from XML
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.custom_toast_layout,
                               (ViewGroup) findViewById(R.id.toast_layout_root));

// Set the title and description TextViews from our custom layout
TextView title = (TextView) layout.findViewById(R.id.title);
title.setText("Toast Title");

TextView description = (TextView) layout.findViewById(R.id.description);
description.setText("Toast Description");

// Create and show the Toast object

Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.CENTER, 0, 0);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();

Fil de manière sécurisée pour afficher Toast (Application Wide)

public class MainApplication extends Application {
    
    private static Context context; //application context

    private Handler mainThreadHandler;
    private Toast toast;

    public Handler getMainThreadHandler() {
        if (mainThreadHandler == null) {
            mainThreadHandler = new Handler(Looper.getMainLooper());
        }
        return mainThreadHandler;
    }

    @Override public void onCreate() {
        super.onCreate();
        context = this;
    }
       
    public static MainApplication getApp(){
        return (MainApplication) context;
    }

    /**
     * Thread safe way of displaying toast.
     * @param message
     * @param duration
     */
    public void showToast(final String message, final int duration) {
        getMainThreadHandler().post(new Runnable() {
            @Override
            public void run() {
                if (!TextUtils.isEmpty(message)) {
                    if (toast != null) {
                        toast.cancel(); //dismiss current toast if visible
                        toast.setText(message);
                    } else {
                        toast = Toast.makeText(App.this, message, duration);
                    }
                    toast.show();
                }
            }
        });
    }

N'oubliez pas d'ajouter MainApplication au manifest .

Appelez-le maintenant depuis n'importe quel thread pour afficher un message de toast.

MainApplication.getApp().showToast("Some message", Toast.LENGTH_LONG);

Afficher le message Toast ci-dessus

Par défaut, Android affichera les messages Toast en bas de l'écran même si le clavier est affiché. Cela affichera un message Toast juste au-dessus du clavier.

public void showMessage(final String message, final int length) {
    View root = findViewById(android.R.id.content);
    Toast toast = Toast.makeText(this, message, length);
    int yOffset = Math.max(0, root.getHeight() - toast.getYOffset());
    toast.setGravity(Gravity.TOP | Gravity.CENTER_HORIZONTAL, 0, yOffset);
    toast.show();
}

Un moyen sûr d'afficher un message Toast (pour AsyncTask)

Si vous ne souhaitez pas étendre l'application et garder vos messages de toast sécurisés, assurez-vous de les afficher dans la section post-exécution de vos AsyncTasks.

public class MyAsyncTask extends AsyncTask <Void, Void, Void> {

    @Override
    protected Void doInBackground(Void... params) {
        // Do your background work here
    }

    @Override
    protected void onPostExecute(Void aVoid) {
        // Show toast messages here
        Toast.makeText(context, "Ding! Your Toast is ready.",   Toast.LENGTH_SHORT).show();
    }
    
}


Modified text is an extract of the original Stack Overflow Documentation
Sous licence CC BY-SA 3.0
Non affilié à Stack Overflow