studio implement example custom agregar android android-design-library snackbar

android - implement - snackbar js



Cómo usar el método setDuration() en SnackBar(Android Design Support Library) (7)

De la documentación: duración del parámetro: sea 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 vez de 8 segundos, Snackbar desapareció rápidamente.


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); }

Por lo tanto, cualquier valor que no sea LENGTH_LONG resultado una LENGTH_LONG de corta duración.

He archivado un problema al respecto.

Editar : se ha corregido en la revisión 22.2.1. Verifique las notas de la versión here

Los documentos de Android NO se han actualizado aún, pero si ingresas al código fuente notarás que el parámetro del método setDuration (int duration) puede ser uno de LENGTH_SHORT, LENGTH_LONG, LENGTH_INDEFINITE o una duración personalizada en milisegundos


Dado que ''com.android.support:design:22.2.1''

puede establecer la duración de su Snackbar en LENGTH_INDEFINITE y mostrará la Snackbar hasta que se cierre o se muestre otra cafetería.


Establezca la duración inicial en LENGTH_INDEFINITE y luego configure 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();


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();


He creado una solución para esto, hice una clase que establece snackbars con una duración personalizada usando handler 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 de esta manera:

//your duration int duration = 4000 SnackBarMaker.snackWithCustomTiming(getActivity().findViewById(android.R.id.content) , getString(R.string.your_message), duration);


Hola, pruebe 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, yo estaba usando esta biblioteca solo para snackbars. Debido al problema de duración de la biblioteca de soporte, me complace utilizar esta biblioteca únicamente.


Parece estar arreglado en

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

Solo Lint lo muestra en rojo subrayado, pero funciona.