Jetpack Compose:如何禁用 FloatingAction 按钮?

chr*_*gue 18 android kotlin floating-action-button android-jetpack-compose android-compose-button

根据文档null,我们可以通过设置来禁用 FAB onClick

onClick - 当用户单击此 FAB 时将被调用。当FAB为空时,FAB将被禁用。

当我尝试它时,我偶然发现该onClick参数不可为空,

fabs onclick 不能为空

那么,如何禁用FAB呢?

Gab*_*tti 22

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

作为解决方法,您可以将 aButton与 a 一起使用CircleShape

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")
}
Run Code Online (Sandbox Code Playgroud)

如果你想使用 aFloatingActionButton你可以这样做:

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)
    }
}
Run Code Online (Sandbox Code Playgroud)

和:

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

    @Composable
    override fun rippleAlpha(): RippleAlpha = RippleAlpha(0.0f, 0.0f, 0.0f, 0.0f)
}
Run Code Online (Sandbox Code Playgroud)

  • 希望Android团队能够为此拿出好的解决方案。但现在这是要走的路!谢谢 (9认同)
  • @托马斯S。启用的参数在哪里? (2认同)