Поскольку ни в одном из других ответов не было переопределения пользовательского стиля (что я считаю одним из самых безопасных способов обновления для этого), я публикую здесь свое решение.
Я публикую решение, которое уже касается темы new 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>
Если вы ориентируетесь на API <21, тогда, если вы решите использовать устаревшую панель закусок для API <21, вы можете установить свой abouve MySnackbarStyle
в папке res / values-21 / и оставить предыдущий - устаревший - стиль в папке 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>
Вот репо на детской площадке .