-
Notifications
You must be signed in to change notification settings - Fork 0
[2] Layouts in Jetpack Compose
'composition tree'를 통해 암시적으로 데이터를 전달 할 수 있다.
독특하게도 가변인자를 받는 함수이다.
Child의 불투명도 수준을 정의한다.
CompositionLocalProvider 의 인자 중 하나로 넣을 수 있다.
대부분의 Composable은 선택적 Modifier를 매개변수로 받아 유연한 구성이 가능하다.
따라서, 설계를 할 때 이 부분을 고려해 설계한다면 확장성이 유용해진다.
modifier.padding(16.dp).clickable
위 경우엔 padding이 적용되고나서 clickable이 되기때문에 클릭가능한 영역이 16dp 만큼의 영역이 줄어든다.
이를 방지하기 위해
modifier.clickable{}.padding(16.dp)
clickable을 먼저 적용하고 padding을 적용하는것이 중요하다.
TopAppBar, BottomAppBar, FloatingActionButton 과 같은 일반적인 최상위 Material 구성 요소에 대한 슬롯을 제공한다.
레이아웃에서 최상단을 구성하는 요소
기본으로 제공하는 제목, 탐색 아이콘 및 작업을 위한 슬롯이 있는 Composable
Column은 화면에 표시되지 않은 항목까지 포함한 모든 목록을 렌더링하므로 목록 크기가 커지면 성능에 문제가 발생한다.
이 문제를 방지하기 위해 Lazy Column을 사용하여 화면에 보이는 항목만 렌더링하도록 구현한다.
Bitmap 혹은 벡터 이미지를 사용할 수 있는 Composable.
이미지를 원격으로 가져오는 경우 앱에서 asset을 다운로드하고 비트맵으로 디코딩한다음 Image와 함께 렌더링한다.
이러한 단계를 단순화하기 위해 효율적으로 작업을 실행하는 Composable을 제공하는 Coil 라이브러리를 사용한다.
기존의 smoothscrolltoposition 처럼 Compose 에서 제공하는 스크롤 위치 수동제어 기능이다.
스크롤하는 동안 목록 렌더링을 차단하는 것을 방지하기 위해 스크롤 API는 일시 중단 하는 기능이다.
따라서 코루틴을 사용하는 CoroutineScope 내에서 사용해야만 한다.
xml에서 사용하는 Constraint Layout을 Compose에서도 똑같이 사용할 수 있다.
Reference를 생성하는 함수. Composable내의 ConstraintLayout에는 연결된 Reference가 있어야 한다.
ConstraintLayout에서 Modifier를 지정할 수 있도록 해준다.
기존의 ConstraintLayout의 attr 중 topToBottom에서 to 와 비슷한 역할을 하는 것 같다. (개인생각임)
modifier = Modifier.constraintAs(button) {
top.linkTo(parent.top, margin = 16.dp)
}
위 코드를 보면 버튼의 top은 parnet의 top와 같고, maring(top)은 16dp 이기 때문에 같은 의미라고 해석된다.
ConstraintLayout내의 Child는 래핑하는 데 필요한 크기를 선택할 수 있다.
preferredWrapContent, wrapContent, fillToConstraints 의 Dimensions를 선택하여 정의할 수 있다.
Compose의 규칙 중 하나는 오직 한개의 Child 만 measure 할 수 있다. 그러나, measure 하기전에 child에대한 정보가 필요할 때가 있다.
Intrinsics를 사용하면 측정되기 전에 Child에 대한 정보를 집어넣을 수 있다. (xml로 치면 tools 같은 느낌이 들었음)
콘텐츠를 적절하게 칠할 수 있는 최소/최대 너비
콘텐츠를 적절하게 칠할 수 있는 최소/최대 높이
1장 보다는 확실히 내용이 깊어졌다. 그래서 이해하는데 조금 더 많은 시간이 소요됐다.
그런데 배우다보니 친숙한 부분이 있어서 한편으론 마음이 편했다. (Constraint Layout 덕분에)
또한, Image 함수를 보고 느낀건..
Glide나 Picasso 같은 툴이 이제 역사의 뒤안길로 사라질 수 있겠다라는 생각 ..