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.
Jawaban:
Dijawab disini . Seperti yang Anda sebutkan
Toast.LENGTH_SHORT
danToast.LENGTH_LONG
tidak 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
sumber
The
Toast.LENGTH_SHORT
danToast.LENGTH_LONG
hanya 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); } }
sumber
static final int LONG_DELAY = PhoneWindowManager.TOAST_WINDOW_TIMEOUT; static final int SHORT_DELAY = 2000; // 2 seconds still the same
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.
sumber
Anda perlu mengatur override durasi, dengan
setDuration
dalam tindakan, contoh:int s = 6000; // milisegundo Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s) .show();
sumber
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; }
sumber
Melalui trial and error saya telah menemukan
Toast.LENGTH_LONG
berlangsung sangat dekat dengan 2500mssumber