我用的是Wear Compose 1.2.1版本,可以用Modifier.combinedClickable()处理onLongClick事件,但是Wear Compose 1.3.x版本之后就不能处理长按事件了。
我认为功能已更改,但我不知道如何修改我的代码。
有谁知道怎么做吗?
我的代码如下:
Button(
modifier = Modifier
.height(48.dp)
.width(48.dp)
.padding(2.dp)
.background(color = Color.Black)
.combinedClickable(
interactionSource = remember {
MutableInteractionSource()
},
indication = null,
enabled = true,
onClick = {
Toast.makeText(
context,
context.getString(R.string.long_press_to_stop),
Toast.LENGTH_SHORT
).show()
},
onLongClick = {
Log.v("STOP", "onLongClick")
// --- stop action ---
},
),
onClick = { },
colors = ButtonDefaults.primaryButtonColors(backgroundColor = Color.Black),
enabled = true
) {
Icon(
painter = painterResource(id = R.drawable.baseline_stop_24),
contentDescription = "Stop",
tint = Color.LightGray
)
}
我的 build.gradle.kts 的依赖部分,只需更改版本号,然后更改行为。
//val wearComposeVersion = "1.2.1" // works OK
val wearComposeVersion = "1.3.0" // does not handle long click event
implementation("androidx.wear.compose:compose-material:$wearComposeVersion")
implementation("androidx.wear.compose:compose-foundation:$wearComposeVersion")
implementation("androidx.wear.compose:compose-navigation:$wearComposeVersion")
简而言之:
Box
作为 Button
的根内容。combinedClickable
修饰符添加到 Box
,使用 onLongClick
。clearAndSetSemantics
来自 Button
。 Button(
onClick = onClick,
modifier = modifier
.size(buttonSize.tapTargetSize)
.clearAndSetSemantics {
role = Role.Button
this.contentDescription = contentDescription
if (!enabled) {
disabled()
}
},
enabled = enabled,
colors = colors,
interactionSource = interactionSource,
) {
Box(
modifier = Modifier
.fillMaxSize()
.clip(CircleShape)
.combinedClickable(
interactionSource = interactionSource,
indication = null, // From material Button
enabled = enabled,
onClick = onClick,
onLongClick = onLongClick,
onDoubleClick = onDoubleClick,
role = Role.Button,
),
) {
// your content here
}
}
您可以在这个拉取请求中看到它是如何完成的。
使用 Horographer Compose Material 库中的 Button 组件。
依赖性:
implementation "com.google.android.horologist:horologist-compose-material:<version>"
进口:
import com.google.android.horologist.compose.material.Button
用途:
Button(
id = R.drawable.baseline_stop_24,
contentDescription = "Stop",
onClick = { /* your code */ },
onLongClick = { /* your code */ },
)
Wear Compose 版本 1.3.x 不处理长按事件。
是的,根据 Wear Compose 团队成员的发现:
现在不可能在组件外部添加另一个可点击的组件(例如,从外部扩展 Chip 或 Button 并添加其他回调,如 LongClick) - 为此,我们必须重写组件本身(通过使用组合的 Clickable 或其他修饰符)。
请注意,上述解决方案是针对
Button
组件量身定制的。对于具有内部填充的其他组件,例如 Chip
和 Card
,根据此 comment,还有更多步骤。