Criar e exibir uma mensagem pop-up

É possível usar um Snackbar para exibir uma breve mensagem para o usuário. A mensagem desaparece automaticamente após um curto período. O Snackbar é ideal para mensagens breves que o usuário não precisa necessariamente responder. Por exemplo, um app de e-mails pode usar um Snackbar para informar ao usuário que o app enviou um e-mail.

Usar um CoordinatorLayout

Um Snackbar é anexado a uma visualização. O Snackbar oferece funções básicas se é anexado a algum objeto derivado da classe View, como qualquer um dos objetos de layout comuns. No entanto, se o Snackbar for anexado a um CoordinatorLayout, o Snackbar ganhará outros recursos:

  • O usuário pode dispensar o Snackbar deslizando-o para fora.
  • O layout move alguns outros elementos da IU quando o Snackbar é exibido. Por exemplo, se o layout tiver um FloatingActionButton, o layout moverá o botão para cima quando ele mostrar um Snackbar, em vez de desenhar o Snackbar sobre o botão. Veja como isso é exibido na Figura 1.

A classe CoordinatorLayout oferece um superconjunto da função de FrameLayout. Se o app já usa um FrameLayout, basta substituir esse layout por um CoordinatorLayout para ativar a função Snackbar completa. Se o app usa outros objetos de layout, a coisa mais simples a fazer é unir os elementos de layout existentes em um CoordinatorLayout, como neste exemplo:

<android.support.design.widget.CoordinatorLayout
        android:id="@+id/myCoordinatorLayout"
        xmlns:android="http://schemas.android.com/apk/res/android"
        xmlns:app="http://schemas.android.com/apk/res-auto"
        android:layout_width="match_parent"
        android:layout_height="match_parent">

        <!-- Here are the existing layout elements, now wrapped in
             a CoordinatorLayout -->
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:orientation="vertical">

            <!-- …Toolbar, other layouts, other elements… -->

        </LinearLayout>

    </android.support.design.widget.CoordinatorLayout>

Defina uma tag android:id para seu CoordinatorLayout. Você precisa do ID do layout ao exibir a mensagem.

Figura 1. O CoordinatorLayout move o FloatingActionButton para cima quando o Snackbar aparece.

Exibir uma mensagem

Há duas etapas para exibir uma mensagem. Primeiro, você cria um objeto Snackbar com o texto da mensagem. Depois, você chama o método show() do objeto para exibir a mensagem para o usuário.

Criar um objeto Snackbar

Crie um objeto Snackbar chamando o método estático Snackbar.make(). Durante a criação do Snackbar, você especifica a mensagem exibida e a quantidade de tempo pela qual ela será exibida:

Kotlin

    val mySnackbar = Snackbar.make(view, stringId, duration)
    

Java

    Snackbar mySnackbar = Snackbar.make(view, stringId, duration);
    
view
A visualização à qual o Snackbar será anexado. Na verdade, o método pesquisa a hierarquia de visualizações desde a view transmitida até chegar a um CoordinatorLayout ou à visualização de conteúdo da decoração da janela. Normalmente, é mais simples transmitir apenas o CoordinatorLayout que envolve seu conteúdo.
stringId
O ID do recurso da mensagem que você quer exibir. Pode ser um texto formatado ou não formatado.
duration
O período de exibição da mensagem. Pode ser LENGTH_SHORT ou LENGTH_LONG.

Exibir a mensagem ao usuário

Depois de criar o Snackbar, chame o método show() dele para exibir o Snackbar ao usuário:

Kotlin

    mySnackbar.show()
    

Java

    mySnackbar.show();
    

O sistema não mostra vários objetos Snackbar ao mesmo tempo. Assim, se a visualização estiver exibindo outro Snackbar, o sistema colocará seu Snackbar na fila e o exibirá após o Snackbar atual expirar ou ser dispensado.

Se você quiser apenas exibir uma mensagem para o usuário e não precisar chamar nenhum método utilitário do objeto Snackbar, não será necessário manter a referência ao Snackbar depois de chamar show(). Por isso, é comum usar o encadeamento de métodos para criar e mostrar um Snackbar em uma declaração:

Kotlin

    Snackbar.make(
            findViewById(R.id.myCoordinatorLayout),
            R.string.email_sent,
            Snackbar.LENGTH_SHORT
    ).show()
    

Java

    Snackbar.make(findViewById(R.id.myCoordinatorLayout), R.string.email_sent,
                            Snackbar.LENGTH_SHORT)
            .show();