vivaldi theme tema tareas studio notificaciones navegador name google ff0202 content como color chrome cambiar barra app aplicacion and android material-design android-dialogfragment android-snackbar

android - theme - ¿Cómo cambiar el color de fondo del snackbar?



cambiar tema aplicacion android studio (14)

Básicamente, las soluciones que se proporcionaron tienen una desventaja. Cambian la forma del snack bar y eliminan el radio.

Personalmente, prefiero algo así

public class CustomBar { public static void show(View view, String message, boolean isLong) { Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT); s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900)); s.show(); } public static void show(View view, @StringRes int message, boolean isLong) { Snackbar s = Snackbar.make(view, message, isLong ? Snackbar.LENGTH_LONG : Snackbar.LENGTH_SHORT); s.getView().setBackgroundColor(ContextCompat.getColor(view.getContext(), R.color.red_900)); s.show(); }

Estoy mostrando snackbar en DialogFragment dentro del clic positivo de alertDialog. Aquí está mi fragmento de código.

Snackbar snackbar = Snackbar.make(view, "Please enter customer name", Snackbar.LENGTH_LONG) .setAction("Action", null); View sbView = snackbar.getView(); sbView.setBackgroundColor(Color.BLACK); snackbar.show();

Estoy pasando la vista del fragmento de diálogo a la cafetería. Quiero el color de fondo negro? ¿Cómo puedo hacer esto? Estoy devolviendo alertDialog en el DialogFragment. Y el tema que estoy configurando para el diálogo como sigue es

<style name="MyAlertDialogStyle" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- Used for the buttons --> <item name="colorAccent">@color/accent</item> <!-- Used for the title and text --> <item name="android:textColorPrimary">@color/primary</item> <!-- Used for the background --> <item name="android:background">@color/white</item> </style>

Aunque estoy configurando el color de fondo en blanco para el diálogo, debería anular configurando el color de fondo en la barra de bocadillos.


Como ninguna de las otras respuestas proporcionó una anulación de estilo personalizado (que considero una de las formas más seguras de hacerlo) publico aquí mi solución.

AndroidX una solución que ya aborda el nuevo tema AndroidX ( support design 28 ).

Siempre que su aplicación utilice un MyAppTheme en su AndroidManifest.xml :

Snackbar snackbar = Snackbar.make(mainView, text, Snackbar.LENGTH_LONG); View snackBarView = snackbar.getView(); snackBarView.setBackgroundColor(context.getResources().getColor(R.color.btn_background_color)); snackbar.show();

Cree (si aún no lo ha hecho) el archivo de values/style.xml que values/style.xml el tema utilizado por su aplicación:

<application android:name=".MyApplicationName" android:allowBackup="true" android:icon="@mipmap/icon" android:roundIcon="@mipmap/icon_round" android:label="@string/app_name" android:theme="@style/MyAppTheme">

y proporcione sus colores en su archivo de values/colors.xml

<style name="MyAppTheme" parent="Theme.MaterialComponents.Light.NoActionBar"> <item name="colorPrimary">@color/myColorPrimary</item> <item name="colorPrimaryDark">@color/myColorPrimaryDark</item> <item name="colorAccent">@color/myColorAccent</item> <item name="snackbarStyle">@style/MySnackBarStyle</item> </style> <!-- snackbar style --> <style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar"> <item name="android:background">@color/mySnackbarBackgroundColor</item> </style>


Es demasiado tarde, pero en caso de que alguien todavía necesite ayuda. Aquí está la solución de trabajo.

<?xml version="1.0" encoding="utf-8"?> <resources> <color name="myColorPrimary">#008577</color> <color name="myColorPrimaryDark">#00574B</color> <color name="myColorAccent">#D81B60</color> <color name="mySnackbarBackgroundColor">#D81B60</color> </resources>


Hice una pequeña clase de utilidades para poder hacer fácilmente barras de bocadillos de colores personalizados a través de la aplicación.

package com.yourapppackage.yourapp; import android.support.design.widget.Snackbar; import android.view.View; import android.widget.Button; import android.widget.TextView; public class SnackbarUtils { private int BACKGROUND_COLOR; private int TEXT_COLOR; private int BUTTON_COLOR; private String TEXT; public SnackbarUtils(String aText, int aBgColor, int aTextColor, int aButtonColor){ this.TEXT = aText; this.BACKGROUND_COLOR = aBgColor; this.TEXT_COLOR = aTextColor; this.BUTTON_COLOR = aButtonColor; } public Snackbar snackieBar(){ Snackbar snackie = Snackbar.make(MainActivity.getInstance().findViewById(android.R.id.content), TEXT, Snackbar.LENGTH_LONG); View snackView = snackie.getView(); TextView snackViewText = (TextView) snackView.findViewById(android.support.design.R.id.snackbar_text); Button snackViewButton = (Button) snackView.findViewById(android.support.design.R.id.snackbar_action); snackView.setBackgroundColor(BACKGROUND_COLOR); snackViewText.setTextColor(TEXT_COLOR); snackViewButton.setTextColor(BUTTON_COLOR); return snackie; } }

luego para usarlo, así en cualquier lugar de la aplicación:

new SnackbarUtils("This is the text displayed", Color.RED, Color.BLACK, Color.YELLOW).snackieBar().setAction("OTAY", v -> { //donothing }).show();


Intente configurar el color de fondo de esta manera:

sbView.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.BLACK));

¡Funcionará al 100%!


Mientras trabajaba con xamarin android descubrí que ContextCompat.GetColor () devuelve Int pero setBackgroundColor () espera un parámetro de tipo Color. Así es como lo hice funcionar en mi proyecto de Android xamarin.

Snackbar snackbarview = Snackbar.Make(toolbar, message, Snackbar.LengthLong); View snckView = snackbarview.View; snckView.SetBackgroundColor(Color.ParseColor(GetString(Resource.Color.colorPrimary))); snackbarview.Show();


Ninguna de las otras soluciones realmente funcionó para mí. Si solo configuro el color de fondo de Snackbar, el diseño en TextView y Button tenía el color predeterminado. Si configuro el fondo de TextView, parpadeó un poco después de que se mostrara SnackBar. Y el diseño alrededor del botón todavía tenía el color predeterminado.

Al final descubrí que la mejor manera para mí es cambiar el color de fondo del padre de TextView (SnackbarContentLayout). Ahora, Snackbar está coloreado correctamente y no parpadea cuando aparece.

snack = Snackbar.make(view, text, duration) View view = snack.getView(); view.setBackgroundColor(BACKGROUND_COLOR); TextView tv = view.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(TEXT_COLOR); ((SnackbarContentLayout) tv.getParent()).setBackgroundColor(BACKGROUND_COLOR);


Póngalo en una clase de utilidad:

public class Utility { public static void showSnackBar(Context context, View view, String text) { Snackbar sb = Snackbar.make(view, text, Snackbar.LENGTH_SHORT); sb.getView().setBackgroundColor(ContextCompat.getColor(context, R.color.colorAccent)); sb.show(); } }

Usando así:

Utility.showSnackBar(getApplicationContext(), findViewById(android.R.id.content), "Add success!!!");


Si desea definir un color de fondo para todas sus Snackbars, simplemente anule el valor design_snackbar_background_color en algún lugar de sus recursos. Por ejemplo:

<color name="design_snackbar_background_color" tools:override="true">@color/colorPrimaryLight</color>


puedes hacerlo así

Snackbar snackbar; snackbar = Snackbar.make(view, "Message", Snackbar.LENGTH_SHORT); View snackBarView = snackbar.getView(); snackBarView.setBackgroundColor(yourColor); TextView textView = (TextView) snackBarView.findViewById(android.support.design.R.id.snackbar_text); textView.setTextColor(textColor); snackbar.show();


setBackgroundResource() funciona igual de bien.

val snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG); val view = snackbar.getView(); val color = view.resources.getColor(colorId) view.background.setColorFilter(color, PorterDuff.Mode.SRC_ATOP)


El siguiente código es útil para cambiar el color del texto del mensaje.

Snackbar snackbar = Snackbar.make(rootView, "Enter Your Message",Snackbar.LENGTH_SHORT); View view = snackbar.getView(); TextView tv = (TextView)view.findViewById(android.support.design.R.id.snackbar_text); tv.setTextColor(Color.RED); snackbar.show();

Segunda forma: puede cambiar el color cambiando también el tema de la actividad.


Versión de Kotlin (con una extension ):

Cree en un archivo (por ejemplo SnackbarExtension.kt) una extensión:

fun Snackbar.withColor(@ColorInt colorInt: Int): Snackbar{ this.view.setBackgroundColor(colorInt) return this }

A continuación, en su Actividad / Fragmento, podrá hacer esto:

Snackbar .make(coordinatorLayout, message, Snackbar.LENGTH_LONG) .withColor(YOUR_COLOR) .show()


Snackbar snackbar = Snackbar.make(view, text, Snackbar.LENGTH_LONG); View sbView = snackbar.getView(); sbView.setBackgroundResource(R.color.background); snackbar.show();

}