我正在尝试构建我的底部导航如下:
@Composable
fun BottomNavBar(navController: NavController) {
Column(
Modifier.background(colorResource(id = R.color.pastel_orange_white))
) {
BottomNavigation(
modifier = Modifier
.defaultMinSize(minHeight = 70.dp),
backgroundColor = colorResource(id = R.color.bottom_nav_dark)
) {
val navItems = arrayOf(
BottomNavItem(
stringResource(id = R.string.title_home),
R.drawable.ic_home,
Screen.Home.route
),
BottomNavItem(
stringResource(id = R.string.subjects_title),
R.drawable.ic_subject,
Screen.Subjects.route
),
BottomNavItem(
stringResource(id = R.string.grades_title),
R.drawable.ic_grade,
Screen.Grades.route
),
BottomNavItem(
"H/W",
R.drawable.ic_assignments,
Screen.Assignments.route
)
)
// observe the backstack
val navBackStackEntry by navController.currentBackStackEntryAsState()
// observe current route to change the icon
// color,label color when navigated
val currentRoute = navBackStackEntry?.destination?.route
navItems.forEach { navItem ->
BottomNavigationItem(
selected = currentRoute == navItem.route,
onClick = {
navController.navigate(navItem.route)
},
icon = {
Box(
Modifier
.width(70.dp)
.height(30.dp)
.background(
colorResource(id = if (currentRoute == navItem.route) R.color.bottom_nav_light else R.color.bottom_nav_dark),
RoundedCornerShape(32.dp)
),
contentAlignment = Alignment.Center
) {
Icon(
painter = painterResource(id = navItem.icon),
contentDescription = navItem.label,
tint = colorResource(id = R.color.black)
)
}
},
label = {
Text(text = navItem.label, fontSize = 14.sp)
},
alwaysShowLabel = true,
selectedContentColor = colorResource(id = R.color.black),
unselectedContentColor = colorResource(id = R.color.black)
)
}
}
}
}
我需要在标签和图标部分之间添加一些额外的空间,因为我对选定的项目应用了一个小的背景颜色。我尝试了填充、列排列等,但没有发现实际上影响间距的东西。有指针吗?
2条答案
按热度按时间bkhjykvo1#
我不认为你可以用
BottomNavigationItem
来完成它。合成的材料设计库遵循材料设计规范,正如你在这里看到的。但是你不需要使用
BottomNavigationItem
来显示BottomAppBar
中的项。你可以使用任何可组合的,如下所示:然而,正如我上面提到的,该库遵循材料设计规范,该规范将
BottomAppBar
的高度定义为56dp。因此,如果您想要更多定制的东西,您需要自己定制(例如,使用Row
)。y4ekin9u2#
我设法在图标和标签之间添加了填充。事实上,当我开始尝试这个方法时,我是将填充应用于文本/标签而不是图标,但是如果我们将填充应用于图标,就可以应用该间距。只需在图标上添加一个
Modifier.padding(bottom = YOURDP)
,它就可以工作了。我认为这是可能的,因为在分析Material Design代码以应用Label with Icon之后,它应用了Label relative to Icon(你可以在下面的方法中看到),考虑到现有的空间,所以如果我们增加Icon占用的空间,它将使标签更低。