Какова продолжительность тостов LENGTH_LONG и LENGTH_SHORT - PullRequest
78 голосов
/ 01 ноября 2011

Мне нужна точная продолжительность LENGTH_LONG и LENGTH_SHORT в миллисекундах (мс). Также мне нужно знать, будет ли длительность сообщения Toast с LENGTH_LONG одинаковой на любом телефоне и с любой версией API.

Кто-нибудь знает, где определяется продолжительность? Я имею в виду, определяется в мс. Я знаю, что LENGTH_LONG - это некоторое int const со значением 1. Но я не смог найти, где определена фактическая продолжительность.

Ответы [ 6 ]

162 голосов
/ 01 ноября 2011

ответил здесь .Как вы упомянули, Toast.LENGTH_SHORT и Toast.LENGTH_LONG не в мс, а в 0 или 1.

Фактическая продолжительность:

private static final int LONG_DELAY = 3500; // 3.5 seconds
private static final int SHORT_DELAY = 2000; // 2 seconds
13 голосов
/ 08 мая 2015

Здесь официальный источник Android , где определены эти флаги :

public class NotificationManagerService extends SystemService {

    static final int LONG_DELAY = 3500; // 3.5 seconds
    static final int SHORT_DELAY = 2000; // 2 seconds

    private void scheduleTimeoutLocked(ToastRecord r){
        mHandler.removeCallbacksAndMessages(r);
        Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
        long delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
        mHandler.sendMessageDelayed(m, delay);
    }
}
7 голосов
/ 09 марта 2016

это правда, что нам не разрешено изменять продолжительность тоста. Но если вы ищете альтернативу и вам действительно нужно сделать это с помощью тоста, то вы можете попробовать это.

Сохраните еще один дубликат тоста в следующей строке

Ex:

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

Пользователь не обнаружит никаких изменений в переходах между двумя тостами.

Спасибо.

4 голосов
/ 18 сентября 2018

Вам нужно установить переопределение продолжительности, с setDuration в действии, например:

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
2 голосов
/ 16 июля 2018

Мне интересно, почему вы не используете метод setDuration (), поддерживаемый в классе Toast.java ???

 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}
0 голосов
/ 08 мая 2015

Через проб и ошибок Я обнаружил, Toast.LENGTH_LONG длится очень близко к 2500 мс

...