Toast fragment android studio

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

Вступление

Что такое тост? Представьте себе картину. За столом собралась большая куча народа и весело отмечает день рождения кота. Стоит шум и гам. Соседи громко разговаривают между собой и не обращают внимания на других. И тут из-за стола поднимается всеми уважаемый человек со стаканом вина и вилочкой стучит по стеклу стакана, чтобы привлечь внимание присутствующих. Шум смолкает и человек произносит тост. Также и в телефоне, когда вы увлечены какой-то задачей, вдруг всплывает сообщение, привлекая ваше внимание. Это и есть Toast. Второй пример — когда вы заряжаете специальный хлеб (тосты) в тостер, то они через определённое время подпрыгивают, сигнализируя о своей готовности. Посмотрим, как это работает в Android.

Теория

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

Практика

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

Обычно пишут в одну строчку, соединяя вызов методов в цепочку .

У метода makeText() есть три параметра:

  • Контекст приложения
  • Текстовое сообщение
  • Продолжительность времени показа уведомления. Можно использовать только две константы

Константы для указания продолжительности показа сообщения

  • LENGTH_SHORT — (По умолчанию) показывает текстовое уведомление на короткий промежуток времени;
  • LENGTH_LONG — показывает текстовое уведомление в течение длительного периода времени.

Если покопаться в исходниках Android, то можно найти такие строчки:

Как видите, уведомления выводятся на 3 с половиной секунды или на 2 секунды. Других вариантов нет, не пытайтесь использовать другие значения — у вас ничего не получится.

Настройка позиции на экране

По умолчанию стандартное всплывающее уведомление появляется в нижней части экрана. Изменить место появления уведомления можно с помощью метода setGravity(int, int, int). Метод принимает три параметра:

  • стандартная константа для размещения объекта в пределах большего контейнера (например, GRAVITY.CENTER, GRAVITY.TOP и др.);
  • смещение по оси X
  • смещение по оси Y

Например, если вы хотите, чтобы уведомление появилось в центре экрана, то используйте следующий код (до вызова метода show()):

Для вывода в левом верхнем углу.

Если нужно сместить уведомление направо, то просто увеличьте значение второго параметра. Для смещения вниз нужно увеличить значение последнего параметра. Соответственно, для смещения вверх и влево используйте отрицательные значения.

Не забывайте про метод show()

Типичная ошибка начинающих программистов — забывают добавить вызов метода show() для отображения сообщения на экране. К счастью, в студии, если вы пропустите метод show(), то строка будет подсвечена, а при подведении указателя мыши к строке увидите:

Читайте также:  Внешний gsm модуль для планшета android

Kotlin Java

Пример

Создайте новый проект или используйте любой старый проект из предыдущих занятий. Добавьте на экран активности кнопку и присвойте ей текст Показать Toast. Теперь напишем код:

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

Начиная с Android 4.4, внешний вид всплывающего сообщения изменился, раньше был прямоугольник без закруглений.

Для закрепления материала напишем ещё один пример. Удалим предыдущий код для щелчка кнопки и напишем такой код:

Я подумал, что вы можете не заметить сообщение, которое показывается слишком мало времени. Поэтому на этот раз я использовал константу LENGTH_LONG, чтобы вы успели обратить внимание на сообщение и покормить наконец несчастного голодного кота. Помимо этого, я поместил текст сообщения в XML-ресурсы, как это рекомендуется всегда делать. Кроме того, сообщение будет выводиться в верхней части экрана.

Добавляем картинку

Как правило, для Toast используются короткие текстовые сообщения. При необходимости вы можете добавить к сообщению и картинку. Используя метод setView(), принадлежащий объекту Toast, вы можете задать любое представление (включая разметку) для отображения.

Начнем с приготовлений. Подготовьте картинку и разместите её в папке res/drawable, как мы делали в уроке с «Hello Kitty». Картинка будет доступна приложению как ресурс через название файла без расширения. Например, я добавил в папку файл с изображением кота hungrycat.jpg и могу получить к нему доступ через выражение R.drawable.hungrycat. Чтобы изображение появилось в стандартном Toast-сообщении, нам потребуется программно создать объект класса ImageView и задать для него изображение из ресурсов с помощью метода setImageResource. Сам по себе стандартный внешний вид Toast состоит из контейнера LinearLayout, в который нужно добавить созданный объект ImageView. Можно задать также позицию, в которую следует вывести изображение. Если указать значение 0, то изображение будет показано выше текста. Код для создания Toast с изображением выглядит следующим образом:

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

Создание собственных всплывающих уведомлений

В предыдущем примере мы получили доступ к контейнеру через метод getView(). Можно пойти от обратного — подготовить свой контейнер и внедрить его в объект Toast через метод setView().

Создадим собственный дизайн разметки для сообщения.

Вам нужно создать разметку в файле res/layout/custom_toast.xml.

Определите два дочерних элемента ImageView и TextView:

Для получения разметки из ХМL-файла и работы с ней в программе используется класс LayoutInflater и его метод getLayoutInflater(), которые возвращает объект LayoutInflater. Затем вызовом метода inflate() получают корневой объект View этой разметки. Например, для файла разметки уведомления с именем custom_toast.xml и его корневого элемента c идентификатором android:id=»@+id/custom_toast_container» код будет таким:

Параметры, передаваемые в метод inflate():

  • идентификатор ресурса макета (custom_toast.xml);
  • идентификатор ресурса корневого элемента (custom_toast_container).

После получения корневого элемента из него можно получить все дочерние элементы методом findViewByid() и определить информационное наполнение для этих элементов.

Затем создаётся объект Toast и устанавливаются нужные свойства, например, Gravity и продолжительность времени показа уведомления.

После этого вызывается свойство view() (Kotlin) или метод setView() (Java), которому передаётся разметка уведомления, и метод show(), чтобы отобразить уведомление с собственной разметкой.

Запустите проект на выполнение. При нажатии кнопки вызова должно появиться на несколько секунд окно уведомления с текстовым сообщением и значком.

Читайте также:  Как увидеть скрытые папки андроида

Ради интереса можете посмотреть, как выглядит разметка в исходных кода Android.

Toast.Callback

В Android 11 R (API 30) добавили возможность отслеживания момента, когда сообщение появляется и скрывается при помощи Toast.Callback.

Ещё раз напомню, что метод setView() в Android 11 признан устаревшим. А также вообще рекомендуют не использовать собственные виды всплывающих сообщений, а ограничиться простыми текстовыми сообщениями. Иначе можно нарваться на системные ограничения.

Использование уведомлений Toast в рабочих потоках

Как элемент графического интерфейса Toast должен быть вызван в потоке GUI, иначе существует риск выброса межпотокового исключения. В листинге объект Handler используется для гарантии того, что уведомление Toast было вызвано в потоке GUI.

Дополнительные сведения

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

Второй момент — фрагменты, которые будете изучать позже, не являются потомками контекста. Если вы захотите вызвать всплывающее сообщение в фрагменте, то проблема может поставить вас в тупик. Вам нужно добавить новую переменную класса Activity через метод getActivity():

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

Заключение

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

Дополнительные материалы

Пример частично цветного текста в Toast через Spannable

Источник

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

Программирование для платформы Андроид производится с применением одноименной интегрированной среды разработки (IDE) – Android Studio. Всплывающие сообщения (месседжи, окна) можно внедрять в код при помощи Android StudioToast – это специальный класс программного комплекса.

Чтобы создать заметное пользователю окно с полезной информацией разработчики IDE под Андроид придумали класс Android Studio Toast. В процессе работы программы человек получает заранее созданный месседж, например, о том, что нужно не забыть купить продукты к праздничному столу или вызвать мастера по ремонту стиральной машинки.

Два слова о теории

Toast Notification – окно, появляющееся на дисплее гаджета, заполняющее его часть, но не блокирующее остальные приложения – пользователь имеет к ним полный доступ. Нужно для демонстрации небольших полезных сообщений.

Как это выглядит на практике

Объекты Тоаст инициализируются с применением метода Toast.makeText(), а далее вызываются методом show() для показа требуемого сообщения на экране.

Toast toast = Toast.makeText(getApplicationContext(),

«Срочно купить продукты!» , Toast.LENGTH_SHORT);

Метод makeText() имеет три значения:

  • контекст;
  • содержание месседжа;
  • количество времени показа окна.

Но программист способен изменять лишь два последних.

Указание времени показа сообщения

Изменяем длительность демонстрации окна – варианты:

  • LENGTH_SHORT — (значение установлено как дефолтное) – текст появляется на дисплее и задерживается совсем недолго. Это будет соответствовать коду: private static final int SHORT_DELAY = 2000
  • LENGTH_LONG — параметр для длительной демонстрации. Здесь получим: private static final int LONG_DELAY = 3500
Читайте также:  Ios навигация для андроид

Числовые значения 3500 и 2000 – это время в миллисекундах, то есть — 2 и 3,5 секунд. Другие длительности задать не удастся.

Как задать позицию на дисплее

Если ничего не менять, то окно с заданным текстом появится внизу дисплея. Задать иные свойства можно при использовании setGravity(int, int, int). Тут определяются 3 значения:

  • обычная постоянная для демонстрации объектов в рамка контейнера (пример: GRAVITY.CENTER или GRAVITY.TOP);
  • число, определяющее координату «X»;
  • значение «Y».

Пример: месседж должен возникнуть посередине дисплея:

toast.setGravity(Gravity.CENTER, 0, 0);

Координаты «Х» и «У» могут принимать числовые значения со знаками: плюс или минус – соответственно окно так же будет смещаться относительно центра.

Немного о методе show()

Обязательно добавлять в код вызов show() для отображения месседжа на дисплее. В противном случае редактор IDE обратит внимание на ошибку, подсвечивая соответствующую строку. Если разработчик подведёт курсор к ней, то увидит сообщение о том, что нужно добавить строку с show ().

Образец кода

Для тренировки можно сделать другой проект или же открыть имеющийся.

Шаг 1. Вводим новый элемент «Кнопка» на активный дисплей, присваиваем ему значение: «Показать Toast».

Шаг 2. Записываем:

public void showToast(View view) <

//здесь создадим текст с требуемым содержимым

Toast toast = Toast.makeText(getApplicationContext(),

«Срочно купить продукты!»,

Toast.LENGTH_SHORT); // Это значит, что сообщение будет висеть минимум времени.

toast.setGravity(Gravity.CENTER, 0, 0); // Тут координаты – мессендж возникнет по центру.

toast.show(); // Обязательная строка вызова.

Шаг 3. Проверка: если запустить активный проект и кликнуть по кнопке, то на пару секунд появится окно с нашим текстом и пропадёт само собой.

Вставляем изображение

Метод setView() позволяет внедрить фото или другое изображение в наше окно.

Перемещаем нужную картинку в папку «res/drawable». Это будет новый доступный для IDE ресурс. Если имя рисунка pic.jpg, то в программном коде он станет доступным при написании: R.drawable.pic.

Вот весь код вызова Тоаст с нашей сохранённой картинкой:

public void showToast(View view) <

Toast toast3 = Toast.makeText(getApplicationContext(),

toast3.setGravity(Gravity.CENTER, 1, -1);

LinearLayout toastContainer = (LinearLayout) toast3.getView();

ImageView catImageView = new ImageView(getApplicationContext());

catImageView.setImageResource(R.drawable.pic); // Вызов нашего рисунка.

Теперь в Android Studio сообщение Toast при запуске отобразится с нашей сохранённой картинкой.

Программирование своих всплывающих сообщений

Допускается подготовка собственных контейнеров и внедрение их в объекты Toast посредством методов setView().

Иногда стандартного месседжа недостаточно для создания пользовательского приложения, тогда программист может применить особый дизайн разметки будущего окошка. Чтобы получить структурные данные из ХМL и работать с ними, в коде используют классы под названием «LayoutInflater» и их методы: getLayoutInflater() / getSystemService(), они способны вернуть LayoutInflater. Потом посредством инициации inflate() получаются блоки view.

Применение месседжей

Как часть графического движка Android Studio всплывающее сообщение должно вызываться в потоках графического интерфейса пользователя, сохраняется опасность появления межпотоковых исключений. В создании кода объекты Handler применяются, чтобы месседжи Toast вызывались в потоках GUI.

Дополнительная информация

При программировании следует указывать информацию о контексте в параметре makeText(). Если возникают проблемы – странное поведение месседжа или текста внутри него – следует прибегать к методу getApplicationContext().

Благодаря указанным строкам кода можно с лёгкостью генерировать в Android Studio вывод сообщения для пользователя.

Источник

Оцените статью