Style SnackBar in theme app Style SnackBar in theme app android android

Style SnackBar in theme app


With the Material Components Library you can globally change the snackbar style in your app theme:

<style name="AppTheme" parent="Theme.MaterialComponents.*">    <!-- Style to use for Snackbars in this theme. -->    <item name="snackbarStyle">@style/Widget.MaterialComponents.Snackbar</item>    <!-- Style to use for action button within a Snackbar in this theme. -->    <item name="snackbarButtonStyle">@style/Widget.MaterialComponents.Button.TextButton.Snackbar</item>    <!-- Style to use for message text within a Snackbar in this theme. -->    <item name="snackbarTextViewStyle">@style/Widget.MaterialComponents.Snackbar.TextView</item>    ....</style>

Note:

  • snackbarStyle and snackbarButtonStyle require the version 1.1.0
  • snackbarTextViewStyle requires the version 1.2.0.

For example:

  <style name="snackbar_style" parent="@style/Widget.MaterialComponents.Snackbar">    <item name="android:layout_margin">32dp</item>  </style>  <style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button.TextButton.Snackbar">      <item name="backgroundTint">@color/secondaryLightColor</item>      <item name="android:textColor">@color/primaryDarkColor</item>  </style>  <style name="snackbar_text" parent="@style/Widget.MaterialComponents.Snackbar.TextView">    <item name="android:textColor">@color/secondaryLightColor</item>  </style>

enter image description here

It is just an example how to change also the parent style for the action button. You can use for example a standard Widget.MaterialComponents.Button:

  <style name="snackbar_button" parent="@style/Widget.MaterialComponents.Button">      <item name="backgroundTint">@color/secondaryLightColor</item>      <item name="android:textColor">@color/primaryDarkColor</item>  </style>

To change the background color of the SnackBar you can use:

<style name="snackbar_style" parent="@style/Widget.MaterialComponents.Snackbar">    <!-- using backgroundTint the alpha layer is ignored -->    <item name="backgroundTint">@color/....</item></style>

Or if you prefer:

   <style name="MySnackbar" parent="@style/Widget.MaterialComponents.Snackbar">        <item name="materialThemeOverlay">@style/snackbar_overlay</item>        <!-- If you want to avoid the alpha level for the color that is overlaid on top of the background color-->        <item name="backgroundOverlayColorAlpha">1.0</item>    </style>    <style name="snackbar_overlay">        <item name="colorOnSurface">....</item>    </style>


you need this: tools:override="true"

<resources xmlns:tools="http://schemas.android.com/tools">    <style name="TextAppearance.Design.Snackbar.Message" parent="android:TextAppearance" tools:override="true">        <item name="android:textColor">@color/text</item>        <item name="android:textSize">50sp</item>    </style></resources>


Refer to this link for more information:

// create instance

Snackbar snackbar = Snackbar.make(view, text, duration);

// set action button color

snackbar.setActionTextColor(getResources().getColor(R.color.indigo));

// get snackbar view

View snackbarView = snackbar.getView();

// change snackbar text color

int snackbarTextId = android.support.design.R.id.snackbar_text;TextView textView = (TextView)snackbarView.findViewById(snackbarTextId);textView.setTextColor(getResources().getColor(R.color.indigo));

// change snackbar background

snackbarView.setBackgroundColor(Color.MAGENTA);