I'm trying to get an EditText view to show a spinner when clicked then display the selection or at least something like the underlined spinner but with a leading and trailing icon.
PS: The EditText view would look like a proper EditText view with hints, icons and all
Is there any way to do this in Compose please?
ExposedDropdownMenu
is what you looking for i assume
@OptIn(ExperimentalMaterialApi::class)
fun ExposedSelectionMenu(
title: String,
index: Int,
options: List<String>,
onSelected: (Int) -> Unit
) {
var expanded by remember { mutableStateOf(false) }
var selectedOptionText by remember { mutableStateOf(options[index]) }
ExposedDropdownMenuBox(
modifier = Modifier
.fillMaxWidth()
.padding(vertical = 4.dp),
expanded = expanded,
onExpandedChange = {
expanded = !expanded
}
) {
TextField(
modifier = Modifier.fillMaxWidth(),
readOnly = true,
value = selectedOptionText,
onValueChange = { },
label = { Text(title) },
trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(
expanded = expanded
)
},
colors = ExposedDropdownMenuDefaults.textFieldColors(
backgroundColor = Color.White,
focusedIndicatorColor = Color.Transparent,
unfocusedIndicatorColor = Color.Transparent,
disabledIndicatorColor = Color.Transparent,
)
)
ExposedDropdownMenu(
modifier = Modifier.fillMaxWidth(),
expanded = expanded,
onDismissRequest = {
expanded = false
}
) {
options.forEachIndexed { index: Int, selectionOption: String ->
DropdownMenuItem(
modifier = Modifier.fillMaxWidth(),
onClick = {
selectedOptionText = selectionOption
expanded = false
onSelected(index)
}
) {
Text(text = selectionOption)
}
}
}
}
}