SnackBar — тост из Material Design

snackbar

SnackBar оповещает пользователя о выполнении какой-либо операции. Он показывает короткое сообщение в нижней части экрана на смартфоне и нижнем левом углу на планшете. SnackBar появляется над всеми другими элементами на экране.

SnackBar автоматически исчезает после паузы или после взаимодействия с пользователем, а также после открытия Activity. На экране можно одновременно показать только один SnackBar.

В этой статье я рассмотрю библиотеку, которая реализует функционал описанный выше. Подробнее про SnackBar можно почитать здесь.

Небольшой пример

Покажем небольшое сообщение:

SnackBar mSnackBar = new SnackBar.Builder(this)
  .withMessage("Мое сообщение")
  .show();

Создание сообщения происходит при помощи паттерна Builder, позволяющим максимально сократить код. На вход конструктору мы передаем Context. Методом withMessage(String)  мы устанавливаем текст для SnackBar’а. В конце мы обязательно должны вызвать метод show(). Если показывать SnackBar нужно не сразу, то это можно сделать вот так:

SnackBar.Builder mSnackBarBuilder = new SnackBar.Builder(this)
  .withMessage("Мое сообщение");
  .show();

Также вы можете брать текст из ресурсов:

SnackBar mSnackBar = new SnackBar.Builder(this)
  .withMessageId(R.string.mytext)
  .show();
Устанавливаем время показа

По умолчанию сообщение показывается 3.5 секунды. Мы можем изменить время показа снекбара, вызвав метод withDuration(short). У класса SnackBar есть три константы: LONG_SNACK, MED_SNACK и SHORT_SNACK равные 5000, 3500 и 2000 миллисекундам соответственно. Мы можем передать их или задать собственную длину показа сообщения не прывашающую размер Short.

Изменяем цвет фона

Устанавливать цвет мы можем только из ресурсов.

withBackgroundColorId(R.color.snack_bg)

На вход передаем идентификатор цвета.

Добавляем кнопку

По умолчанию отображение кнопки отключено. Мы можем активировать ее, вызвав метод withActionMessage(String)

withActionMessage("Action")

На вход подаем текст кнопки.

Обрабатываем нажатие

Для обработки нажатий на кнопку нам нужно установить слушатель. Обычный OnClickListener нам не подойдет. У SnackBar’а есть собственный интерфейс OnMessageClickListener. Присвоить слушатель можно методом withOnClickListener:

withOnClickListener(new SnackBar.OnMessageClickListener(){
  @Override
  public void onMessageClick(Parcelable token){
  }
})
Задаем стиль кнопке

Также мы можем задавать кнопке стиль с помощью метода withStyle(SnackBar.Style). Нам доступны четыре стиля, это:
DEFAULT, ALERT, CONFIRM и INFO.
Давайте изменим стиль кнопки на ALERT:

SnackBar mSnackBar = new SnackBar.Builder(this)
  .withMessage("Мое сообщение")
  .withStyle(SnackBar.Style.ALERT)
  .show();

Библиотека на GitHub: SnackBar.
Исходники примера: SnackBar.

Комментарии:

3 комментария

  1. VladimirPesterev Ответить

    Несколько замечаний. Snackbar это Snackbar. Toast это Toast. Не путать. Snackbar самодостаточный, хотя и похож ролями на Toast. Также он как раз таки должен появляться под всеми остальными элементами на экране, смещая их вверх. Внимательно читайте о Snackbar в примерах от Google про Material Design.

    • Admin АвторОтветить

      Я знаю, что такое SnackBar и что такое Toast. Просто они выполняют похожие задачи, если не одну и ту же. Возможно, некоторые разработчики не знают про SnackBar, поэтому решил обозвать его тостом

Добавить комментарий

Ваш e-mail не будет опубликован. Обязательные поля помечены *