Jetpack compose:可以设置DropdownMenu高度以显示下一项
大多数用户不理解菜单中包含更多信息,有没有办法自动设置下拉菜单的高度(无论是哪种语言)?用户是否知道可以滚动列表?我使用下面的修饰符创建了一个菜单:我同意这是一个很好的功能,我建议Compose问题跟踪器上的create功能要求,您可以使用Modifier.onSizeChanged获得物品的高度。提问开始:
我正在使用Jetpack Compose中的DropdownMenu
,但我有一个问题,很多用户不理解菜单包含更多信息,所以他们可以滚动列表。我得到了很多人的支持,他们遗漏了列表中的一些东西。特别是在一些语言中,它很好地将一个项目的高度排列在一起,所以你看不到有更多的项目。
有没有一种方法可以自动设置下拉菜单的高度(不管是什么语言),让它在底部显示一半的项目,这样用户就知道他们可以滚动列表了?
我使用以下修饰符创建菜单:
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier.requiredSizeIn(maxHeight = 330.dp)
) {
items.forEachIndexed { index, item ->
DropdownMenuItem(onClick = {
onSelected(index, item.data)
selectedIndex = index
expanded = false
}) {
...
}
回答开始:得票数 3
我同意这是一个很好的功能,我建议你在Compose问题跟踪器上create一个功能请求。
这是目前的一个解决办法,你可以使用Modifier.onSizeChanged
获取物品高度,并像这样更新你的maxHeight
约束:
@Composable
fun TestScreen(
) {
var expanded by remember { mutableStateOf(true) }
val items = List(10) { it.toString() }
val itemHeights = remember { mutableStateMapOf<Int, Int>() }
val baseHeight = 330.dp
val density = LocalDensity.current
val maxHeight = remember(itemHeights.toMap()) {
if (itemHeights.keys.toSet() != items.indices.toSet()) {
// if we don't have all heights calculated yet, return default value
return@remember baseHeight
}
val baseHeightInt = with(density) { baseHeight.toPx().toInt() }
// top+bottom system padding
var sum = with(density) { DropdownMenuVerticalPadding.toPx().toInt() } * 2
for ((i, itemSize) in itemHeights.toSortedMap()) {
sum += itemSize
if (sum >= baseHeightInt) {
return@remember with(density) { (sum - itemSize / 2).toDp() }
}
}
// all items fit into base height
baseHeight
}
DropdownMenu(
expanded = expanded,
onDismissRequest = { expanded = false },
modifier = Modifier.requiredSizeIn(maxHeight = maxHeight)
) {
items.forEachIndexed { index, item ->
DropdownMenuItem(
onClick = {
onSelected(index, item.data)
selectedIndex = index
expanded = false
},
modifier = Modifier.onSizeChanged {
itemHeights[index] = it.height
}
) {
Text("Hello $index", modifier = Modifier.padding(30.dp))
}
}
}
}
private val DropdownMenuVerticalPadding = 8.dp
附注:DropdownMenuVerticalPadding
是取自source code的材料常量。
以上是真正的电脑专家为你收集整理的Jetpack compose:可以设置DropdownMenu高度以显示下一项的全部内容,希望文章能够帮你解决所遇到的问题。
如果觉得真正的电脑专家网站内容还不错,欢迎将真正的电脑专家推荐给好友。
你可能想看: