Comment utiliser la méthode setDuration () dans SnackBar (Bibliothèque d’aide à la conception Android)

From Documentation: durée du paramètre – soit l’une des longueurs prédéfinies: LENGTH_SHORT, LENGTH_LONG, soit 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 est parti rapidement.

Basé sur l’implémentation de Snackbar et SnackbarManager , je peux confirmer l’évaluation d’Eugene H: c’est un bogue. 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 donne lieu à un snack de courte durée.

J’ai déposé un problème à ce sujet.

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

Les documents Android n’ont pas encore été 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 durée personnalisée en millisecondes.

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

Vous pouvez définir la durée de votre Snackbar sur LENGTH_INDEFINITE pour que la Snackbar soit affichée jusqu’à ce qu’elle soit supprimée ou qu’un autre snack soit affiché.

Définissez la durée initiale sur LENGTH_INDEFINITE puis définissez votre durée personnalisée ultérieurement:

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

MODIFIER

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

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

Il semble être fixé dans

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

Seul Lint montre le rouge souligné, mais ça marche.

J’ai créé un travail autour de cela, j’ai créé une classe qui définit des snack avec une durée personnalisée en utilisant handler et postDelayed:

 public class SnackBarMaker { public static void snack(View content, Ssortingng message, Ssortingng 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, Ssortingng 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) , getSsortingng(R.ssortingng.your_message), duration); 

Ce code fonctionne parfaitement pour moi essayer 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(); 

Bonjour, donnez à cette bibliothèque externe un essai https://github.com/nispok/snackbar . Il est obsolète mais il résoudra facilement votre problème. Il est en outre facile à mettre en œuvre. Avant la bibliothèque de support, j’utilisais cette bibliothèque uniquement pour les casse-croûte. En raison du problème de durée de la bibliothèque de support, je suis heureux d’utiliser uniquement cette bibliothèque.