[Compose] BottomNavigation 사용방법

안드로이드 Compose에서 BottomNavigation은 앱의 주요 내비게이션을 제공하는 중요한 UI 컴포넌트입니다.

이 글에서는 BottomNavigation의 사용 방법, 커스터마이징 방법, 그리고 BottomNavigationRail에 대해 알아보겠습니다.

 

BottomNavigation은 화면 하단에 위치하여 사용자가 앱 내에서 다른 화면으로 쉽게 이동할 수 있도록 도와주는 UI 요소입니다. 일반적으로 여러 아이콘과 텍스트 레이블로 구성되어 있으며, 각 아이콘은 특정 기능이나 화면으로 연결됩니다.

 

BottomNavigation 사용 방법 🛠️

@Composable
fun MyBottomNavigation() {
    val items = listOf("Home", "Search", "Profile")
    var selectedItem by remember { mutableStateOf(items[0]) }

    BottomNavigation {
        items.forEach { item ->
            BottomNavigationItem(
                icon = { Icon(Icons.Filled.Home, contentDescription = null) },
                label = { Text(item) },
                selected = item == selectedItem,
                onClick = { selectedItem = item }
            )
        }
    }
}
  • BottomNavigation: 하단 네비게이션 바를 생성합니다.
  • BottomNavigationItem: 개별 네비게이션 아이템을 정의합니다.
  • selectedItem: 현재 선택된 아이템을 상태로 관리합니다.

 

 

BottomNavigation 커스터마이징 🎨

BottomNavigation의 디자인을 변경하고 싶다면, 스타일을 수정할 수 있습니다.

예를 들어, 배경색이나 선택된 아이템의 색상을 변경할 수 있습니다.

@Composable
fun CustomBottomNavigation() {
    val items = listOf("Home", "Search", "Profile")
    var selectedItem by remember { mutableStateOf(items[0]) }

    BottomNavigation(
        backgroundColor = Color.Blue,
        contentColor = Color.White
    ) {
        items.forEach { item ->
            BottomNavigationItem(
                icon = { Icon(Icons.Filled.Home, contentDescription = null) },
                label = { Text(item) },
                selected = item == selectedItem,
                selectedContentColor = Color.Yellow,
                unselectedContentColor = Color.Gray,
                onClick = { selectedItem = item }
            )
        }
    }
}
  • backgroundColor: 네비게이션 바의 배경색을 설정합니다.
  • selectedContentColor unselectedContentColor: 선택된 아이템과 선택되지 않은 아이템의 색상을 설정합니다.

 

 

BottomNavigationRail 사용 방법 🚆

BottomNavigationRail은 수직으로 배치된 내비게이션 바를 제공합니다.

이 컴포넌트는 특히 큰 화면에서 유용합니다.

@Composable
fun MyBottomNavigationRail() {
    val items = listOf("Home", "Search", "Profile")
    var selectedItem by remember { mutableStateOf(items[0]) }

    BottomNavigationRail {
        items.forEach { item ->
            NavigationRailItem(
                icon = { Icon(Icons.Filled.Home, contentDescription = null) },
                label = { Text(item) },
                selected = item == selectedItem,
                onClick = { selectedItem = item }
            )
        }
    }
}
  • BottomNavigationRail: 수직 네비게이션 바를 생성합니다.
  • NavigationRailItem: 개별 네비게이션 아이템을 정의합니다.

 

Window Size Class 📱

Dependency

androidx-material3-window-size = { group = "androidx.compose.material3", name = "material3-window-size-class-android", version.ref = "material3WindowSizeClassAndroid" }
  • 최신 버전: 1.3.0 (24.09.06 기준)

분기 처리

val windowSizeClass = calculateWindowSizeClass(this)
MyApp(windowSize = windowSizeClass)

창 크기 클래스 너비에는 Compact, Medium, Expanded 세 가지가 있습니다.

앱이 세로 모드인 경우 Compact 너비이고, 가로 모드인 경우 Expanded 너비입니다. 

@Composable
fun MyApp(windowSize: WindowSizeClass){
    when(windowSize.widthSizeClass){
        WindowWidthSizeClass.Compact -> {
            MyAppCompact() // Portrait
        }
        WindowSizeClass.Medium -> {
            MyAppMedium()
        }
        WindowWidthSizeClass.Expanded -> {
            MyeAppExpanded() // Landscape
        }
    }
}

 

Size가 Compact인 경우 BottomNavigation을 사용하고, Expanded인 경우 BottomNavigationRail를 사용하도록 하면 사용자 경험을 최적화할 수 있습니다.

'[Android - Compose] > Compose' 카테고리의 다른 글

[Compose] Android Composable Lifecycle  (0) 2024.09.08
[Compose] Slot-based Layouts  (0) 2024.09.06
[Compose] LazyListScope  (0) 2024.09.06
[Compose] State Hoisting  (0) 2024.09.05
Android Jetpack Compose 이해하기  (0) 2024.09.05