Czy podczas korzystania z metody setDuration () dla Toast można ustawić niestandardową długość lub przynajmniej coś dłuższego niż Toast.LENGTH_LONG
?
android
android-toast
Hussein El Feky
źródło
źródło
toast
tag? Wygląda na to, że odnosi się do pytania.toast
tagu do. Myślałem, że tagi były tam, aby pomóc w wyszukiwaniu i sortowaniu, itoast
jest to zdecydowanie częste wyszukiwanie.android
itoast
wydaje się idealny.Odpowiedzi:
Wartości
LENGTH_SHORT
iLENGTH_LONG
wynoszą 0 i 1. Oznacza to, że są one traktowane jako flagi, a nie rzeczywiste czasy trwania, więc nie sądzę, aby można było ustawić czas trwania na cokolwiek innego niż te wartości.Jeśli chcesz wyświetlać użytkownikowi wiadomość dłużej, rozważ Powiadomienie na pasku stanu . Powiadomienia na pasku stanu można programowo anulować, gdy nie są już istotne.
źródło
Jeśli zagłębisz się głębiej w kod Androida, możesz znaleźć wiersze, które wyraźnie wskazują, że nie możemy zmienić czasu trwania wiadomości Toast.
a domyślne wartości czasu trwania to
źródło
Możesz spróbować:
podwoić czas. Jeśli podasz 3 zamiast 2, potroi to czas ... itd.
źródło
Toast.cancel()
w odpowiednich miejscachJeśli chcesz się
Toast
upierać, odkryłem, że możesz zhakować sobie drogę, powtarzającTimer
połączenietoast.show()
(co sekunda powinno to zrobić). Wywołanieshow()
niczego nie psuje, jeśliToast
jest już wyświetlane, ale odświeża ilość czasu, jaki pozostaje na ekranie.źródło
ViewGroup
OnTouch
wydarzeniu. Aby to zoptymalizować, powinieneś prawdopodobnie powtórzyć swój czas tak blisko rzeczywistego czasu, jakiToast
jest pokazywany na ekranie (3,5 sekundy dla długiego, 2 sekundy dla krótkiego)Opracowałem niestandardową klasę toastów, dzięki której możesz pokazywać tosty przez określony czas (w milisekundach)
źródło
Stworzyłem klasę pomocników, aby to zrobić. Możesz zobaczyć kod na github: https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
Oto sposób wyświetlania toastu przez 5 sekund (lub 5000 milisekund):
źródło
Wiem, że jestem trochę spóźniony, ale wziąłem odpowiedź Regis_AG i umieściłem ją w klasie pomocniczej i działa świetnie.
W kodzie aplikacji po prostu zrób coś takiego:
źródło
Wiem, że odpowiedź jest dość późna. Miałem ten sam problem i postanowiłem wdrożyć własną wersję gołej kości Toast, po zapoznaniu się z kodem źródłowym Androida na toast.
Zasadniczo musisz utworzyć nowy menedżer okien oraz pokazać i ukryć okno przez żądany czas trwania za pomocą modułu obsługi
Po zainicjowaniu układu możesz użyć własnych metod ukrywania i pokazywania
Teraz wystarczy dodać dwa działające wątki, które wywołują uchwytShow () i uchwytHide (), które można opublikować w module obsługi.
i ostatnia część
To była szybka i brudna implementacja. Nie wziąłem pod uwagę wydajności.
źródło
Wyświetlanie tostów LONG_DELAY przez 3,5 sekundy i wyświetlanie toastów SHORT_DELAY przez 2 sekundy .
Toast wewnętrznie używa INotificationManager i wywołuje metodę enqueueToast za każdym razem, gdy wywoływana jest Toast.show ().
Dwukrotne wywołanie show () za pomocą SHORT_DELAY spowoduje ponowne umieszczenie tego samego toastu. będzie wyświetlany przez 4 sekundy (2 sekundy + 2 sekundy).
podobnie, wywołanie show () za pomocą LONG_DELAY dwukrotnie spowoduje kolejkowanie tego samego toastu. będzie wyświetlany przez 7 sekund (3,5 sekundy + 3,5 sekundy)
źródło
Oto niestandardowa klasa Toast utworzona przy użyciu powyższego kodu:
źródło
Jeśli potrzebujesz długiego Toastu, istnieje praktyczna alternatywa, ale wymaga kliknięcia przycisku OK, aby go usunąć. Możesz użyć AlertDialog w następujący sposób:
Jeśli masz długą wiadomość, prawdopodobnie nie wiesz, ile czasu zajmie jej przeczytanie przez użytkownika, więc czasami dobrym pomysłem jest wymaganie od użytkownika kliknięcia przycisku OK, aby kontynuować. W moim przypadku używam tej techniki, gdy użytkownik kliknie ikonę pomocy.
źródło
Service
, jak interfejs użytkownika.Jak wspomnieli inni, Android Toast może mieć wartość LENGTH_LONG lub LENGTH_SHORT. Nie można tego obejść, ani nie należy śledzić żadnego z opublikowanych „hacków”.
Celem Toastów jest wyświetlanie „nieistotnych” informacji, a ze względu na ich trwały efekt wiadomości mogą być odsunięte od kontekstu, jeśli ich czas trwania przekroczy określony próg. Jeśli zapasowe Tosty zostały zmodyfikowane, aby mogły wyświetlać się dłużej niż LENGTH_LONG, wiadomość pozostawałaby na ekranie, dopóki proces aplikacji nie zostanie zakończony, ponieważ widoki Toast są dodawane do WindowManager, a nie ViewGroup w Twojej aplikacji. Zakładam, że właśnie dlatego jest mocno zakodowany.
Jeśli absolutnie musisz pokazać wiadomość w stylu toast dłuższą niż trzy i pół sekundy, zalecam zbudowanie widoku, który zostanie dołączony do treści działania, w ten sposób zniknie, gdy użytkownik wyjdzie z aplikacji. Moja biblioteka SuperToastów zajmuje się tym problemem i wielu innych, zachęcamy do korzystania z niego! Najprawdopodobniej byłbyś zainteresowany korzystaniem z SuperActivityToasts
źródło
Wystarczy użyć SuperToast, aby zrobić elegancki toast w każdej sytuacji. Spraw, aby toast był kolorowy . Edytuj kolor czcionki, a także jej rozmiar . Mam nadzieję, że będzie to dla ciebie wszystko w jednym.
źródło
Po co jeść Tosty, skoro możesz mieć cały Snackbar : https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Snackbar> Toast, Custom Toast, Crouton
źródło
Oto bardzo prosta metoda, która zadziałała dla mnie:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
Czas trwania LENGTH_SHORT wynosi 2 sekundy, a LENGTH_LONG wynosi 3,5 sekundy, tutaj komunikat toast będzie wyświetlany przez 6 sekund, ponieważ jest zamknięty w pętli for. Jednak wadą tej metody jest to, że po każdych 2 sekundach może pojawić się niewielki efekt zanikania. ale nie jest to zbytnio zauważalne. Mam nadzieję, że to jest pomocne
źródło
Użytkownik nie może zdefiniować czasu trwania Toastu. ponieważ funkcja scheduleTimeoutLocked () NotificationManagerService nie używa czasu trwania pola. kod źródłowy jest następujący.
źródło
Użyj Crouton, jest to bardzo elastyczna biblioteka Toast.
Grzanka
Możesz go używać tak jak tosty:
lub możesz pójść trochę głębiej i dostosować go bardziej, na przykład ustawić czas na nieskończoność! na przykład tutaj chcę wyświetlać wiadomość toast, dopóki użytkownik nie potwierdzi jej, klikając ją.
Układ klienta, który zostanie napompowany do tostów.
źródło
Czas trwania toastu można zhakować za pomocą wątku, który uruchamia toast wyłącznie. Działa to (uruchamia toast na 10 sekund, modyfikuje tryb uśpienia i ctr do własnych upodobań):
źródło
Toast za niestandardowe tło i widok załatwił sprawę. Testowałem to na tablecie Nexus 7 i nie zauważyłem żadnej animacji zanikania / zanikania podczas zapętlania. Oto wdrożenie:
Oto niestandardowy widok tekstu użyty w powyższym kodzie:
@ drawable / fragment_background sprawia, że mój toast ma zaokrąglony róg, jak w wersji KitKat. Możesz także dodać inne widoki w pliku. Zachęca się do wprowadzania jakichkolwiek zmian w celu ulepszenia i komentarzy, ponieważ planuję wdrożyć to w mojej aplikacji na żywo.
źródło
Zaplanuj odliczanie do czasu w przyszłości, z regularnymi powiadomieniami o interwałach po drodze. Przykład pokazujący 30-sekundowe odliczanie w polu tekstowym:
źródło
Ten tekst zniknie za 5 sekund.
Edycja: Jak powiedział Itai Spector w komentarzu, będzie wyświetlany około 3,5 sekundy, więc użyj tego kodu:
źródło
Nie, a większość wymienionych tu włamań nie działa już w Androidzie 9. Jest jednak o wiele lepsze rozwiązanie: jeśli wiadomość musi się zawiesić, użyj okna dialogowego.
źródło
Bardzo proste podejście do tworzenia nieco dłuższej wiadomości jest następujące:
Zauważ, że powyższy przykład eliminuje opcję LENGTH_SHORT, aby zachować prostotę przykładu.
Zasadniczo nie będziesz chciał używać komunikatu Toast do wyświetlania komunikatów przez bardzo długie okresy, ponieważ nie jest to zamierzonym celem klasy Toast. Ale są chwile, kiedy ilość tekstu, który musisz wyświetlić, może zająć użytkownikowi więcej niż 3,5 sekundy, aby przeczytać, i w takim przypadku niewielkie wydłużenie czasu (np. Do 6,5 sekundy, jak pokazano powyżej) może być przydatne, IMO, i zgodne z przeznaczeniem.
źródło
Ustawia toast na określony okres w milisekundach:
źródło
źródło
Po niepowodzeniu z każdym dostępnym rozwiązaniem w końcu miałem obejście za pomocą rekurencji.
Kod:
źródło
Bardzo proste rozwiązanie tego pytania. Dwa lub trzy z nich sprawią, że Toast będzie trwać dłużej. To jedyna droga.
źródło
Możesz ustawić żądany czas w milisekundach w następujący
Toast.makeText();
sposób:źródło