Jetpack Compose Material3 отключен ListItem
поэтому я пытаюсь реализовать некоторые темы Material3 и хочу отобразить список элементов, которые могут быть отключены или нет. Насколько я вижу, ListItem Composable не позволяет отображать его в отключенном состоянии, потому что цвета содержимого жестко запрограммированы на «enabled = true», как вы можете видеть в приведенном ниже примере кода. Как я могу реализовать ListItem в отключенном состоянии?
@Composable
@ExperimentalMaterial3Api
fun ListItem(
headlineText: @Composable () -> Unit,
modifier: Modifier = Modifier,
overlineText: @Composable (() -> Unit)? = null,
supportingText: @Composable (() -> Unit)? = null,
leadingContent: @Composable (() -> Unit)? = null,
trailingContent: @Composable (() -> Unit)? = null,
colors: ListItemColors = ListItemDefaults.colors(),
tonalElevation: Dp = ListItemDefaults.Elevation,
shadowElevation: Dp = ListItemDefaults.Elevation,
) {
if (overlineText == null && supportingText == null) {
// One-Line List Item
ListItem(
modifier = modifier,
containerColor = colors.containerColor().value,
contentColor = colors.headlineColor(enabled = true).value, // headlineColor is always enabled
tonalElevation = tonalElevation,
shadowElevation = shadowElevation,
minHeight = ListTokens.ListItemContainerHeight,
paddingValues = PaddingValues(ListItemHorizontalPadding, ListItemVerticalPadding)
) {
if (leadingContent != null) {
leadingContent(
leadingContent = leadingContent,
contentColor = colors.leadingIconColor(enabled = true).value,
topAlign = false
)()
}
Box(
Modifier
.weight(1f)
.align(Alignment.CenterVertically)
) {
ProvideTextStyleFromToken(
colors.headlineColor(enabled = true).value,
ListTokens.ListItemLabelTextFont,
headlineText
)
}
if (trailingContent != null) {
trailingContent(
trailingContent = trailingContent,
contentColor = colors.trailingIconColor(enabled = true).value,
topAlign = false
)()
}
}
}
1 ответ
В настоящее время (М31.0.0-rc01
)ListItem
не поддерживаетenabled
параметр иdisabledLeadingIconColor
не используется.
В качестве обходного пути вы можете использовать что-то вроде:
var enabled by remember { mutableStateOf(true)}
Column {
ListItem(
headlineText = { Text("One line list item with 24x24 icon") },
leadingContent = {
Icon(
Icons.Filled.Favorite,
contentDescription = "Localized description",
)
},
colors = ListItemDefaults.colors(
leadingIconColor = if (enabled) Teal200 else Red)
)
Divider()
}