<h2 id="button-onclick-modifier-enabled-buttonsize-leadingicon-trailingicon-shape-color-contentcolor-border-contentpadding-interactionsource-content">Button</h2>

<div class='sourceset sourceset-android'>Android</div>

```kotlin
@Composable
public fun Button(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    buttonSize: ButtonSize = ButtonSize.Medium,
    leadingIcon: @Composable (() -> Unit)? = null,
    trailingIcon: @Composable (() -> Unit)? = null,
    shape: Shape = GlimmerTheme.shapes.large,
    color: Color = GlimmerTheme.colors.surface,
    contentColor: Color = calculateContentColor(color),
    border: BorderStroke? = SurfaceDefaults.border(),
    contentPadding: PaddingValues = ButtonDefaults.contentPadding(buttonSize),
    interactionSource: MutableInteractionSource? = null,
    content: @Composable RowScope.() -> Unit,
)
```

#### Parameters

| | |
| --- | --- |
| onClick | called when this button is clicked |
| modifier | the [Modifier](/jetpack-compose/androidx.compose.ui/ui/interfaces/Modifier) to be applied to this button |
| enabled | controls the enabled state of this button. When `false`, this button will not respond to user input |
| buttonSize | the size variant of this button, represented as a [ButtonSize](/jetpack-compose/androidx.xr.glimmer/glimmer/classes/ButtonSize). Changing [buttonSize](/jetpack-compose/androidx.xr.glimmer/glimmer/classes/ButtonSize) will affect some default values used by this button - but the final resulting size of the button will still be calculated based on the content of the button, and any provided size modifiers such as [androidx.compose.foundation.layout.size](/jetpack-compose/androidx.compose.ui/ui-geometry/classes/Size). For example, setting a 100.dp size using a size modifier will result in the same layout size regardless of [buttonSize](/jetpack-compose/androidx.xr.glimmer/glimmer/classes/ButtonSize), but the provided [buttonSize](/jetpack-compose/androidx.xr.glimmer/glimmer/classes/ButtonSize) will affect other properties such as padding values and the size of icons. |
| leadingIcon | optional leading icon to be placed before the `content`. This is typically an [Icon](/jetpack-compose/androidx.xr.glimmer/glimmer/components/Icon). |
| trailingIcon | optional trailing icon to be placed after the `content`. This is typically an [Icon](/jetpack-compose/androidx.xr.glimmer/glimmer/components/Icon). |
| shape | the [Shape](/jetpack-compose/androidx.compose.ui/ui-graphics/interfaces/Shape) used to clip this button, and also used to draw the background and border |
| color | background color of this button |
| contentColor | content color used by components inside `content`, `leadingIcon`, and `trailingIcon`. |
| border | the border to draw around this button |
| contentPadding | the spacing values to apply internally between the container and the content |
| interactionSource | an optional hoisted [MutableInteractionSource](/jetpack-compose/androidx.compose.foundation/foundation/interfaces/MutableInteractionSource) for observing and emitting Interactions for this button. You can use this to change the button's appearance or preview the button in different states. Note that if `null` is provided, interactions will still happen internally. |
| content | the main content, typically [Text](/jetpack-compose/androidx.xr.glimmer/glimmer/components/Text), to display inside this button |