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

Wear Compose 1.3.x长按事件失效,如何适配原1.2.1代码?

Wear Compose 1.3.x 长按事件失效适配方案

在Wear Compose 1.2.1版本中,我们可以通过Modifier.combinedClickable()为Button组件添加长按事件,但升级至1.3.x版本后,该长按事件会出现无法触发的情况——仅修改依赖版本号就会引发此问题。

问题根源

Wear Compose 1.3.x对Button组件的交互逻辑做了优化,内部的点击事件处理会优先拦截外部Modifier附加的点击/长按事件,导致原combinedClickable中的回调无法被触发。同时,Button本身在1.3.x版本中新增了直接支持长按的参数,无需再通过外部Modifier实现。

适配代码

移除Modifier中的combinedClickable,将原有的点击、长按逻辑直接迁移到Button的对应参数中:

Button(
    modifier = Modifier
        .height(48.dp)
        .width(48.dp)
        .padding(2.dp)
        .background(color = Color.Black),
    // 原combinedClickable中的onClick逻辑迁移至此
    onClick = {
        Toast.makeText(
            context,
            context.getString(R.string.long_press_to_stop),
            Toast.LENGTH_SHORT
        ).show()
    },
    // 直接使用Button的onLongClick参数处理长按
    onLongClick = {
        Log.v("STOP", "onLongClick")
        // --- stop action ---
    },
    colors = ButtonDefaults.primaryButtonColors(backgroundColor = Color.Black),
    enabled = true
) {
    Icon(
        painter = painterResource(id = R.drawable.baseline_stop_24),
        contentDescription = "Stop",
        tint = Color.LightGray
    )
}

说明

  • 原代码中Button本身的onClick为空实现,这会和外部combinedClickable的事件处理产生冲突,1.3.x版本的Button内部逻辑会优先响应自身的点击参数,导致外部Modifier的事件被忽略。
  • 1.3.x版本的Button新增了onLongClick参数,直接使用该参数即可实现长按逻辑,无需依赖外部Modifier,同时避免了事件拦截问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.29 13:33:27