- Toast — всплывающие сообщения
- Вступление
- Теория
- Практика
- Константы для указания продолжительности показа сообщения
- Настройка позиции на экране
- Не забывайте про метод show()
- Пример
- Добавляем картинку
- Создание собственных всплывающих уведомлений
- Toast.Callback
- Использование уведомлений Toast в рабочих потоках
- Дополнительные сведения
- Заключение
- Дополнительные материалы
- Как изменить цвет и цвет сообщения по умолчанию для тостов в фоновом режиме в Android?
- Как настроить backgroud, цвет фона и цвет текста для Toast в android
- Top 7: Best Android Native Toast Notification Replacement Libraries
- 7. Dynamic Toasts
- 6. Noty
- 5. SimpleToast
- 4. StyleableToast
- 3. TastyToast
- 2. SuperToasts
- 1. Toasty
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(), то строка будет подсвечена, а при подведении указателя мыши к строке увидите:
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
Источник
Как изменить цвет и цвет сообщения по умолчанию для тостов в фоновом режиме в Android?
Я хочу создать тостовое сообщение с белым цветом фона и черным цветом сообщения. Мое тостовое сообщение:
Я хотел создать его в другом методе, а не в onCreate() .
Вы можете создать собственное сообщение, как показано ниже:
Один текстовый вид, который вы можете поместить в файл макета и задать желаемый фон и цвет текста.
Также вы можете сделать следующее, для которого не нужен дополнительный файл макета:
Изменить тост цвета без каких-либо дополнительных макетов, 2018
Я обнаружил, что это очень простой способ изменения цвета фактического фона изображения тоста, а также цвета текста, для этого не требуется никаких дополнительных макетов или каких-либо изменений XML:
Изменить значение по умолчанию Toast Цвет текста и цвет фона Попробуйте Как это сделать.
Вы можете настроить собственный тост для Android, используя следующий код
Если вы хотите изменить фон, вы должны использовать пользовательский макет в тосте
Создайте файл макета toast.xml относительно того, как ваш тост должен выглядеть следующим образом:
Чтобы показать тост в файле java, введите код ниже:
Измените цвет тостов по умолчанию и цвет фона в JAVA. Таким способом вы можете изменить цвет сообщения тоста и цвет фона.
Просто измените цвет текста тоста.
Добавляя к ответу @AndroidKiller, вы также можете установить gravity и пользовательский TextView среди прочего:
Обратите внимание, что ваш фоновый ресурс должен быть девять патчей PNG
Вы можете даже поставить ImageView и несколько TextView в XML следующим образом:
Изменить цвет сообщения по умолчанию и цвет фона в JAVA……
Источник
Как настроить backgroud, цвет фона и цвет текста для Toast в android
Я хочу настроить мой тост, не создавая собственный макет, изменяя по умолчанию Toast. Я хочу красный цвет для фона тоста и белый цвет для текста текста тоста, и я хочу сделать фоном тоста больше, чем тост по умолчанию. Когда я запускаю свое приложение, ничего не меняется от моего тоста, он по-прежнему отображается в тосте по умолчанию.
Вот как я настраиваю свой тост:
Что-то не так с моим кодом? Если да, то как его решить? Надеюсь, кто-то может помочь мне решить мою проблему.
У вас может быть пользовательское представление, надувающее пользовательский вид и использование toast.setView(layout) .
Разработайте свою, если и еще часть кода (отдельно), он показывает тост с красным фоном и белым цветом текста. Я не вижу никаких проблем. Но если вам нужно настроить, вы можете использовать настраиваемый макет и раздуть макет и настроить представление на тост.
Ваше текстовое изображение
Инициализируется в части if, а в противном случае часть textview не инициализируется.
Инициализировать textview вне кода if и else.
Проверьте эту библиотеку crouton, которую вы можете найти полезной
Тост имеет метод setView() .
Вы можете настроить Toast для отображения любого вида.
Я бы сказал, вместо того, чтобы пытаться отредактировать представление внутри Toast, вы просто создаете представление и вставляете его в себя.
У меня есть очень простой и простой код для настройки Toast соответственно, вы также можете изменить фон тоста и текста.
Источник
Top 7: Best Android Native Toast Notification Replacement Libraries
Carlos Delgado
See our review from 7 of the Best Android Native Toast Notification Replacement Libraries.
Although most of the toast notifications libraries are someway deprecated in favor of the new Design Support Library which includes a Toast . It is due to this that development of many libraries are no longer actively being maintained, however they work pretty nice (and there are other projects that are still being maintained)! If you are looking for a recommendation of which third party library you should use to implement custom toast notifications in Android, you are in the right place.
In this top, we’ll share with you 7 of the most imponent libraries to build custom/default toasts notifications to display in your native android application.
7. Dynamic Toasts
A simple library to display themed toasts with icon and text on Android 9+ (Gingerbread or above) devices. Since v0.4.0, it uses 26.x.x support libraries so, minimum SDK will be Android 14+ (ICS or above). Since v2.0.0, it uses AndroidX so, first migrate your project to AndroidX. It has several method to display toasts based on the requirement. Each method returns a Toast object which can be customised further. Optional configuration to customise the toasts further like custom background color or drawable, custom text size, typeface or icon size, etc. Various methods can be called anywhere in the app to do customisations.
6. Noty
A simple library for creating animated warnings/dialogs/alerts for Android.
5. SimpleToast
SimpleToast is a notification library for Android (like a Toast). The API is kept as simple as the Toast API. Create a SimpleToast for any CharSequence with default icon:
4. StyleableToast
StyleableToast is an Android library that takes the standard toast to the next level with many styling options. Style your toasts either by code or with a style in styles.xml .
3. TastyToast
TastyToast is an useful library that implements custom Android toasts that look beautiful and not so boring as the native ones. After installing the library, you can use the toasts like this:
2. SuperToasts
The SuperToasts library enhances and builds upon the Android Toast class. This library includes support for context sensitive SuperActivityToasts that can show progress and handle button clicks as well as non-context sensitive SuperToasts which offer many customization options over the standard Android Toast class. You can create a super toast like this:
1. Toasty
Toasty is a simple android library that allows you to use the usual Toast, but with steroids. You can add this to your module’s build.gradle file (make sure the version matches the JitPack) and that’s it. Each method always returns a Toast object, so you can customize the Toast much more. To display an error Toast:
To display a success Toast:
To display an info Toast:
To display a warning Toast:
To display the usual Toast:
To display the usual Toast with icon:
You can also create your custom Toasts with the custom() method:
If you know another awesome open source library that allows you to implement toast like notifications in your android native application, please share it with the community in the comment box.
Carlos Delgado
Interested in programming since he was 14 years old, Carlos is a self-taught programmer and founder and author of most of the articles at Our Code World.
Источник