Button

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:

@Composable
funFilledButtonExample(onClick:()->Unit){
Button(onClick={onClick()}){
Text("Filled")
}
}

This implementation appears as shown:

Figure 2. A filled button.

Filled tonal button

The filled tonal button component uses the FilledTonalButton composable. It is filled with a tonal color by default.

The snippet shows how to implement the component:

@Composable
funFilledTonalButtonExample(onClick:()->Unit){
FilledTonalButton(onClick={onClick()}){
Text("Tonal")
}
}

This implementation appears as shown:

Figure 3. A tonal button.

Outlined button

The outlined button component uses the OutlinedButton composable. It appears with an outline by default.

The snippet shows how to implement the component:

@Composable
funOutlinedButtonExample(onClick:()->Unit){
OutlinedButton(onClick={onClick()}){
Text("Outlined")
}
}

This implementation appears as shown:

Figure 4. An outlined button.

Elevated button

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.

The snippet shows how to implement the component:

@Composable
funElevatedButtonExample(onClick:()->Unit){
ElevatedButton(onClick={onClick()}){
Text("Elevated")
}
}

This implementation appears as shown:

Figure 5. An elevated button.

Text button

The text button component uses the TextButton composable. It appears as only text until pressed. It does not have a solid fill or outline by default.

The snippet shows how to implement the component:

@Composable
funTextButtonExample(onClick:()->Unit){
TextButton(
onClick={onClick()}
){
Text("Text Button")
}
}

This implementation appears as shown:

Figure 6. A text button.

Additional resources

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年11月17日 UTC.