30

Snackbar は、画面上の表示の長さを決定するときに、LENGTH_LONG または LENGTH_SHORT のいずれかのみを使用することがわかりました。

誰かが画面からスワイプするまで表示したいと思います。これは、インターネットがなく、LENGTH_LONG を選択したときに 2750 ミリ秒後に画面から消えることなくユーザーに通知したい場合など、永続的なエラーがある場合に使用します。

もちろん、 setDuration を途方もなく長いミリ秒値に使用できますが、ユーザーが閉じるまで消えないように設定する方法はありませんか?

4

5 に答える 5

12

更新: 前述のように、これは Android サポート ライブラリ 22.2.1 のリリースで可能になりました。LENGTH_INDEFINITE フラグを使用してください。

Android Design Support ライブラリの公式実装を使用する場合、Snackbar の無期限の表示を設定することはできません。

これを行うと、Snackbar のマテリアル デザインの哲学に違反する可能性がありますが、これを許可するサード パーティの Snackbar 実装があります。次に例を示します。

https://github.com/nispok/snackbar

このプロジェクトでは、表示期間に次の値を使用できます。

LENGTH_SHORT: 2s
LENGTH_LONG: 3.5s (default)
LENGTH_INDEFINTE: Indefinite; ideal for persistent errors

公式の Snackbar 実装がリリースされたため、このプロジェクトはもはや開発されていないことに注意してください。

于 2015-06-27T22:33:39.787 に答える
2

私はcom.android.support:appcompat-v7:26.1.0を使用しており、正常にSnackbar.LENGTH_INDEFINITE動作します。サンプルは次のようになります。

private HashMap<Long, Snackbar> mTokenSnackbarMap = new LinkedHashMap<>();

private void dropPoint(@NonNull Location location) {
    final Long token = SystemClock.elapsedRealtime();
    // <submitPoint> is the callback to be executed
    // at a time in the future, if the "cancel" button
    // of the Snackbar isn't clicked until that time.
    Runnable submitPoint = () -> {
        Snackbar bar = mTokenSnackbarMap.get(token);
        if (bar != null) {
            // "cancel" button of the Snackbar wasn't clicked,
            // but our time is up. Dismiss the Snackbar.
            bar.dismiss();
            mTokenSnackbarMap.remove(token);
            Log.i(TAG, "dropPoint: dismiss snackbar");
        }
        mDatabase.add(Point.Factory.create(uid, location));
        Log.i(TAG, "dropPoint: addPoint");
    };

    // The indefinite Snackbar allowing arbitrary cancellation.
    Snackbar snackbar = Snackbar.make(mMainView, R.string.point_pending, Snackbar.LENGTH_INDEFINITE)
        .setAction(R.string.cancel, (v) -> {
                    mTokenSnackbarMap.remove(token);
                    mUiHandler.removeCallbacks(submitPoint, token);
                    Log.i(TAG, "dropPoint: cancel snackbar");
                });
    mTokenSnackbarMap.put(token, snackbar);
    mUiHandler.postAtTime(submitPoint, token,
                SystemClock.uptimeMillis() + Constants.POINT_DELAY_MILLIS);
    Log.i(TAG, "dropPoint: postAtTime");
    snackbar.show();
}
于 2018-01-10T10:54:28.983 に答える
1

ドキュメントに基づいて、LENGTH_INDEFINITE期間を設定しながらフラグを使用できます。

Snackbar.make(view, "my snackbar", Snackbar.LENGTH_INDEFINITE).show();
于 2020-12-07T07:03:47.887 に答える