在 Jetpack Compose Glimmer 中處理間接指標輸入內容

適用的 XR 裝置
這份指南可協助您為這類 XR 裝置打造體驗。
音訊和
螢幕眼鏡

onIndirectPointerGesture 修飾符可讓元件接收及回應高階間接指標事件,例如源自裝置觸控板的事件。使用這個修飾符擷取及處理來自觸控板或類似來源的手勢。

API 介面

應用程式可使用四個回呼來控管處理方式:

  • onClick:成功輕觸或點選,且沒有明顯的水平移動時觸發。
  • onSwipeForward:當水平滑動超過前進方向的距離和速度閾值時觸發。
  • onSwipeBackward:水平滑動超過距離和速度閾值時,會觸發這個事件。
  • Enabled:如果設為 false,系統會忽略修飾符,且不會叫用任何回呼。

滑動和捲動的系統行為

系統會使用觸控斜率門檻,區分點擊和滑動。

  • 如果指標在按下狀態期間大幅移動,系統會取消 onClick
  • 如果指標在移動期間大幅回溯,滑動手勢就會失效。

範例:設定元件上的滑動和點擊事件處理方式

下列程式碼會設定可聚焦 Box 的滑動和點擊處理方式:

@Composable
fun OnIndirectPointerGestureSample() {
    var lastGesture by remember { mutableStateOf("None") }

    Box(
        modifier =
            Modifier.fillMaxSize()
                .onIndirectPointerGesture(
                    enabled = true,
                    onSwipeForward = { lastGesture = "Forward" },
                    onSwipeBackward = { lastGesture = "Backward" },
                    onClick = { lastGesture = "Click" },
                )
                .focusTarget(),
        contentAlignment = Alignment.Center,
    ) {
        Text("Last Gesture: $lastGesture")
    }
}

程式碼重點

  • onIndirectPointerGesture 需要焦點,因此也會套用 focusTarget,讓 Box 可聚焦。您可以使用 focusTarget 或其他可啟用焦點的修飾符,例如 surface。如果沒有焦點,修飾符就無法對間接指標事件採取行動。
  • 這個範例會實作 onSwipeForwardonClick 回呼,因此系統偵測到的滑動和點擊手勢會遭到攔截並耗用,不會傳遞至外部的父項容器。不過,您也可以將特定回呼留空,將手勢傳遞至父項容器中的 onIndirectPointerGesture 修飾符。