Jetpack Compose:如何将焦点颜色与波纹颜色分开

问题描述 投票:0回答:1

我们对大多数控件使用深色波纹颜色,这为我们提供了深灰色波纹效果和深灰色聚焦状态。

但我们还为控件使用自定义的“边框样式”焦点状态。 在这种情况下,我们希望波纹效果仍然是深灰色(或我们设置的任何颜色),但我们不希望该颜色在聚焦状态下出现。

例如使用这个

Modifier

    .border(
        width = 1.dp,
        shape = shape,
        color =
        if (interactionSource.collectIsFocusedAsState().value)
            Color.Black
        else
            Color.Transparent
    )
    .clickable(
        enabled = true,
        interactionSource = interactionSource,
        indication = ripple(true, Dp.Unspecified, Color.Black),
        onClick = onClick,
        role = role
    )

我们在聚焦状态下获得了正确的边框,但它从波纹效果中获取了

Color.Black
并在聚焦状态下使用它:

我们的按钮颜色错误的屏幕截图:

button with wrong color

将波纹颜色设置为

Color.Transparent
可以让我们的聚焦状态在聚焦时没有背景颜色,但当然会删除点击波纹动画。

有什么方法可以独立设置点击波纹颜色和焦点背景颜色吗? 或者,以某种方式“过滤”发送到

interactionSource
.clickable()
,使其通过点击事件而不是焦点事件?

android-jetpack-compose focus
1个回答
0
投票

你可以覆盖compositionLocal,并使用alpha 0f设置焦点状态

LocalRippleConfiguration provides RippleConfiguration(
     rippleAlpha = RippleDefaults.RippleAlpha
)

https://medium.com/@Syex/disabling-the-focus-indicator-on-iconbuttons-or-any-other-composable-that-uses-a-ripple-indicator-39751e8ab19e

enter image description here

© www.soinside.com 2019 - 2024. All rights reserved.