Reputation: 499
Good afternoon I'm new to Jetpack Compose and I'm having some difficulties customizing BottomNavigation as I need. My current result is this:
And I want this be like this:
The text doesn't seem to me to be applying the style I gave it. It also looks like there is a white box as the bottom navigation background, but I can't figure out what it is. Can anyone help me?
Here is my Bottom Navigation code:
@Composable
fun BottomNavBar(
backStackEntryState: State<NavBackStackEntry?>,
navController: NavController,
bottomNavItems: List<NavigationItem>
) {
BottomNavigation(
backgroundColor = DarkGray.copy(alpha = 0.6f),
modifier = Modifier
.fillMaxWidth()
.padding(Dimen10, Dimen20, Dimen10, Dimen20)
.clip(RoundedCornerShape(Dimen13, Dimen13, Dimen13, Dimen13))
) {
bottomNavItems.forEach { item ->
val isSelected = item.route == backStackEntryState.value?.destination?.route
BottomNavigationItem(
icon = {
Icon(
painter = painterResource(id = item.icon.orZero()),
contentDescription = stringResource(id = item.title)
)
},
label = { Text(text = stringResource(id = item.title), style = Text14) },
selectedContentColor = Color.White,
unselectedContentColor = Color.White,
alwaysShowLabel = true,
selected = isSelected,
onClick = {
navController.navigate(item.route) {
navController.graph.startDestinationRoute?.let { route ->
popUpTo(route = route) {
saveState = true
}
}
launchSingleTop = true
restoreState = true
}
},
modifier = if (isSelected) {
Modifier.clip(RoundedCornerShape(Dimen13, Dimen13, Dimen13, Dimen13)).background(color = DarkGray).clipToBounds()
} else {
Modifier.background(color = Color.Transparent)
}
)
}
}
}
EDIT: updated current result and code
Upvotes: 0
Views: 1382
Reputation: 2138
Not any major issue was there in your code. Most probably, fillMaxWidth() and padding() might be the issue
Just did some minor changes which you can try ->
BottomNavigation(
modifier = Modifier.clip(RoundedCornerShape(12.dp)),
elevation = 0.dp,
contentColor = Color.White,
backgroundColor = DarkGray.copy(0.6f)
) {
bottomNavItems.forEach { item ->
val isSelected = currentRoute == item.route/*Replace with your logic*/
BottomNavigationItem(
icon = {
Icon(
painter = painterResource(id = R.drawable.ic_buy_premium),
contentDescription = ""
)
},
label = { Text(text = "Job openings") },
selectedContentColor = Color.White,
unselectedContentColor = Color.White,
alwaysShowLabel = true,
selected = isSelected,
onClick = {
/*viewModel.updateRoute(item.route)
viewModel.navigateTo(item.route)*/Your logic here
},
modifier = if (isSelected) {
Modifier.clip(RoundedCornerShape(25.dp)).background(color = DarkGray).clipToBounds()
} else {
Modifier.background(color = Color.Transparent)
}
)
}
}
Upvotes: 2