Jetpack Compose 中没有涟漪效应

No ripple effect in Jetpack Compose

单击 MyBox() 时没有连锁反应 我已将 MyTheme(){} 添加到主 @Composable 屏幕,但它不起作用。是不是少了什么?

@Composable
private MyBox(onClickInvoked: () -> Unit) {
    MyAppTheme(isSystemInDarkTheme()) {
        Box(
            modifier = Modifier
                .fillMaxWidth()
                .wrapContentHeight()
                .clip(RoundedCornerShape(10.dp))
                .background(MaterialTheme.colors.onBackground)
                .clickable(onClick = { onClickInvoked.invoke() })
                .padding(horizontal = 10.dp, vertical = 15.dp)
        ) {
            Text(
                text = "My text",
                modifier = Modifier
                    .align(Alignment.CenterStart)
                    .padding(end = 95.dp)
                    .wrapContentWidth()
                    .wrapContentHeight(),
                color = MaterialTheme.colors.primary
            )
            Image(
                painter = painterResource(R.drawable.icon),
                modifier = Modifier
                    .align(Alignment.CenterEnd)
                    .padding(end = 20.dp)
                    .size(60.dp)
            )
        }
    }
}

使用 compose 1.0.5,我看到设置 clickable 后的默认 indicationLocalIndication.current。而 LocalIndication.currentPlatformRipple。因此,当你将clickable设置为你的Box后,会产生连锁反应。

在你的情况下,我认为不会显示涟漪效果是因为你的 Box 背景太暗(通常 MaterialTheme.colors.onBackground 在 Light 主题上是黑色的)

我想你可以改变波纹效果的颜色,让它更容易看到。

Surface(
    onClick = { onClickInvoked.invoke() },
    modifier = Modifier.fillMaxWidth(),
    shape = RoundedCornerShape(10.dp),
    color = MaterialTheme.colors.onBackground, // normally it is black on Light theme
    indication = rememberRipple(color = Color.White) // color for your ripple, you can use other suitable MaterialTheme.colors for your case to support Light/Dark mode
) {
    Box(modifier = Modifier.padding(horizontal = 10.dp, vertical = 15.dp)) {
        // your Box content
        ...
    }
}

有一个 Modifier.indication 但在测试后我发现它不适用于 Modifier.clickable 所以我使用 Surface

不知道是不是你的主题有问题。我尝试通过material主题,涟漪会正常显示

MaterialTheme() {
    Box(
        modifier = Modifier
            .fillMaxWidth()
            .wrapContentHeight()
            .clip(RoundedCornerShape(10.dp))
            .background(MaterialTheme.colors.secondary)
            .clickable(onClick = { t = "My text" })
            .padding(horizontal = 10.dp, vertical = 15.dp)
    ) {
        Text(
            text = t,
            modifier = Modifier
                .align(Alignment.CenterStart)
                .padding(end = 95.dp)
                .wrapContentWidth()
                .wrapContentHeight(),
            color = MaterialTheme.colors.primary
        )
        Image(
            painter = painterResource(R.drawable.ic_launcher_foreground),
            modifier = Modifier
                .align(Alignment.CenterEnd)
                .padding(end = 20.dp)
                .size(60.dp),
            contentDescription = ""
        )
    }
}