Оповещение пользователя: Toast
Начинаю цикл статей о способах оповещения пользователя. Цикл рассчитан на новичков. Существует три способа оповещения пользователя: через Toast, через Notification и через различные виды Dialog. Сегодня я расскажу об использовании первого типа оповещения — Toast.
Введение
Toast представляет собой всплывающее сообщение, которое позволяет быстро оповестить пользователя о произошедшем событии, например, сохранении настроек программы на SD-карте. Особенность Toast заключается в том, что во время появления сообщения пользователь может взаимодействовать с находящимися за ним Activity, либо с домашним экраном (home screen). Также стоит заметить, что пользователь не может контролировать закрытие Toast с помощью аппаратной кнопки Back или другими возможными способами, сообщение плавно появляется и потом само же плавно исчезает. Время задержки между появлением и исчезновением можно задавать программно. В большинстве случаев Toast представляет собой короткое сообщение, но присутствует возможность задать произвольный внешний вид Toast, например, добавить изображение рядом с текстом. Помимо этого можно управлять расположением Toast на экране. Toast может быть создан из Activity, либо из Service. В случае создания из сервиса Toast появляется поверх Activity, которое имеет фокус, либо поверх домашнего экрана.
Создание простого Toast
Создать простой Toast можно через статичный метод makeText класса Toast, задав необходимые параметры.
В качестве параметров задается контекст приложения, сообщение и задержка, о которой писал ранее. Сообщение может быть задано непосредственно в виде текста, либо используя текстовый ресурс-строку, например, R.string.hello_world, в которой хранится текст, который необходимо отобразить, в нашем случае «Привет, мир!». Задержка может быть короткой — LENGTH_SHORT, либо длинной — LENGTH_LONG. По умолчанию при создании Toast задается короткая задержка. Программно задержка задается методом setDuration.
Суть метода makeText такова: внутри метода создается объект класса Toast, устанавливается текст сообщения и тип задержки. Далее к объекту может быть либо применен, как в моем случае, метод show, который отображает созданный Toast, либо заданы дополнительные свойства Toast, например, его расположение на экране или созданный вами внешний вид.
Созданный Toast выглядит следующим образом:

Изменение положения Toast
Расположение Toast на экране задается с помощью метода setGravity следующим образом:
Первый параметр метода задает выравнивание, вариантов которого довольно много в классе Gravity. Второй и третий параметры задают на сколько пикселей будет смещен Toast по горизонтали вправо и по вертикали вниз соответственно относительно значения, заданного в первом параметре. Результат приведенного выше кода отображается следующим образом:

Добавление изображения в простой Toast
Для добавления изображения в стандартный Toast потребуется программно создать объект класса ImageView и задать для него изображение из ресурсов с помощью метода setImageResource. Затем потребуется получить стандартный внешний вид Toast, если посмотреть в отладчике он является LinearLayout, и добавить в него созданный объект ImageView с указанием в какую позицию добавить изображение, в моем случае я указал нулевую позицию, чтобы изображение было добавлено выше текста. Код для создания этого Toast с изображением представлен ниже.
Созданный таким образом Toast выглядит следующим образом:

Создание сложного Toast
Для создания сложного Toast потребуется создать собственный layout, код которого выглядит следующим образом:
Я создал Toast в виде диалога с заголовком, внутри которого располагаются изображение и текст.
Теперь этот layout нужно прописать для Toast и задать сообщения для заголовка и текста, а также задать изображение. Делается это следующим образом:
В первых двух строках происходит инициализация объекта View путем наполнения его из xml-файла (для этого используется экземпляр класса LayoutInflater, получаемый с помощью метода getLayoutInflater), созданного ранее. Первый параметр метода inflate задает идентификатор созданного ранее layout — R.layout.toast (в данном случае он соответствует файлу res/layout/toast.xml). Затем получаются ссылки на изображение, заголовок и текст сообщения, и заполняются нужными данными. Далее непосредственно создается Toast, задаются необходимые параметры и в качестве layout прописывается тот layout, который мы инициализировали ранее Делается это с помощью метода setView. В результате всех этих манипуляций у нас получится Toast, выглядящий как на рисунке ниже.

На этом первая статья о способах оповещения пользователя закончена. Если вы нашли ошибку или хотите добавить какие-то другие способы работы с Toast, напишите комментарии и я обязательно добавлю ваши замечания в статью.
Источник
Введение
Toast представляет собой всплывающее сообщение, которое позволяет быстро оповестить пользователя о произошедшем событии, например, сохранении настроек программы на SD-карте. Особенность Toast заключается в том, что во время появления сообщения пользователь может взаимодействовать с находящимися за ним Activity, либо с домашним экраном (home screen). Также стоит заметить, что пользователь не может контролировать закрытие Toast с помощью аппаратной кнопки Back или другими возможными способами, сообщение плавно появляется и потом само же плавно исчезает. Время задержки между появлением и исчезновением можно задавать программно. В большинстве случаев Toast представляет собой короткое сообщение, но присутствует возможность задать произвольный внешний вид Toast, например, добавить изображение рядом с текстом. Помимо этого можно управлять расположением Toast на экране. Toast может быть создан из Activity, либо из Service. В случае создания из сервиса Toast появляется поверх Activity, которое имеет фокус, либо поверх домашнего экрана.
Создание простого Toast
Создать простой Toast можно через статичный метод makeText класса Toast, задав необходимые параметры.
Toast.makeText(getApplicationContext(), "Привет, мир!", Toast.LENGTH_SHORT).show();
В качестве параметров задается контекст приложения, сообщение и задержка, о которой писал ранее. Сообщение может быть задано непосредственно в виде текста, либо используя текстовый ресурс-строку, например, R.string.hello_world, в которой хранится текст, который необходимо отобразить, в нашем случае «Привет, мир!». Задержка может быть короткой — LENGTH_SHORT, либо длинной — LENGTH_LONG. По умолчанию при создании Toast задается короткая задержка. Программно задержка задается методом setDuration.
Суть метода makeText такова: внутри метода создается объект класса Toast, устанавливается текст сообщения и тип задержки. Далее к объекту может быть либо применен, как в моем случае, метод show, который отображает созданный Toast, либо заданы дополнительные свойства Toast, например, его расположение на экране или созданный вами внешний вид.
Созданный Toast выглядит следующим образом:

Изменение положения Toast
Расположение Toast на экране задается с помощью метода setGravity следующим образом:
Toast toast = Toast.makeText(getApplicationContext(), "Привет, мир!",
Toast.LENGTH_LONG);toast.setGravity(Gravity.CENTER, 0, 0);
toast.show();
Первый параметр метода задает выравнивание, вариантов которого довольно много в классе Gravity. Второй и третий параметры задают на сколько пикселей будет смещен Toast по горизонтали вправо и по вертикали вниз соответственно относительно значения, заданного в первом параметре. Результат приведенного выше кода отображается следующим образом:

Добавление изображения в простой Toast
Для добавления изображения в стандартный Toast потребуется программно создать объект класса ImageView и задать для него изображение из ресурсов с помощью метода setImageResource. Затем потребуется получить стандартный внешний вид Toast, если посмотреть в отладчике он является LinearLayout, и добавить в него созданный объект ImageView с указанием в какую позицию добавить изображение, в моем случае я указал нулевую позицию, чтобы изображение было добавлено выше текста. Код для создания этого Toast с изображением представлен ниже.
Toast toast = Toast.makeText(getApplicationContext(), "Привет, мир!", Toast.LENGTH_LONG);
toast.setGravity(Gravity.CENTER, 0, 0);
LinearLayout toastView = (LinearLayout) toast.getView();
ImageView imageWorld = new ImageView(getApplicationContext());
imageWorld.setImageResource(R.drawable.world);
toastView.addView(imageWorld, 0);
toast.show();
Созданный таким образом Toast выглядит следующим образом:

Создание сложного Toast
Для создания сложного Toast потребуется создать собственный layout, код которого выглядит следующим образом:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="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:layout_height="wrap_content"
android:layout_margin="1dip" android:textColor="#ffffffff"
android:layout_width="fill_parent" android:gravity="center"
android:background="#bb000000" android:id="@+id/tvTitleToast"></TextView>
<LinearLayout android:layout_height="wrap_content"
android:orientation="vertical" android:id="@+id/llToastContent"
android:layout_marginLeft="1dip" android:layout_marginRight="1dip"
android:layout_marginBottom="1dip" android:layout_width="wrap_content"
android:padding="15dip" android:background="#44000000">
<ImageView android:layout_height="wrap_content"
android:layout_gravity="center" android:layout_width="wrap_content"
android:id="@+id/tvImageToast" />
<TextView android:layout_height="wrap_content"
android:paddingRight="10dip" android:paddingLeft="10dip"
android:layout_width="wrap_content" android:gravity="center"
android:textColor="#ff000000" android:id="@+id/tvTextToast" />
</LinearLayout>
</LinearLayout>
Я создал Toast в виде диалога с заголовком, внутри которого располагаются изображение и текст.
Теперь этот layout нужно прописать для Toast и задать сообщения для заголовка и текста, а также задать изображение. Делается это следующим образом:
LayoutInflater inflater = getLayoutInflater();
View layout = inflater.inflate(R.layout.toast,
(ViewGroup) findViewById(R.id.llToast));
ImageView image = (ImageView) layout.findViewById(R.id.tvImageToast);
image.setImageResource(R.drawable.world);
TextView title = (TextView) layout.findViewById(R.id.tvTitleToast);
title.setText("Внимание");
TextView text = (TextView) layout.findViewById(R.id.tvTextToast);
text.setText("Привет, мир!");
Toast toast = new Toast(getApplicationContext());
toast.setGravity(Gravity.RIGHT | Gravity.TOP, 12, 40);
toast.setDuration(Toast.LENGTH_LONG);
toast.setView(layout);
toast.show();
В первых двух строках происходит инициализация объекта View путем наполнения его из xml-файла (для этого используется экземпляр класса LayoutInflater, получаемый с помощью метода getLayoutInflater), созданного ранее. Первый параметр метода inflate задает идентификатор созданного ранее layout — R.layout.toast (в данном случае он соответствует файлу res/layout/toast.xml). Затем получаются ссылки на изображение, заголовок и текст сообщения, и заполняются нужными данными. Далее непосредственно создается Toast, задаются необходимые параметры и в качестве layout прописывается тот layout, который мы инициализировали ранее Делается это с помощью метода setView. В результате всех этих манипуляций у нас получится Toast, выглядящий как на рисунке ниже.

На этом первая статья о способах оповещения пользователя закончена. Если вы нашли ошибку или хотите добавить какие-то другие способы работы с Toast, напишите комментарии и я обязательно добавлю ваши замечания в статью.
Источник
комментарии (14)