ANDROIDX / COMPOSE / MATERIAL 3
IconButton:按下与选中形状
为普通与 Toggle 图标按钮启用按压、选中状态的形状变化。
普通图标按钮
普通 IconButton 的 IconButtonShapes 包含 shape 与 pressedShape:
IconButton(
onClick = { /* action */ },
shapes = IconButtonDefaults.shapes(),
) {
Icon(Icons.Default.Lock, contentDescription = "锁定")
}源码说明:当两个值都是 CornerBasedShape 时,按钮会在 active 与 pressed 状态之间 morph。
Toggle 多一个 checked 状态
IconToggleButtonShapes 额外包含 checkedShape,所以选中状态也可以有独立轮廓:
var checked by remember { mutableStateOf(false) }
IconToggleButton(
checked = checked,
onCheckedChange = { checked = it },
shapes = IconButtonDefaults.toggleableShapes(),
) {
Icon(Icons.Default.Favorite, contentDescription = "收藏")
}可用范围
同一套 shapes 思路不仅用于透明背景版本。当前 samples 对 FilledIconButton、FilledTonalIconButton、OutlinedIconButton 以及各自 Toggle 版本都展示了 animated shape 调用。
别漏掉 Tooltip
官方 IconButtonWithAnimatedShapeSample 在按钮外包了 TooltipBox,并明确注释 icon button 应关联 tooltip 以满足可访问性。形状是视觉反馈,不能替代按钮含义。
源码依据
- 默认 shapes:
IconButtonDefaults.kt:994-1051 - shapes 重载:
IconButton.kt:208-216 - 数据类型:
IconButton.kt:1465-1482 - 官方示例:
IconButtonSamples.kt:91-119, 316-341