# 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.