Как исправить эффект пульсации по умолчанию при изменении цвета кнопок в Compose?

Я заметил, что всякий раз, когда вы меняете цвет кнопки в Jetpack Compose, это будет иметь незаметный волновой эффект.

Я хотел бы иметь возможность сохранить эффект серой ряби по умолчанию и просто наложить его на цвет кнопки по своему выбору.

Например:

Button(
  colors = ButtonDefaults.buttonColors(containerColor = Color.Red),
  onClick = { }
)

В тот момент, когда вы меняете цвет, ваша кнопка не имеет волнистого эффекта по умолчанию, наблюдаемого на большинстве компонентов.

Чтобы быть ясным, у него есть какая-то рябь, но она не заметна.

Похоже, что есть какой-то код более низкого уровня, вызывающий Modifier.clickable для Surface, у которого есть какой-то параметр indication или что-то, что влияет на цвет ряби?

Можно ли просто изменить цвет кнопки, но оставить пульсацию по умолчанию?

1
0
55
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

Цвет ряби определяется LocalRippleTheme.
Если вы хотите указать собственный цвет, вы можете использовать:

    CompositionLocalProvider(LocalRippleTheme provides MyRippleTheme ) {

        Button(
            colors = ButtonDefaults.buttonColors(containerColor = Color.Red),
            onClick = { }
        ){}
    }

с:

private object MyRippleTheme : RippleTheme {

    @Composable
    override fun defaultColor() = Color.Green

    @Composable
    override fun rippleAlpha(): RippleAlpha = RippleTheme.defaultRippleAlpha(
        Color.Green,
        lightTheme = true
    )
}

Другие вопросы по теме