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 al snackbar. ¿Quiero el color de fondo negro? ¿Cómo puedo hacer esto? Estoy devolviendo alertDialog en DialogFragment. Y el tema que estoy configurando para el diálogo es el siguiente
<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 anularlo configurando el color de fondo en la barra de refrigerios.
Respuestas:
Intente configurar el color de fondo como este:
¡Funcionará al 100%!
fuente
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
ha quedado obsoleto desde el nivel de API 23 (Marshmallow) yContextCompat#getColor
debería usarse en su lugar.puedes hacerlo así
fuente
Si desea definir un color de fondo para todas sus Snackbars, simplemente anule el
design_snackbar_background_color
valor en algún lugar de sus recursos. Por ejemplo:fuente
Como ninguna de las otras respuestas proporcionó una anulación de estilo personalizado (que considero una de las formas de actualización más seguras de hacerlo), publico aquí mi solución.
Publico una solución que ya aborda el tema new
AndroidX
(support design 28
).Siempre que su aplicación utilice un nombre personalizado llamado
MyAppTheme
en suAndroidManifest.xml
:Cree (si aún no lo ha hecho) un
values/style.xml
archivo que anule el tema utilizado por su aplicación:y proporcione sus colores en su
values/colors.xml
archivoACTUALIZAR 2020
Como la solución anterior elimina la esquina redonda del bocadillo, porque al establecer el fondo de esta manera se usa el diseño heredado de la barra de bocadillos, si desea conservar el diseño del material, puede hacerlo.
reemplazar
android:background
conandroid:backgroundTint
Si está apuntando a API <21, entonces si decide usar la barra
MySnackbarStyle
de bocadillos heredada para API <21, puede configurar su abouve en la carpeta res / values-21 / y dejar el estilo anterior (heredado) en su carpeta res / values .Si está apuntando a API <21 y desea tener el estilo de material de la barra de aperitivos también en estos niveles de API más bajos, puede cambiar el estilo de la barra de aperitivos en sus res / valores / de esta manera:
y pida prestado su
my_snackbar_background
del repositorio oficial , de esta manera:Aquí hay un repositorio de juegos .
fuente
my_snackbar_background
. Sin él, Snackbar dibujó con esquinas más redondeadas.Versión de Kotlin (con extensión ):
Cree en un archivo (por ejemplo, SnackbarExtension.kt) una extensión:
A continuación, en su Actividad / Fragmento, podrá hacer esto:
fuente
El código de abajo es útil para cambiar el color del texto del mensaje.
Segunda forma: puede cambiar el color cambiando también el tema de la actividad.
fuente
Es demasiado tarde, pero en caso de que alguien todavía necesite ayuda. Aquí está la solución de trabajo.
fuente
Mientras trabajaba con xamarin android descubrí que ContextCompat.GetColor () devuelve Int pero el setBackgroundColor () espera un parámetro de tipo Color. Así que así es como lo hice funcionar en mi proyecto de Android xamarin.
fuente
View snckView = snackbarview.View;
lugar delsnackbar.getView();
cual no está disponible peroParseColor
no funciona.System.Drawing.Color.ParseColor
lugar deAndroid.Graphics.Color.ParseColor
. ahora tengo: "el nombre 'getstring' no existe en el contexto actual"Con el
Snackbar
incluido en la Biblioteca de componentes de materiales(com.google.android.material.snackbar.Snackbar
) simplemente use elsetBackgroundTint
método.fuente
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.
luego usarlo, así en cualquier lugar de la aplicación:
fuente
Ponlo en una clase de utilidad:
Usando así:
fuente
Básicamente, las soluciones que se proporcionaron tienen una desventaja. Cambian la forma de la barra de bocadillos y eliminan el radio.
Personalmente, prefiero algo así
fuente
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 estaba en el color predeterminado. Si configuro el fondo de TextView, parpadeó un poco después de que se mostró SnackBar. Y el diseño alrededor del botón todavía estaba en el color predeterminado.
Al final descubrí que la mejor manera para mí es cambiar el color de fondo del padre de TextView (SnackbarContentLayout). Ahora todo el Snackbar está coloreado correctamente y no parpadea cuando aparece.
fuente
setBackgroundResource()
funciona igual de bien.fuente
No sé por qué setBackgroundColor () no se encontró en mi proyecto. Por eso creé una función de extensión y ahora está bien.
y llámalo como un bramido
activity_login.xml
LoginActivity.kt
fuente
}
fuente