Qual é a duração de um brinde LENGTH_LONG e LENGTH_SHORT

91

Preciso da duração exata de LENGTH_LONG e LENGTH_SHORT em milissegundos (ms). Também preciso saber se a duração da mensagem Toast com LENGTH_LONG terá a mesma duração em qualquer telefone e com qualquer versão de API.

Alguém sabe onde está definida a duração?, Quero dizer definida em ms. Eu sei que LENGTH_LONG é algum int const com valor 1. Mas não consegui encontrar onde está definida a duração real.

Lukap
fonte
você tentou apenas especificar milissegundos em setDuration ()? Os documentos dizem que deve ser configurável pelo usuário, mas não são específicos sobre esse problema
Konstantin Pribluda

Respostas:

181

Respondido aqui . Como você mencionou Toast.LENGTH_SHORTe Toast.LENGTH_LONGnão estão em ms, mas em 0 ou 1.

As durações reais são:

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

Os Toast.LENGTH_SHORTe Toast.LENGTH_LONGsão apenas sinalizadores.
Você pode encontrar aqui a fonte oficial do Android onde esses sinalizadores são definidos:

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
fonte
1
Agora, é alterado para: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

é verdade que não temos permissão para alterar a duração do brinde. Mas se você está procurando uma alternativa e realmente precisa fazer isso com um Toast, você pode tentar isso.

Mantenha outra torrada duplicada na próxima linha

Ex:

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

O usuário não detectará nenhuma mudança nas transições entre 2 toasts.

Obrigado.

PasinduJay
fonte
3
Uma vez que é claramente mencionado como 'impossível de fazer' nas respostas anteriores, estou fornecendo um método alternativo e também o mencionei claramente. Espero que você possa entender. Acabei de pesquisar agora e descobri que o mesmo tipo de pergunta estava lá e analiso as respostas algumas delas são alternativas. Mas não encontro nenhum voto negativo para eles. Melhor para encontrar alternativas do que ser dito impossível apenas certo? Espero que isso faça sentido. Um Android Toast pode ser maior do que “Toast.LENGTH_LONG”?
PasinduJay
3

Você precisa definir a substituição da duração, com setDurationna ação, exemplo:

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

Eu estou me perguntando por que você não usa o método setDuration () com suporte na classe Toast.java ???

 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}
Dong Thang
fonte
Você só pode atribuir um valor int: LENGTH_SHORT ou LENGTH_LONG.
Gabriele Mariotti
0

Por tentativa e erro , descobri que Toast.LENGTH_LONGdura muito perto de 2500ms

Mart
fonte