Da keine der anderen Antworten eine benutzerdefinierte Stilüberschreibung lieferte (die ich als eine der sichersten Aktualisierungsmethoden betrachte), poste ich hier meine Lösung.
Ich poste eine Lösung, die bereits die neue AndroidX
(support design 28
) Thema befasst.
Vorausgesetzt, Ihre Anwendung verwendet eine benutzerdefinierte Funktion, die MyAppTheme
in Ihrem Verzeichnis aufgerufen wird 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">
Erstellen Sie (falls noch nicht geschehen) eine values/style.xml
Datei, die das von Ihrer Anwendung verwendete Thema überschreibt:
<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>
und geben Sie Ihre Farben in Ihrer values/colors.xml
Datei an
<?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
Da die obige Lösung die runde Ecke des Snackers entfernt, weil der Hintergrund auf diese Weise eingestellt wird, wird das alte Snackbar-Design verwendet, wenn Sie das Materialdesign beibehalten möchten, das Sie können.
- Wenn Sie auf API 21+ abzielen
ersetzen android:background
durchandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
Wenn Sie auf API <21 abzielen, können Sie, wenn Sie sich für die Verwendung der Legacy-Snackbar für API <21 entscheiden, Ihr Abouve MySnackbarStyle
im Ordner res / values-21 / festlegen und den vorherigen Legacy-Stil in Ihrem Ordner res / values belassen.
Wenn Sie auf API <21 abzielen und den Materialstil der Snackbar auch in diesen niedrigeren API-Ebenen haben möchten, können Sie Ihren Snackbar-Stil in Ihren res / values / folgendermaßen ändern :
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
und leihen Sie Ihre my_snackbar_background
aus dem offiziellen Repo auf diese Weise:
<!-- 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>
Hier ist ein Spielplatz Repo .
![Geben Sie hier die Bildbeschreibung ein](https://i.stack.imgur.com/tW1W7.png)