2024. 7. 30. 18:06ㆍ[개발]/Kotlin 활용 앱 개발
# Composable 함수
- Compose 앱은 Composable 함수들로 구성
- '@Composable'이 붙은 함수로 표현
- return 값은 반환하지 않음
- 사용자의 UI 요소를 전달하면 Compose runtime을 통해 렌더링
# View와 Compose의 차이
1) View
<TextView
android:id="@+id/tv_hello"
... />
private val textView: TextView = findViewById(R.id.tv_hello)
fun greeting(name: String) {
textView.text = "Hello $name"
}
2) Compose
@Composable
fun Greeting(
name: String,
modifier: Modifier = Modifier,
) {
Text(
modifier = modifier,
text = "Hello $name",
)
}
# Modifier의 개념
- Composable의 크기, 레이아웃, 동작 및 모양 변경
- 접근성 라벨 등의 정보 추가
- 사용자 입력 처리
- 요소 클릭/스크롤/드래그/확대/축소 가능한 상호작용 추가
// Composable
@Composable
private fun Greeting(name: String) {
Column(
modifier = Modifier
.padding(24.dp)
.fillMaxWidth(),
) {
Text(text = "Hello,")
Text(text = name)
}
}
// View
<LinearLayout
android:id="+@id/layout"
android:padding="24dp"
android:width="match_parent"
android:height="wrap_content"
ori="vert.."
<TextView
android:id="+@id/tv1"
<TextView
android:id="+@id/tv2"
</LinearLayout>
# Modifier의 수정자
- padding: 요소 주위 공간 배치
- size: 크기 지정
- requiredSize: 최소 크기 지정
- fillMaxSize: 하위 레이아웃이 상위 요소에 의해 허용된 모든 가용 크기를 채우도록 함
- offset: 원래 위치 기준으로 레이아웃 배치
- weight: 상위 요소 내에서 유연하게 크기 설
# Modifier의 순서
- 각 함수는 이전 함수에서 반환한 Modifier를 변경하므로 순서가 중요
// 1번) .clickable -> .padding
// 클릭 가능한 범위를 먼저 지정하고 padding을 넣어서 전체 범위에 대해 클릭이 가능
@Composable
fun ArtistCard(/*...*/) {
Column(
Modifier
.clickable(...)
.padding(16.dp)
) {
...
}
}
// 2번) .clickable -> .padding
// padding을 넣고 클릭 가능한 범위를 지정해 padding 내 범위만 클릭이 가능함
@Composable
fun ArtistCard() {
Column(
Modifier
.padding(16.dp)
.clickable(...)
) {
...
}
}
# Layout
@Composable
fun ArtistCard() {
Text(
modifier = ...,
text = "3 minutes ago",
)
Text(
modifier = ...,
text = "Alfred Sisley",
)
}
- 원하는 정렬 방식에 대한 가이드가 없으면 Compose는 텍스트 요소를 겹치게 표시함
# 기본 레이아웃
1) Column: 항목을 세로로 배치
@Composable
fun ArtistCardColumn() {
Column {
Text("Alfred Sisley")
Text("3 minutes ago")
}
}
2) Row: 항목을 가로로 배치
@Composable
fun ArtistCardRow(...) {
Row(
...,
) {
Image(...)
Column {
Text(artist.name)
Text(artist.lastSeenOnline)
}
}
}
3) Box: 한 요소를 다른 요소 위에 배치 / 포함된 요소의 특정 정렬 구성도 지원
@Composable
fun ArtistAvatar(artist: Artist) {
Box {
Image(...)
Icon(...)
}
}
4) Alignment: verticalAlignment, horizontalAlignment, contentAlignment를 통해 콘텐츠 위치 조절 가능
@Composable
fun ArtistCardArrangement(artist: Artist) {
Row(
verticalAlignment = Alignment.CenterVertically,
horizontalArrangement = Arrangement.End
) {
Image(...)
Column { /*...*/ }
}
}
'[개발] > Kotlin 활용 앱 개발' 카테고리의 다른 글
데이터 저장 - SharePreferences (0) | 2024.07.31 |
---|---|
Compose - 함수 / UI 구성 (0) | 2024.07.30 |
Compose - 개념 (0) | 2024.07.30 |
Android - ViewType(뷰타입) (0) | 2024.07.18 |
Android - ViewPager2 / TabLayout (0) | 2024.07.18 |