Compose의 State 선언형 UI 프레임워크인 Compose는 Stateless함이 가장 큰 장점이다. UI에 대한 UI상태의 상호 의존성을 끊을 수 있다면 UI의 재사용성이 생기고, UI에 대한 테스트 또한 가능해지기 때문이다. Compose Stateless의 장점 1. UI 재사용성 2. UI 테스트 가능성 하지만 가끔 상태가 UI에 저장되어야만 하는 경우가 있다. 대표적으로 TextField가 있다. TextField는 어떤 텍스트가 입력되었는지를 저장해야 하기 때문에 상태를 가져야 한다. 아래에서 제목을 가지도록 Custom한 TextField인 TextFieldWithTitle을 보자. @Composable fun TextFieldWithTitle(title: String) { var t..
안드로이드
Button을 위한 Color 객체 접근 방법 Button에 색상을 설정하기 위해서는 ButtonColors interface를 구현하는 객체를 넣어주어야 한다. fun Button( .. colors: ButtonColors, .. ) 이 ButtonColors를 구현하는 것은 DefaultButtonColors class인데 이는 private으로 설정되어 외부에서 접근이 불가능하다. private class DefaultButtonColors( private val backgroundColor: Color, private val contentColor: Color, private val disabledBackgroundColor: Color, private val disabledContentColo..
Button의 contentPadding 이해하기 Button의 contentPadding 프로퍼티는 Row영역에 padding을 준다. Button의 contentPadding에 들어가는 값은 PaddingValues 인터페이스를 상속받은 객체이다. contentPadding: PaddingValues = ButtonDefaults.ContentPadding contentPadding을 만드는 방법 우리는 Compose에서 제공해주는 총 3가지 함수를 이용해 PaddingValues를 상속받는 PaddingValuesImpl 객체를 만들어낼 수 있다. 상하좌우에 모두 같은 크기의 padding을 주는 방법 fun PaddingValues(all: Dp): PaddingValues = PaddingVal..
Button의 content와 content padding Button은 Surface 내부에 Row 블록을 가지고 있고, Row에 배치되는 컴포저블인 content를 가지고 있어 내부에 컴포저블을 배치할 수 있도록 해준다. Row의 padding은 Button의 contentPadding 값으로 설정된다. 이번 시간에는 content만을 다룬다. 즉, 이를 시각적으로 표현하면 다음과 같다. *내부 코드는 접은 글을 펼쳐서 확인 가능하다. 더보기 @Composable fun Button( .. contentPadding: PaddingValues = ButtonDefaults.ContentPadding, content: @Composable RowScope.() -> Unit ) { .. Surface(..
Compose에서 지원하는 기본 Button의 종류 Compose에서는 3가지의 기본 Button을 지원한다. Button TextButton OutlinedButton 이 세가지 버튼의 차이는 그림1과 같다. 그림1과 같이 만들려면 다음의 코드를 이용해 만들면 된다. @Composable fun KotlinWorldButton() { Column(horizontalAlignment = Alignment.CenterHorizontally, verticalArrangement = Arrangement.SpaceEvenly) { Button(onClick = {}, modifier = Modifier.wrapContentSize()) { Text(text = "Button KotlinWorld") } Out..