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.
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
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();
Puisque 'com.Android.support:design:22.2.1'
vous pouvez définir la durée de votre barre de collation sur LENGTH_INDEFINITE
Il fera en sorte que le snack-bar soit affiché jusqu'à ce qu'il soit supprimé ou qu'un autre snack-bar soit affiché.
Il semble être corrigé dans
compile 'com.Android.support:design:22.2.1'
Seul Lint indique le trait souligné en rouge, mais cela fonctionne.
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);
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();
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.