Haz que Snackbar empuje la vista hacia arriba

¿Hay una manera de hacer que la barra de comida empuje la vista hacia arriba cuando se muestra?

Snackbar

En la actualidad, cuando se muestra la barra de snack, se superpone la vista de abajo por lo que parece que la mitad del botón está cortado, pero quiero que casi "adjustPan" similar a la forma en que el teclado funciona cuando se muestra en la pantalla.

¿Alguien sabe de algunos trucos para lograr esto?

Coloca tu vista dentro de un android.support.design.CoordinatorLayout

<android.support.design.widget.CoordinatorLayout android:id="@+id/coordinator" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_alignParentBottom="true" android:layout_centerHorizontal="true"> <View android:id="@+id/my_view" android:layout_width="wrap_content" android:layout_height="wrap_content" app:layout_behavior="com.example.FloatingActionButtonBehavior"/> </android.support.design.widget.CoordinatorLayout> 

La parte importante aquí es el atributo app: layout_behavior. Aquí está implementando la clase:

 public class FloatingActionButtonBehavior extends CoordinatorLayout.Behavior<FloatingActionButton> { public FloatingActionButtonBehavior(Context context, AttributeSet attrs) { } @Override public boolean layoutDependsOn(CoordinatorLayout parent, FloatingActionButton child, View dependency) { return dependency instanceof SnackbarLayout; } @Override public boolean onDependentViewChanged(CoordinatorLayout parent, FloatingActionButton child, View dependency) { float translationY = Math.min(0, dependency.getTranslationY() - dependency.getHeight()); child.setTranslationY(translationY); return true; } } 

Luego, cuando muestres el pase de snackbar la referencia a la CoordinatorLayout:

 CoordinatorLayout coordinator = findViewById(R.id.coordinator); Snackbar.make(coordinator, textResId, Snackbar.LENGTH_LONG) .setAction(R.string.accept_ok, new View.OnClickListener() { @Override public void onClick(View v) { } }) .setDuration(Snackbar.LENGTH_INDEFINITE) .show(); 

Espero que esto te ayudará.

Introduzca aquí la descripción de la imagen

Snackbar encontrará CoordinatorLayout más cercano como parentView ;

  findViewById(R.id.tv_main).setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { Snackbar.make(findViewById(R.id.tv_main), "Replace with your own action", Snackbar.LENGTH_LONG) .setAction("Action", null).show(); toolbar.getChildAt(1).setVisibility(View.GONE); } }); <?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <TextView android:text="s" android:layout_weight="1" android:layout_width="match_parent" android:layout_height="wrap_content" /> <android.support.design.widget.CoordinatorLayout android:layout_width="match_parent" android:layout_marginBottom="200dp" android:layout_height="100dp"> <TextView android:id="@+id/tv_main" android:background="#4b14b1" android:layout_width="100dp" android:layout_height="100dp" /> </android.support.design.widget.CoordinatorLayout> </RelativeLayout> 
  • ¿Cómo puedo ser notificado cuando una Snackbar se ha despedido?
  • Cómo agregar Snackbars en un BroadcastReceiver?
  • ¿Es una buena práctica incluir todos los diseños en CoordinatorLayout?
  • Cómo deshabilitar el comportamiento de "snack-to-dismiss"
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.