kkk*_*kkk 1 android button kotlin android-jetpack android-jetpack-compose
如何检测长按
Button(
onClick = onClick,
interactionSource = interactionSource,
modifier = Modifier
.combinedClickable(
onClick = onClick,
onLongClick = onLongClick
)
)
Run Code Online (Sandbox Code Playgroud)
这是行不通的。onClick 是必需的,我猜它会消耗combinedClickable。我还需要一个交互源。我宁愿避免创建自定义按钮。
Button由于与无法链接的原因相同,它无法使用Modifier.clickable{}.clickable{}
添加Button另一个Modifier.pointerInput()不会有任何效果,因为已经分配了 onClickButton参数。已经消耗了事件并且不允许其他人接收它。SurfaceModifier.clickable()Modifier.clickableModifier.pointerInput()
在 Jetpack Compose 中,当有两个或多个Modifier.pointerInput()链接在一起时,底部的第一个接收事件,默认传递为PointeEventPass.Main。因为 clickable 已经消耗了,所以你分配的人永远不会得到它。
最简单的方法是使用 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")
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1493 次 |
| 最近记录: |