Vì không có câu trả lời nào khác cung cấp ghi đè kiểu tùy chỉnh (mà tôi coi là một trong những cách cập nhật an toàn nhất để làm điều đó), tôi đăng giải pháp của mình ở đây.
Tôi đăng một giải pháp đã giải quyết chủ đề AndroidX
( support design 28
) mới .
Miễn là ứng dụng của bạn sử dụng một tùy chỉnh mà chúng được gọi MyAppTheme
trong 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">
Tạo (nếu bạn chưa có) values/style.xml
tệp ghi đè chủ đề được ứng dụng của bạn sử dụng:
<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>
và cung cấp màu sắc của bạn trong values/colors.xml
tệp của bạn
<?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>
CẬP NHẬT 2020
Vì giải pháp ở trên loại bỏ góc tròn của phụ trợ trình ăn nhanh, việc thiết lập nền theo cách này sử dụng thiết kế thanh ăn nhanh kế thừa, nếu bạn muốn giữ nguyên thiết kế material design, bạn có thể.
- Nếu bạn đang nhắm mục tiêu API 21+
thay thế android:background
bằngandroid:backgroundTint
<!-- snackbar style in res/values-21/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:backgroundTint">@color/mySnackbarBackgroundColor</item>
</style>
Nếu bạn đang nhắm mục tiêu API <21 thì nếu bạn quyết định sử dụng thanh nhanh kế thừa cho API <21, bạn có thể đặt abouve của mình MySnackbarStyle
trong thư mục res / values-21 / và để lại kiểu cũ - kế thừa trong thư mục res / values .
Nếu bạn đang nhắm mục tiêu API <21 và bạn muốn có kiểu material của thanh snack cũng ở các cấp API thấp hơn này, bạn có thể thay đổi kiểu của snackbar theo res / values / theo cách này:
<!-- snackbar style in res/values/ -->
<style name="MySnackBarStyle" parent="Widget.MaterialComponents.Snackbar">
<item name="android:background">@drawable/my_snackbar_background</item>
</style>
và mượn của bạn my_snackbar_background
từ repo chính thức , theo cách này:
<!-- 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>
Đây là một repo sân chơi .