web-dev-qa-db-ja.com

トーストの所要時間LENGTH_LONGおよびLENGTH_SHORT

LENGTH_LONGとLENGTH_SHORTの正確な期間(ミリ秒)が必要です。また、LENGTH_LONGを使用したToastメッセージの期間が、どの電話でもAPIバージョンでも同じ期間になるかどうかを知る必要があります。

期間がどこで定義されているかを誰かが知っていますか? LENGTH_LONGは値1のint constであることは知っていますが、実際の期間がどこで定義されているかはわかりませんでした。

78
Lukap

回答済み こちら 。あなたが言ったように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
162
Lars

ここでは、公式の 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);
    }
}
13

トーストの期間を変更することは許可されていません。しかし、代替手段を探していて、Toastでこれを本当に行う必要がある場合は、これを試すことができます。

次の行に別の重複トーストを保持する

例:

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

ユーザーは、2回のトースト間の遷移の変化を検出しません。

ありがとう。

7
Pasindu Jay

アクションにsetDurationを使用して、期間のオーバーライドを設定する必要があります。例:

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

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;
}
2
Dong Thang

試行錯誤を介してToast.LENGTH_LONGは非常に近い2500ms

0
Mart