Jetpack Compose Scaffold

 본 게시글은 Material3를 기준으로 작성되었습니다.


Scaffold

Material Design에서 사용되는 Composable function으로 다양한 구성요소와 기타 화면 요소를 제공합니다.

Material Design 가이드라인을 따르며, 앱의 상단 앱바, 하단 탐색 막대, 콘텐츠 영역 등을 설정할 수 있습니다.


Scaffold 구성 요소

TopAppBar

상단 앱바는 앱의 제목, 액션 버튼, 메뉴 등을 표시할 수 있는 영역입니다. TopAppBar를 사용하여 앱바의 콘텐츠와 동작을 정의할 수 있습니다.

BottomAppBar

하단 탐색 막대는 일반적으로 탐색 메뉴나 액션 버튼을 표시하는 데 사용됩니다. BottomAppBar를 사용하여 하단 막대의 콘텐츠와 동작을 정의할 수 있습니다.

FloatingActionButton

부동 액션 버튼은 일반적으로 앱에서 가장 중요한 작업을 표시하기 위해 사용됩니다. FloatingActionButton을 사용하여 부동 액션 버튼의 모양과 동작을 정의할 수 있습니다.

Content

콘텐츠 영역은 앱의 주요 내용을 표시하는 영역입니다. Content를 사용하여 콘텐츠 영역을 정의할 수 있으며, 보통은 Column이나 Row와 같은 다른 컴포넌트를 사용하여 구성합니다.


[Error] **Content padding parameter it is not used**

만약 Scaffold의 구성요소로 content{ } 부분에 에러가 발생하실 수 있습니다.

Compose 1.2.0부터는 Scaffold 내의 content에 padding value를 적용해야 합니다.


* floatingActionButtonPosition

- floating버튼의 위치를 지정할 수 있습니다. 가능한 위치는 Center와 End입니다.


* isFloatingActionButtonDocked

- floating버튼을 BottomBar의 중간에 걸치고자 한다면 true 값을, 아니면 false값을 사용하시면 됩니다.


* navigationIcon

- TopAppBar의 시작(왼쪽) 부분에 배치되는 아이콘입니다. 주로 메뉴 버튼 또는 네비게이션 아이콘으로 사용됩니다. navigationIcon은 TopAppBar에 단일 아이콘만 배치됩니다.


AppBar

상단 앱 바나 하단 앱 바(네비게이션 바)를 제공합니다.

Scaffold(
	topBar = {
    	TopAppBar { /* ... */ }
    },
    bottomBar = {
    	BottomAppBar { /* ... */ }
        // 혹은
        // NavigationBar() { /* ... */ }
    }
) {
	/* ... */
}



BottomAppBar

BottomAppBar를 사용하여 하단 막대의 콘텐츠와 동작을 정의할 수 있습니다.

Scaffold(
    bottomBar = {
        BottomAppBar(
            backgroundColor = Color.Blue
        ) {
            IconButton(onClick = {}) {
                Icon(Icons.Default.Favorite, contentDescription = "Favorite")
            }
            IconButton(onClick = {}) {
                Icon(Icons.Default.Add, contentDescription = "Add")
            }
        }
    }

) {
	/* ... */
}



FloatingActionButton

플로팅 작업 버튼을 제공합니다.

floatingActionButtonPosition 을 이용하여 가로 위치를 조정할 수 있습니다.

Scaffold(
	floatingActionButtonPosition = FabPosition.End,
	floatingActionButton = {
    	FloatingActionButton(onClick = { /* ... */ }) {
        	/* ... */
        }
    },
    
    // bottomBar가 있을 시 isFloatingActionButtonDocked 을 이용하여 겹치게 만들 수 있습니다.
    isFloatingActionButtonDocked = true,
    bottomBar = { /* ... */ }
) {
	/* ... */
}



Content

콘텐츠 영역은 앱의 주요 내용을 표시하는 영역입니다. Content를 사용하여 콘텐츠 영역을 정의할 수 있으며, 보통은 Column이나 Row와 같은 다른 컴포넌트를 사용하여 구성합니다.

Scaffold(
    content = {
        Column(
            modifier = Modifier
                .fillMaxSize()
                .podding(it)
        ) { /* ... */ }
    }
) {
	/* ... */
}



Snackbar

val coroutineScope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }

Scaffold(
    snackbarHost = { SnackbarHost(snackbarHostState) },
	floatingActionButtonPosition = FabPosition.End,
	floatingActionButton = {
    	FloatingActionButton(onClick = { 
	        coroutineScope.launch {
    	    	snackbarHostState.showSnackbar("Show Snackbar")
        	}
        }) {
        	/* ... */
        }
    }
) {
    SnackbarHost(
        hostState = snackBarHostState,
        /* ... */
    )
}



댓글

이 블로그의 인기 게시물

Jetpack Compose Navigation 정리

아이랑스토리 어플리케이션 개인정보처리방침

Android WebView WebViewClient (웹뷰에서 일어나는 요청, 상태, 에러 등 다양한 상황) 재정의 사용