При использовании setDuration () для Toast, возможно ли установить пользовательскую длину или хотя бы что-то длиннее Toast.LENGTH_LONG
?
android
android-toast
Хуссейн Эль Феки
источник
источник
toast
тег? Это похоже на вопрос ..toast
тег для. Я думал, что теги были там, чтобы помочь в поиске и сортировке, иtoast
это определенно обычный поиск.android
иtoast
казаться идеальным.Ответы:
Значения
LENGTH_SHORT
иLENGTH_LONG
равны 0 и 1. Это означает, что они обрабатываются как флаги, а не как фактические длительности, поэтому я не думаю, что будет возможно установить длительность в любое значение, кроме этих значений.Если вы хотите, чтобы сообщение показывалось пользователю дольше, рассмотрите уведомление в строке состояния . Уведомления в строке состояния могут быть программно отменены, когда они больше не актуальны.
источник
Если вы покопаетесь глубже в коде Android, вы можете найти строки, которые четко указывают, что мы не можем изменить продолжительность сообщения Toast.
и значения по умолчанию для продолжительности
источник
Вы можете попробовать:
удвоить время Если вы укажете 3 вместо 2, это утроит время .. и т. Д.
источник
Toast.cancel()
соответствующие местаЕсли вы хотите, чтобы a
Toast
сохранялся, я обнаружил, что вы можете обойти его путем повторногоTimer
вызоваtoast.show()
(каждую секунду или около того следует делать). Вызовshow()
ничего не прерывает, еслиToast
он уже отображается, но он обновляет количество времени, которое остается на экране.источник
ViewGroup
OnTouch
мероприятии. Чтобы оптимизировать это, вы, вероятно, должны сделать так, чтобы ваш таймер повторялся как можно ближе к фактическому времени,Toast
которое отображается на экране (3,5 секунды для длинных, 2 секунды для коротких)Я разработал класс Custom Toast, с помощью которого вы можете показывать Toast за желаемое количество времени (в миллисекундах).
источник
Я написал вспомогательный класс для этого. Вы можете увидеть код на github: https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
Вот как вы бы отображали тост за 5 секунд (или 5000 миллисекунд):
источник
Я знаю, что немного опоздал, но я взял ответ Regis_AG и обернул его в класс помощника, и он прекрасно работает.
В коде приложения просто сделайте что-то вроде этого:
источник
Я знаю, что ответ довольно поздно. У меня возникла та же проблема, и я решил реализовать свою собственную версию Toast, после изучения исходного кода Android для toast.
По сути, вам нужно создать новый диспетчер окон, а также показать и скрыть окно в течение требуемой продолжительности с помощью обработчика.
После инициализации макета вы можете использовать свои собственные методы скрытия и показа
Теперь все, что вам нужно, это добавить два запускаемых потока, которые вызывают handleShow () и handleHide (), которые вы можете публиковать в Handler.
и заключительная часть
Это была быстрая и грязная реализация. Не принимал во внимание какую-либо производительность.
источник
Показ тостов LONG_DELAY в течение 3,5 секунд и показ тостов SHORT_DELAY в течение 2 секунд .
Toast внутренне использует INotificationManager и вызывает его метод enqueueToast при каждом вызове Toast.show ().
Вызовите show () с SHORT_DELAY дважды, чтобы снова поставить в очередь один и тот же тост. он будет отображаться в течение 4 секунд (2 секунды + 2 секунды).
аналогично, вызов show () дважды с LONG_DELAY снова поставит в очередь один и тот же тост. будет отображаться для 7 с (3,5 с + 3,5 с)
источник
Вот пользовательский класс Toast, который я создал, используя приведенный выше код:
источник
Если вам нужен длинный тост, есть практическая альтернатива, но он требует, чтобы ваш пользователь нажал кнопку ОК, чтобы он исчез. Вы можете использовать AlertDialog следующим образом:
Если у вас длинное сообщение, скорее всего, вы не знаете, сколько времени понадобится вашему пользователю, чтобы прочитать сообщение, поэтому иногда полезно попросить пользователя нажать кнопку ОК, чтобы продолжить. В моем случае я использую эту технику, когда пользователь нажимает на значок справки.
источник
Service
, где нет пользовательского интерфейса.Как уже упоминалось, Android-тосты могут быть LENGTH_LONG или LENGTH_SHORT. Обойти это невозможно, и вы не должны следовать ни одному из опубликованных «хаков».
Цель тостов состоит в том, чтобы отображать «несущественную» информацию, и из-за их длительного эффекта сообщения могут быть выведены из контекста, если их продолжительность превышает определенный порог. Если бы обычные тосты были изменены так, чтобы они могли отображаться дольше, чем LENGTH_LONG, сообщение будет задерживаться на экране до тех пор, пока процесс приложения не будет завершен, поскольку тостовые представления добавляются в WindowManager, а не в ViewGroup в вашем приложении. Я предположил бы, что это - то, почему это жестко закодировано.
Если вам абсолютно необходимо, чтобы сообщение в стиле тоста длилось более трех с половиной секунд, я рекомендую создать представление, которое присоединяется к содержимому действия, таким образом оно исчезнет, когда пользователь выйдет из приложения. Моя библиотека SuperToasts занимается этой проблемой и многими другими, не стесняйтесь использовать ее! Скорее всего, вам будет интересно использовать SuperActivityToasts
источник
Просто используйте SuperToast, чтобы сделать элегантный тост в любой ситуации. Сделайте свой тост красочным . Отредактируйте свой цвет шрифта, а также его размер . Надеюсь, это будет все в одном для вас.
источник
Зачем есть тост, если у вас есть вся закусочная : https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Снэк-бар> Тост, Таможня, Торт
источник
Вот очень простой метод, который работал для меня:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
Продолжительность LENGTH_SHORT составляет 2 секунды, а LENGTH_LONG составляет 3,5 секунды. Здесь сообщение о тосте будет отображаться в течение 6 секунд, поскольку оно заключено в цикл for. Но недостатком этого метода является то, что через каждые 2 секунды может возникнуть небольшой эффект замирания. но это не сильно заметно. Надеюсь, это полезно
источник
Пользователь не может по собственному усмотрению определить продолжительность тоста. потому что функция scheduleTimeoutLocked () NotificationManagerService не использует длительность поля. Исходный код следующий.
источник
Используйте Crouton, это очень гибкая библиотека Toast.
гренок для супа
Вы можете использовать его как тосты:
или вы можете даже пойти немного глубже и настроить его больше, например, установить время бесконечно! например, здесь я хочу показать тостовое сообщение, пока пользователь не подтвердит его, нажав на него.
Обычай Макет, который будет раздут для тоста.
источник
Длительность тоста может быть взломана с помощью потока, который запускает тост исключительно. Это работает (запускает тост в течение 10 секунд, изменяет сон и ctr по своему вкусу):
источник
Тост с пользовательским фоном и видом сделал свое дело для меня. Я протестировал его на планшете Nexus 7 и не заметил никакой анимации постепенного исчезновения во время зацикливания. Вот реализация:
Вот собственное текстовое представление, используемое в приведенном выше коде:
@ drawable / frag_background заставляет мой тост иметь закругленный угол, как в версии Kitkat. Вы также можете добавить другие виды в файл. Любые изменения для улучшения и комментарии приветствуются, так как я планирую реализовать это в моем живом приложении.
источник
Запланируйте обратный отсчет до определенного времени в будущем с регулярными уведомлениями об интервалах по пути. Пример отображения 30-секундного обратного отсчета в текстовом поле:
источник
Этот текст исчезнет через 5 секунд.
Изменить: Как сказал Itai Spector в комментарии, он будет отображаться около 3,5 секунд, поэтому используйте этот код:
источник
Нет, и большинство / все хаки, перечисленные здесь, больше не работают в Android 9. Но есть гораздо лучшее решение: если ваше сообщение должно зависать, используйте диалоговое окно.
источник
Очень простой подход к созданию более длинного сообщения заключается в следующем:
Обратите внимание, что в приведенном выше примере исключена опция LENGTH_SHORT, чтобы сохранить пример простым.
Как правило, вы не хотите использовать сообщение Toast для отображения сообщений в течение очень длинных интервалов, так как это не является целью класса Toast. Но бывают случаи, когда объем текста, который вам нужно отобразить, может занять у пользователя больше 3,5 секунд для чтения, и в этом случае небольшое увеличение времени (например, до 6,5 секунд, как показано выше) может, IMO, быть полезным и в соответствии с предполагаемым использованием.
источник
Устанавливает тост за определенный период в миллисекундах:
источник
источник
После сбоя в каждом доступном решении я наконец-то нашел обходной путь с использованием рекурсии.
Код:
источник
Очень простое решение вопроса. Два или три раза из них заставит тост длиться дольше. Это единственный путь.
источник
Вы можете установить желаемое время в миллисекундах следующим
Toast.makeText();
способом:источник