我从Kotlin Compose for Desktop中 Select 了一个Dropdown Menu,我想包括一个垂直滚动条.下拉菜单的源代码是here.他们有一个sample,可以很好地工作,但我无法让它显示垂直滚动条.默认情况下不会显示.
还有一个VerticalScrollbar的例子,我也试过了,但我还没有让它与DropdownMenu
一起工作.
将verticalScroll()
放在DropdownMenu(Modifier)
中会导致错误Vertically scrolled component was measured with an infinity maximum height constraints, which is disallowed...
.
在DropdownMenu
下面加上VerticalScrollbar()
会导致错误Can't represent a size of 1073741824 in Constraints
.
因此,据我所知,在DropdownMenu
米S Popup
米中,有一些东西让我很难做到这一点.
有没有办法实现可见的滚动条?到目前为止,我的布局是这样的.(您可以在下面的下拉菜单中 Select scroll)
data class Lookup(val id: String, val name: String)
fun main() = application {
Window(
onCloseRequest = ::exitApplication,
state = rememberWindowState(width = 1280.dp, height = 800.dp)
) {
MaterialTheme {
Scaffold {
Column(
modifier = Modifier
.fillMaxSize()
.verticalScroll(rememberScrollState()),
horizontalAlignment = Alignment.CenterHorizontally
) {
val lookups = LookupService.getLookups() // about 75 items
val (expanded, setExpanded) = remember { mutableStateOf(false) }
val (selected, setSelected) = remember { mutableStateOf<Lookup?>(null) }
Spacer(Modifier.height(20.dp))
Box(Modifier.wrapContentSize(Alignment.TopStart)) {
val icon = if (expanded) {
Icons.Filled.KeyboardArrowUp
} else {
Icons.Filled.KeyboardArrowDown
}
OutlinedTextField(
value = selected?.name ?: "",
onValueChange = { },
modifier = Modifier
.width(360.dp)
.onKeyEvent {
if (it.key == Key.DirectionDown && !expanded) {
setExpanded(true)
return@onKeyEvent true
}
return false
}
.clickable { setExpanded(true) },
singleLine = true,
label = { Text("Select an item") },
trailingIcon = {
Icon(icon, "Select an item", Modifier.clickable {
setExpanded(!expanded)
})
},
enabled = expanded,
colors = TextFieldDefaults.textFieldColors(
disabledTextColor = LocalContentColor.current.copy(LocalContentAlpha.current),
backgroundColor = Color.Transparent
)
)
DropdownMenu( // Desktop version, so it creates a "Popup" per the source code
expanded = expanded,
onDismissRequest = {
runBlocking { // to handle a glitch where the dropdown may "unexpand & expand" again on clicking
delay(200)
setExpanded(false)
}
},
modifier = Modifier
.width(360.dp)
.background(Color.White)
.clip(RoundedCornerShape(5.dp))
// SHOULD HAVE VERTICAL SCROLLBAR SHOW UP AS PART OF THIS DROPDOWNMENU COLUMN
) {
lookups.forEach { lookup ->
DropdownMenuItem(
onClick = {
setExpanded(false)
setSelected(lookup)
}
) {
Text(lookup.name)
}
}
}
}
}
}
}
}
}