web-dev-qa-db-fra.com

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

From Documentation: paramètre duration - l'une des longueurs prédéfinies suivantes: LENGTH_SHORT, LENGTH_LONG, ou une durée personnalisée en millisecondes. Mais je ne peux pas définir de 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 parti rapidement.

48
tehnolog

Basé sur l'implémentation de Snackbar et SnackbarManager, je peux confirmer l'évaluation d'Eugene H: c'est un bug. 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);
}

Donc, toute valeur qui n'est pas LENGTH_LONG résulte en un snack-bar de courte durée.

J'ai classé n problème à ce sujet.

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

Les Android documents ont [~ # ~] pas [~ # ~] encore mis à jour, mais si vous sautez dans le code source, vous remarquerez que le paramètre de la méthode setDuration (int duration) peut être LENGTH_SHORT, LENGTH_LONG, LENGTH_INDEFINITE ou une commande personnalisée. durée en millisecondes

60
CommonsWare

Définissez la durée initiale sur LENGTH_INDEFINITE, puis définissez votre durée personnalisée par la suite:

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

EDIT

Définir une période directement en millisecondes fonctionne maintenant;

Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.Magenta)
.show();
15
Jimmy Kamau

Puisque 'com.Android.support:design:22.2.1'

vous pouvez définir la durée de votre barre de collation sur LENGTH_INDEFINITEIl fera en sorte que le snack-bar soit affiché jusqu'à ce qu'il soit supprimé ou qu'un autre snack-bar soit affiché.

9
Muhammad Alfaifi

Il semble être corrigé dans

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

Seul Lint indique le trait souligné en rouge, mais cela fonctionne.

6
Jackson

J'ai créé un moyen de contourner ce problème, j'ai créé une classe qui définit des barres de type snack avec une durée personnalisée à l'aide de handler et de 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
Ziv Kesten

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
kundan roy

Bonjour, essayez cette bibliothèque externe https://github.com/nispok/snackbar . Il est déconseillé, mais cela résoudra facilement votre problème. Il est par ailleurs facile à mettre en œuvre. Avant la bibliothèque de support, j'utilisais cette bibliothèque uniquement pour les barres de snack. En raison du problème de durée de la bibliothèque de support, je ne souhaite utiliser que cette bibliothèque.

1
Akshat