Notice
Recent Posts
Recent Comments
Link
«   2025/05   »
1 2 3
4 5 6 7 8 9 10
11 12 13 14 15 16 17
18 19 20 21 22 23 24
25 26 27 28 29 30 31
Archives
Today
Total
관리 메뉴

유스의 개발 일지

[Android/Kotlin] Compose App Bar 본문

Android

[Android/Kotlin] Compose App Bar

YusAOS 2024. 11. 10. 23:38

함수 뜯어보고 탐구하기



App Bar

앱 바는 사용자에게 주요 기능 및 탐색 항목에 대한 액세스 권한을 제공하는 컨테이너입니다. 앱 바에는 상단 앱 바와 하단 앱 바의 두 가지 유형이 있습니다. 각각의 모양과 목적은 다음과 같습니다.

  • 상단 앱 바 : 주요 작업 및 정보에 대한 액세스 권한을 제공합니다. 일반적으로 제목, 핵심 작업 항목, 특징 탐색 황목을 호스팅합니다. - TopAppBar
  • 하단 앱 바 : 일반적으로 핵심 탐색 항목에 포함됩니다. 포함된 플로팅 작업 버튼을 통해 다른 주요 작업에 액세스할 수도 있습니다. - BottomAppBar

앱바는 일반적으로 이를 수신하는 특정 매개변수가 있는 Scaffold Composable에 전달됩니다. 

 

* 처음 Scaffold을 통해 AppBar을 설정할 시에 innerPadding을 설정을 안하게 될 경우 content 안에 설정된 여러 components가 겹치는 경험을 할 때가 있는데 innerPadding을 contentPadding에 설정을 하게 된다면 상단 앱 바, 하단 앱 바 등의 높이만큼 자동으로 여백을 확보할 수 있게 해줍니다.

 

상단 앱바의 종류

  • Small (작은) - TopAppBar
  • Center aligned (중앙 정렬) -  CenterAlignedTopAppBar
  • Medium (중간) - MediumTopAppBar
  • Large (대형) - LargeTopAppBar 

주요 매개변수

  • Title : 앱 바 전체에 표시되는 텍스트입니다.
  • navigationIcon : 탐색의 기본 아이콘입니다. 앱 바 왼쪽에 표시됩니다.
  • actions : 사용자에게 주요 작업에 대한 액세스 권한을 제공하는 아이콘입니다. 앱 바 오른쪽에 표시됩니다.
  • scrollBehavior : 상단 앱 바가 Scaffold의 내부 콘텐츠 스크롤에 응답하는 방식을 결정합니다.
  • colors : 앱 바가 표시되는 방식을 결정합니다.
@Composable
fun SmallTopAppBarExample() {
    Scaffold(
        topBar = {
            TopAppBar(
                colors = TopAppBarDefaults.topAppBarColors(
                    containerColor = MaterialTheme.colorScheme.primaryContainer,
                    titleContentColor = MaterialTheme.colorScheme.primary,
                ),
                title = {
                    Text("Small Top App Bar")
                }
            )
        },
    ) { innerPadding ->
        ScrollContent(innerPadding)
    }
}

 

스크롤 동작

 

사용자가 지정한 내부 콘텐츠를 스크롤할 때 앱바가 반응하는 방식을 제어할 수 있습니다. TopAppBarScrollBehavior 인스턴스를 만들어서 scrollBehavior 매개변수의 상단 앱 바에 전달합니다.

TopAppBarScrollBehavior의 유형

  • enterAlwaysScrollBehavior : 사용자가 스캐폴드의 내부 콘텐츠를 위로 당기면 상단 앱 바가 접힙니다. 그런 다음 사용자가 내부 콘텐츠를 아래로 당기면 앱 바가 확장됩니다.
val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior(rememberTopAppBarState())
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
  • exitUntilCollapsedScrollBehavior : enterAlwaysScrollBehavior와 유사하지만 사용자가 스캐폴드의 내부 콘텐츠 끝에 도달하면 앱 바가 추가로 확장됩니다.
val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior(rememberTopAppBarState())
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)
  • pinnedScrollBehavior : 앱 바가 제자리에 유지되고 스크롤에 반응하지 않습니다.

val scrollBehavior = TopAppBarDefaults.pinnedScrollBehavior(rememberTopAppBarState())
modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection)

 

하단 앱 바의 주요 매개변수

  • actions : 막대 왼쪽에 표시되는 일련의 아이콘입니다. 일반적으로 이러한 작업은 특정 화면의 주요 작업 또는 탐색 항목입니다.
  • floatingActionButton : 막대의 오른쪽에 표시되는 플로팅 작업 버튼입니다.
@Composable
fun BottomAppBarExample() {
    Scaffold(
        bottomBar = {
            BottomAppBar(
                actions = {
                    IconButton(onClick = { /* do something */ }) {
                        Icon(Icons.Filled.Check, contentDescription = "Localized description")
                    }
                    IconButton(onClick = { /* do something */ }) {
                        Icon(
                            Icons.Filled.Edit,
                            contentDescription = "Localized description",
                        )
                    }
                },
                floatingActionButton = {
                    FloatingActionButton(
                        onClick = { /* do something */ },
                        containerColor = BottomAppBarDefaults.bottomAppBarFabColor,
                        elevation = FloatingActionButtonDefaults.bottomAppBarFabElevation()
                    ) {
                        Icon(Icons.Filled.Add, "Localized description")
                    }
                }
            )
        },
    ) { innerPadding ->
        Text(
            modifier = Modifier.padding(innerPadding),
            text = "Example of a scaffold with a bottom app bar."
        )
    }
}

Compose에서 Screen으로 화면전환하는 방식이 있는데 그 때 Navigation으로 사용하는 방식이 있습니다.

상단바 왼쪽 <- 이러한 아이콘을 클릭하면 그 전 페이지로 이동하게 되는 설정을 하고싶을 때

NavHost(navController, startDestination = "home") {
    composable("topBarNavigationExample") {
        TopBarNavigationExample{ navController.popBackStack() }
    }

 

이런식으로 navController.popBackStack()을 통해 처리하는 방식이 있습니다.

다음 아래는 예시입니다.

@Composable
fun TopBarNavigationExample(
    navigateBack: () -> Unit,
) {
    Scaffold(
        topBar = {
            CenterAlignedTopAppBar(
                title = {
                    Text(
                        "Navigation example",
                    )
                },
                navigationIcon = {
                    IconButton(onClick = navigateBack) {
                        Icon(
                            imageVector = Icons.AutoMirrored.Filled.ArrowBack,
                            contentDescription = "Localized description"
                        )
                    }
                },
            )
        },
    ) { innerPadding ->
        Text(
            "Click the back button to pop from the back stack.",
            modifier = Modifier.padding(innerPadding),
        )
    }
}

 

'Android' 카테고리의 다른 글

[Android/Kotlin]Compose Dialog  (0) 2024.11.12
[Android/Kotlin]Compose Layout(2)  (6) 2024.11.11
[Android/Kotlin] Compose Layout(1)  (5) 2024.11.09
[Android/Kotlin] Compose Layout  (2) 2024.11.08
[Android/Kotlin] Compose Button  (1) 2024.11.07