Modifier.triStateToggleable() を使った3状態チェックボックスとして TriStateCheckbox が用意されています。
- 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
- }
- })
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)
- }
- )
- }
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 件のコメント:
コメントを投稿