Toast. Всплывающее сообщение. Andoid Studio
Очень полезная функция, которая требуется достаточно часто — это toast.
Это такое небольшое сообщение внизу экрана. Текущая активность остается видимой и активной. Сообщение занимает столько места, сколько занимает его текст. Исчезает после установленного промежутка времени.
Вот как оно выглядит:
Toast удобно использовать когда не требуется ответ от пользователя. Часто оно уведомляет о происходящем в приложении действии или некоторые-подсказки, уведомления. Если же требуется ответ пользователя, то можно использовать диалоговое окно, о нем будет отдельный разговор.
Основа основ.
Как создать toast:
Context context = getApplicationContext(); CharSequence text = "Hello toast!"; int duration = Toast.LENGTH_SHORT; Toast toast = Toast.makeText(context, text, duration); toast.show();
Выглядит просто — создаем экземпляр и передаем в него три параметра: контекст, текст сообщения, продолжительность времени отображения.
Можно записать короче:
Toast.makeText(context, text, duration).show();
Пример:
Toast.makeText(getApplicationContext(), "This is toast", Toast.LENGTH_SHORT).show();
Чуть подробнее. Контекст можно получить и по-другому. Например nameActivity.this (где nameActivity — имя активности), продолжительность времени может быть как стандартной:
int Toast.LENGTH_SHORT = 2000;
int Toast.LENGHT_LONG = 3500;
то есть это соответственно 3.5 секунды и 2 секунды; или можно задать время самостоятельно в переменной типа int.
Усложним
Если этих знаний недостаточно, то подробнее.
Конструктор класса выглядит следующим образом:
Toast(Context context)
Методы класса
void | cancel() | Прекратить отображение toast, или не отображать вовсе если отображение еще не началось |
int | getDuration() | Получить продолжительность времени отображения |
int | getGravity() | Получить расположение Toast на экране |
float | getHorizontalMargin() | Вернуть отсуп по горизонтали (margin) |
float | getVerticalMargin() | Вернуть отсуп по вертикали (margin) |
View | getView() | Вернуть Вьюшку |
int | getXOffset() | Получить смещение Х (речь о гравитации окна) |
int | getYOffset() | Получить смещение У (речь о гравитации окна) |
staticToast | makeText(Context context, int resId, int duration) | Создать простой Toast с текстом из ресурса (R.string.nameRes) |
staticToast | makeText(Context context, CharSequence text, int duration) | Создать простой Toast с текстом |
void | setDuration(int duration) | Задать продолжительность времени отображения |
void | setGravity(int gravity, int xOffset, int yOffset) | Задать положение gravity |
void | setMargin(float horizontalMargin, float verticalMargin) | Задать margin (отступы по краям) |
void | setText(int resId) | Обновить текст в Toast , который ранее был задан в методе makeText() |
void | setText(CharSequence s) | Обновить текст в Toast , который ранее был задан в методе makeText() |
void | setView(View view) | установить Вьюшку |
void | show() | Показывает Toast заданное количество времени |
Что из этого полезного?
Два основных примера — это позиционирование Toast
toast.setGravity(Gravity.TOP|Gravity.LEFT, 0, 0);
(это установит гравитацию в левый верхний угол, нули рядом можно заменить на числа и подтянуть влево или вправо)
и добавление картинки в Toast
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"
>
android:src="@drawable/droid"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginRight="8dp"
/>
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="#FFF"
/>
тут немного сложнее. Сначала в отдельном файле xml описываем внешний вид Layout. Затем этот layout задаем нашему Toast.
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();
Вот и все сложности
Вывод
Если требуется вывести только текст, то смело используем makeText()
Toast.makeText(getApplicationContext(), "This is toast", Toast.LENGTH_SHORT).show();
Если задача сложнее и будет макет, тогда создаем макет, вызываем конструктор и используем setView().