Présentation des notifications toast

Un toast est une information succincte relative à une opération, qui s'affiche dans une petite fenêtre pop-up. La place occupée est ajustée à la taille du message, laissant ainsi l'activité en cours visible et interactive. Le toast disparaît automatiquement après un certain délai.

Par exemple, si vous cliquez sur Envoyer dans un e-mail, un toast s'affiche et indique "Sending message" (Envoi du message), comme dans la capture d'écran ci-dessous :

Si le message d'état requiert une réponse de l'utilisateur, utilisez plutôt une notification.

Les bases

Commencez par instancier un objet Toast grâce à l'une des méthodes makeText(). La méthode utilisée nécessite trois paramètres : l'application Context, le message textuel et la durée du toast. Vous obtiendrez alors un objet Toast correctement initialisé. Vous pouvez afficher le toast grâce à show(), comme dans l'exemple suivant :

Kotlin

    val text = "Hello toast!"
    val duration = Toast.LENGTH_SHORT

    val toast = Toast.makeText(applicationContext, text, duration)
    toast.show()
    

Java

    Context context = getApplicationContext();
    CharSequence text = "Hello toast!";
    int duration = Toast.LENGTH_SHORT;

    Toast toast = Toast.makeText(context, text, duration);
    toast.show();
    

Dans cet exemple, vous avez tout ce qu'il vous faut pour créer la plupart des toasts. Il est rare que d'autres éléments soient nécessaires. Toutefois, vous avez la possibilité de modifier la position du toast, voire même d'utiliser votre propre mise en page au lieu d'un simple message textuel. Dans les sections suivantes, vous trouverez la description des méthodes à employer.

Vous pouvez également relier vos méthodes et ainsi éviter de tout attacher à l'objet Toast, comme ceci :

Kotlin

    Toast.makeText(context, text, duration).show()
    

Java

    Toast.makeText(context, text, duration).show();
    

Positionner votre toast

Habituellement, un toast s'affiche en bas de l'écran et est centré horizontalement. Vous pouvez changer cette position grâce à la méthode setGravity(int, int, int). Celle-ci peut comporter jusqu'à trois paramètres : une constante Gravity, 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 s'afficher dans l'angle supérieur gauche, vous pouvez définir la gravité (Gravity) comme suit :

Kotlin

    toast.setGravity(Gravity.TOP or Gravity.LEFT, 0, 0)
    

Java

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

Pour décaler le toast vers la droite, augmentez la valeur du deuxième paramètre. Pour le décaler vers le bas, augmentez la valeur du dernier paramètre.

Créer une vue personnalisée pour un toast

Si un simple message textuel ne suffit pas, vous pouvez créer une mise en page personnalisée pour votre toast. Pour ce faire, définissez une mise en page de vue en XML ou dans le code de votre application, puis appliquez la méthode setView(View) à l'objet racine View.

L'extrait suivant contient une mise en page personnalisée pour un toast (enregistrée sous le nom layout/custom_toast.xml) :

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
                  android:id="@+id/custom_toast_container"
                  android:orientation="horizontal"
                  android:layout_width="fill_parent"
                  android:layout_height="fill_parent"
                  android:padding="8dp"
                  android:background="#DAAA"
                  >
        <ImageView android:src="@drawable/droid"
                   android:layout_width="wrap_content"
                   android:layout_height="wrap_content"
                   android:layout_marginRight="8dp"
                   />
        <TextView android:id="@+id/text"
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:textColor="#FFF"
                  />
    </LinearLayout>
    

Comme vous pouvez le constater, l'ID de l'élément LinearLayout est "custom_toast_container". Vous devez utiliser cet ID, ainsi que celui du fichier de mise en page XML "custom_toast", pour gonfler la mise en page, comme indiqué ci-dessous :

Kotlin

    val inflater = layoutInflater
    val container: ViewGroup = findViewById(R.id.custom_toast_container)
    val layout: ViewGroup = inflater.inflate(R.layout.custom_toast, container)
    val text: TextView = layout.findViewById(R.id.text)
    text.text = "This is a custom toast"
    with (Toast(applicationContext)) {
        setGravity(Gravity.CENTER_VERTICAL, 0, 0)
        duration = Toast.LENGTH_LONG
        view = layout
        show()
    }
    

Java

    LayoutInflater inflater = getLayoutInflater();
    View layout = inflater.inflate(R.layout.custom_toast,
                    (ViewGroup) findViewById(R.id.custom_toast_container));

    TextView text = (TextView) layout.findViewById(R.id.text);
    text.setText("This is a custom toast");

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

Commencez par récupérer la classe LayoutInflater à l'aide de getLayoutInflater() (ou getSystemService()), puis gonflez la mise en page à partir du fichier XML grâce à inflate(int, ViewGroup). Le premier paramètre est l'ID de ressource de la mise en page, et le second est la vue racine. Vous pouvez utiliser cette mise en page gonflée pour rechercher d'autres objets View dans la mise en page. Ensuite, recueillez et définissez le contenu des éléments ImageView et TextView. Pour finir, créez un toast avec Toast(Context) et définissez certaines propriétés du toast, telles que la gravité et la durée, puis appelez la vue setView(View) et appliquez-la à la mise en page gonflée. Vous pouvez maintenant afficher le toast avec votre mise en page personnalisée en appelant show().

Remarque : N'utilisez pas le constructeur public pour créer un toast, sauf si vous définissez la mise en page avec setView(View). Si vous n'avez pas de mise en page personnalisée à utiliser, vous devez vous servir de makeText(Context, int, int) pour créer le toast.