Visão geral notificações toast

Uma notificação toast fornece um feedback simples sobre uma operação em uma pequena janela pop-up. Ele só ocupa a quantidade de espaço necessária para a mensagem, e a atividade atual continua visível e interativa. Notificações toast desaparecem automaticamente após um tempo limite.

Por exemplo, clicar em Enviar em um e-mail aciona um aviso "Enviando mensagem…", conforme exibido na captura de tela a seguir:

Se for necessário ter uma resposta do usuário para uma mensagem de status, considere usar uma Notificação.

Noções básicas

Primeiro, instancie um objeto Toast com um dos métodos makeText(). Esse método usa três parâmetros: o Context do aplicativo, a mensagem de texto e a duração do aviso. Ele retorna um objeto Toast devidamente inicializado. É possível exibir a notificação toast com show(), conforme mostrado no exemplo a seguir:

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

Esse exemplo demonstra tudo o que é preciso para a maior parte das notificações toast. Provavelmente você não precisará de mais nada. No entanto, é possível que você queira posicionar a notificação toast de forma diferente ou até mesmo usar seu próprio layout em vez de uma simples mensagem de texto. As seções a seguir descrevem como é possível fazer isso.

Também é possível encadear seus métodos e evitar se prender ao objeto Toast, desta forma:

Kotlin

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

Java

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

Posicionar a notificação toast

Uma notificação toast padrão aparece na parte inferior da tela, centralizada horizontalmente. Você pode alterar essa posição com o método setGravity(int, int, int). Três parâmetros são aceitos: uma constante Gravity, um ajuste de posição x e um de posição y.

Por exemplo, se você decidir que a notificação toast aparecerá no canto superior esquerdo, é possível definir a gravidade da seguinte forma:

Kotlin

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

Java

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

Se você quiser deslocar a posição para a direita, aumente o valor do segundo parâmetro. Para deslocá-la para baixo, aumente o valor do último parâmetro.

Criar uma visualização personalizada da notificação toast

Se uma mensagem de texto simples não for o suficiente, você pode criar um layout personalizado para a notificação toast. Para criar um layout personalizado, defina um layout View, em XML ou no código do aplicativo, e passe o objeto View raiz para o método setView(View).

O snippet a seguir contém um layout personalizado para uma notificação toast (salva como 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>
    

Observe que o código do elemento LinearLayout é "custom_toast_container". É necessário usar esse código e o código do arquivo de layout XML "custom_toast" para inflar o layout, conforme exibido aqui:

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

Primeiro, recupere o LayoutInflater com getLayoutInflater() (ou getSystemService()) e, em seguida, infle o layout do XML usando inflate(int, ViewGroup). O primeiro parâmetro é o código do recurso de layout, e o segundo é a View raiz. Você pode usar esse layout inflado para encontrar mais objetos View no layout. Em seguida, capture e defina o conteúdo dos elementos ImageView e TextView. Finalmente, crie uma nova notificação toast com Toast(Context) e defina algumas propriedades da notificação, como a gravidade e a duração. Então, chame setView(View) e passe o layout inflado. Agora você pode exibir a notificação toast com seu layout personalizado chamando show().

Observação: não use o construtor público para um Toast, a menos que você vá definir o layout com setView(View). Se você não tem um layout personalizado para usar, é necessário usar makeText(Context, int, int) para criar a notificação toast.