Bir Toast LENGTH_LONG ve LENGTH_SHORT'un süresi nedir


95

Milisaniye (ms) cinsinden LENGTH_LONG ve LENGTH_SHORT için tam süreye ihtiyacım var. Ayrıca, LENGTH_LONG ile yapılan Toast mesajının süresinin herhangi bir telefonda ve herhangi bir API sürümünde aynı süreye sahip olup olmayacağını bilmem gerekiyor.

Birisi sürenin nerede tanımlandığını biliyor mu?, Ms cinsinden tanımlı demek istiyorum. LENGTH_LONG değerinin 1 değerine sahip bir int const olduğunu biliyorum. Ancak gerçek sürenin nerede tanımlandığını bulamadım.


setDuration () içinde milisaniyeleri belirtmeyi mi denediniz? Dokümanlar, kullanıcı tarafından yapılandırılabileceğini söylüyor, ancak bu konuya özel değil
Konstantin Pribluda

Yanıtlar:


184

Burada cevaplandı . Bahsettiğiniz gibi Toast.LENGTH_SHORTve Toast.LENGTH_LONGms değil, 0 veya 1.

Gerçek süreler:

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

14

Toast.LENGTH_SHORTVe Toast.LENGTH_LONGsadece bayraklar bulunmaktadır. Bu bayrakların tanımlandığı
resmi android kaynağını burada bulabilirsiniz :

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
Şimdi, şu şekilde değiştirildi: static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
Mayank Sharma

7

Toast'ın süresini değiştirmemize izin verilmediğidir. Ancak bir alternatif arıyorsanız ve bunu gerçekten bir Toast ile yapmanız gerekiyorsa, bunu deneyebilirsiniz.

Bir sonraki satırda başka bir çift tost bulundurun

Ör:

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

Kullanıcı, 2 tost arasındaki geçişlerde herhangi bir değişiklik algılamayacaktır.

Teşekkürler.


3
Önceki cevaplarda 'yapılması imkansız' olarak açıkça bahsedildiği için alternatif bir yöntem sunuyorum ve bundan da açıkça bahsetmiştim. Umarım, anlayabilirsin. Şimdi aradım ve aynı türden bir sorunun orada olduğunu öğrendim ve cevapları gözden geçirdim, bazıları alternatif. Ama onlar için herhangi bir olumsuz oy bulmuyorum. Alternatif bulmak için imkansız demektense, doğru mu? Umarım bu mantıklıdır. Bir Android Toast, "Toast.LENGTH_LONG" den daha uzun olabilir mi?
PasinduJay

3

Eylemde süre geçersiz kılma ayarlamanız gerekir setDuration, örneğin:

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

2

Toast.java sınıfında desteklenen setDuration () yöntemini neden kullanmadığınızı merak ediyorum ???

 /**
 * Set how long to show the view for.
 * @see #LENGTH_SHORT
 * @see #LENGTH_LONG
 */
public void setDuration(@Duration int duration) {
    mDuration = duration;
}

Yalnızca bir int değeri atayabilirsiniz: LENGTH_SHORT veya LENGTH_LONG.
Gabriele Mariotti

0

Sayesinde deneme yanılma buldum Toast.LENGTH_LONGçok yakın süren 2500ms

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.