snack make example ejemplo bar android android-snackbar snackbar

make - ¿Podemos realizar 2 acciones diferentes en Snack bar a la vez en Android?



snackbar implementation (5)

Como @Elias N answerer''s, cada Snackbar puede contener una sola acción. Si desea configurar más de la acción en Snackbar , debe crear su propio diseño. Por favor, intente esto, espero que esto le 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 tu archivo de actividad haz 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 por favor lea here y aquí .

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


De las especificaciones de diseño de Google :

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

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


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

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


Otra solución pirata que puedes probar (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();


Puedes usar BottomSheetDialog y disfrazarlo como SnackBar. La única diferencia sería que se descartará al deslizar hacia abajo en lugar de a la derecha y puede permanecer allí hasta que el usuario lo rechace mientras SnackBar se desvanece.

<?xml version="1.0" encoding="utf-8"?> <android.support.constraint.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" xmlns:tools="http://schemas.android.com/tools" android:id="@+id/fragment_history_menu_bottom" style="@style/Widget.Design.BottomNavigationView" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_gravity="center_horizontal" android:orientation="horizontal" android:background="@color/cardview_dark_background" app:layout_behavior="android.support.design.widget.BottomSheetBehavior"> <android.support.v7.widget.AppCompatTextView android:id="@+id/appCompatTextView" android:layout_width="wrap_content" android:layout_height="19dp" android:layout_gravity="center_vertical" android:layout_marginStart="8dp" android:layout_weight="0.6" android:text="Load More ?" android:textAppearance="@style/TextAppearance.Design.Snackbar.Message" android:textColor="@color/cardview_light_background" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> <LinearLayout android:id="@+id/fragment_history_bottom_sheet_delete" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_gravity="right|end" android:layout_weight="0.4" android:clickable="true" android:focusable="true" android:foreground="?android:attr/selectableItemBackground" android:orientation="horizontal" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent"> <android.support.v7.widget.AppCompatButton style="@style/Widget.AppCompat.Button.Borderless.Colored" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Yes" /> <android.support.v7.widget.AppCompatButton style="@style/Widget.AppCompat.Button.Borderless" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="No" android:textColor="@color/cardview_light_background" /> </LinearLayout> </android.support.constraint.ConstraintLayout>

y usarlo como sigue (Kotlin)

val dialog = BottomSheetDialog(this) dialog.setContentView(this.layoutInflater.inflate(R.layout.bottom_sheet_load_prompt,null)) dialog.show()

El resultado será similar a SnackBar.