We just launched Compose Examples featuring over 150+ components! Check it out →

ToggleButton

Android

Component in Wear Material Compose

Wear Material [ToggleButton] that offers a single slot to take any content (text, icon or image).

The [ToggleButton] is circular in shape and defaults to size [ToggleButtonDefaults.DefaultToggleButtonSize] or [ToggleButtonDefaults.SmallToggleButtonSize]. Icon content should be of size [ToggleButtonDefaults.DefaultIconSize] or [ToggleButtonDefaults.SmallIconSize] respectively.

The recommended set of checked and unchecked [ToggleButtonColors] can be obtained from [ToggleButtonDefaults.toggleButtonColors], which defaults to checked colors being a solid background of [Colors.primary] with content color of [Colors.onPrimary] and unchecked colors being a solid background of [Colors.surface] with content color of [Colors.onSurface].

[ToggleButton]s can be enabled or disabled. A disabled toggle button will not respond to click events.

Last updated:

Installation

dependencies {
   implementation("androidx.wear.compose:compose-material:1.5.0-alpha04")
}

Overloads

@Deprecated(
    "This overload is provided for backwards compatibility with Compose for Wear OS 1.0." +
        "A newer overload is available with an additional shape parameter.",
    level = DeprecationLevel.HIDDEN
)
@Composable
fun ToggleButton(
    checked: Boolean,
    onCheckedChange: (Boolean) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: ToggleButtonColors = ToggleButtonDefaults.toggleButtonColors(),
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    content: @Composable BoxScope.() -> Unit,
)

Parameters

namedescription
checkedBoolean flag indicating whether this toggle button is currently checked.
onCheckedChangeCallback to be invoked when this toggle button is clicked.
modifierModifier to be applied to the toggle button.
enabledControls the enabled state of the toggle button. When false, this toggle button will not be clickable.
colors[ToggleButtonColors] that will be used to resolve the background and content color for this toggle button. See [ToggleButtonDefaults.toggleButtonColors].
interactionSourceThe [MutableInteractionSource] representing the stream of [Interaction]s for this toggle button. You can create and pass in your own remembered [MutableInteractionSource] if you want to observe [Interaction]s and customize the appearance / behavior of this ToggleButton in different [Interaction]s.
contentThe icon, image or text to be drawn inside the toggle button.
@Deprecated(
    "This overload is provided for backwards compatibility with Compose for Wear OS 1.1." +
        "A newer overload is available with an additional semantic role parameter.",
    level = DeprecationLevel.HIDDEN
)
@Composable
fun ToggleButton(
    checked: Boolean,
    onCheckedChange: (Boolean) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: ToggleButtonColors = ToggleButtonDefaults.toggleButtonColors(),
    interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },
    shape: Shape = CircleShape,
    content: @Composable BoxScope.() -> Unit,
)

Parameters

namedescription
checkedBoolean flag indicating whether this toggle button is currently checked.
onCheckedChangeCallback to be invoked when this toggle button is clicked.
modifierModifier to be applied to the toggle button.
enabledControls the enabled state of the toggle button. When false, this toggle button will not be clickable.
colors[ToggleButtonColors] that will be used to resolve the background and content color for this toggle button. See [ToggleButtonDefaults.toggleButtonColors].
interactionSourceThe [MutableInteractionSource] representing the stream of [Interaction]s for this toggle button. You can create and pass in your own remembered [MutableInteractionSource] if you want to observe [Interaction]s and customize the appearance / behavior of this ToggleButton in different [Interaction]s.
shapeDefines the shape for this toggle button. It is strongly recommended to use the default as this shape is a key characteristic of the Wear Material Theme.
contentThe icon, image or text to be drawn inside the toggle button.
@Composable
fun ToggleButton(
    checked: Boolean,
    onCheckedChange: (Boolean) -> Unit,
    modifier: Modifier = Modifier,
    enabled: Boolean = true,
    colors: ToggleButtonColors = ToggleButtonDefaults.toggleButtonColors(),
    interactionSource: MutableInteractionSource? = null,
    shape: Shape = CircleShape,
    role: Role = ToggleButtonDefaults.DefaultRole,
    content: @Composable BoxScope.() -> Unit,
)

Parameters

namedescription
checkedBoolean flag indicating whether this toggle button is currently checked.
onCheckedChangeCallback to be invoked when this toggle button is clicked.
modifierModifier to be applied to the toggle button.
enabledControls the enabled state of the toggle button. When false, this toggle button will not be clickable.
colors[ToggleButtonColors] that will be used to resolve the background and content color for this toggle button. See [ToggleButtonDefaults.toggleButtonColors].
interactionSourcean optional hoisted [MutableInteractionSource] for observing and emitting [Interaction]s for this toggle button. You can use this to change the toggle button's appearance or preview the toggle button in different states. Note that if null is provided, interactions will still happen internally.
shapeDefines the shape for this toggle button. It is strongly recommended to use the default as this shape is a key characteristic of the Wear Material Theme.
roleRole semantics that accessibility services can use to provide more context to users.
contentThe icon, image or text to be drawn inside the toggle button.

Code Example

ToggleButtonWithIcon

@Composable
fun ToggleButtonWithIcon() {
    var checked by remember { mutableStateOf(true) }
    ToggleButton(
        checked = checked,
        onCheckedChange = { checked = it },
        enabled = true,
    ) {
        Icon(
            painter = painterResource(id = R.drawable.ic_airplanemode_active_24px),
            contentDescription = "airplane",
            modifier =
                Modifier.size(ToggleButtonDefaults.DefaultIconSize)
                    .wrapContentSize(align = Alignment.Center),
        )
    }
}
by @alexstyl