由于其他答案均未提供自定义样式覆盖(我认为这是最安全的更新方式之一),因此我在此处发布了我的解决方案。
我发布了一个已经解决新AndroidX
( support design 28
) 主题的解决方案。
前提是您的应用程序使用您的自定义MyAppTheme
它们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">
创建(如果您还没有)values/style.xml
覆盖应用程序使用的主题的文件:
<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>
values/colors.xml
并在您的文件中提供您的颜色
<?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>
2020 年更新
由于上述解决方案删除了小吃店的圆角,因为以这种方式设置背景使用了传统的小吃店设计,如果您想保留材料设计,您可以。
- 如果您的目标是 API 21+
替换android:background
为android:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
MySnackbarStyle
如果您的目标是 API < 21,那么如果您决定使用 API < 21 的旧式快餐栏,您可以在res/values-21/文件夹中设置您的 abouve并将以前的 - legacy - 样式保留在res/values文件夹中。
如果您的目标是 API < 21,并且您希望在这个较低的 API 级别中也拥有小吃吧的材质样式,您可以通过这种方式在您的res/values/中更改您的小吃吧风格:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
my_snackbar_background
并以这种方式从官方回购中借用您的:
<!-- 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>
这是一个游乐场回购。