Jetpack Compose中Modifier事件

事件

clickable: 用于使组件可点击,并指定点击事件的处理程序。

1
Modifier.clickable(onClick = { /* 点击事件处理 */ })

pointerInput: 用于处理指针输入事件,例如触摸或鼠标事件。

1
Modifier.pointerInput { /* 处理指针输入事件的逻辑 */ }

按下抬起事件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
Row(
modifier = Modifier
.pointerInput(Unit) {
awaitEachGesture {
val down = awaitFirstDown(requireUnconsumed = false)
println("Pressed down at ${down.position}")

val up = waitForUpOrCancellation()
if (up != null) {
println("Released at ${up.position}")
// 在这里处理抬起后的逻辑
} else {
println("Gesture was cancelled")
}
}

},
verticalAlignment = Alignment.CenterVertically
) {

}

说明:

  • awaitFirstDown():等待第一次按下事件。
  • waitForUpOrCancellation():等待手指抬起或手势被取消(比如滑出区域)。
  • 如果 up != null,说明是正常抬起;否则可能是手势被取消。

点击/长按

1
2
3
4
5
6
7
8
9
10
11
Box(
modifier = Modifier
.size(200.dp)
.background(Color.LightGray)
.combinedClickable(
onClick = { println("Clicked!") },
onLongClick = { println("Long clicked!") }
)
) {
Text("Tap me")
}

注意:

combinedClickable 无法单独监听按下或抬起事件,只提供完整点击回调。

onLongClick的回调并不是长按抬起时触发的。