Je montre un snack-bar dans DialogFragment Dans le clic positif d'alertDialog. Voici mon extrait de code.
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();
Je passe la vue du fragment de dialogue au snack-bar. Je veux la couleur de fond noire? Comment puis-je faire ceci? Je renvoie alertDialog dans le DialogFragment. Et le thème que je mets au dialogue comme suit
<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>
Bien que je définisse la couleur d'arrière-plan sur blanc pour la boîte de dialogue, elle doit être remplacée en définissant la couleur d'arrière-plan sur le snackbar.
Réponses:
Essayez de définir la couleur d'arrière-plan comme ceci:
Cela fonctionnera à 100%!
la source
snackBarView.getView().setBackgrondColor(ContextCompat.getColor(getActivity(), R.color.BLACK));
sbView.setBackgroundColor(getResources().getColor(R.color.BLACK))
getResources#getColor
est obsolète depuis le niveau d'API 23 (Marshmallow) etContextCompat#getColor
doit être utilisé à la place.tu peux le faire comme ça
la source
Si vous souhaitez définir une couleur d'arrière-plan pour tous vos Snackbars, remplacez simplement la
design_snackbar_background_color
valeur quelque part dans vos ressources. Par exemple:la source
Comme aucune des autres réponses n'a fourni de remplacement de style personnalisé (que je considère comme l'un des moyens de mise à jour les plus sûrs pour le faire), je poste ici ma solution.
Je poste une solution qui aborde déjà le thème new
AndroidX
(support design 28
).À condition que votre application utilise un eux personnalisé appelé
MyAppTheme
dans votreAndroidManifest.xml
:Créez (si vous ne l'avez pas déjà fait) un
values/style.xml
fichier remplaçant le thème utilisé par votre application:et fournissez vos couleurs dans votre
values/colors.xml
dossierMISE À JOUR 2020
Comme la solution ci-dessus supprime le coin rond du snacker, car le réglage de l'arrière-plan de cette façon utilise la conception du snack-bar héritée, si vous souhaitez conserver la conception du matériau, vous pouvez.
remplacer
android:background
parandroid:backgroundTint
Si vous ciblez l'API <21, si vous décidez d'utiliser le snackbar hérité pour l'API <21, vous pouvez définir votre abouve
MySnackbarStyle
dans le dossier res / values-21 / et laisser le style précédent - hérité - dans votre dossier res / values .Si vous ciblez l'API <21 et que vous souhaitez avoir le style de matériau du snack-bar également dans ces niveaux d'API inférieurs, vous pouvez modifier votre style de snack dans votre res / values / de cette façon:
et emprunter votre
my_snackbar_background
du repo officiel , de cette façon:Voici un repo de terrain de jeu .
la source
my_snackbar_background
. Sans lui, Snackbar dessinait avec des coins plus ronds.Version Kotlin (avec une extension ):
Créez dans un fichier (par exemple SnackbarExtension.kt) une extension:
Ensuite, dans votre activité / fragment, vous pourrez faire ceci:
la source
Le code ci-dessous est utile pour changer la couleur du texte du message.
Deuxième façon: vous pouvez changer de couleur en changeant également le thème de l'activité.
la source
Il est trop tard mais au cas où quelqu'un aurait encore besoin d'aide. Voici la solution de travail.
la source
En travaillant avec xamarin android, j'ai découvert que ContextCompat.GetColor () renvoie Int mais que setBackgroundColor () attend un paramètre de type Color. Voici donc comment je l'ai fait fonctionner dans mon projet android xamarin.
la source
View snckView = snackbarview.View;
au lieu desnackbar.getView();
qui n'est pas disponible maisParseColor
ne fonctionne pas.System.Drawing.Color.ParseColor
au lieu deAndroid.Graphics.Color.ParseColor
. maintenant j'ai: "le nom 'getstring' n'existe pas dans le contexte actuel"Avec le
Snackbar
inclus dans la bibliothèque de composants matériels(com.google.android.material.snackbar.Snackbar
), utilisez simplement lasetBackgroundTint
méthode.la source
J'ai créé un petit cours d'utils pour pouvoir facilement créer des barres-collations colorées personnalisées via l'application.
puis pour l'utiliser, comme ceci n'importe où dans l'application:
la source
Mettez-le dans une classe Utility:
En utilisant comme ça:
la source
Fondamentalement, les solutions proposées présentent un inconvénient. Ils changent la forme du snack et suppriment le rayon.
Personnellement, préférez quelque chose comme ça
la source
Aucune des autres solutions n'a vraiment fonctionné pour moi. Si je ne définis que la couleur d'arrière-plan de Snackbar, la disposition sous TextView et Button était dans la couleur par défaut. Si j'ai défini l'arrière-plan de TextView, il clignote un peu après que SnackBar ait été affiché. Et la disposition autour du bouton était toujours dans la couleur par défaut.
À la fin, j'ai découvert que le meilleur moyen pour moi est de changer la couleur d'arrière-plan du parent de TextView (SnackbarContentLayout). Maintenant, tout le Snackbar est correctement coloré et ne clignote pas lorsqu'il apparaît.
la source
setBackgroundResource()
fonctionne aussi bien.la source
Je ne sais pas pourquoi setBackgroundColor () n'a pas été trouvé dans mon projet. C'est pourquoi j'ai créé une fonction d'extension et ça va maintenant.
et appelle ça comme ci-dessous
activity_login.xml
LoginActivity.kt
la source
}
la source