Обзор тостов

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

Например, если в электронной почте нажать кнопку Отправить, появится тост с сообщением "Отправка…" (см. изображение ниже).

Если сообщение предполагает ответное действие пользователя, вместо тоста создайте уведомление.

Общие сведения

Сначала создайте объект Toast, вызвав один из методов makeText(). Вам потребуется задать 3 параметра: контекст приложения (Context), текстовое сообщение и тайм-аут. Чтобы тост появился на экране, вызовите метод show().

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

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

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

Kotlin

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

Java

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

Расположение тоста

Обычно тост появляется в нижней центральной части экрана. Чтобы разместить его иначе, вызовите метод setGravity(int, int, int) и задайте следующие параметры: константа Gravity, смещение по оси X и смещение по оси Y.

Например, если вы хотите разместить тост в верхнем левом углу экрана, определите атрибут Gravity следующим образом:

Kotlin

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

Java

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

Чтобы сместить тост вправо, увеличьте значение второго параметра. Для смещения вниз нужно увеличить значение последнего параметра.

Настройка внешнего вида

Возможно, вы захотите добавить в тост не только текстовое сообщение. Чтобы создать собственный макет, пропишите разметку в коде приложения или используя формат XML, а затем передайте корневой объект View методу setView(View).

Ниже представлен фрагмент такой разметки (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>
    

Обратите внимание, что идентификатор элемента LinearLayout – custom_toast_container. Используйте этот идентификатор вместе с идентификатором XML-файла разметки (custom_toast) для наполнения объекта View, как показано ниже.

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

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

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