Какого цвета панель навигации в Jetpack Compose в цветовой схеме материала?
Когда я пытаюсь заставить быть цветным (см. Руководство по материалу 3 ), цвет фона приложения и цвет отличаются. Пример: цвет
NavigationBar
является
#f1edf7
но цвет фона
#fffbfe
. Цвет фона приложения
MaterialTheme.colorScheme.surface
слишком.
5 ответов
Есть вещь под названием
tonalElevation
в материальном дизайне 3. Один и тот же «базовый» цвет отличается на разной тональной высоте. Поверхность по умолчанию имеет тональную высоту 0dp, что означает, что цвет фона используется как есть. имеет тональную высоту 3dp, что немного меняет цвет. Если вы хотите заставить
NavigationBar
чтобы точно соответствовать цвету поверхности, измените его тональную высоту на 0.
Правильный способ воспроизвести цвет — использовать ту же функцию, которая используется за кулисами для его вычисления:
MaterialTheme.colorScheme.surfaceColorAtElevation(3.dp)
По умолчанию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
)
Выбранный/не выбранный значок, выделенный текст, индикатор:
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,
)
},
)
Посетите ссылку ниже для получения дополнительной информации о структуре панели навигации в material3 https://m3.material.io/components/navigation-bar/specs.
Вы можете напрямую установить цвет NavigationBar, используя егоcontainerColor
свойство. Просто установите его наColor.Transparent
чтобы получить тот же цвет, что и ваш фон.
NavigationBar(
containerColor = Color.Transparent
) {
...
}