¿Podemos realizar 2 acciones diferentes en Snack bar al mismo tiempo en android?

Estoy creando una aplicación de Android en la que quiero usar Snack Bar, En una que snack bar quiero 2 palabras diferentes en las que tenemos que realizar 2 acciones diferentes.

Introduzca aquí la descripción de la imagen

De las especificaciones de diseño de Google :

Cada bocadillo puede contener una sola acción, ninguna de las cuales puede ser "Descartar" o "Cancelar".

Para acciones múltiples, utilice un diálogo.

Como respuesta de @Elias N cada Snackbar puede contener una sola acción. Si desea establecer más de acción en Snackbar entonces usted necesita para crear su propio diseño. Por favor, intenta esto, espero que esto te ayude.

Crear un archivo xml my_snackbar.xml

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:layout_width="match_parent" android:layout_height="50dp" android:background="#000000"> <TextView android:layout_width="0dp" android:layout_height="50dp" android:layout_weight=".7" android:gravity="center_vertical" android:text="Please select any one" android:textColor="@color/white"/> <TextView android:id="@+id/txtOne" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight=".1" android:gravity="center" android:text="ONE" android:textColor="@color/red"/> <TextView android:id="@+id/txtTwo" android:layout_width="0dp" android:layout_height="50dp" android:layout_weight=".1" android:gravity="center" android:text="TWO" android:textColor="@color/red"/> </LinearLayout> 

Ahora en su archivo de actividades haga el siguiente código.

 public void myCustomSnackbar() { // Create the Snackbar LinearLayout.LayoutParams objLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT); Snackbar snackbar = Snackbar.make(llShow, "", Snackbar.LENGTH_LONG); // Get the Snackbar's layout view Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView(); layout.setPadding(0,0,0,0); // Hide the text TextView textView = (TextView) layout.findViewById(android.support.design.R.id.snackbar_text); textView.setVisibility(View.INVISIBLE); LayoutInflater mInflater = (LayoutInflater)getSystemService(LAYOUT_INFLATER_SERVICE); // Inflate our custom view View snackView = getLayoutInflater().inflate(R.layout.my_snackbar, null); // Configure the view TextView textViewOne = (TextView) snackView.findViewById(R.id.txtOne); textViewOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("One", "First one is clicked"); } }); TextView textViewTwo = (TextView) snackView.findViewById(R.id.txtTwo); textViewTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.i("Two", "Second one is clicked"); } }); // Add the view to the Snackbar's layout layout.addView(snackView, objLayoutParams); // Show the Snackbar snackbar.show(); } 

Para más detalles lea esta documentación y aquí .

Gracias Shailesh, tuve que modificar el código para hacer que funcione para mí.

My_snackbar.xml:

 <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="horizontal" android:id="@+id/my_snackbar_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:background="@color/dark_grey" android:padding="15dp"> <TextView android:id="@+id/message_text_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".6" android:gravity="center_vertical" android:text="Two button snackbar" android:textColor="@color/white"/> <TextView android:id="@+id/first_text_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".2" android:gravity="center" android:text="ONE" android:textColor="#FFDEAD"/> <TextView android:id="@+id/second_text_view" android:layout_width="0dp" android:layout_height="wrap_content" android:layout_weight=".2" android:gravity="center" android:text="TWO" android:textColor="#FFDEAD"/> </LinearLayout> 

En su actividad, llame a este método siempre que desee mostrar la barra de aperitivos:

  private void showTwoButtonSnackbar() { // Create the Snackbar LinearLayout.LayoutParams objLayoutParams = new LinearLayout.LayoutParams(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); snackbar = Snackbar.make(this.findViewById(android.R.id.content), message, Snackbar.LENGTH_INDEFINITE); // Get the Snackbar layout view Snackbar.SnackbarLayout layout = (Snackbar.SnackbarLayout) snackbar.getView(); // Set snackbar layout params int navbarHeight = getNavBarHeight(this); FrameLayout.LayoutParams parentParams = (FrameLayout.LayoutParams) layout.getLayoutParams(); parentParams.setMargins(0, 0, 0, 0 - navbarHeight + 50); layout.setLayoutParams(parentParams); layout.setPadding(0, 0, 0, 0); layout.setLayoutParams(parentParams); // Inflate our custom view View snackView = getLayoutInflater().inflate(R.layout.my_snackbar, null); // Configure our custom view TextView messageTextView = (TextView) snackView.findViewById(R.id.message_text_view); messageTextView.setText(message); TextView textViewOne = (TextView) snackView.findViewById(R.id.first_text_view); textViewOne.setText("ALLOW"); textViewOne.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Allow", "showTwoButtonSnackbar() : allow clicked"); snackbar.dismiss(); } }); TextView textViewTwo = (TextView) snackView.findViewById(R.id.second_text_view); textViewTwo.setText("DENY"); textViewTwo.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Log.d("Deny", "showTwoButtonSnackbar() : deny clicked"); snackbar.dismiss(); } }); // Add our custom view to the Snackbar's layout layout.addView(snackView, objLayoutParams); // Show the Snackbar snackbar.show(); } 

Para obtener la altura de la barra de navegación:

 public static int getNavBarHeight(Context context) { int result = 0; int resourceId = context.getResources().getIdentifier("navigation_bar_height", "dimen", "android"); if (resourceId > 0) { result = context.getResources().getDimensionPixelSize(resourceId); } return result; } 

Otro hacky solución que podría intentar (funciona en mi caso).

  final Snackbar snackbar = Snackbar.make(view, "UNDO MARKED AS READ", Snackbar.LENGTH_LONG); snackbar.setAction("DISMISS", new View.OnClickListener() { @Override public void onClick(View v) { if (snackbar != null) snackbar.dismiss(); } }); View snackbarView = snackbar.getView(); int snackbarTextId = android.support.design.R.id.snackbar_text; TextView textView = (TextView) snackbarView.findViewById(snackbarTextId); textView.setTextColor(Color.WHITE); textView.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { if (snackbar != null) snackbar.dismiss(); // undo mark as unread code } }); snackbar.show(); 
  • Cómo configurar el color de texto de la barra de ayuda de la biblioteca de soporte a algo que no sea android: textColor?
  • Acción Snackbar getView ()
  • ¿Cómo puedo ser notificado cuando una Snackbar se ha despedido?
  • Cómo personalizar el diseño de snackBar?
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.