gpt4 book ai didi

android - 如何防止 Jetpack Compose ExposedDropdownMenuBox 在滚动时显示菜单

转载 作者:行者123 更新时间:2023-12-04 23:49:38 26 4
gpt4 key购买 nike

我正在尝试使用 Jetpack Compose 的 ExposedDropdownMenuBox,但我无法阻止它在滚动时显示菜单。
例如,下面是复制此问题的代码:

class MainActivity : ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContent {
MyApplicationTheme {
Surface(color = MaterialTheme.colors.background) {
Column(
modifier = Modifier
.padding(horizontal = 8.dp)
.verticalScroll(rememberScrollState()),
verticalArrangement = Arrangement.spacedBy(8.dp)
) {
repeat(20){
ExposedDropdownMenuSample()
}
}
}
}
}
}
}
ExposedDropdownMenuSample取自官方 sample 。
This is a GIF showing the problem.
我怎样才能防止这种情况发生?
此代码使用的是撰写版本 1.1.0-rc01 .

最佳答案

我能够用这个丑陋的黑客解决这个问题:

private fun Modifier.cancelOnExpandedChangeIfScrolling() = pointerInput(Unit) {
forEachGesture {
coroutineScope {
awaitPointerEventScope {
var event: PointerEvent
var startPosition = Offset.Unspecified
var cancel = false

do {
event = awaitPointerEvent(PointerEventPass.Initial)
if (startPosition == Offset.Unspecified) {
startPosition = event.changes.first().position
}

val distance = startPosition.minus(event.changes.last().position).getDistance()
cancel = distance > 10f || cancel
} while (
!event.changes.all { it.changedToUp() }
)

if (cancel) {
event.changes.forEach { it.consumeAllChanges() }
}
}
}
}
}
然后将其添加到 ExposedDropdownMenuBox喜欢:
ExposedDropdownMenuBox(
expanded = expanded,
onExpandedChange = {
expanded = !expanded
}, modifier = Modifier.cancelOnExpandedChangeIfScrolling()
)
所以它基本上检查是否有超过 的阻力。 10像素? 如果为真,则使用事件,因此不会触发 onExpandedChange .
10 只是一个对我的测试很有效的神奇数字,但对于高分辨率屏幕设备来说似乎太低了。我确信有更好的方法来计算这个数字......也许更有经验的人可以帮助解决这个问题,直到我们得到适当的修复?

关于android - 如何防止 Jetpack Compose ExposedDropdownMenuBox 在滚动时显示菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70485353/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com