LENGTH_LONGとLENGTH_SHORTの正確な期間(ミリ秒)が必要です。また、LENGTH_LONGを使用したToastメッセージの期間が、どの電話でもAPIバージョンでも同じ期間になるかどうかを知る必要があります。
期間がどこで定義されているかを誰かが知っていますか? LENGTH_LONGは値1のint constであることは知っていますが、実際の期間がどこで定義されているかはわかりませんでした。
回答済み こちら 。あなたが言ったように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
ここでは、公式の Androidソース で、これらのflagsが定義されています:
public class NotificationManagerService extends SystemService {
static final int LONG_DELAY = 3500; // 3.5 seconds
static final int SHORT_DELAY = 2000; // 2 seconds
private void scheduleTimeoutLocked(ToastRecord r){
mHandler.removeCallbacksAndMessages(r);
Message m = Message.obtain(mHandler, MESSAGE_TIMEOUT, r);
long delay = r.duration == Toast.LENGTH_LONG ? LONG_DELAY : SHORT_DELAY;
mHandler.sendMessageDelayed(m, delay);
}
}
トーストの期間を変更することは許可されていません。しかし、代替手段を探していて、Toastでこれを本当に行う必要がある場合は、これを試すことができます。
次の行に別の重複トーストを保持する
例:
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
Toast.makeText(this, "Hello StackOverFlow", Toast.LENGTH_LONG).show();
ユーザーは、2回のトースト間の遷移の変化を検出しません。
ありがとう。
アクションにsetDuration
を使用して、期間のオーバーライドを設定する必要があります。例:
int s = 6000; // milisegundo
Snackbar.make(coordinatorLayout, "This is my Snackbar", Snackbar.LENGTH_LONG).setDuration(s)
.show();
Toast.JavaクラスでサポートされているメソッドsetDuration()を使用しないのはなぜだろうか?
/**
* Set how long to show the view for.
* @see #LENGTH_SHORT
* @see #LENGTH_LONG
*/
public void setDuration(@Duration int duration) {
mDuration = duration;
}
試行錯誤を介してToast.LENGTH_LONG
は非常に近い2500ms