Jetpack Compose:如何禁用FloatingActionButton?

18
根据文档,我们可以通过将 onClick 参数设置为 null 来禁用 FAB:

当用户单击此 FAB 时将调用 onClick。如果 onClick 为 null,则 FAB 将被禁用。

但是我尝试后发现 onClick 参数不可为空,

fabs onclick can not be null

那么如何禁用 FAB 呢?


1
只需在 onClick() 方法中什么也不做,像这样 onClick = {}。如果您还想禁用涟漪效果,请参考此链接。https://dev59.com/tlEG5IYBdhLWcg3wY8X1 - Vaibhav Goyal
你误解了文档。设置 onClick = null 将禁用 ExtendedFloatingActionButton 而不是 FloatingActionButton - Alpha 1
1个回答

22

目前(1.x.y),FloatingActionButton不支持enabled属性。

作为解决方法,您可以使用带有CircleShapeButton

var enabled by remember { mutableStateOf(false) }
Button(
    onClick = { /* do something */},
    modifier = Modifier.defaultMinSize(minWidth = 56.dp, minHeight = 56.dp),
    enabled = enabled,
    shape = CircleShape

){
    Icon(Icons.Filled.Favorite, contentDescription = "Localized description")
}

如果你想使用一个FloatingActionButton,可以像这样做:

var enabled by remember { mutableStateOf(false) }


CompositionLocalProvider(LocalRippleTheme provides
        if (enabled)  LocalRippleTheme.current else NoRippleTheme) {
    FloatingActionButton(
        backgroundColor = if (enabled) MaterialTheme.colors.secondary else Gray,
        onClick = { if (enabled) { /* do something */ } else {} },
    ) {
        Icon(Icons.Filled.Favorite,
            contentDescription = "Localized description",
        tint = if (enabled)
            LocalContentColor.current.copy(alpha = LocalContentAlpha.current)
        else DarkGray)
    }
}

与:

private object NoRippleTheme : RippleTheme {
    @Composable
    override fun defaultColor() = Color.Unspecified

    @Composable
    override fun rippleAlpha(): RippleAlpha = RippleAlpha(0.0f, 0.0f, 0.0f, 0.0f)
}

9
希望Android团队能提出好的解决方案。但现在这是可行的途径!谢谢。 - chrgue
1
2021年末时,这个答案还有效吗? - Thomas S.
@ThomasS。是的,它仍然有效。 - Gabriele Mariotti
2
@ThomasS。启用的参数在哪里? - Sayok Majumder

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接