Poiché nessuna delle altre risposte ha fornito una sostituzione dello stile personalizzato (che considero uno dei modi di aggiornamento più sicuri per farlo), posto qui la mia soluzione.
Inserisco una soluzione che già affronta il tema new AndroidX
( support design 28
).
A condizione che la tua applicazione utilizzi un nome personalizzato chiamato MyAppTheme
nel tuo 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">
Crea (se non lo hai già fatto) values/style.xml
file sovrascrivendo il tema utilizzato dalla tua applicazione:
<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>
e fornisci i tuoi colori nel tuo values/colors.xml
file
<?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>
AGGIORNAMENTO 2020
Poiché la soluzione di cui sopra rimuove l'angolo arrotondato dello snacker perché l'impostazione dello sfondo in questo modo utilizza il design legacy dello snackbar, se si desidera preservare il design del materiale è possibile.
- Se scegli come target API 21+
sostituire android:background
conandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
Se scegli come target API <21, se decidi di utilizzare lo snackbar legacy per API <21 puoi impostare il tuo abouve MySnackbarStyle
nella cartella res / values-21 / e lasciare lo stile precedente - legacy - nella cartella res / values .
Se stai prendendo di mira API <21 e vuoi avere lo stile materiale della snackbar anche in questi livelli API inferiori, puoi cambiare lo stile della tua snackbar nei tuoi res / valori / in questo modo:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
e prendi in prestito il tuo my_snackbar_background
dal repository ufficiale , in questo modo:
<!-- 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>
Ecco un repository del parco giochi .