Афоризм
Любить до гроба? Это я устрою.
Наталья Резник
Последние статьи

 • RawContacts
Необработанные контакты в Android
 • javax.crypto.Cypher
Cимметричное шифрование и дешифрирование
 • Random, Math.random
Генерация случайных чисел
 • Компонент JDatePicker
Описание и пример компонента JDatePicker
 • Компонент Tree
Описание и пример дерева Tree библиотеки base-gui
 • Grid с навигатором
Описание и пример Gridp с навигатором
 • Компонент Grid
Описание и пример Grid библиотеки base-gui
 • Библиотека base-gui
Описание компонентов библиотеки base-gui
 • Оператор SELECT
Использование SQL-оператора SELECT

Всплывающие сообщения Toast

Разработчик Android приложения может «программно» создавать и открывать в интерфейсе окна всплывающие сообщения Toast. Объект Toast нельзя описа́ть в каком-либо файле в формате xml, Toast можно только сформировать в коде java. Приложение сохраняет свою работоспособность для пользователя при появления сообщения Toast. Как правило, всплывающее уведомление Toast используется для представления коротких текстовых сообщений. Например, при нажатии на кнопку формирования "Заказа" всплывает сообщение с текстом «Товар не выбран». Через пару секунд сообщение исчезает. Это и есть Toast сообщение.

Toast является View компонентом с коротким сообщением, появляющимся «поверх» интерфейса приложения. Объект Toast не может получить фокус.

Конструктор Toast

Конструктор класса Toast в качестве параметра получает контекст приложения :

Toast(Context context);

Поскольку класс активности Activity является наследником Context, то его можно использовать в качестве параметра. Например, MainActivity.this.

Вы можете столкнуться с непонятным поведением Toast, когда текст не будет выравниваться, сокращаться и т.д. Это может быть связано с тем, что Ваша активность использует определённую тему или стиль, которые вызывают такой побочный эффект. Поэтому, вместо MainActivity.this используйте метод getApplicationContext().

А как быть, если окно, в котором вызывается Toast не являются потомком контекста Context? Это может случиться при использовании Toast в диалоговых окнах, которые не наследуют свойства класса Context. В этом случае можно вместо getApplicationContext() вызывать метод getBaseContext().

Методы класса Toast

В следующем списке представлены часто используемые методы и константы класса Toast. C полным перечнем всех доступных (public) методов Вы можете познакомиться здесь.

  • static Toast makeText (Context context, int resId, int duration);
    статический метод создания всплывающего сообщения Toast;
  • void setDuration(int duration);
    определение продолжительности представления сообщения;
    можно использовать константы для определения продолжительности представления сообщения :
    LENGTH_SHORT = 2000 мс (по умолчанию);
    LENGTH_LONG = 3500 мс;
  • void setGravity(int gravity, int xOffset, int yOffset);
    позиционирование сообщения.
  • void setText(int resId);
    определение текста сообщения.
  • void setView(View view);
    определение View компонента для отображения во всплывающем сообщении.
  • void show();
    отображение всплывающего сообщения.

Пример использования Toast

Рассмотрим пример использования класса Toast для формирования различных типов сообщений :

  1. обычное сообщение Toast;
  2. сообщение Toast с позиционированием;
  3. сообщение Toast с изображением;
  4. сообщение Toast с View компонентом.

Для реализации данного примера определим интерфейс приложения в виде 4-х кнопок, к которым подключим обработчик события (метод Toast). В методе Toast для каждой кнопки отдельно будет формироваться сообщение Toast.

Листинг activity_main.xml

В следующем листинге описан интерфейс приложения, включающий четыре кнопки. К каждой кнопке подключен обработчик (метод Toast) в атрибуте «android:onClick». Интерфейс не локализован (атрибут «android:text»). В качестве шаблона интерфейса выбран LinearLayout.

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <Button
        android:id="@+id/btn1"
        android:text="Обычный Toast"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="Toast" />
    <Button
        android:id="@+id/btn2"
        android:text="Toast с позиционированием"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="Toast" />
    <Button
        android:id="@+id/btn3"
        android:text="Toast с изображением"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="Toast" />
    <Button
        android:id="@+id/btn4"
        android:text="Собственный интерфейс Toast"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:onClick="Toast" />
</LinearLayout>

Изображение для Toast

В контент двух типов сообщений Toast будем вставлять изображение пустой тележки (128x128). Загрузить изображение в директорию res/drawable модуля можно через буфер обмена с использованием горячих клавишей Ctrl+C, Ctrl+V.

Листинг toast.xml

Для четвертого типа сообщения Toast в примере необходимо описать интерфейс в ресурсном XML файле. Для этого создадим файл res/layout/toast.xml со следующим контентом. Интерфейс сообщения включает титульную строку (TextView), изображение пустой тележки (ImageView) и краткое сообщение (TextView).

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:background="#ffffffff"
    android:orientation="vertical"
    android:id="@+id/llToast">

    <TextView
        android:id="@+id/TV1"
        android:layout_height="wrap_content"
        android:textColor="#ffffffff"
        android:layout_width="fill_parent"
        android:gravity="center"
        android:background="#bb000000"
        android:text="Toast сообщение" />

    <LinearLayout
        android:layout_height="wrap_content"
        android:orientation="vertical"
        android:id="@+id/llToastContent"
        android:layout_width="wrap_content"
        android:background="#44000000">

        <ImageView
            android:id="@+id/tvImageToast"
            android:layout_height="wrap_content"
            android:layout_gravity="center"
            android:layout_width="wrap_content"
            android:src="@drawable/shopping_cart"
            android:layout_marginBottom="4dp" />

        <TextView
            android:id="@+id/TV2"
            android:layout_height="wrap_content"
            android:paddingRight="10dp"
            android:paddingLeft="10dp"
            android:layout_width="wrap_content"
            android:gravity="center"
            android:textColor="#ff000000"
            android:text="Собственный интерфейс Toast"/>

    </LinearLayout>
</LinearLayout>

Листинг метода Toast

В открытый (public) метод Toast в качестве пареметра передается View компонент нажатой кнопки. При нажатии на первую кнопку вызывается статический метод makeText класса Toast. Всплывающее сообщение будет представлено в нижней части экрана. При нажатии на вторую кнопку Toast сообщение позиционируется методом setGravity.

Особый интерес представляет обработчики нажатий на третью и четвертую кнопки. При нажатии на третью кнопку сначала создается и позиционируется Toast сообщение. После этого создается контейнер ImageView, в который загружается изображение, и далее в шаблон разметки Toast (LinearLayout) добавляется контейнер с изображением.

При формировании 4-го сообщения используется собственный настраиваемый (разработчиком) дизайн разметки уведомления, описанный в файле (toast.xml). Для чтения разметки из ХМL-файла используем класс LayoutInflater и один из его методов : getLayoutInflater() или getSystemService(), возвращающие объект типа LayoutInflater. Затем вызовом метода inflate() формируем объект View этой разметки, который передает Toast сообщению.

public void Toast(View view)
{
    switch (view.getId()){
        case R.id.btn1:
            // Создание обычного Toast сообщения
            Toast.makeText(MainActivity.this,
                          "Обычное Toast сообщение",
                          Toast.LENGTH_SHORT).show();
            break;

        case R.id.btn2:
            // Создание Toast сообщения
            Toast toast2 = Toast.makeText(MainActivity.this,
                               "Toast с позиционированием",
                               Toast.LENGTH_LONG);
            // Позиционирование Toast сообщения
            toast2.setGravity(Gravity.TOP, 0, 100);
            toast2.show();
            break;

        case R.id.btn3:
            // Создание Toast сообщения
            Toast toast3 = Toast.makeText(MainActivity.this,
                                     "Toast с изображением",
                                      Toast.LENGTH_LONG);
            // Позиционирование Toast сообщения
            toast3.setGravity(Gravity.CENTER, 0, 100);
            // Создание компонента ImageView
            ImageView imgView;
            imgView = new ImageView(MainActivity.this);
            // Определение изображения
            imgView.setImageResource(R.drawable.shopping_cart);
            // Разметка интерфейса
            LinearLayout linearLayout;
            linearLayout = (LinearLayout)toast3.getView();
            // Добавление изображения в интерфейс компонента
            linearLayout.addView(imgView);
            // Представление сообщения
            toast3.show();
            break;
        case R.id.btn4:
            // Создание Toast сообщения
            Toast toast4 = new Toast(getApplicationContext());
            // Позиционирование сообщения
            toast4.setGravity(Gravity.CENTER, 0, 0);
            // Определение продолжительности
             toast4.setDuration(Toast.LENGTH_LONG);

            // Создание View из контента файла toast.xml:
            LayoutInflater inflater = getLayoutInflater();
            View vw = inflater.inflate(R.layout.toast, null);
            // Определение View компонента
            toast4.setView(vw);
            // Представление сообщения
            toast4.show();
            break;
    }
}

Старт примера

Запустите модуль на выполнение и понажимайте кнопки для просмотра всплывающих сообщений. Если Вы всё сделали правильно, то должны увидеть интерфейс своего приложения похожий на следующие скриншоты. На левом скриншоте представлено Toast сообщение, созданное при нажатии на 3-ю кнопку, на правом – сообщение, созданное при нажатии на 4-ю кнопку.

Отладка приложений

Toast может быть использован для представления отладочных сообщений. Однако, для этих целей лучше использовать android.util.Log и средство просмотра сообщений Logcat.

Связанные страницы

Модули Android приложения
Layout интерфейса приложения Android
Локализация приложения Android
Представление изображений в Android
Прокручиваемый список ListView

  Рейтинг@Mail.ru