---
title: "OutlinedIconButton"
description: "Icon buttons help people take supplementary actions with a single tap. They’re used when a
compact button is required, such as in a toolbar or image list."
type: "component"
social_image: "/static/images/material3/outlined-icon-button.png"
---

<div class='type'>Composable Component</div>



Icon buttons help people take supplementary actions with a single tap. They’re used when a
compact button is required, such as in a toolbar or image list.

<img loading='lazy' class='hero-img' alt='Outlined icon button image' src='/static/images/material3/outlined-icon-button.png'>

<a id='references'></a>

<div class='sourceset sourceset-common'>Common</div>


```kotlin
@Composable
fun OutlinedIconButton(
    onClick: () -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    shape: Shape = IconButtonDefaults.outlinedShape,
    colors: IconButtonColors = IconButtonDefaults.outlinedIconButtonColors(),
    border: BorderStroke? = IconButtonDefaults.outlinedIconButtonBorder(enabled),
    interactionSource: MutableInteractionSource? = null,
    content: @Composable () -> Unit,
) =
    SurfaceIconButton(
        onClick = onClick,
        modifier = modifier,
        enabled = enabled,
        shape = shape,
        colors = colors,
        border = border,
        interactionSource = interactionSource,
        content = content,
    )
```


#### Parameters

| | |
| --- | --- |
| onClick | called when this icon button is clicked |
| modifier | the `Modifier` to be applied to this icon button |
| enabled | controls the enabled state of this icon button. When `false`, this component will not respond to user input, and it will appear visually disabled and disabled to accessibility services. |
| shape | defines the shape of this icon button's container and border (when `border` is not null) |
| colors | `IconButtonColors` that will be used to resolve the colors used for this icon button in different states. See `IconButtonDefaults.outlinedIconButtonVibrantColors` and `IconButtonDefaults.outlinedIconButtonColors`. |
| border | the border to draw around the container of this icon button. Pass `null` for no border. See `IconButtonDefaults.outlinedIconButtonBorder` and `IconButtonDefaults.outlinedIconButtonBorder`. |
| interactionSource | an optional hoisted `MutableInteractionSource` for observing and emitting `Interaction`s for this icon button. You can use this to change the icon button's appearance or preview the icon button in different states. Note that if `null` is provided, interactions will still happen internally. |
| content | the content of this icon button, typically an `Icon` |




<div class='sourceset sourceset-common'>Common</div>


```kotlin
@ExperimentalMaterial3ExpressiveApi
@Composable
fun OutlinedIconButton(
    onClick: () -> Unit,
    shapes: IconButtonShapes,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: IconButtonColors = IconButtonDefaults.outlinedIconButtonColors(),
    border: BorderStroke? = IconButtonDefaults.outlinedIconButtonBorder(enabled),
    interactionSource: MutableInteractionSource? = null,
    content: @Composable () -> Unit,
) =
    SurfaceIconButton(
        onClick = onClick,
        modifier = modifier,
        enabled = enabled,
        shapes = shapes,
        colors = colors,
        border = border,
        interactionSource = interactionSource,
        content = content,
    )
```


#### Parameters

| | |
| --- | --- |
| shapes | the `IconButtonShapes` that the icon button will morph between depending on the user's interaction with the icon button. |
| onClick | called when this icon button is clicked |
| modifier | the `Modifier` to be applied to this icon button |
| enabled | controls the enabled state of this icon button. When `false`, this component will not respond to user input, and it will appear visually disabled and disabled to accessibility services. |
| colors | `IconButtonColors` that will be used to resolve the colors used for this icon button in different states. See `IconButtonDefaults.outlinedIconButtonVibrantColors` and `IconButtonDefaults.outlinedIconButtonColors`. |
| border | the border to draw around the container of this icon button. Pass `null` for no border. See `IconButtonDefaults.outlinedIconButtonBorder` and `IconButtonDefaults.outlinedIconButtonBorder`. |
| interactionSource | an optional hoisted `MutableInteractionSource` for observing and emitting `Interaction`s for this icon button. You can use this to change the icon button's appearance or preview the icon button in different states. Note that if `null` is provided, interactions will still happen internally. |
| content | the content of this icon button, typically an `Icon` |






## Code Examples
### LargeRoundUniformOutlinedIconButtonSample
```kotlin
@OptIn(ExperimentalMaterial3ExpressiveApi::class, ExperimentalMaterial3Api::class)
@Preview
@Composable
fun LargeRoundUniformOutlinedIconButtonSample() {
    val description = "Localized description"
    // Icon button should have a tooltip associated with it for a11y.
    TooltipBox(
        positionProvider =
            TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
        tooltip = { PlainTooltip { Text(description) } },
        state = rememberTooltipState(),
    ) {
        OutlinedIconButton(
            onClick = { /* doSomething() */ },
            modifier = Modifier.size(IconButtonDefaults.largeContainerSize()),
            shape = IconButtonDefaults.largeRoundShape,
        ) {
            Icon(
                Icons.Filled.Lock,
                contentDescription = description,
                modifier = Modifier.size(IconButtonDefaults.largeIconSize),
            )
        }
    }
}
```
### OutlinedIconButtonSample
```kotlin
@OptIn(ExperimentalMaterial3Api::class)
@Preview
@Composable
fun OutlinedIconButtonSample() {
    val description = "Localized description"
    // Icon button should have a tooltip associated with it for a11y.
    TooltipBox(
        positionProvider =
            TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
        tooltip = { PlainTooltip { Text(description) } },
        state = rememberTooltipState(),
    ) {
        OutlinedIconButton(onClick = { /* doSomething() */ }) {
            Icon(Icons.Filled.Lock, contentDescription = description)
        }
    }
}
```
### OutlinedIconButtonWithAnimatedShapeSample
```kotlin
@OptIn(ExperimentalMaterial3Api::class)
@ExperimentalMaterial3ExpressiveApi
@Preview
@Composable
fun OutlinedIconButtonWithAnimatedShapeSample() {
    val description = "Localized description"
    // Icon button should have a tooltip associated with it for a11y.
    TooltipBox(
        positionProvider =
            TooltipDefaults.rememberTooltipPositionProvider(TooltipAnchorPosition.Above),
        tooltip = { PlainTooltip { Text(description) } },
        state = rememberTooltipState(),
    ) {
        OutlinedIconButton(
            onClick = { /* doSomething() */ },
            shapes = IconButtonDefaults.shapes(),
        ) {
            Icon(Icons.Filled.Lock, contentDescription = description)
        }
    }
}
```

