diff --git a/catalog/java/io/material/catalog/snackbar/SnackbarMainDemoFragment.java b/catalog/java/io/material/catalog/snackbar/SnackbarMainDemoFragment.java
index 737d6152f..e8200f703 100644
--- a/catalog/java/io/material/catalog/snackbar/SnackbarMainDemoFragment.java
+++ b/catalog/java/io/material/catalog/snackbar/SnackbarMainDemoFragment.java
@@ -19,6 +19,7 @@ package io.material.catalog.snackbar;
import io.material.catalog.R;
import android.content.Context;
+import android.graphics.Color;
import android.os.Bundle;
import android.view.ContextThemeWrapper;
import android.view.LayoutInflater;
@@ -89,6 +90,7 @@ public class SnackbarMainDemoFragment extends DemoFragment {
Snackbar.LENGTH_SHORT)
.setAction(R.string.cat_snackbar_action_title, a -> {})
.setTextMaxLines(5)
+ .setCloseIconVisible(true)
.show();
});
@@ -103,12 +105,39 @@ public class SnackbarMainDemoFragment extends DemoFragment {
Context c =
new ContextThemeWrapper(
v.getContext(), R.style.ThemeOverlay_Catalog_SnackbarWithCustomShape);
- Snackbar.make(
+ Snackbar snackbar = Snackbar.make(
c,
coordinatorLayout,
getString(R.string.cat_snackbar_custom_shape_message),
Snackbar.LENGTH_SHORT)
.setAction("Done", a -> {})
+ .setCloseIconVisible(/* visible= */ true)
+ .setCloseIconResource(R.drawable.ic_cancel_24)
+ .setCloseIconTint(Color.GREEN);
+ // Setting the close icon to visible removes the snackbar layout's end padding. To
+ // customize this, get the snackbar's view and set the end padding to a value
+ // that fits nicely with the custom shape and icon.
+ View snackbarLayout = snackbar.getView();
+ snackbarLayout.setPaddingRelative(
+ snackbarLayout.getPaddingStart(),
+ snackbarLayout.getPaddingTop(),
+ getResources().getDimensionPixelSize(
+ R.dimen.cat_snackbar_custom_shape_end_padding),
+ snackbarLayout.getPaddingBottom()
+ );
+ snackbar.show();
+ });
+
+ // Snackbar with close icon
+ view.findViewById(R.id.with_close_button)
+ .setOnClickListener(
+ v -> {
+ Snackbar.make(
+ coordinatorLayout,
+ R.string.cat_snackbar_with_close_message,
+ Snackbar.LENGTH_INDEFINITE)
+ .setAction(R.string.cat_snackbar_action_title, a -> {})
+ .setCloseIconVisible(true)
.show();
});
}
diff --git a/catalog/java/io/material/catalog/snackbar/res/drawable/ic_cancel_24.xml b/catalog/java/io/material/catalog/snackbar/res/drawable/ic_cancel_24.xml
new file mode 100644
index 000000000..0ee3f8faf
--- /dev/null
+++ b/catalog/java/io/material/catalog/snackbar/res/drawable/ic_cancel_24.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
+
diff --git a/catalog/java/io/material/catalog/snackbar/res/layout/cat_snackbar_main_demo_fragment.xml b/catalog/java/io/material/catalog/snackbar/res/layout/cat_snackbar_main_demo_fragment.xml
index f707e6abe..3d58dbe16 100644
--- a/catalog/java/io/material/catalog/snackbar/res/layout/cat_snackbar_main_demo_fragment.xml
+++ b/catalog/java/io/material/catalog/snackbar/res/layout/cat_snackbar_main_demo_fragment.xml
@@ -52,6 +52,11 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="@string/cat_snackbar_custom_shape_button"/>
+
diff --git a/catalog/java/io/material/catalog/snackbar/res/values/dimens.xml b/catalog/java/io/material/catalog/snackbar/res/values/dimens.xml
new file mode 100644
index 000000000..f7e780f06
--- /dev/null
+++ b/catalog/java/io/material/catalog/snackbar/res/values/dimens.xml
@@ -0,0 +1,20 @@
+
+
+
+
+ 12dp
+
diff --git a/catalog/java/io/material/catalog/snackbar/res/values/strings.xml b/catalog/java/io/material/catalog/snackbar/res/values/strings.xml
index cca5aec89..59e14be72 100644
--- a/catalog/java/io/material/catalog/snackbar/res/values/strings.xml
+++ b/catalog/java/io/material/catalog/snackbar/res/values/strings.xml
@@ -59,6 +59,13 @@
Custom shape snackbar
- This is a snackbar with a custom shape
+ This is a snackbar with a custom shape with a customized close icon
+
+
+
+ Snackbar with close icon
+
+
+ This is a snackbar with a close icon.
diff --git a/catalog/java/io/material/catalog/snackbar/res/values/styles.xml b/catalog/java/io/material/catalog/snackbar/res/values/styles.xml
index 8fd40b387..c2051b4bc 100644
--- a/catalog/java/io/material/catalog/snackbar/res/values/styles.xml
+++ b/catalog/java/io/material/catalog/snackbar/res/values/styles.xml
@@ -16,10 +16,12 @@
-->
-
diff --git a/docs/components/Snackbar.md b/docs/components/Snackbar.md
index f7c52fe07..39c29039b 100644
--- a/docs/components/Snackbar.md
+++ b/docs/components/Snackbar.md
@@ -71,13 +71,22 @@ Element | Attribute | Related method(s) | Defau
**Text color alpha** | `app:actionTextColorAlpha` | N/A | `1.0f`
**Text Color** | `android:textColor` | `setTextActionColor` | `?attr/colorPrimaryInverse`
+### Close attributes
+
+Element | Attribute | Related method(s) | Default value
+-------------------------- |----------------|------------------------| -------------
+**Close button style** | N/A | N/A | `?attr/snackbarCloseButtonStyle`
+**Icon tint** | `app:iconTint` | `setCloseIconTint` | `?attr/colorOnSurfaceInverse`
+**Icon** | `app:icon` | `setCloseIconResource` | `@drawable/mtrl_close_24px`
+
### Styles
-Element | Theme attribute | Default value
------------------------ | ----------------------------- | -----------------
-**Default style** | `?attr/snackbarStyle` | `@style/Widget.Material3.Snackbar`
-**Action button style** | `?attr/snackbarButtonStyle` | `@style/Widget.Material3.Button.TextButton.Snackbar`
-**Text label style** | `?attr/snackbarTextViewStyle` | `@style/Widget.Material3.Snackbar.TextView`
+Element | Theme attribute | Default value
+------------------------- |----------------------------------| -----------------
+**Default style** | `?attr/snackbarStyle` | `@style/Widget.Material3.Snackbar`
+**Action button style** | `?attr/snackbarButtonStyle` | `@style/Widget.Material3.Button.TextButton.Snackbar`
+**Text label style** | `?attr/snackbarTextViewStyle` | `@style/Widget.Material3.Snackbar.TextView`
+**Close button style** | `?attr/snackbarCloseButtonStyle` | `@style/Widget.Material3.Button.IconButton.Close.Snackbar`
For the full list, see
[styles](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/snackbar/res/values/styles.xml)
@@ -196,6 +205,18 @@ Snackbar.make(contextView, R.string.text_label, Snackbar.LENGTH_LONG)
.show()
```
+### Adding a close button
+
+To add a close button to the end of the snackbar, use the `setCloseIconVisible`
+method on the object returned from `make`. Snackbars are automatically dismissed
+when the close button is clicked.
+
+```kt
+Snackbar.make(contextView, R.string.text_label, Snackbar.LENGTH_INDEFINITE)
+ .setCloseIconVisible(true)
+ .show()
+```
+
## Customizing snackbar
### Theming snackbar
diff --git a/lib/java/com/google/android/material/button/res/drawable/mtrl_close_24px.xml b/lib/java/com/google/android/material/button/res/drawable/mtrl_close_24px.xml
new file mode 100644
index 000000000..39057e7cb
--- /dev/null
+++ b/lib/java/com/google/android/material/button/res/drawable/mtrl_close_24px.xml
@@ -0,0 +1,27 @@
+
+
+
+
+
+
diff --git a/lib/java/com/google/android/material/button/res/values/strings.xml b/lib/java/com/google/android/material/button/res/values/strings.xml
index aa171c613..667ecab45 100644
--- a/lib/java/com/google/android/material/button/res/values/strings.xml
+++ b/lib/java/com/google/android/material/button/res/values/strings.xml
@@ -20,4 +20,5 @@
Collapsed
Overflow menu
+ Close
diff --git a/lib/java/com/google/android/material/button/res/values/styles.xml b/lib/java/com/google/android/material/button/res/values/styles.xml
index f7b0b0fee..b40d938a4 100644
--- a/lib/java/com/google/android/material/button/res/values/styles.xml
+++ b/lib/java/com/google/android/material/button/res/values/styles.xml
@@ -729,6 +729,15 @@
- @style/ThemeOverlay.Material3.Button.TextButton.Snackbar
+
+
+
+