我想使用TabRow,但是当我单击背景时会产生我不想要的连锁反应。有办法改变这种状况吗?我的标签的selectedContectColor等于相同的背景颜色的页面,但我仍然看到白色涟漪效应。
TabRow(
modifier = Modifier.height(20.dp),
selectedTabIndex = selectedIndex,
indicator = { tabPositions ->
TabRowDefaults.Indicator(
modifier = Modifier.customTabIndicatorOffset(
currentTabPosition = tabPositions[lazyListState.firstVisibleItemIndex]
tabWidths[lazyListState.firstVisibleItemIndex]
),
color = RED
)
},
backgroundColor = BLACK
) {
tabList.forEachIndexed{ index, tab ->
val selected = (selectedIndex == index)
Tab(
modifier = Modifier
// Have tried different solutions here where there is a .clickable
// and the indication = null, and set interactionSource = remember{
//MutableInteractionSource()}
selected = selected,
selectedContentColor = BLACK,
onClick = {
animateScrollToItem(selectedIndex)
},
text = {
Text("Text Code")
}
)
}
}
您可以在这些文档中看到,selectedContentColor会影响纹波。
发布于 2022-07-27 20:59:04
波纹是在selectable
内定义的Tab
修饰符中实现的。
您不能禁用它,但您可以更改基于RippleTheme
的波纹的外观。您可以定义一个自定义RippleTheme
,并将其应用到您的可组合LocalRippleTheme
中。
CompositionLocalProvider(LocalRippleTheme provides NoRippleTheme) {
//..TabRow()
}
private object NoRippleTheme : RippleTheme {
@Composable
override fun defaultColor() = Color.Unspecified
@Composable
override fun rippleAlpha(): RippleAlpha = RippleAlpha(0.0f,0.0f,0.0f,0.0f)
}
发布于 2022-07-27 19:24:50
闪烁效应由指示属性处理。把它放进可点击的部分。
您可以创建扩展函数。
inline fun Modifier.noRippleClickable(crossinline onClick: ()->Unit): Modifier = composed {
clickable(indication = null,
interactionSource = remember { MutableInteractionSource() }) {
onClick()
}
}
然后简单地将Modifier.clickable {}替换为Modifier.noRippleClickable {}
https://stackoverflow.com/questions/73143512
复制相似问题