它不起作用
Button
因为同样的原因,你不能连锁
Modifier.clickable{}.clickable{}
具有
按钮
添加另一个
Modifier.pointerInput()
不会有任何效果,因为
按钮
是
Surface
带有分配的onClick参数
Modifier.clickable()
已经
Modifier.clickable
已经消耗了事件,并且不让其他
修饰符.pointerInput()
接收它。
在Jetpack中,当有两个或多个时组合
修饰符.pointerInput()
链接在一起底部的一个默认情况下首先接收事件
通过
哪个是
PointeEventPass.Main
。因为,可点击已经消耗了,所以你分配的人永远不会得到它。
最简单的方法是使用InteractionSource并将其收集为
@Preview
@Composable
private fun ButtonLongClickSample() {
val context = LocalContext.current
val interactionSource = remember { MutableInteractionSource() }
val viewConfiguration = LocalViewConfiguration.current
LaunchedEffect(interactionSource) {
var isLongClick = false
interactionSource.interactions.collectLatest { interaction ->
when (interaction) {
is PressInteraction.Press -> {
isLongClick = false
delay(viewConfiguration.longPressTimeoutMillis)
isLongClick = true
Toast.makeText(context, "Long click", Toast.LENGTH_SHORT).show()
}
is PressInteraction.Release -> {
if (isLongClick.not()) {
Toast.makeText(context, "click", Toast.LENGTH_SHORT).show()
}
}
}
}
}
Button(
onClick = {},
interactionSource = interactionSource
) {
Text("Some button")
}
}