var state by remember { mutableStateOf(ToggleableState.On) }
TriStateCheckbox(state = state, onClick = {
state = when (state) {
ToggleableState.On -> ToggleableState.Indeterminate
ToggleableState.Indeterminate -> ToggleableState.Off
ToggleableState.Off -> ToggleableState.On
}
})
Modifier.triStateToggleable() を使って独自の3状態ボタンも作ることができます。
var state by remember { mutableStateOf(ToggleableState.On) }
Box(
contentAlignment = Alignment.Center,
modifier = Modifier.triStateToggleable(
state = state,
onClick = {
state = when (state) {
ToggleableState.On -> ToggleableState.Off
ToggleableState.Off -> ToggleableState.Indeterminate
ToggleableState.Indeterminate -> ToggleableState.On
}
},
role = Role.Checkbox,
interactionSource = remember { MutableInteractionSource() },
indication = rememberRipple(
bounded = false,
radius = 24.dp
)
)
) {
Icon(
imageVector = when (state) {
ToggleableState.On -> Icons.Default.Favorite
ToggleableState.Off -> Icons.Default.FavoriteBorder
ToggleableState.Indeterminate -> Icons.Default.FavoriteBorder
},
contentDescription = when (state) {
ToggleableState.On -> "favorite on"
ToggleableState.Off -> "favorite on"
ToggleableState.Indeterminate -> "favorite indeterminate"
},
tint = when (state) {
ToggleableState.On -> MaterialTheme.colors.primary
ToggleableState.Off -> MaterialTheme.colors.primary
ToggleableState.Indeterminate -> MaterialTheme.colors.onSurface.copy(alpha = ContentAlpha.disabled)
}
)
}
0 件のコメント:
コメントを投稿