Toast – это простое оповещение пользователя. При отображении занимает минимальное количество места, необходимого для отображения сообщения. С тостами нельзя взаимодействовать. При отображении используется эффект появления и затухания.

Скриншот ниже показывает пример оповещения пользователя из приложения Будильник. Как только время будильника установлено, отображается toast, который показывает через какое время включится будильник.

Toast может быть создан и показан как из Activity, так и из Service. Если вы создадите toast оповещение из сервиса, то оно отобразится перед Activity находящейся в данный момент в фокусе.

Если необходима реакция от пользователя, то лучше использовать панель уведомлений (Status Bar Notification).

Основы

Необходимо создать Toast объект с помощью одного из makeText() методов. Этот метод получает три параметра: контекст приложения (Context), сообщение и время отображения. В качестве результата возвращается Toast объект. Для отображения которого, нужно вызвать метод show(), как показано в пример ниже:

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

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

Этот пример подходит для большинства случаев. Вам редко понадобится использовать что нибудь другое. Однако, возможно вы захотите задать другое положение на экране или изменить внешний вид. Далее будут рассмотрены оба случая.

Можно так же отобразить тост без создания дополнительной переменной, вызвав метод show(), как показано в примере ниже:

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

Позиционирование Toast

По умолчанию тост оповещение появляется в низу экрана, центрированное по горизонтали. Вы можете изменить позицию с помощью метода setGravity(int, int, int). Метод принимает три параметра: Gravity константа, сдвиг по x, сдвиг по y.
Например, вы решили что хотите показывать оповещение в верхнем левом углу, тогда нужно установить gravity следующим образом:

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

Если нужно сдвинуть немного в право, увеличьте второй параметр, если влево – третий параметр.

Модифицирование Toast


Если отображение в виде простого сообщения не достаточно, вы можете использовать любую разметку, какую только захотите. Для этого нужно создать xml разметку в папке res\layout или с помощью кода прямо в приложении, и передать объект View методу setView(View).

Например, создадим разметку показанную на картинке, с помощью следующей xml разметки (сохраним файл под именем toast_layout.xml):

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

Заметим, что идентификатор элемента LinearLayout – "toast_layout". Далее мы будем использовать этот идентификатор для создания объекта View из xml разметки, как показано ниже:

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

ImageView image = (ImageView) layout.findViewById(R.id.image);
image.setImageResource(R.drawable.android);
TextView text = (TextView) layout.findViewById(R.id.text);
text.setText("Hello! 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();

Первое, мы получили LayoutInflater через метод getLayoutInflater() (так же можно использовать getSystemService()), и затем создали объект View из Xml разметки с помощью метода inflate(int, ViewGroup). Первый параметр – это идентификатор ресурса, второй – корневой View объект, к которому мы хотим подсоединить текущий. Вы можете использовать созданный объект, для поиска в нем других объектов, например, ImageView для установки картинки и TextView для текста сообщения. И наконец, создаем новый Toast с помощью конструктора Toast(Context) и проставляем свойства, такие как гравитация и время отображения. Затем вызываем метод setView(View) и передаем ему объект-разметку. Теперь можно отобразить ваш тост, вызвав метод show().

Замечание: Не нужно использовать публичный конструктор для создания Toast, если вы не собираетесь устанавливать свою разметку через метод setView(View).
Для всех остальных случаев достаточно использовать метод makeText(Context, int, int).

Перевод статьи: Creating Toast Notifications