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.
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
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();
Depuis 'com.android.support:design:22.2.1'
vous pouvez définir la durée de votre snack-bar LENGTH_INDEFINITE
il fera le Snackbar montré jusqu'à ce qu'il soit rejeté ou un autre snackbar est montré.
Il semble être fixe dans
compile 'com.android.support:design:22.2.1'
seule la charpie montre rouge souligné, mais cela fonctionne.
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);
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();