当我试图强制NavigationBar
成为MaterialTheme.colorScheme.surface
颜色(请参见Material 3指南)时,应用程序的背景颜色和NavigationBar
的颜色不同。例如: NavigationBar
的颜色是#f1edf7
,但背景颜色是#fffbfe
。应用程序的背景颜色也是MaterialTheme.colorScheme.surface
。
当我试图强制NavigationBar
成为MaterialTheme.colorScheme.surface
颜色(请参见Material 3指南)时,应用程序的背景颜色和NavigationBar
的颜色不同。例如: NavigationBar
的颜色是#f1edf7
,但背景颜色是#fffbfe
。应用程序的背景颜色也是MaterialTheme.colorScheme.surface
。
在 Material Design 3 中有一个名为 tonalElevation
的东西。在不同的音调高度下,相同的“基础”颜色会有所不同。默认情况下,Surface 的音调高度为 0dp,这意味着背景颜色被直接使用。而 NavigationBar
的音调高度为 3dp,会稍微改变颜色。如果你想强制 NavigationBar
的颜色与 Surface 相同,将其 tonal elevation 改为 0 即可。
MaterialTheme.colorScheme.surfaceColorAtElevation(3.dp)
默认情况下,NavigationBar
使用的 ElevationToken
是 Level2
(相当于 3dp)。如果您为自己的 NavigationBar
设置了不同的自定义高度,则在此函数中也要设置该高度,并且颜色将对两者都相同。
除了更改导航栏的高度之外,您还可以计算颜色,就像在材料组件中一样:
activity.window.navigationBarColor = colorScheme.primary.copy(alpha = 0.08f).compositeOver(colorScheme.surface.copy()).toArgb()
容器颜色
NavigationBar(
containerColor = Color.White
)
点击时没有颜色变化
NavigationBar(
contentColor = Color.White
)
选中/未选中图标,selectedText,指示器:
NavigationBarItem(
colors = NavigationBarItemDefaults.colors(
selectedIconColor = Color.Green,
unselectedIconColor = Color.Gray,
selectedTextColor = Color.Transparent,
indicatorColor = Color.White
)
)
您还可以在上面更改selectedIconColor和unselectedIconColor颜色为Color.Transparent,并在NavigationBarItem中控制颜色,但是您需要一些逻辑来控制图标和/或标签的选中/未选中颜色。
例如:
NavigationBarItem(
label = {
Text(
text = "Tab A",
color = Color.White // selected/unselected color logic here
)
},
icon = {
Icon(
painter = painterResource(id = imageId),
contentDescription = destItem.destination.route,
tint = Color.Green // selected/unselected color logic here,
)
},
)
NavigationBar(
containerColor = Color.Transparent
) {
...
}
NavigationBar
是二级导航栏?Google 在哪里有记录文档呢? - stefan.at.kotlin