Anonymous
Compose ExposeDropdownMenu обрезает верхние 4 элемента, невозможно прокрутить вверх
Сообщение
Anonymous » 04 май 2024, 08:57
Я показываю ExposeDropdownMenus внутри AlertDialog, и когда они развернуты, верхние 4 элемента списка недоступны, и невозможно прокрутить список до начала.
Код: Выделить всё
@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun MakeSelection(
vinDescriptionFlow: MutableStateFlow,
) {
val vinDescriptionState = vinDescriptionFlow.collectAsState()
val makeLabelString = "Make"
val makes =
SMSDatabase
.database
.vinMakeModel
.observeDistinctMakes().collectAsState(
initial = emptyList())
var expanded by remember { mutableStateOf(false) }
Row(
modifier = Modifier
.fillMaxWidth()
.height(IntrinsicSize.Max)
) {
ExposedDropdownMenuBox(
modifier = Modifier
.weight(1f),
expanded = expanded,
onExpandedChange = {
expanded = !expanded
}
) {
OutlinedTextField(
modifier = Modifier
.fillMaxWidth()
.menuAnchor(),
readOnly = true,
value = vinDescriptionState.value.make,
onValueChange = {
vinDescriptionState.value.make = it
},
label = {
Text(makeLabelString)
},
placeholder = {
Text(makeLabelString.toUpperCase(Locale.current))
},
trailingIcon = {
ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded)
}
)
ExposedDropdownMenu(
expanded = expanded,
onDismissRequest = {
expanded = false
}
) {
makes.value.forEach {
DropdownMenuItem(
text = { Text(it) },
onClick = {
vinDescriptionFlow.value.make = it
expanded = false
}
)
}
}
}
Button(
modifier = Modifier
.padding(Theme.TEXT_FIELD_BUTTON_PADDING)
.width(IntrinsicSize.Min)
.fillMaxHeight()
.defaultMinSize(
minWidth = 85.dp,
minHeight = 0.dp
),
shape = RoundedCornerShape(size = 6.dp),
contentPadding = PaddingValues(
start = 4.dp,
top = 4.dp,
end = 4.dp,
bottom = 4.dp
),
onClick = {
}
) {
Text(
modifier = Modifier
.align(Alignment.CenterVertically),
textAlign = TextAlign.Center,
text = "QUICK JUMP")
}
}
}
Вот диалоговое окно, в котором отображается раскрывающийся список:
Код: Выделить всё
@Composable
fun TowDialog(
vinDescriptionFlow: MutableStateFlow,
show: MutableState,
onConfirm: (VinDescription) -> Unit) {
val vinDescriptionState = vinDescriptionFlow.collectAsState()
AlertDialog(
onDismissRequest = {
show.value = false
},
confirmButton = {
TextButton(
onClick = {
onConfirm(vinDescriptionState.value)
}
) {
Text("Save")
}
},
dismissButton = {
TextButton(
onClick = {
show.value = false
}
) {
Text("Cancel")
}
},
text = {
Column {
MakeSelection(vinDescriptionFlow = vinDescriptionFlow)
ModelSelection(vinDescriptionFlow = vinDescriptionFlow)
ColorSelection(vinDescriptionFlow = vinDescriptionFlow)
}
})
}
Вот полученный экран. На этом изображении отсутствуют несколько верхних результатов. Над "AMC" должно быть "AA", "ACURA", "ALFA ROMEO", "AM GENERAL" и пролистать выше невозможно, но можно прокрутить вниз до самого низа.
Подробнее здесь:
https://stackoverflow.com/questions/783 ... oll-to-top
1714802237
Anonymous
Я показываю ExposeDropdownMenus внутри AlertDialog, и когда они развернуты, верхние 4 элемента списка недоступны, и невозможно прокрутить список до начала. [code]@OptIn(ExperimentalMaterial3Api::class) @Composable fun MakeSelection( vinDescriptionFlow: MutableStateFlow, ) { val vinDescriptionState = vinDescriptionFlow.collectAsState() val makeLabelString = "Make" val makes = SMSDatabase .database .vinMakeModel .observeDistinctMakes().collectAsState( initial = emptyList()) var expanded by remember { mutableStateOf(false) } Row( modifier = Modifier .fillMaxWidth() .height(IntrinsicSize.Max) ) { ExposedDropdownMenuBox( modifier = Modifier .weight(1f), expanded = expanded, onExpandedChange = { expanded = !expanded } ) { OutlinedTextField( modifier = Modifier .fillMaxWidth() .menuAnchor(), readOnly = true, value = vinDescriptionState.value.make, onValueChange = { vinDescriptionState.value.make = it }, label = { Text(makeLabelString) }, placeholder = { Text(makeLabelString.toUpperCase(Locale.current)) }, trailingIcon = { ExposedDropdownMenuDefaults.TrailingIcon(expanded = expanded) } ) ExposedDropdownMenu( expanded = expanded, onDismissRequest = { expanded = false } ) { makes.value.forEach { DropdownMenuItem( text = { Text(it) }, onClick = { vinDescriptionFlow.value.make = it expanded = false } ) } } } Button( modifier = Modifier .padding(Theme.TEXT_FIELD_BUTTON_PADDING) .width(IntrinsicSize.Min) .fillMaxHeight() .defaultMinSize( minWidth = 85.dp, minHeight = 0.dp ), shape = RoundedCornerShape(size = 6.dp), contentPadding = PaddingValues( start = 4.dp, top = 4.dp, end = 4.dp, bottom = 4.dp ), onClick = { } ) { Text( modifier = Modifier .align(Alignment.CenterVertically), textAlign = TextAlign.Center, text = "QUICK JUMP") } } } [/code] Вот диалоговое окно, в котором отображается раскрывающийся список: [code]@Composable fun TowDialog( vinDescriptionFlow: MutableStateFlow, show: MutableState, onConfirm: (VinDescription) -> Unit) { val vinDescriptionState = vinDescriptionFlow.collectAsState() AlertDialog( onDismissRequest = { show.value = false }, confirmButton = { TextButton( onClick = { onConfirm(vinDescriptionState.value) } ) { Text("Save") } }, dismissButton = { TextButton( onClick = { show.value = false } ) { Text("Cancel") } }, text = { Column { MakeSelection(vinDescriptionFlow = vinDescriptionFlow) ModelSelection(vinDescriptionFlow = vinDescriptionFlow) ColorSelection(vinDescriptionFlow = vinDescriptionFlow) } }) } [/code] Вот полученный экран. На этом изображении отсутствуют несколько верхних результатов. Над "AMC" должно быть "AA", "ACURA", "ALFA ROMEO", "AM GENERAL" и пролистать выше невозможно, но можно прокрутить вниз до самого низа. [img]https://lh3.googleusercontent.com/d/1SPI0KNMNnUJV6za1aRcA4wRO1hnOpAso[/img] Подробнее здесь: [url]https://stackoverflow.com/questions/78340280/compose-exposeddropdownmenu-cuts-off-top-4-items-cannot-scroll-to-top[/url]