Karena tidak ada jawaban lain yang memberikan penggantian gaya kustom (yang saya anggap sebagai salah satu cara pembaruan teraman untuk melakukan itu), saya memposting di sini solusi saya.
Saya memposting solusi yang sudah membahas tema AndroidX
( support design 28
) baru .
Asalkan aplikasi Anda menggunakan kustom mereka yang disebut MyAppTheme
di Anda 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">
Buat (jika Anda belum melakukannya) values/style.xml
file yang menggantikan tema yang digunakan oleh aplikasi Anda:
<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>
dan berikan warna Anda pada values/colors.xml
file Anda
<?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
Karena solusi di atas menghilangkan sudut bundar dari snacker karena pengaturan latar belakang dengan cara ini menggunakan desain snackbar lama, jika Anda ingin mempertahankan desain material Anda bisa.
- Jika Anda menargetkan API 21+
ganti android:background
denganandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
Jika Anda menargetkan API <21, maka jika Anda memutuskan untuk menggunakan snackbar lama untuk API <21, Anda dapat menyetelnya MySnackbarStyle
di folder res / values-21 / dan membiarkan gaya - lama - sebelumnya di folder res / values Anda .
Jika Anda menargetkan API <21 dan Anda ingin memiliki gaya material dari snackbar juga di tingkat API yang lebih rendah ini, Anda dapat mengubah gaya snackbar Anda di res / values / dengan cara ini:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
dan pinjam my_snackbar_background
dari repo resmi Anda , dengan cara ini:
<!-- 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>
Ini adalah repo taman bermain .