【问题标题】:No ripple effect in Jetpack ComposeJetpack Compose 中没有涟漪效应
【发布时间】:2022-01-19 09:05:37
【问题描述】:

当我点击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)
            )
        }
    }
}

【问题讨论】:

  • 我正在使用1.0.1,并且波纹与您的代码一起显示。

标签: android kotlin android-jetpack-compose android-jetpack


【解决方案1】:

使用 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

【讨论】:

  • 你说得对,我的 Box 背景颜色太深了。您的解决方案效果很好!谢谢
【解决方案2】:

我真的不知道您的主题是否有问题。我尝试通过材质主题,涟漪会正常显示

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 = ""
        )
    }
}

【讨论】:

  • 我的背景颜色太深,这就是我看不到波纹效果的原因
猜你喜欢
  • 2021-09-05
  • 2021-06-16
  • 2018-02-23
  • 2018-01-07
  • 1970-01-01
  • 2015-11-07
  • 2016-04-25
  • 1970-01-01
相关资源
最近更新 更多