Toggle button is a toggleable button that switches between primary and tonal colors depending on checked's value.
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun LargeToggleButtonWithIconSample() {
var checked by remember { mutableStateOf(false) }
val size = ButtonDefaults.LargeContainerHeight
ToggleButton(
checked = checked,
onCheckedChange = { checked = it },
modifier = Modifier.heightIn(size),
shapes = ToggleButtonDefaults.shapesFor(size),
contentPadding = ButtonDefaults.contentPaddingFor(size),
) {
Icon(
if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
contentDescription = "Localized description",
modifier = Modifier.size(ButtonDefaults.iconSizeFor(size)),
)
Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
Text("Label", style = ButtonDefaults.textStyleFor(size))
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun MediumToggleButtonWithIconSample() {
var checked by remember { mutableStateOf(false) }
val size = ButtonDefaults.MediumContainerHeight
ToggleButton(
checked = checked,
onCheckedChange = { checked = it },
modifier = Modifier.heightIn(size),
shapes = ToggleButtonDefaults.shapesFor(size),
contentPadding = ButtonDefaults.contentPaddingFor(size),
) {
Icon(
if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
contentDescription = "Localized description",
modifier = Modifier.size(ButtonDefaults.iconSizeFor(size)),
)
Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
Text("Label", style = ButtonDefaults.textStyleFor(size))
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun SquareToggleButtonSample() {
var checked by remember { mutableStateOf(false) }
val shapes =
ToggleButtonShapes(
shape = ToggleButtonDefaults.squareShape,
pressedShape = ToggleButtonDefaults.pressedShape,
checkedShape = ToggleButtonDefaults.roundShape,
)
ToggleButton(checked = checked, onCheckedChange = { checked = it }, shapes = shapes) {
Text("Button")
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun ToggleButtonSample() {
var checked by remember { mutableStateOf(false) }
ToggleButton(checked = checked, onCheckedChange = { checked = it }) { Text("Button") }
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun ToggleButtonWithIconSample() {
var checked by remember { mutableStateOf(false) }
ElevatedToggleButton(checked = checked, onCheckedChange = { checked = it }) {
Icon(
if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
contentDescription = "Localized description",
modifier = Modifier.size(ButtonDefaults.IconSize),
)
Spacer(Modifier.size(ButtonDefaults.IconSpacing))
Text("Edit")
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun XLargeToggleButtonWithIconSample() {
var checked by remember { mutableStateOf(false) }
val size = ButtonDefaults.ExtraLargeContainerHeight
ToggleButton(
checked = checked,
onCheckedChange = { checked = it },
modifier = Modifier.heightIn(size),
shapes = ToggleButtonDefaults.shapesFor(size),
contentPadding = ButtonDefaults.contentPaddingFor(size),
) {
Icon(
if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
contentDescription = "Localized description",
modifier = Modifier.size(ButtonDefaults.iconSizeFor(size)),
)
Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
Text("Label", style = ButtonDefaults.textStyleFor(size))
}
}
@OptIn(ExperimentalMaterial3ExpressiveApi::class)
@Preview
@Composable
fun XSmallToggleButtonWithIconSample() {
var checked by remember { mutableStateOf(false) }
val size = ButtonDefaults.ExtraSmallContainerHeight
ToggleButton(
checked = checked,
onCheckedChange = { checked = it },
modifier = Modifier.heightIn(size),
shapes = ToggleButtonDefaults.shapesFor(size),
contentPadding = ButtonDefaults.contentPaddingFor(size),
) {
Icon(
if (checked) Icons.Filled.Edit else Icons.Outlined.Edit,
contentDescription = "Localized description",
modifier = Modifier.size(ButtonDefaults.iconSizeFor(size)),
)
Spacer(Modifier.size(ButtonDefaults.iconSpacingFor(size)))
Text("Label")
}
}