¿Cómo puedo cambiar la alineación inicial de Android Snackbar de abajo hacia arriba?

La reciente librería android salió hace unos días, pero me gustaría que la SnackBar aparezca en la parte superior de la pantalla, preferiblemente dentro de un RelativeLayout ya que es la vista principal.

¿Cómo se cambia la alineación inicial de SnackBar que presumo que es layout_alignParentBottom a layout_alignParentTop ?

Es posible hacer que la barra de snack aparezca en la parte superior de la pantalla usando esto:

 Snackbar snack = Snackbar.make(parentLayout, str, Snackbar.LENGTH_LONG); View view = snack.getView(); FrameLayout.LayoutParams params = (FrameLayout.LayoutParams)view.getLayoutParams(); params.gravity = Gravity.TOP; view.setLayoutParams(params); snack.show() 

Nota: La animación de la barra de aperitivos comienza desde la parte inferior y sube hasta la parte superior de la pantalla como se esperaba porque estaba destinada a estar en el fondo según la respuesta de ianhanniballake.

Para las notificaciones que surgen desde la parte superior, sería mejor conseguir un banner personalizado en su lugar.

No, según la especificación de diseño del material para Snackbars :

Las Snackbars proporcionan retroalimentación ligera sobre una operación mostrando un breve mensaje en la parte inferior de la pantalla.

Como la biblioteca de diseño busca implementar las especificaciones de diseño de material, no es posible colocar la barra de Snack en ninguna posición que no sea la parte inferior de la pantalla (o que contenga CoordinatorLayout ).

Esta es una manera sencilla de agregar SnackBar usando CoordinatorLayout desde la parte superior de la pantalla, pero la animación sigue siendo un problema.

Simplemente agregue un diseño de CoordinatorLayout a su diseño como:

 <android.support.design.widget.CoordinatorLayout android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_alignParentTop="true" android:layout_centerHorizontal="true" android:id="@+id/snackbarlocation"> </android.support.design.widget.CoordinatorLayout> 

Y luego en su actividad obtener una referencia a ella y pasarla a la SnackBar como se muestra a continuación:

  CoordinatorLayout Clayout = (CoordinatorLayout)findViewById(R.id.snackbarlocation); FabButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Snackbar.make(Clayout, "This snack bar located at top", Snackbar.LENGTH_SHORT).show(); } }); 

Créditos

Se puede hacer de maneras simples

Primero Cree el diseño donde se incluirá el bocadillo

 <LinearLayout android:id="@+id/info_container" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"/> 

Luego en el código

  ll_mesg.addView(Snackbar.make(ll_mesg, "Please choose your luck from one of box", Snackbar.LENGTH_LONG) .getView()); new Handler().postDelayed(new Runnable() { public void run() { ll_mesg.removeAllViews(); } } ,1000); 

Bueno, puedes obtener el layoutparam de snackbar y cambiar el bottomMargin en el código. me gusta

 Snackbar snackbar = Snackbar.make(rootView, message, Snackbar.LENGTH_LONG); View view = snackbar.getView(); FrameLayout.LayoutParams para = (CoordinatorLayout) view.getLayoutParams(); params.bottomMargin = showAtLocation // pass your location offset here view.setLayoutParams(params); 

Entonces puedes usar la instancia de snackbar para mostrar cuando quieras

 snackbar.show(); 
  • Acción Snackbar getView ()
  • Cómo personalizar el diseño de snackBar?
  • Android Snackbar NullPointerException en Fragmento
  • Android SnackBar: error al inflar SnackbarLayout
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.