JetPack Compose 对可点击项目没有影响

Ali*_*phi 5 android kotlin android-jetpack android-jetpack-compose composable

我有一列,中间有一张卡片。单击列时应该有一个操作,但单击卡片时不应发生任何操作。(如可取消的对话框)

当我用XML做到这一点时,当为列设置可点击(true)时,这个问题得到了解决,但是在Jetpack Compose中,当我点击卡片时,有一个无法删除它的效果

我将此代码设置为卡的修饰符:

.clickable{}
Run Code Online (Sandbox Code Playgroud)

如何从可点击项目中删除默认效果(按下效果无波纹)?

Thr*_*ian 13

您需要将指示设置为 null,以便在单击可组合项时不会出现波纹

Modifier.clickable(
    interactionSource = MutableInteractionSource(),
    indication = null,
    onClick = {}
)
Run Code Online (Sandbox Code Playgroud)

编辑

假设您不希望波纹在 Column 内的 Card 中移动,并且要实现这一点,您可以使用Box包含ColumnCard作为同级的 。

   Column(
        modifier = Modifier
            .size(200.dp)
            .background(Color.Green)
            .clickable { },
        verticalArrangement = Arrangement.Center,
        horizontalAlignment = Alignment.CenterHorizontally
    ) {
        Card(
            elevation = 4.dp,
            shape = RoundedCornerShape(5.dp),
            modifier = Modifier
                .size(100.dp)
                .clickable(
                    interactionSource = MutableInteractionSource(),
                    indication = null,
                    onClick = {
                        Toast
                            .makeText(context, "Card", Toast.LENGTH_SHORT)
                            .show()
                    }
                )
        ) {
            Text("In Card")
        }
    }

    Spacer(modifier = Modifier.height(4.dp))
    Box(
        contentAlignment = Alignment.Center
    ) {
        Column(
            modifier = Modifier
                .background(Color.Green)
                .size(200.dp)
                .clickable {
                    Toast
                        .makeText(context, "Column", Toast.LENGTH_SHORT)
                        .show()
                },

            ) {

        }

        Card(
            elevation = 4.dp,
            shape = RoundedCornerShape(5.dp),
            modifier = Modifier
                .size(100.dp)
                .clickable(
                    interactionSource = MutableInteractionSource(),
                    indication = null,
                    onClick = {
                        Toast
                            .makeText(context, "Card", Toast.LENGTH_SHORT)
                            .show()
                    }
                )
        ) {
            Text("In Card")
        }
    }
Run Code Online (Sandbox Code Playgroud)

第一个是我猜你拥有的,如果你使用一个盒子并添加这两个项目,你将不会看到卡内有波纹移动

第一个是你拥有的第二个是盒子里的,卡片上不会有波纹

在此输入图像描述