提问人:Maarten 提问时间:10/11/2023 最后编辑:Maarten 更新时间:10/12/2023 访问量:151
Jetpack Compose:着陆后不捕获所有触摸事件
Jetpack Compose: do not capture all touch events after touch down
问:
假设在 Jetpack Compose 中,有一行 5 个按钮。出于我的目的,我希望用户能够触摸第一个按钮,沿着行按钮滑动手指,从另一个按钮抬起,并为手指抬起的按钮触发单击侦听器,同时还触发指示在此过程中触摸的所有按钮。
似乎 Modifier.clickable 总是捕获该组件的所有触摸事件,直到所有指针都向上,所以我想我可以提升 MutableInteractionSource 并从父组件上的低级指针事件回调发送按下/发布事件,计算我们是否将鼠标悬停在子组件上,并适当地发送推送/释放事件。这确实会触发指示,但仅发出事件显然不会触发侦听器。所以这没有用。Interaction
onClick
最后,我决定放弃 ,只从父可组合项 (through ) 发出合成的 Press 和 Release 事件,然后从每个按钮的 MutableInteractionSource 收集交互流,并在我们获得 Release 事件时运行相应的 lambda。clickable
awaitEachGesture
onClick
这似乎像我预期的那样工作,但也感觉有点骇人听闻/脆弱/错误。我觉得这个解决方案可能缺少很多辅助功能,或者至少缺少一些东西,因为它基本上放弃了所有代码,只是监听指针向上/向下,然后将其转发到子组件。相比之下,它的实现真的非常复杂:我完全不明白那里发生了什么。但是我想利用基础中的所有代码(使 bitton 可通过语义/选项卡可访问/响应键盘事件等),如果可能的话,我的特定用途。Modifier.clickable
Modifier.clickable
答: 暂无答案
评论
detectTapAndPress
awaitFirstDown
awaitPointerEvent
if (requireUnconsumed) it.changedToDown() else it.changedToDownIgnoreConsumed()
detectTapAndPress