Wie lange dauert ein Toast LENGTH_LONG und LENGTH_SHORT?

91

Ich benötige die genaue Dauer von LENGTH_LONG und LENGTH_SHORT in Millisekunden (ms). Außerdem muss ich wissen, ob die Dauer der Toastnachricht mit LENGTH_LONG in jedem Telefon und mit jeder API-Version dieselbe Dauer hat.

Weiß jemand wo die Dauer definiert ist? Ich meine definiert in ms. Ich weiß, dass LENGTH_LONG eine int const mit dem Wert 1 ist. Aber ich konnte nicht finden, wo die tatsächliche Dauer definiert ist.

Lukap
quelle
Haben Sie versucht, Milliseocnds in setDuration () anzugeben? Die Ärzte sagen, dass es vom Benutzer konfigurierbar sein soll, sind jedoch nicht spezifisch für dieses Problem
Konstantin Pribluda

Antworten:

181

Beantwortet hier . Wie du erwähnt hast Toast.LENGTH_SHORTund Toast.LENGTH_LONGnicht in ms sondern 0 oder 1 sind.

Die tatsächlichen Dauern sind:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
Lars
quelle
14

Die Toast.LENGTH_SHORTund Toast.LENGTH_LONGsind nur Flaggen.
Hier finden Sie die offizielle Android-Quelle, in der diese Flags definiert sind:

public class NotificationManagerService extends SystemService {

    static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT;
    /** Amount of time (in milliseconds) a toast window can be shown. */
    //public static final int TOAST_WINDOW_TIMEOUT = 3500; // 3.5 seconds
    static final int SHORT_DELAY = 2000; // 2 seconds

    private void scheduleDurationReachedLocked(ToastRecord r)
    {
       mHandler.removeCallbacksAndMessages(r);
       Message m = Message.obtain(mHandler, MESSAGE_DURATION_REACHED, r);
       int delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
       //....
       mHandler.sendMessageDelayed(m, delay);
     }
}
Gabriele Mariotti
quelle
1
Jetzt wird es geändert zu: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

Es ist wahr, dass wir die Dauer des Toasts nicht ändern dürfen. Aber wenn Sie nach einer Alternative suchen und dies wirklich mit einem Toast tun müssen, können Sie dies versuchen.

Behalten Sie einen weiteren doppelten Toast in der nächsten Zeile

Ex:

Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();

Der Benutzer erkennt keine Änderung der Übergänge zwischen zwei Toasts.

Vielen Dank.

PasinduJay
quelle
3
Da es in den vorherigen Antworten eindeutig als "unmöglich" bezeichnet wird, biete ich eine alternative Methode an und habe sie auch klar erwähnt. Hoffe du kannst verstehen. Ich habe gerade gesucht und herausgefunden, dass dieselbe Art von Frage vorhanden ist, und die Antworten durchgesehen, von denen einige Alternativen sind. Aber ich finde keine negativen Stimmen für sie. Besser um Alternativen zu finden, als nur unmöglich gesagt zu werden, oder? Hoffe das macht Sinn. Kann ein Android Toast länger sein als "Toast.LENGTH_LONG"?
PasinduJay
3

Sie müssen die Dauerüberschreibung festlegen, mit setDurationin der Aktion, Beispiel:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Faxon
quelle
2

Ich frage mich, warum Sie nicht die in der Toast.java-Klasse unterstützte Methode setDuration () verwenden.

 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}
Dong Thang
quelle
Sie können nur einen int-Wert zuweisen: LENGTH_SHORT oder LENGTH_LONG.
Gabriele Mariotti
0

Durch Versuch und Irrtum habe ich festgestellt Toast.LENGTH_LONG, dass die Dauer sehr nahe bei 2500 ms liegt

Mart
quelle