Compose로 BottomNavigationBar 커스터마이징
Compose로 BottomNavigation을 만들고 커스텀하는 방법을 정리한다.
1. BottomBar에 Compose 연결
BottomBar
를 선언하기 위해서는Scaffold
를 사용해야 한다.
val currentRoute = navController.currentBackStackEntryAsState().value?.destination?.route
Scaffold(bottomBar = {
if (currentRoute in listOf(route1.route, route2.route)) {
BottomNavigationBar(navController)
}
})
- 아래 코드는
route1
,route2
일 때만BottomNavigationBar
가 표시되게 한다
if (currentRoute in listOf(route1, route2))
2. BottomNavigationBar 만들기
val items = listOf(route1, route2) // 바텀 네비게이션의 기준이 될 item들
val itemTexts = stringArrayResource(R.array.Tab) // item들의 이름
val screenHeightDp = LocalConfiguration.current.screenHeightDp.dp
val height = screenHeightDp / 15
// 전체 화면의 1/15 크기로 하기 위한 수치 계산
items
와itemTexts
는 각각 네비게이션 항목과 해당 텍스트가 된다.- 화면 높이의 1/15 크기로
NavigationBar
의 높이를 설정한다.
NavigationBar(
modifier = Modifier
.fillMaxWidth()
.height(height),
containerColor = Color.White // NavigationBar의 배경색 설정
) {
val navBackStackEntry by navController.currentBackStackEntryAsState()
val currentRoute = navBackStackEntry?.destination?.route
items.forEachIndexed { index, screen ->
NavigationBarItem(
icon = {
Icon(...) // 각 Item들의 icon을 설정 (빈공간을 만들고 싶다면 Icon을 지워주면 된다)
},
label = { Text(itemTexts[index]) }, // 표시할 텍스트
selected = currentRoute == screen.route, // 선택 여부 판단
colors = NavigationBarItemDefaults.colors(
indicatorColor = Color.Transparent, // Icon의 백그라운드 색
selectedTextColor = Color.Black, // 선택된 텍스트 색
unselectedTextColor = Color.Red // 선택되지 않은 텍스트 색
),
onClick = {
// 클릭 시 작동할 코드
navController.navigate(screen.route) {
popUpTo(navController.graph.startDestinationId) {
inclusive = true
}
}
}
)
}
}
- NavigationBarItem: 각 항목에 대한 아이콘, 텍스트, 선택 상태 및 클릭 동작을 정의한다.
- colors: 선택된 항목과 선택되지 않은 항목의 텍스트 색상과 아이콘의 배경색을 커스터마이징한다.
주석을 통한 코드 설명
- 주석을 통해 각 코드의 역할을 설명한다. 아이콘 설정, 텍스트 처리, 선택 여부 판단, 클릭 시의 동작 등을 명확하게 정리했다.
반응형
'안드로이드 > 공부 및 정리' 카테고리의 다른 글
android 아키텍처 패턴 (0) | 2024.10.03 |
---|---|
[Android]Kotlin-DSL와 VersionCatalog (0) | 2024.10.01 |
Compose로 Spinner 구현 및 커스텀 방법 (0) | 2024.09.20 |
[Android]Android Rest 통신중 로딩 화면 만들기 (0) | 2024.09.18 |
[Android]HorizontalPager 효과 적용하기 (0) | 2024.09.17 |