You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让JetPack Compose Desktop中的Text控件支持双击?

在JetPack Compose桌面应用中实现Text控件的双击功能

要在LazyColumn内的Text控件上实现双击功能并避免误触,可以通过pointerInput结合手势检测来实现,核心是区分单击和双击事件,同时通过延迟判断避免误触发。

实现思路

  • 放弃Modifier.clickable,改用Modifier.pointerInput监听手势事件
  • 使用detectTapGestures回调分别处理双击和单击逻辑
  • 若需要保留单击功能,可对单击事件设置延迟判断,只有在指定时间内无二次点击时才执行;若不需要单击逻辑,直接忽略即可

代码示例

@Composable
fun FilterItemList(filterOptions: List<String>, onAddToFilter: (String) -> Unit) {
    LazyColumn {
        items(filterOptions) { option ->
            Text(
                text = option,
                modifier = Modifier
                    .fillMaxWidth()
                    .padding(16.dp)
                    .pointerInput(Unit) {
                        detectTapGestures(
                            onDoubleTap = {
                                // 双击时执行添加到过滤器的逻辑
                                onAddToFilter(option)
                            },
                            onSingleTapUp = {
                                // 示例:若需要单击功能,添加延迟判断避免与双击冲突
                                coroutineScope.launch {
                                    delay(300) // 300ms是桌面端常用的双击间隔阈值,可按需调整
                                    // 这里添加单击逻辑(不需要则删除此回调)
                                }
                            }
                        )
                    }
            )
        }
    }
}

关键说明

  • detectTapGestures会优先响应双击事件,当检测到双击时,不会触发onSingleTapUp的延迟逻辑,从根源避免误触
  • 若无需单击功能,直接移除onSingleTapUp回调即可,双击逻辑会完全独立运行
  • 300ms的延迟是桌面端适配的合理阈值,可根据用户交互习惯微调

内容的提问来源于stack exchange,提问作者t3chb0t

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 19:27:32