我们对大多数控件使用深色波纹颜色,这为我们提供了深灰色波纹效果和深灰色聚焦状态。
但我们还为控件使用自定义的“边框样式”焦点状态。 在这种情况下,我们希望波纹效果仍然是深灰色(或我们设置的任何颜色),但我们不希望该颜色在聚焦状态下出现。
例如使用这个
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
并在聚焦状态下使用它:
我们的按钮颜色错误的屏幕截图:
将波纹颜色设置为
Color.Transparent
可以让我们的聚焦状态在聚焦时没有背景颜色,但当然会删除点击波纹动画。
有什么方法可以独立设置点击波纹颜色和焦点背景颜色吗? 或者,以某种方式“过滤”发送到
interactionSource
的 .clickable()
,使其通过点击事件而不是焦点事件?
你可以覆盖compositionLocal,并使用alpha 0f设置焦点状态
LocalRippleConfiguration provides RippleConfiguration(
rippleAlpha = RippleDefaults.RippleAlpha
)