ระยะเวลาของขนมปังปิ้ง LENGTH_LONG และ LENGTH_SHORT คืออะไร


95

ฉันต้องการระยะเวลาที่แน่นอนของ LENGTH_LONG และ LENGTH_SHORT ในหน่วยมิลลิวินาที (มิลลิวินาที) นอกจากนี้ฉันต้องการทราบด้วยว่าระยะเวลาของข้อความ Toast ที่มี LENGTH_LONG จะมีระยะเวลาเท่ากันในโทรศัพท์ทุกรุ่นและในเวอร์ชัน API ใด ๆ

มีใครรู้บ้างว่าระยะเวลากำหนดไว้ที่ไหนฉันหมายถึงกำหนดเป็นมิลลิวินาที ฉันรู้ว่า LENGTH_LONG คือ int const ที่มีค่า 1 แต่ฉันไม่พบว่ากำหนดระยะเวลาจริงไว้ที่ใด


คุณพยายามระบุ milliseocnds ใน setDuration () หรือไม่ เอกสารระบุว่าผู้ใช้สามารถกำหนดค่าได้ แต่ไม่เฉพาะเจาะจงในปัญหานี้
Konstantin Pribluda

คำตอบ:


184

ตอบที่นี่ . เหมือนที่คุณพูดถึงToast.LENGTH_SHORTและToast.LENGTH_LONGไม่ได้อยู่ใน ms แต่เป็น 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

ฉันสงสัยว่าทำไมคุณไม่ใช้ method 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
Gabriele Mariotti

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.