Какова продолжительность тоста LENGTH_LONG и LENGTH_SHORT

95

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

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

Лукап
источник
вы пробовали просто указать миллисекунды в setDuration ()? Документы говорят, что это должно быть настраиваемое пользователем, но не конкретизируют этот вопрос
Константин Приблуда

Ответы:

184

Ответили здесь . Как вы упомянули, 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
Ларс
источник
14

Toast.LENGTH_SHORTИ Toast.LENGTH_LONGпросто флаги.
Вы можете найти здесь официальный источник Android, в котором определены эти флаги :

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);
     }
}
Габриэле Мариотти
источник
1
Теперь он изменен на: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

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

В следующей строке оставьте еще один повторяющийся тост

Пример:

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

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

Спасибо.

PasinduJay
источник
3
Поскольку в предыдущих ответах это явно упоминается как «невозможно сделать», я предлагаю альтернативный метод, и я также четко упомянул его. Надеюсь, вы понимаете. Я просто искал сейчас и обнаружил, что там был такой же вопрос, и просмотрел ответы, некоторые из которых являются альтернативными. Но я не нахожу за них голосов против. Лучше найти альтернативу, чем сказать невозможное, правда? Надеюсь, это имеет смысл. Может ли Android Toast быть длиннее, чем Toast.LENGTH_LONG?
PasinduJay
3

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

int s = 6000; // milisegundo    
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Факсон
источник
2

Мне интересно, почему вы не используете метод 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;
}
Донг Тханг
источник
Вы можете назначить только значение типа int: LENGTH_SHORT или LENGTH_LONG.
Габриэле Мариотти
0

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

Mart
источник