Jetapck Compose 去除点击水波纹效果 - SharpCJ

Jetapck Compose 去除点击水波纹效果 - SharpCJ

💡 原文中文,约3100字,阅读约需8分钟。
📝

内容提要

在 Jetpack Compose 中,可以通过将 Modifier.clickable 的 indication 参数设置为 null 来去除 Material 包控件的点击水波纹效果。如果需要全局生效,可以在根组合项或主题中替换 LocalIndication。自定义 Indication 需要实现两个接口,步骤包括定义 NoIndication 对象并在主题中提供,以灵活控制点击效果。

🔎

延伸解读

局部去除水波纹的适用场景

将 Modifier.clickable 的 indication 参数设为 null 即可去除单个控件的点击水波纹。这种方式适合只希望特定按钮或卡片无涟漪效果,而不影响其他 Material 控件的场景。由于 clickable 的 indication 参数类型为 Indication?,传入 null 后不会绘制任何指示效果,但点击事件本身仍正常触发。

全局替换 LocalIndication 的两种范围

若想全局去除水波纹,可替换 LocalIndication。文章指出,在 Activity 的根组合项中替换,则只对该 Activity 生效;在主题中替换,则对整个应用生效。LocalIndication 默认值为 DefaultDebugIndication,通过 CompositionLocal 向下传递,因此上层替换后,下层所有使用默认 indication 的 clickable 都会受影响。

自定义 Indication 的实现要点

自定义 Indication 需要实现两个接口:Indication 和 IndicationInstance。Indication 中的 rememberUpdatedInstance 负责根据 InteractionSource 返回一个 IndicationInstance;IndicationInstance 中的 drawIndication 则决定如何绘制点击反馈。文章示例中的 NoIndication 在 drawIndication 里只调用 drawContent(),不绘制任何额外内容,从而实现

从去除到自定义的扩展思路

文章提到,理解 Indication 和 IndicationInstance 两个接口后,完全可以自定义想要的点击效果。默认的 DefaultDebugIndication 会根据按压、悬停、聚焦状态绘制不同透明度的黑色矩形。读者可参考这一逻辑,在 drawIndication 中按状态绘制自定义图形或颜色,从而替代水波纹,但需注意保持与交互状态同步。

❓

Q&A

如何在 Jetpack Compose 中去除点击水波纹效果?

可以通过将 Modifier.clickable 的 indication 参数设置为 null 来去除水波纹效果。

如果想要全局去除水波纹效果,该怎么做?

可以在根组合项或主题中替换 LocalIndication 来全局去除水波纹效果。

自定义 Indication 需要实现哪些接口?

自定义 Indication 需要实现 Indication 和 IndicationInstance 两个接口。

如何定义一个 NoIndication 对象?

可以通过实现 Indication 接口并定义一个 NoIndicationInstance 来创建 NoIndication 对象。

在 Jetpack Compose 中,水波纹效果的默认实现是什么?

默认的水波纹效果通过 DefaultDebugIndication 实现,包含对按压、悬停和聚焦状态的处理。

如何在主题中提供自定义的点击效果?

可以在 MaterialTheme 中使用 CompositionLocalProvider 替换 LocalIndication 来提供自定义点击效果。

🏷️

标签

➡️

继续阅读