Ist es bei Verwendung von setDuration () für einen Toast möglich, eine benutzerdefinierte Länge oder zumindest etwas länger als festzulegen Toast.LENGTH_LONG
?
android
android-toast
Hussein El Feky
quelle
quelle
toast
Tag entfernt? Es sieht relevant für die Frage aus.toast
Tag um. Ich dachte, die Tags helfen beim Suchen und Sortieren undtoast
sind definitiv eine häufige Suche.android
undtoast
scheinen perfekt.Antworten:
Die Werte von
LENGTH_SHORT
undLENGTH_LONG
sind 0 und 1. Dies bedeutet, dass sie eher als Flags als als tatsächliche Dauer behandelt werden, sodass ich nicht denke, dass es möglich sein wird, die Dauer auf etwas anderes als diese Werte festzulegen.Wenn Sie eine Nachricht an den Benutzer für mehr angezeigt werden sollen, eine betrachten Statusleiste Benachrichtigung . Statusleistenbenachrichtigungen können programmgesteuert abgebrochen werden, wenn sie nicht mehr relevant sind.
quelle
Wenn Sie tiefer in den Android-Code eintauchen, finden Sie die Zeilen, die deutlich darauf hinweisen, dass wir die Dauer der Toast-Nachricht nicht ändern können.
und Standardwerte für die Dauer sind
quelle
Vielleicht möchten Sie versuchen:
die Zeit verdoppeln. Wenn Sie 3 anstelle von 2 angeben, verdreifacht sich die Zeit usw.
quelle
Toast.cancel()
an geeigneten Stellen erfolgenWenn Sie möchten, dass a
Toast
bestehen bleibt, haben Sie festgestellt, dass Sie sich durch wiederholtesTimer
Anrufentoast.show()
(jede Sekunde oder so sollte dies tun) herumhacken können. Das Anrufenshow()
unterbricht nichts, wenn dasToast
bereits angezeigt wird, aktualisiert jedoch die Zeit, die auf dem Bildschirm verbleibt.quelle
ViewGroup
OnTouch
Veranstaltung ziemlich trivial zu handhaben ist . Um dies zu optimieren, sollten Sie Ihren Timer wahrscheinlich so nahe wie möglich an der tatsächlichen Zeit wiederholen lassen, dieToast
auf dem Bildschirm angezeigt wird (3,5 Sekunden für lange, 2 Sekunden für kurze)Ich habe eine benutzerdefinierte Toast-Klasse entwickelt, mit der Sie Toast für eine gewünschte Dauer (in Millisekunden) anzeigen können.
quelle
Ich habe dafür eine Helferklasse programmiert. Sie können den Code unter github sehen: https://github.com/quiqueqs/Toast-Expander/blob/master/src/com/thirtymatches/toasted/ToastedActivity.java
So würden Sie einen Toast für 5 Sekunden (oder 5000 Millisekunden) anzeigen:
quelle
Ich weiß, dass ich etwas spät dran bin, aber ich habe die Antwort von Regis_AG in eine Hilfsklasse eingepackt und es funktioniert großartig.
Gehen Sie in Ihrem Anwendungscode einfach so vor:
quelle
Ich weiß, dass die Antwort ziemlich spät ist. Ich hatte das gleiche Problem und entschied mich, meine eigene Version von Bare Bones Toast zu implementieren, nachdem ich den Quellcode von Android für Toast untersucht hatte.
Grundsätzlich müssen Sie einen neuen Fenstermanager erstellen und das Fenster mit einem Handler für die gewünschte Dauer ein- und ausblenden
Nach der Initialisierung des Layouts können Sie Ihre eigenen Ein- und Ausblendmethoden verwenden
Jetzt müssen Sie nur noch zwei ausführbare Threads hinzufügen, die handleShow () und handleHide () aufrufen, die Sie an den Handler senden können.
und der letzte Teil
Dies war eine schnelle und schmutzige Implementierung. Ich habe keine Leistung berücksichtigt.
quelle
Toastanzeige LONG_DELAY für 3,5 Sekunden und Toastanzeige SHORT_DELAY für 2 Sekunden .
Toast verwendet intern INotificationManager und ruft die enqueueToast-Methode jedes Mal auf, wenn eine Toast.show () aufgerufen wird.
Wenn Sie die Show () zweimal mit SHORT_DELAY aufrufen, wird derselbe Toast erneut in die Warteschlange gestellt. Es wird 4 Sekunden lang (2 Sekunden + 2 Sekunden) angezeigt .
Wenn Sie die Show () mit LONG_DELAY zweimal aufrufen, wird derselbe Toast erneut in die Warteschlange gestellt. Es wird 7 Sekunden lang angezeigt (3,5 Sekunden + 3,5 Sekunden).
quelle
Hier ist eine benutzerdefinierte Toast-Klasse, die ich mit dem obigen Code erstellt habe:
quelle
Wenn Sie einen langen Toast benötigen, gibt es eine praktische Alternative, aber Ihr Benutzer muss auf eine OK-Schaltfläche klicken, damit er verschwindet. Sie können einen AlertDialog wie folgt verwenden:
Wenn Sie eine lange Nachricht haben, wissen Sie wahrscheinlich nicht, wie lange es dauern wird, bis Ihr Benutzer die Nachricht gelesen hat. Daher ist es manchmal eine gute Idee, von Ihrem Benutzer zu verlangen, dass er auf eine OK-Schaltfläche klickt, um fortzufahren. In meinem Fall verwende ich diese Technik, wenn ein Benutzer auf ein Hilfesymbol klickt.
quelle
Service
, wo es keine Benutzeroberfläche gibt.Wie von anderen erwähnt, können Android Toasts entweder LENGTH_LONG oder LENGTH_SHORT sein. Daran führt kein Weg vorbei, und Sie sollten auch keinem der veröffentlichten "Hacks" folgen.
Der Zweck von Toasts besteht darin, "nicht wesentliche" Informationen anzuzeigen. Aufgrund ihrer anhaltenden Wirkung können Nachrichten weit aus dem Zusammenhang gerissen werden, wenn ihre Dauer einen bestimmten Schwellenwert überschreitet. Wenn Standard-Toasts so geändert wurden, dass sie länger als LENGTH_LONG angezeigt werden können, bleibt die Nachricht auf dem Bildschirm, bis der Anwendungsprozess beendet wird, da dem WindowManager Toastansichten hinzugefügt werden und keine ViewGroup in Ihrer App. Ich würde annehmen, dass dies der Grund ist, warum es fest codiert ist.
Wenn Sie unbedingt eine Nachricht im Toaststil anzeigen müssen, die länger als dreieinhalb Sekunden dauert, empfehle ich, eine Ansicht zu erstellen, die an den Inhalt der Aktivität angehängt wird. Auf diese Weise verschwindet sie, wenn der Benutzer die Anwendung beendet. Meine SuperToasts- Bibliothek befasst sich mit diesem und vielen anderen Problemen. Sie können es gerne verwenden! Sie wären höchstwahrscheinlich an der Verwendung von SuperActivityToasts interessiert
quelle
Verwenden Sie einfach SuperToast , um in jeder Situation einen eleganten Toast zuzubereiten . Machen Sie Ihren Toast bunt . Bearbeiten Sie Ihre Schriftfarbe und auch deren Größe . Hoffe, es wird alles in einem für Sie sein.
quelle
Warum Toast essen, wenn Sie die gesamte Snackbar haben können : https://developer.android.com/reference/android/support/design/widget/Snackbar.html
Snackbar> Toast, Custom Toast, Crouton
quelle
Hier ist eine sehr einfache Methode, die für mich funktioniert hat:
for (int i=0; i < 3; i++) { Toast.makeText(this, "MESSAGE", Toast.LENGTH_SHORT).show(); }
Die Dauer von LENGTH_SHORT beträgt 2 Sekunden und LENGTH_LONG 3,5 Sekunden. Hier wird die Toastnachricht 6 Sekunden lang angezeigt, da sie in einer for-Schleife eingeschlossen ist. Ein Nachteil dieser Methode ist jedoch, dass nach jeweils 2 Sekunden ein kleiner Fading-Effekt auftreten kann. aber es ist nicht viel auffällig. Hoffe es ist hilfreich
quelle
Der Benutzer kann die Dauer des Toasts nicht festlegen. da die ScheduleTimeoutLocked () -Funktion von NotificationManagerService die Felddauer nicht verwendet. Der Quellcode lautet wie folgt.
quelle
Verwenden Sie Crouton, es ist eine sehr flexible Toast-Bibliothek.
Crouton
Sie können es wie Toast verwenden:
oder Sie können sogar ein wenig tiefer gehen und es mehr anpassen, wie die Zeit auf unendlich einstellen! Zum Beispiel möchte ich hier eine Toastnachricht anzeigen, bis der Benutzer sie durch Klicken bestätigt.
Kundenspezifisches Layout, das für den Toast aufgeblasen wird.
quelle
Die Toastdauer kann mit einem Thread gehackt werden, der ausschließlich den Toast ausführt. Dies funktioniert (führt den Toast 10 Sekunden lang aus, ändert den Schlaf und die Steuerung nach Ihren Wünschen):
quelle
Ein Toast mit benutzerdefiniertem Hintergrund und Ansicht hat den Trick für mich getan. Ich habe es im Nexus 7 Tablet getestet und beim Looping keine Fadein-Fadeout-Animation festgestellt. Hier ist die Implementierung:
Hier ist die benutzerdefinierte Textansicht, die im obigen Code verwendet wird:
@ drawable / fragment_background lässt meinen Toast wie in der Kitkat-Version eine abgerundete Ecke haben. Sie können der Datei auch andere Ansichten hinzufügen. Änderungen und Kommentare sind erwünscht, da ich dies in meiner Live-App implementieren möchte.
quelle
Planen Sie einen Countdown bis zu einem späteren Zeitpunkt mit regelmäßigen Benachrichtigungen in Intervallen auf dem Weg. Beispiel für die Anzeige eines 30-Sekunden-Countdowns in einem Textfeld:
quelle
Dieser Text verschwindet in 5 Sekunden.
Bearbeiten: Wie Itai Spector im Kommentar sagte, wird es ungefähr 3,5 Sekunden lang angezeigt. Verwenden Sie also diesen Code:
quelle
Nein, und die meisten / alle hier aufgeführten Hacks funktionieren nicht mehr in Android 9. Es gibt jedoch eine viel bessere Lösung: Wenn Ihre Nachricht herumhängen muss, verwenden Sie ein Dialogfeld.
quelle
Ein sehr einfacher Ansatz zum Erstellen einer etwas längeren Nachricht lautet wie folgt:
Beachten Sie, dass im obigen Beispiel die Option LENGTH_SHORT entfernt wird, um das Beispiel einfach zu halten.
Im Allgemeinen möchten Sie keine Toast-Nachricht verwenden, um Nachrichten für sehr lange Intervalle anzuzeigen, da dies nicht der beabsichtigte Zweck der Toast-Klasse ist. Es gibt jedoch Situationen, in denen die Anzeige der Textmenge, die Sie anzeigen müssen, länger als 3,5 Sekunden dauern kann. In diesem Fall kann eine geringfügige Verlängerung der Zeit (z. B. auf 6,5 Sekunden, wie oben gezeigt), IMO, hilfreich sein und im Einklang mit der beabsichtigten Verwendung.
quelle
Stellt den Toast in Millisekunden auf einen bestimmten Zeitraum ein:
quelle
quelle
Nachdem ich mit jeder verfügbaren Lösung versagt hatte, hatte ich endlich eine Problemumgehung mit Rekursion.
Code:
quelle
Eine sehr einfache Lösung für die Frage. Zweimal oder dreifach halten Toast länger. Es ist der einzige Weg herum.
quelle
Sie können die gewünschte Zeit in Millisekunden
Toast.makeText();
wie folgt einstellen :quelle