如何更改IconButton的涟漪颜色?
我试过这么做,但没什么变化:
IconButton(
onClick = { onClick() },
modifier = Modifier.clickable(
onClick = { onClick() },
indication = rememberRipple(color = MyCustomTheme.colors.primary),
interactionSource = remember { MutableInteractionSource() },
)
)
4条答案
按热度按时间2wnc66cl1#
我不知道你是否找到了一种方法让它适用于整个应用程序,但我找到了一种方法,所以我发布这个以防其他人有类似的问题。
您可以按照Gabriele Mariotti's answer所述设置自定义
RippleTheme
对象,然后将CompositionLocalProvider()
作为MaterialTheme中的内容传递。然后,应用的theme
中的内容可以设置为CompositionalLocalProvider()
的内容。看看这里:
那么,您的应用主题应该是:
此方法应适用于整个应用,除非您将另一个
RippleTheme
直接显式设置为AppTheme
层次结构下的可合成项。而且,它不会与您可能直接设置为其他Composables
的其他类型的ComposableLocalProvider
值冲突。htrmnn0y2#
由于Ripple是在
IconButton
内部定义的.clickable
修饰符中实现的,因此您的代码不起作用。Ripple的外观基于
RippleTheme
,您可以定义自定义RippleTheme
,并使用**LocalRippleTheme
**应用到您的可组合对象。比如:
以及:
第一节第一节第一节第一节第一次
dw1jzc5e3#
现在说有点晚了,但也许这段代码会对某些人有所帮助。
要使代码正常工作,还需要将interactionSource应用于按钮本身。
你可以用这种方法局部改变颜色。调用指示后应用高度是很重要的,这样可以保持正确的按钮和涟漪尺寸。
此外,您需要应用任意大小的半径,以便将半径包含在按钮形状的内部(这似乎是Compose1.2.0-rc 03中的一个bug。
9lowa7mx4#
如果只需要覆盖某个位置的涟漪颜色,可以为其创建自己的修改器。