用途 本技能针对 Compose(Material3)应用中的全屏触摸涟漪反馈,说明如何在不破坏主题对比度的前提下“柔化”涟漪,并给出正确设置涟漪边界的方法。核心只动一个参数——alpha;颜色则交给框架按层级解析。
主要能力与要点
- 主题级统一配置:在主题顶层通过 CompositionLocalProvider 提供 LocalRippleConfiguration 与 LocalContentColor,使所有可触摸表面(包括裸 Modifier.clickable)自动继承。示例中 RippleAlpha 设为 draggedAlpha=0.06f、focusedAlpha=0.04f、hoveredAlpha=0.03f、pressedAlpha=0.04f,约为默认值的 40%。
- 颜色解析顺序:显式颜色 → 配置中的颜色 → 本地内容颜色。前两级保持 unspecified,涟漪才会继续从 LocalContentColor 派生,从而在深色/浅色主题及强制反转方案的子树中自动保持对比,而不是简单“匹配”成同一个灰色。
- 已知陷阱:不要硬编码“合适的灰色”,否则深色表面上点击会变成更深的一块污渍;alpha 构造函数虽被标记为 deprecated,但官方暂未提供保留 alpha 的替代方案,应抑制警告继续使用,也不要用带 alpha 的颜色绕过(那仍会覆盖内容色回退);.clip(shape) 必须写在 .clickable 之前,否则圆角卡片会出现超出圆角的矩形闪烁;卡片形状与裁剪形状应绑定同一局部变量;不要叠加 .clickable 与 .combinedClickable;主题配置也会作用于裸 clickable,值得用 grep 排查 indication = null 或局部 indication;为限制涟漪而加的 clip 同时会裁剪内容(徽章、阴影、越界装饰);带自带按压反馈的装饰表面(如折射玻璃按钮)可能与涟漪叠加,需自行决定是否保留。
验证方式 资料给出五条命令:用 javap 检查 calculateColor 中的回退顺序与 RippleConfiguration 的构造器/弃用标记;用 grep 统计 LocalRippleConfiguration 提供点(应为 1)、同一链上两个点击修饰符(应为 0)、被 clip 紧邻包裹的点击点比例;并手工在深色主题与强制反转方案的页面中长按圆角卡片,确认闪烁不越出圆角且比表面更亮。
适用场景与限制 适用于 Compose Material3 桌面/移动端应用的涟漪统一调优与审查。资料未说明具体版本要求、非 Material3 场景的兼容性或性能数据;验证命令依赖 Gradle 缓存中的 material3-desktop jar,其他构建环境暂未提供说明。