Ponieważ żadna z pozostałych odpowiedzi nie zawierała niestandardowego zastąpienia stylu (uważam to za jeden z najbezpieczniejszych sposobów aktualizacji), zamieszczam tutaj moje rozwiązanie.
Publikuję rozwiązanie, które już dotyczy nowego motywu AndroidX
( support design 28
).
Pod warunkiem, że aplikacja używa niestandardowych nazw nazwanych MyAppTheme
w 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">
Utwórz (jeśli jeszcze tego nie zrobiłeś) values/style.xml
plik nadpisujący motyw używany przez twoją aplikację:
<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>
i podaj swoje kolory w values/colors.xml
pliku
<?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>
UPDATE 2020
Ponieważ powyższe rozwiązanie usuwa okrągły narożnik przekąski, ponieważ ustawienie tła w ten sposób wykorzystuje starszą konstrukcję batonika, jeśli chcesz zachować materiał konstrukcyjny, który możesz.
- Jeśli celujesz w API 21+
wymienić android:background
zandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
Jeśli celujesz MySnackbarStyle
w API <21, to jeśli zdecydujesz się użyć starszego snackbaru dla API <21, możesz ustawić abouve w folderze res / values-21 / i pozostawić poprzedni - starszy - styl w folderze res / values .
Jeśli celujesz w API <21 i chcesz, aby materiałowy styl batonika również był na niższych poziomach API, możesz zmienić styl snackbaru w swoich res / values / w ten sposób:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
i pożycz my_snackbar_background
z oficjalnego repozytorium w ten sposób:
<!-- 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>
Oto repozytorium placu zabaw .