[Compose Button] 1. Button에 Custom하게 Content 배치하기 : content

2021. 12. 5. 02:02· Android Jetpack Compose UI/Compose Button
목차
  1. Button의 content와 content padding
  2. 버튼에 컴포저블 배치하기
  3. 버튼 Layout 커스터마이징 하기
반응형

Button의 content와 content padding

Button은 Surface 내부에 Row 블록을 가지고 있고, Row에 배치되는 컴포저블인 content를 가지고 있어 내부에 컴포저블을 배치할 수 있도록 해준다. Row의 padding은 Button의 contentPadding 값으로 설정된다. 이번 시간에는 content만을 다룬다.

 

즉, 이를 시각적으로 표현하면 다음과 같다.

그림1. Row의 구성

*내부 코드는 접은 글을 펼쳐서 확인 가능하다.

더보기
@Composable
fun Button(
    ..
    contentPadding: PaddingValues = ButtonDefaults.ContentPadding,
    content: @Composable RowScope.() -> Unit
) {
    ..
    Surface(
        ..
    ) {
        CompositionLocalProvider(..) {
            ProvideTextStyle(..) {
                Row(
                    Modifier
                        ..
                        .padding(contentPadding), // contentPadding을 이용해 Row의 padding 결정
                    ..
                    content = content // content를 이용해 Row내부에 컴포저블 배치
                )
            }
        }
    }
}

 

예를 들어 아래와 같은 코드에서 Button은 Row영역에 12dp의 padding값을 가지고 있고, 내부에는 Text 컴포저블을 가지고 있다.

Button(
    onClick = {},
    contentPadding = PaddingValues(12.dp),
    modifier = Modifier.wrapContentSize()
) { // content 영역
    Text(text = "Button KotlinWorld")
}

그림2. Row 예시

 

버튼에 컴포저블 배치하기

우리가 보통 사용하는 버튼은 다음과 같이 만들어진다. 보통의 버튼에는 버튼을 표현할 한 개의 Text만이 필요하기 때문이다.

Button(onClick = {}, modifier = Modifier.wrapContentSize()) {
    Text(text = "Button KotlinWorld")
}

그림3. 기본 버튼

 

하지만, 우리는 Icon이 포함된 버튼을 만들고 싶을 수도 있다. 예를 들어 우리가 메시지 앱을 만들고 싶다고 해보자. 메시지 앱에는 메시지를 보내기 위한 버튼이 필요하다. 버튼의 모양이 아래 그림과 같다고 해보자.

그림3. 버튼

우리는 위와 같은 버튼을 Icon, Spacer, Text 세가지 구성요소를 사용해 만들 수 있다. 버튼의 기본 레이아웃은 Row이므로 그냥 순서대로 배치만 하면 된다.

그림4. 버튼의 구성

Button(
    onClick = {},
    modifier = Modifier.wrapContentSize()
) {
    Icon(
        painter = painterResource(id = R.drawable.ic_baseline_send_24),
        contentDescription = "send drawable"
    )
    Spacer(modifier = Modifier.width(8.dp))
    Text(text = "Send")
}

 

버튼 Layout 커스터마이징 하기

하지만 때때로 이러한 버튼을 커스터마이징 해야할 수도 있다. 예를 들어 다음과 같은 수직으로 배치된 버튼을 만들고 싶다고 해보자.

그림5. 수직으로 배치된 버튼

이를 위해서는 버튼의 RowScope 내부에 다시 Column을 정의함으로써 가능하다.

Button(
    onClick = {},
    modifier = Modifier.wrapContentSize()
) {
    Column(horizontalAlignment = Alignment.CenterHorizontally) {
        Icon(
            painter = painterResource(id = R.drawable.ic_baseline_send_24),
            contentDescription = "send drawable"
        )
        Spacer(modifier = Modifier.width(8.dp))
        Text(text = "Send")
    }
}

 

반응형
저작자표시 비영리 변경금지 (새창열림)
  1. Button의 content와 content padding
  2. 버튼에 컴포저블 배치하기
  3. 버튼 Layout 커스터마이징 하기


 

Kotlin, Android, Spring 사용자 오픈 카톡

오셔서 궁금한 점을 질문해보세요!
비밀번호 : kotlin22

open.kakao.com

'Android Jetpack Compose UI/Compose Button' 카테고리의 다른 글
  • [Android Button Surface] 2. Button에 색상(colors) 설정하기 : background color, content color
  • [Compose Button] 2. Button에 padding을 만드는 방법 : contentPadding
  • [Compose Button] Button 구성 살펴보기
  • [Android Button 심화] 1. Compose의 Button, Text Button, Outlined Button 의 차이 살펴보기
Dev.Cho
Dev.Cho
'조세영의 Kotlin World'는 Kotlin를 전문적으로 다루는 개인 기술 블로그입니다. Kotlin 세계에 대한 양질의 자료를 제공하며 Kotlin, Android, Spring, CI, CD 분야에 대해 다룹니다.
Dev.Cho
조세영의 Kotlin World
Dev.Cho
전체
오늘
어제

블로그 메뉴

  • LinkedIn
  • GitHub
  • 분류 전체보기 (491)
    • Kotlin (104)
      • Class and Interface (19)
      • Variable and Function (8)
      • Modifier (5)
      • Collection (14)
      • Time (8)
      • 동시성 제어 (7)
      • Reactive Programming (2)
      • Paradigm (2)
      • Kotlin 자료구조 (15)
      • Design Patterns (11)
      • Algorithm (3)
      • Exception (1)
      • 기타 (9)
      • Update History (0)
    • Coroutines (32)
      • Coroutine Basics (18)
      • Flow (9)
      • CoroutineScope (3)
      • Debugging (2)
    • Testing Codes (28)
      • Test 기본 (3)
      • JUnit5 (9)
      • MockK (6)
      • Testing Coroutines (1)
      • Testing Android (8)
      • Test 기타 (1)
    • Spring (50)
      • Dependency Injection (18)
      • Settings (5)
      • REST API (0)
      • DevTools (1)
      • MVC (18)
      • Error (2)
      • MongoDB (2)
      • Database (4)
    • Android (39)
      • Architecture (2)
      • Component (5)
      • Manifest (1)
      • Lifecycle (2)
      • Dependency Injection (17)
      • Resource (1)
      • Storage (1)
      • Security and Optimization (1)
      • WebView (2)
      • Error (6)
    • Android Jetpack Compose (33)
      • Compose (6)
      • Compose Modifier (13)
      • Compose Resource (4)
      • Compose State (4)
      • Compose Side Effect (6)
    • Android Jetpack Compose UI (48)
      • Compose Layout (14)
      • Compose Text (10)
      • Compose Button (5)
      • Compose Dialog (2)
      • Compose TextField (0)
      • Compose UIs (4)
      • Compose Animation (1)
      • Compose Canvas (12)
    • Android Jetpack (10)
      • Datastore (5)
      • ViewModel (4)
      • LiveData (1)
      • Paging (0)
    • KMP (5)
    • Programming (4)
    • Machine (9)
      • JVM (7)
      • Linux (2)
    • CI, CD (74)
      • Gradle (12)
      • Groovy Gradle (5)
      • Git (25)
      • Git Remote (5)
      • GitHub (5)
      • GitHub Actions (21)
    • Network (33)
      • GraphQL (12)
      • HTTP (11)
      • Basic (9)
    • 오픈소스 (3)
    • Database (3)
      • MongoDB (3)
    • IDE (6)
      • Android Studio (2)
      • Intellij (4)
    • Firebase (1)
    • Javascript (9)

공지사항

  • 코틀린 코루틴 완전 정복 강의 in 인프런 오픈
  • 코틀린 코루틴의 정석 책 출간
  • Kotlin Coroutines 공식 기술 문서 한국어 번⋯
  • GitHub에서 조세영의 Kotlin World를 Foll⋯
  • 문의&제안

인기 글

태그

  • Kotlin
  • Spring boot
  • Jetpack Compose
  • Android
  • flow
  • 코틀린
  • github actions
  • Class
  • 코루틴
  • junit5
  • 안드로이드
  • Dependency Injection
  • Coroutine
  • junit4
  • kotlin spring
  • Spring
  • GraphQL
  • Android Compose
  • junit
  • GIT
  • Unit Testing
  • github
  • gradle
  • 의존성 주입
  • dagger2
  • 스프링
  • HTTP
  • 유닛 테스팅
  • compose
  • java

최근 글

반응형
hELLO · Designed By 정상우.v4.3.0
Dev.Cho
[Compose Button] 1. Button에 Custom하게 Content 배치하기 : content
상단으로

티스토리툴바

단축키

내 블로그

내 블로그 - 관리자 홈 전환
Q
Q
새 글 쓰기
W
W

블로그 게시글

글 수정 (권한 있는 경우)
E
E
댓글 영역으로 이동
C
C

모든 영역

이 페이지의 URL 복사
S
S
맨 위로 이동
T
T
티스토리 홈 이동
H
H
단축키 안내
Shift + /
⇧ + /

* 단축키는 한글/영문 대소문자로 이용 가능하며, 티스토리 기본 도메인에서만 동작합니다.