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 votre AndroidManifest.xml
:
<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">
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:
<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 in res/values -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@color/mySnackbarBackgroundColor</item>
</style>
et fournissez vos couleurs dans votre values/colors.xml
dossier
<?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>
MISE À 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.
- Si vous ciblez l'API 21+
remplacer android:background
parandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
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:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
et emprunter votre my_snackbar_background
du repo officiel , de cette façon:
<!-- in res/drawable/ -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<corners android:radius="4dp"/>
<solid android:color="@color/mySnackbarBackgroundColor"/>
</shape>
Voici un repo de terrain de jeu .