Berapa durasi Toast LENGTH_LONG dan LENGTH_SHORT

95

Saya perlu durasi persis LENGTH_LONG dan LENGTH_SHORT dalam milidetik (md). Saya juga perlu tahu apakah durasi pesan Toast dengan LENGTH_LONG akan memiliki durasi yang sama di telepon mana pun dan dengan versi API apa pun.

Apakah ada yang tahu di mana durasi didefinisikan?, Maksud saya ditentukan dalam ms. Saya tahu bahwa LENGTH_LONG adalah beberapa int const dengan nilai 1. Tetapi saya tidak dapat menemukan di mana durasi sebenarnya yang ditentukan.

Lukap
sumber
apakah Anda mencoba menentukan milliseocnds di setDuration ()? Dokumen mengatakan itu akan dapat dikonfigurasi pengguna, tetapi tidak spesifik tentang masalah ini
Konstantin Pribluda

Jawaban:

184

Dijawab disini . Seperti yang Anda sebutkan Toast.LENGTH_SHORTdan Toast.LENGTH_LONGtidak dalam ms tapi 0 atau 1.

Durasi sebenarnya adalah:

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

The Toast.LENGTH_SHORTdan Toast.LENGTH_LONGhanya bendera.
Anda dapat menemukan di sini sumber android resmi tempat flag - flag ini didefinisikan:

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
sumber
1
Sekarang, diubah menjadi: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma
7

memang benar bahwa kami tidak diizinkan mengubah durasi Toast. Tetapi jika Anda sedang mencari alternatif dan Anda benar-benar perlu melakukannya dengan Toast, maka Anda dapat mencobanya.

Simpan roti panggang duplikat lainnya di baris berikutnya

Ex:

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

Pengguna tidak akan mendeteksi perubahan apa pun dalam transisi antara 2 toast.

Terima kasih.

PasinduJay
sumber
3
Karena secara jelas disebutkan sebagai 'tidak mungkin dilakukan' di balasan sebelumnya, saya menyediakan metode alternatif dan saya juga menyebutkannya dengan jelas. Semoga kamu mengerti. Saya baru saja mencari sekarang dan menemukan jenis pertanyaan yang sama ada di sana dan melalui jawaban beberapa di antaranya adalah alternatif. Tapi saya tidak menemukan suara negatif untuk mereka. Lebih baik mencari alternatif daripada dikatakan mustahil saja bukan? Semoga ini masuk akal. Bisakah Android Toast lebih panjang dari “Toast.LENGTH_LONG”?
PasinduJay
3

Anda perlu mengatur override durasi, dengan setDurationdalam tindakan, contoh:

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

Saya bertanya-tanya mengapa Anda tidak menggunakan metode setDuration () yang didukung di kelas 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
sumber
Anda hanya dapat menetapkan nilai int: LENGTH_SHORT, atau LENGTH_LONG.
Gabriele Mariotti
0

Melalui trial and error saya telah menemukan Toast.LENGTH_LONGberlangsung sangat dekat dengan 2500ms

Pasar
sumber