# Material Button `Material Button` is a customizable button component with updated visual styles. This button component has several built-in styles to support different levels of emphasis, as typically any UI will contain a few different buttons to indicate different actions. These levels of emphasis include: - raised button: A rectangular material button that lifts and displays ink reactions on press - unelevated button: A button made of ink that displays ink reactions on press but does not lift Note: `MaterialButton` is visually different from `Button` and `AppCompatButton`. One of the main differences is that `AppCompatButton` has a `4dp` inset on the left and right sides, whereas `MaterialButton` does not. To add an inset to match `AppCompatButton`, set `android:insetLeft` and `android:insetRight` on the button to `4dp`, or change the spacing on the button's parent layout. When replacing buttons in your app with `MaterialButton`, you should inspect these changes for sizing and spacing differences. ## Design & API Documentation - [Material Design guidelines: Buttons](https://material.io/go/design-buttons) - [Class definition](https://github.com/material-components/material-components-android/tree/master/lib/java/com/google/android/material/button/MaterialButton.java) - [Class overview](https://developer.android.com/reference/com/google/android/material/button/MaterialButton) ## Usage The `MaterialButton` component provides a complete implementation of Material Design's button component. Example code of how to include the component in your layout: ```xml ``` For raised buttons, your theme's `colorAccent` provides the default background color of the component, and the text color is white by default. For unelevated buttons, your theme's `colorAccent` provides the default text color of the component, and the background color is transparent by default. ## Styles We provide several styles for the `MaterialButton` component. ### Filled, elevated button (default) The default style represents an elevated button with a colored background. This should be used for important, final actions that complete a flow, like 'Save' or 'Confirm'. If no style attribute is specified for a `MaterialButton`, this is the style that will be used. ``` ``` ### Filled, unelevated button The `UnelevatedButton` style represents an unelevated button with a colored background. ``` ``` ### Text button The `TextButton` style has a transparent background with colored text. Text buttons are used for low-priority actions, especially when presenting multiple options. ``` ``` ## Attributes The following attributes can be changed for Material Button: Description | Relevant attributes ------------------------------------------------------------ | ------------------- Button padding | `android:padding`
`android:paddingLeft`
`android:paddingRight`
`android:paddingStart`
`android:paddingEnd`
`android:paddingTop`
`android:paddingBottom` Button inset | `android:insetLeft`
`android:insetRight`
`android:insetTop`
`android:insetBottom` Background color | `app:backgroundTint`
`app:backgroundTintMode` Icon drawable | `app:icon` Padding between icon and button text | `app:iconPadding` Icon color | `app:iconTint`
`app:iconTintMode` Padding at the start of a button when
an icon is present | `app:additionalPaddingStartForIcon` Padding at the end of a button when an
icon is present | `app:additionalPaddingEndForIcon` Stroke | `app:strokeColor`
`app:strokeWidth` The radius of all four corners of the
button | `app:cornerRadius` Ripple | `app:rippleColor` The following shows an example of setting `icon` and `iconPadding` attributes on a button: ```xml ``` ## Related Concepts If your app requires actions to be persistent and readily available, you can use [FloatingActionButton](FloatingActionButton.md) instead.