【问题标题】:Jetpack Compose: How to disable FloatingAction Button?Jetpack Compose:如何禁用浮动操作按钮?
【发布时间】:2021-10-21 03:01:26
【问题描述】:

根据docs,我们可以通过将null设置为onClick来禁用FAB:

onClick - 将在用户单击此 FAB 时调用。 FAB 将 为空时禁用。

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

那么,如何禁用 FAB?

【问题讨论】:

  • 在 onClick() 方法中什么也不做,就像这样 onClick = {} 。如果您还想禁用涟漪效应,请参阅此链接。 stackoverflow.com/questions/66703448/…
  • 您误解了文档。设置onClick = null 将禁用ExtendedFloatingActionButton 而不是FloatingActionButton

标签: android kotlin floating-action-button android-jetpack-compose


【解决方案1】:

目前 (1.0.x) FloatingActionButton 不支持 enabled 属性。

作为解决方法,您可以使用ButtonCircleShape

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

【讨论】:

  • 希望 Android 团队能够为此提供好的解决方案。但现在这是要走的路!谢谢
  • 2021年底答案还有效吗?
  • @ThomasS。是的,它仍然有效。
  • 我找到了一个enabled 参数。
猜你喜欢
  • 2022-06-25
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-06-25
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多