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
相关产品推荐
相关产品推荐

