tecnología
De la documentación: duración del parámetro: puede ser una de las longitudes predefinidas: LENGTH_SHORT, LENGTH_LONG, o una duración personalizada en milisegundos. Pero no puedo establecer una duración personalizada.
Por ejemplo
Snackbar
.make(parentLayout, "Feed cat?", 8000) // try here
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.setDuration(8000) // try here
.show();
pero en lugar de 8 segundos, Snackbar se fue rápidamente.
CommonsWare
Basado en la implementación de Snackbar
y SnackbarManager
, puedo confirmar la evaluación de Eugene H: es un error. 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);
}
Entonces, cualquier valor que no sea LENGTH_LONG
da como resultado un snackbar de corta duración.
he presentado un problema sobre eso
Editar: Se ha corregido en la revisión 22.2.1. Consulte las notas de la versión aquí
Los documentos de Android tienen NO se ha actualizado todavía, pero si salta al código fuente, notará que el parámetro para el método setDuration (duración int) puede ser LENGTH_SHORT, LENGTH_LONG, LONGITUD_INDEFINIDA o una duración personalizada en milisegundos
-
@ScottW: “¿dónde encontraste ese código fuente?” — … y saqué la espada de la piedra, y la Dama del Lago entonó “lo siento, pero todo el asunto del Rey de los Británicos fue un trato de una sola vez; ¿puedo interesarte en algún código fuente de MNC en su lugar?” ?”. O, posiblemente, descargué la fuente a través del SDK Manager. Cree lo que quieras. 🙂 “Me encantaría saber los valores de LONG_DURATION_MS y SHORT_DURATION_MS” — 1500 y 2750, respectivamente.
– CommonsWare
25 de junio de 2015 a las 14:49
-
@ScottW: “los lugares que he buscado (AOSP, fuente en el administrador de descargas) no parecen tener clases de Snackbar ni de SnackbarManager”. — en mi máquina, está en
$ANDROID_SDK/sources/android-MNC/android/support/design/widget/SnackbarManager.java
.– CommonsWare
25/06/2015 a las 14:50
-
@ScottW: ¡Me alegro de que lo hayas encontrado, y estoy igualmente contento de que creas en los mitos artúricos! Sin embargo, una nota rápida para cualquiera que se tope con esto en el futuro: invertí los dos números en mi comentario. La duración larga es 2750 y la duración corta es 1500.
– CommonsWare
25 de junio de 2015 a las 15:32
-
Parece que este problema se solucionó en M con la versión preliminar 2, pero la solución aún no se ha publicado en la biblioteca de soporte de diseño.
– John Cummings
14/07/2015 a las 20:03
-
En 22.2.1 es posible establecer una duración personalizada, pero tuve que deshabilitar la inspección de pelusa para el método setDuration porque estaba dando un error (la inspección aún no se ha actualizado correctamente).
– jmart
11 de agosto de 2015 a las 10:06
jimmy kamau
Establezca la duración inicial en LENGTH_INDEFINITE y luego establezca su duración personalizada después:
Snackbar
.make(parentLayout, "Feed cat?", Snackbar.LENGTH_INDEFINITE)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.setDuration(8000)
.show();
EDITAR
Establecer un período directamente en milisegundos ahora funciona;
Snackbar
.make(parentLayout, "Feed cat?", 8000)
.setAction("Yes", snackOnClickListener)
.setActionTextColor(Color.MAGENTA)
.show();
-
Si usamos 8000, Android compila. Pero no compila, si establecemos una constante (DURACIÓN = 8000). Escribe
@SuppressLint("WrongConstant")
para esta situación.– CoolMind
13 de noviembre de 2019 a las 17:24
Ya que 'com.android.support:design:22.2.1'
puedes establecer la duración de tu Snackbar en LENGTH_INDEFINITE
hará que se muestre el Snackbar hasta que se descarte o se muestre otro snackbar.
kundan roy
Este código funciona perfectamente para mí, prueba esto
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();
jackson
Parece estar fijo en
compile 'com.android.support:design:22.2.1'
Solo Lint lo muestra subrayado en rojo, pero funciona.
-
Sí, para mí también. Eso es raro. Estoy usando v23.1.1
– camelloCaseCoder
11 de marzo de 2016 a las 9:14
-
agregar
//noinspection WrongConstant
para callar a Lint y debería funcionar bien– Espen Riskedal
24 de enero de 2017 a las 10:09
ziv kesten
Creé una solución para esto, hice una Clase que establece snackbars con una duración personalizada usando el controlador y 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);
}
}
para usar así:
//your duration
int duration = 4000
SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(android.R.id.content)
, getString(R.string.your_message), duration);
-
Sí, para mí también. Eso es raro. Estoy usando v23.1.1
– camelloCaseCoder
11 de marzo de 2016 a las 9:14
-
agregar
//noinspection WrongConstant
para callar a Lint y debería funcionar bien– Espen Riskedal
24 de enero de 2017 a las 10:09
akshat
Hola, prueba esta biblioteca externa.
https://github.com/nispok/snackbar. Está en desuso, pero resolverá fácilmente su problema. Además es fácil de implementar. Antes de la biblioteca de soporte, estaba usando esta biblioteca solo para snackbars. Debido al problema de duración de la biblioteca de soporte, estoy feliz de usar solo esta biblioteca.
¿Qué significa “No puedo establecer una duración personalizada”? ¿Cuáles son sus síntomas específicos?
– CommonsWare
30 de mayo de 2015 a las 20:08
@CommonsWare Lo que quiere decir es que no puede establecer una duración personalizada. Solo toma Longitud.Larga y Longitud.Corta. Salida “Debe ser uno de: Snackbar.LENGTH_SHORT, Snackbar.LENGTH_LONG” La documentación establece que es posible establecer una duración personalizada en milisegundos. Creo que es un error en la biblioteca y probablemente se solucionará. Probé muchos métodos diferentes pero no pude encontrar la solución. Si puede tener un truco y encontrar y responder, publíquelo. desarrollador.android.com/reference/android/support/design/widget/…
– Eugenio H.
31 de mayo de 2015 a las 0:18
@EugeneH: Tienes razón; es un error Vea mi respuesta a continuación.
– CommonsWare
31 de mayo de 2015 a las 0:27
Tengo este problema también. Uso LENGTH_LONG pero el problema no se resuelve y el snackbar se descarta en el tercer segundo…
–Hamidreza Hosseinkhani
6 de junio de 2015 a las 11:25
Usa este enlace.. technotalkative.com/part-2-welcome-snackbar-goodbye-toast Es una demostración completa del fundador de @pareshMayani GDG
– Zala Janaksinh
2 de julio de 2015 a las 7:23