Comment utiliser la méthode setDuration() dans SnackBar (Android Design Support Library))

à Partir de la Documentation: paramètre durée - être l'un des longueurs prédéfinies: LENGTH_SHORT, LENGTH_LONG, ou personnalisé durée en millisecondes. Mais je ne peux pas définir la durée personnalisée.

Par exemple

Snackbar
    .make(parentLayout, "Feed cat?", 8000) // try here
    .setAction("Yes", snackOnClickListener)
    .setActionTextColor(Color.MAGENTA)
    .setDuration(8000) // try here
    .show();

mais au lieu de 8 secondes Snackbar partit vite.

41
demandé sur einverne 2015-05-30 23:01:36

7 réponses

basé sur la mise en œuvre de Snackbar et SnackbarManager, je peux confirmer L'évaluation D'Eugene H: c'est un bug. À partir de SnackbarManager:

private void scheduleTimeoutLocked(SnackbarRecord r) {
    mHandler.removeCallbacksAndMessages(r);
    mHandler.sendMessageDelayed(Message.obtain(mHandler, MSG_TIMEOUT, r),
            r.duration == Snackbar.LENGTH_LONG
                    ? LONG_DURATION_MS
                    : SHORT_DURATION_MS);
}

ainsi, toute valeur qui n'est pas LENGTH_LONG résulte en un snackbar de courte durée.

j'ai déposé problème à ce sujet.

Modifier: a été fixé dans la révision 22.2.1. Vérifiez les notes de version ici

android docs ont encore été mis à jour, mais si vous sautez dans le code source, vous remarquerez que le paramètre de la méthode setDuration(durée int) peut être soit un paramètre de LENGTH_SHORT, LENGTH_LONG,LENGTH_INDEFINITE ou personnalisé durée en millisecondes

53
répondu CommonsWare 2015-09-07 13:14:16

définissez la durée initiale à LENGEND_INDEFINITE puis définissez votre durée personnalisée après:

Snackbar
.make(parentLayout, "Feed cat?", Snackbar.LENGTH_INDEFINITE)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.setDuration(8000)
.show();

EDIT

définition d'une période directement en millisecondes fonctionne maintenant;

Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.show();
10
répondu Jimmy Kamau 2017-05-17 17:40:26

Depuis 'com.android.support:design:22.2.1'

vous pouvez définir la durée de votre snack-bar LENGTH_INDEFINITEil fera le Snackbar montré jusqu'à ce qu'il soit rejeté ou un autre snackbar est montré.

9
répondu Muhammad Alfaifi 2015-08-27 01:03:18

Il semble être fixe dans

compile 'com.android.support:design:22.2.1'

seule la charpie montre rouge souligné, mais cela fonctionne.

6
répondu Jackson 2015-08-13 04:09:45

j'ai créé un work around pour cela, j'ai créé une classe qui définit snackbars avec une durée personnalisée en utilisant handler et postDelayed:

public class SnackBarMaker {

public static void snack(View content, String message, String actionText,  int actionTextColor, View.OnClickListener onClick){
    Snackbar.make(content, message, Snackbar.LENGTH_LONG)
            .setAction(actionText, onClick)
            .setActionTextColor(actionTextColor)
            .show();
}

public static void snackWithCustomTiming(View content, String message, int duration){
    final Snackbar snackbar = Snackbar.make(content, message, Snackbar.LENGTH_INDEFINITE);
    snackbar.show();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            snackbar.dismiss();
        }
    },duration);
}
}

utiliser comme ceci:

  //your duration
   int duration = 4000 
SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(android.R.id.content)
                                               , getString(R.string.your_message), duration);
5
répondu Ziv Kesten 2016-01-03 10:47:25

ce code fonctionne parfaitement pour moi essayez ceci

Snackbar.make(view, "Hello SnackBar", Snackbar.LENGTH_LONG)
        .setAction("Its Roy", new View.OnClickListener() {
            @Override
            public void onClick(View v) {

            }
        })
        .setDuration(10000)
        .setActionTextColor(getResources().getColor(R.color.colorAccent))
        .show();
3
répondu kundan roy 2016-01-20 15:05:34

Bonjour à donner à cette bibliothèque externe de l'essayer https://github.com/nispok/snackbar