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

RippleTheme已弃用,如何设置按钮涟漪颜色为主题onSurface色?

如何在Compose Material-Ripple 1.7.0后设置特定按钮的涟漪颜色

问题背景

我的应用主题的primary颜色为绿色,按钮的涟漪效果默认使用该颜色。我希望某一特定按钮的涟漪效果使用主题的onSurface颜色,以匹配按钮的边框和文本颜色。此前通过LocalRippleTheme和RippleTheme实现该效果,代码如下:

CompositionLocalProvider(LocalRippleTheme provides MyRippleTheme) {
    OutlinedButton(border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurface)) {
        Text(color = MaterialTheme.colorScheme.onSurface)
    }
}

object MyRippleTheme : RippleTheme {

    @Composable
    override fun defaultColor() =
        RippleTheme.defaultRippleColor(MaterialTheme.colorScheme.onSurface, lightTheme = true)

    @Composable
    override fun rippleAlpha(): RippleAlpha =
        RippleTheme.defaultRippleAlpha(MaterialTheme.colorScheme.onSurface, lightTheme = true)
}

在androidx.compose.material:material-ripple库1.7.0版本发布后,LocalRippleTheme和RippleTheme已被弃用,请问如何实现需求?

解决方案

在Material-Ripple 1.7.0及后续版本中,弃用了全局涟漪主题的配置方式,改为直接通过组件的ripple参数自定义涟漪效果。对于OutlinedButton这类Material 3组件,可以使用rememberRipple()方法创建自定义涟漪实例,指定目标颜色和透明度:

直接配置按钮涟漪

OutlinedButton(
    border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurface),
    ripple = rememberRipple(
        color = MaterialTheme.colorScheme.onSurface,
        alpha = RippleDefaults.alpha(MaterialTheme.colorScheme.onSurface, lightTheme = isSystemInDarkTheme().not())
    )
) {
    Text(color = MaterialTheme.colorScheme.onSurface)
}

复用涟漪配置

如果需要在多个按钮中复用该涟漪效果,可以封装为可组合函数:

@Composable
fun OnSurfaceRipple() = rememberRipple(
    color = MaterialTheme.colorScheme.onSurface,
    alpha = RippleDefaults.alpha(MaterialTheme.colorScheme.onSurface, lightTheme = isSystemInDarkTheme().not())
)

// 使用时
OutlinedButton(
    border = BorderStroke(1.dp, MaterialTheme.colorScheme.onSurface),
    ripple = OnSurfaceRipple()
) {
    Text(color = MaterialTheme.colorScheme.onSurface)
}

关键说明

  • rememberRipple()用于创建并缓存涟漪配置,避免重复创建实例
  • RippleDefaults.alpha()会根据主题明暗自动计算合适的涟漪透明度,逻辑与旧版RippleTheme.defaultRippleAlpha一致
  • 该方式直接作用于单个按钮,不会影响全局其他组件的涟漪效果

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.18 20:05:02