Stay organized with collections
Save and categorize content based on your preferences.
keywords: AiAssisted, product:JetpackCompose
Buttons are fundamental components that allow the user to trigger a defined
action. There are five types of buttons. This table describes the
appearance of each of the five button types, as well as where you should use
them:
Type
Appearance
Purpose
Filled
Solid background with contrasting text.
High-emphasis buttons. These are for primary actions in an
application, such as "submit" and "save." The shadow effect highlights the
button's importance.
Filled tonal
Background color varies to match the surface.
Also for primary or significant actions. Filled tonal buttons provide
more visual weight and suit functions such as "add to cart" and "Sign in."
Elevated
Stands out by having a shadow.
Serves a similar purpose to tonal buttons. Increase elevation to make
the button appear even more prominently.
Outlined
Features a border with no fill.
Medium-emphasis buttons, containing actions that are important but not
primary. They pair well with other buttons to indicate alternative,
secondary actions like "Cancel" or "Back."
Text
Displays text with no background or border.
Low-emphasis buttons, ideal for less critical actions such as
navigational links, or secondary functions like "Learn More" or "View
details."
This image demonstrates the five types of buttons in Material Design:
Figure 1. The five button components.
API surface
onClick
The function that the system calls when the user presses the button.
enabled
When false, this parameter makes the button appear unavailable and
inactive.
colors
An instance of ButtonColors that determines the colors used in the
button.
contentPadding
The padding within the button.
Filled button
The filled button component uses the basic Button composable. It is
filled with a solid color by default. The snippet shows how to implement the
component:
The elevated button component uses the ElevatedButton composable. It has
a shadow that represents the elevation effect by default. It is a filled button
that includes a shadow.
Content and code samples on this page are subject to the licenses described in the Content License. Java and OpenJDK are trademarks or registered trademarks of Oracle and/or its affiliates.
Last updated 2025-08-20 UTC.
[[["Easy to understand","easyToUnderstand","thumb-up"],["Solved my problem","solvedMyProblem","thumb-up"],["Other","otherUp","thumb-up"]],[["Missing the information I need","missingTheInformationINeed","thumb-down"],["Too complicated / too many steps","tooComplicatedTooManySteps","thumb-down"],["Out of date","outOfDate","thumb-down"],["Samples / code issue","samplesCodeIssue","thumb-down"],["Other","otherDown","thumb-down"]],["Last updated 2025-08-20 UTC."],[],[],null,["# Button\n\nkeywords: AiAssisted, product:JetpackCompose\n\nButtons are fundamental components that allow the user to trigger a defined\naction. There are five types of buttons. This table describes the\nappearance of each of the five button types, as well as where you should use\nthem:\n\n| Type | Appearance | Purpose |\n|--------------|-----------------------------------------------|---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------|\n| Filled | Solid background with contrasting text. | High-emphasis buttons. These are for primary actions in an application, such as \"submit\" and \"save.\" The shadow effect highlights the button's importance. |\n| Filled tonal | Background color varies to match the surface. | Also for primary or significant actions. Filled tonal buttons provide more visual weight and suit functions such as \"add to cart\" and \"Sign in.\" |\n| Elevated | Stands out by having a shadow. | Serves a similar purpose to tonal buttons. Increase elevation to make the button appear even more prominently. |\n| Outlined | Features a border with no fill. | Medium-emphasis buttons, containing actions that are important but not primary. They pair well with other buttons to indicate alternative, secondary actions like \"Cancel\" or \"Back.\" |\n| Text | Displays text with no background or border. | Low-emphasis buttons, ideal for less critical actions such as navigational links, or secondary functions like \"Learn More\" or \"View details.\" |\n\nThis image demonstrates the five types of buttons in Material Design:\nFigure 1. The five button components.\n\nAPI surface\n-----------\n\n`onClick`\n: The function that the system calls when the user presses the button.\n\n`enabled`\n: When `false`, this parameter makes the button appear unavailable and\n inactive.\n\n`colors`\n: An instance of `ButtonColors` that determines the colors used in the\n button.\n\n`contentPadding`\n: The padding within the button.\n\nFilled button\n-------------\n\nThe filled button component uses the basic [`Button`](/reference/kotlin/androidx/compose/material3/package-summary?#Button(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ButtonColors,androidx.compose.material3.ButtonElevation,androidx.compose.foundation.BorderStroke,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)) composable. It is\nfilled with a solid color by default. The snippet shows how to implement the\ncomponent:\n\n\n```kotlin\n@Composable\nfun FilledButtonExample(onClick: () -\u003e Unit) {\n Button(onClick = { onClick() }) {\n Text(\"Filled\")\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt#L58-L63\n```\n\n\u003cbr /\u003e\n\n| **Note:** If you want to build a custom button, use the `Button` composable.\n\nThis implementation appears as shown:\nFigure 2. A filled button.\n\nFilled tonal button\n-------------------\n\nThe filled tonal button component uses the [`FilledTonalButton`](/reference/kotlin/androidx/compose/material3/package-summary#FilledTonalButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ButtonColors,androidx.compose.material3.ButtonElevation,androidx.compose.foundation.BorderStroke,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)) composable.\nIt is filled with a tonal color by default.\n\nThe snippet shows how to implement the component:\n\n\n```kotlin\n@Composable\nfun FilledTonalButtonExample(onClick: () -\u003e Unit) {\n FilledTonalButton(onClick = { onClick() }) {\n Text(\"Tonal\")\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt#L67-L72\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as shown:\nFigure 3. A tonal button.\n\nOutlined button\n---------------\n\nThe outlined button component uses the [`OutlinedButton`](/reference/kotlin/androidx/compose/material3/package-summary#OutlinedButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ButtonColors,androidx.compose.material3.ButtonElevation,androidx.compose.foundation.BorderStroke,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)) composable. It\nappears with an outline by default.\n\nThe snippet shows how to implement the component:\n\n\n```kotlin\n@Composable\nfun OutlinedButtonExample(onClick: () -\u003e Unit) {\n OutlinedButton(onClick = { onClick() }) {\n Text(\"Outlined\")\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt#L85-L90\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as shown:\nFigure 4. An outlined button.\n\nElevated button\n---------------\n\nThe elevated button component uses the [`ElevatedButton`](/reference/kotlin/androidx/compose/material3/package-summary#ElevatedButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ButtonColors,androidx.compose.material3.ButtonElevation,androidx.compose.foundation.BorderStroke,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)) composable. It has\na shadow that represents the elevation effect by default. It is a filled button\nthat includes a shadow.\n\nThe snippet shows how to implement the component:\n\n\n```kotlin\n@Composable\nfun ElevatedButtonExample(onClick: () -\u003e Unit) {\n ElevatedButton(onClick = { onClick() }) {\n Text(\"Elevated\")\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt#L76-L81\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as shown:\nFigure 5. An elevated button.\n\nText button\n-----------\n\nThe text button component uses the [`TextButton`](/reference/kotlin/androidx/compose/material3/package-summary#TextButton(kotlin.Function0,androidx.compose.ui.Modifier,kotlin.Boolean,androidx.compose.ui.graphics.Shape,androidx.compose.material3.ButtonColors,androidx.compose.material3.ButtonElevation,androidx.compose.foundation.BorderStroke,androidx.compose.foundation.layout.PaddingValues,androidx.compose.foundation.interaction.MutableInteractionSource,kotlin.Function1)) composable. It appears as\nonly text until pressed. It does not have a solid fill or outline by default.\n\nThe snippet shows how to implement the component:\n\n\n```kotlin\n@Composable\nfun TextButtonExample(onClick: () -\u003e Unit) {\n TextButton(\n onClick = { onClick() }\n ) {\n Text(\"Text Button\")\n }\n}https://github.com/android/snippets/blob/dd30aee903e8c247786c064faab1a9ca8d10b46e/compose/snippets/src/main/java/com/example/compose/snippets/components/Button.kt#L94-L101\n```\n\n\u003cbr /\u003e\n\nThis implementation appears as shown:\nFigure 6. A text button.\n\nAdditional resources\n--------------------\n\n- [Floating action button](/develop/ui/compose/components/fab)\n- [Material Design 3 Buttons overview](https://m3.material.io/components/buttons/overview)"]]