Яка тривалість тосту LENGTH_LONG та LENGTH_SHORT


94

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

Хтось знає, де визначено тривалість?, Я маю на увазі визначену в мс. Я знаю, що LENGTH_LONG - це деякий int const зі значенням 1. Але я не зміг знайти, де визначена фактична тривалість.


ви намагалися просто вказати milliseocnds у setDuration ()? Документи кажуть, що це налаштовується користувачем, але не конкретно щодо цього питання
Костянтин Приблуда,

Відповіді:


183

Відповів тут . Як ви вже згадували, 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();

Користувач не виявить жодних змін у переходах між 2 тостами.

Дякую.


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 мс

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.