Vsevolod Ganin
07/31/2021, 5:18 PMVsevolod Ganin
07/31/2021, 5:18 PM@Composable
fun <T> DropdownSelector(
items: List<T>,
selectedValue: T,
onSelect: (T) -> Unit,
toString: @Composable (T) -> String,
modifier: Modifier = Modifier,
) {
var expanded by remember { mutableStateOf(false) }
Column(modifier = modifier) {
Row(
modifier = Modifier
.clickable { expanded = !expanded }
.padding(8.dp)
) {
Text(
text = toString(selectedValue),
modifier = Modifier
.weight(1f)
.align(Alignment.CenterVertically)
)
Spacer(modifier = Modifier.width(8.dp))
ExpandableChevron(isExpanded = expanded)
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
) {
items.forEach { value ->
DropdownMenuItem(onClick = {
onSelect(value)
expanded = false
}) {
Text(toString(value))
}
}
}
}
}
By default it tries to occupy as much horizontal space as possible which is not what I want. And I don't want to hardcode some width because of scalable fonts and allVsevolod Ganin
07/31/2021, 5:53 PMSubcomposeLayout
and got IllegalStateException: Asking for intrinsic measurements of SubcomposeLayout layouts is not supported
with none of my codeKirill Grouchnikov
07/31/2021, 6:28 PMKirill Grouchnikov
07/31/2021, 6:28 PMVsevolod Ganin
07/31/2021, 6:33 PM