如何使用 Jetpack Compose 管理鼠标右键/中键单击?

Joa*_*iba 5 android android-jetpack-compose

Jetpack Compose 中的可点击修饰符似乎无法在鼠标输入的情况下区分按钮类型

您知道如何管理这个用例吗?

Tre*_*kaz 6

我找到了两种方法来让它为我工作。

首先是使用pointerInput,你必须小心地使用事件,否则它可以被处理两次:

    modifier = Modifier
        .pointerInput(Unit) {
            awaitPointerEventScope {
                val event = awaitPointerEvent()
                if (event.type == PointerEventType.Press &&
                    event.buttons.isSecondaryPressed) {
                    event.changes.forEach { e -> e.consume() }
                    // on-click logic here
                }
            }
        }
Run Code Online (Sandbox Code Playgroud)

其次是使用新的实验性 API:

    modifier = Modifier
        .onClick(
            matcher = PointerMatcher.mouse(PointerButton.Secondary),
            onClick = {
                // ...
            }
        )
Run Code Online (Sandbox Code Playgroud)

在这两种情况下,我都有一些怪癖,其中按钮处理稍微在按钮之外的事件,对此还有进一步的解决方法