분류 전체보기

    Button Material 3

    Button Material 3

    이전엔 버튼의 매개변수별 특징을 알아봤다면 이번엔 Material3에서 제시하는 버튼의 종류에 대해 알아보겠습니다. 버튼 기본 매개변수에 대해 모르신다면 이전 글을 보고 오시는 걸 추천드립니다. Button 기본 compose의 기본적인 컴포저블 중 하나입니다. 일반적으로 머티리얼3의 컴포저블를 사용하지만 머티리얼의 컴포저블도 Button에 기반을 둔 컴포저블이 많으므로 알아두고 가는게 좋습니다. 속성 modi huzit.tistory.com 종류 Elevated button Filled button(일반 Button) Filled tonal button Outlined button Text button Icon button Segmented button Floating action button(FAB)..

    Button 기본

    Button 기본

    compose의 기본적인 컴포저블 중 하나입니다.material3를 사용하였으므로 material2와는 다소 다를 수 있습니다.속성modifier수정자입니다. 컴포저블 자체를 꾸미거나 수정할 수 있습니다. (나중에 자세히 다룰 예정입니다)content버튼 내부에 사용할 컴포저블을 받습니다.onClick버튼 클릭 시 해야 할 행동을 수신하는 매개변수입니다.Button( //클릭 시 이벤트 onClick = { Toast.makeText(localContext, "test", Toast.LENGTH_SHORT).show() }) { Text("OnClick")}enabled버튼 활성 비활성 여부를 받는 매개변수입니다.Button( onClick = { /*TODO*/ ..

    remember 강제 재실행하는 방법

    remember 강제 재실행하는 방법

    remember var name by remember { mutableStateOf("")} remember함수를 사용하면 리컴포지션 후에도 MutableState값이 유지됩니다. 어떤 방식으로 값이 유지 되는 지 remember의 선언을 예로 들며 알아보겠습니다 @Composable inline fun remember(crossinline calculation: @DisallowComposableCalls () -> T): T = currentComposer.cache(false, calculation) 일반적으로 remember는 매개변수로 calculation 람다를 취합니다. 처음 remember가 실행되면 calculation람다를 호출하고 그 결과를 저장합니다. 리컴포지션 중 remember는..

    Compose에서 State를 복원하는 방법

    Compose에서 State를 복원하는 방법

    Compose에서 상태 복원rememberSavable API는 저장된 인스턴스 상태 메커니즘을 사용하여 recomposition과 activity전반에 걸쳐 상태를 유지하므로 remember과 비슷하게 작동합니다.remember과 가장 큰 차이점은 rememberSavable는 Bundle에 값을 저장하지 때문에 화면회전이 발생할 때 값이 초기화되지 않습니다.상태를 저장하는 방법Bundle에 추가되는 모든 데이터 타입은 자동으로 저장됩니다. Bundle에 추가할 수 없는 항목을 저장하려는 경우 몇 가지 옵션이 있습니다.Parcelize가장 간단한 방법은 객체에 @Parcelize 어노테이션을 추가하는 것입니다. 그러면 객체가 parcelable이 되며 번들로 저장될 수 있습니다.Parce..

    State Hoisting(상태 호이스팅)

    State Hoisting(상태 호이스팅)

    hoisting이란 외부로 선언을 끌어올리는 것State Hoisting컴포즈에서 상태 호이스팅은 컴포저블을 Stateless로 만들기 위해 State를 호출자로 옮기는 패턴입니다. 자바스크립트의 호이스팅과는 사뭇 다른 개념입니다. 자바스크립트에선 현상이지만 컴포즈에선 패턴입니다.컴포즈에서 상태 호이스팅을 하는 일반적인 패턴은 컴포저블 내부에서 선언한 State를 다음 두 개의 매개변수로 바꾸는 것입니다.value: T = 표시할 현재 값onValueChange: (T) -> Unit = T가 제안된 새 값일 경우 값을 변경하도록 요청하는 이벤트꼭 onValueChange로 제한되진 않습니다. 컴포저블에서 더 구체적인 이벤트가 필요하다면 람다를 사용하여 이벤트를 정의하면 됩니다.장점..

    Stateful 과 Stateless

    Stateful 과 Stateless

    State를 가지고 있으면 Stateful, State를 가지고 있지 않으면 Stateless입니다.Statefulremember를 사용하여 객체를 저장하는 컴포저블은 내부 State를 생성하여 컴포저블을 Stateful하게 만듭니다. 우리가 앞서 만들었던 예제들은 Stateful한 컴포저블의 예가 됩니다. 이는 호출하는 쪽에서 상태를 관리할 필요가 없다는 편리함이 있지만 재 사용성이 적고 테스트하기 어려운 경향이 있습니다.@Composablefun Greeting2() { var name by remember { mutableStateOf("") } Column(modifier = Modifier.padding(16.dp)) { if(name.isNotEmpty()) ..

    지원되는 기타 State 유형

    지원되는 기타 State 유형

    State를 붙잡기 위해 MutableState 를 반드시 써야 할 필요는 없습니다. 관찰 가능한 타입이면 State는 지원합니다. 우선 지원 가능한 타입을 알아보기 전에 하나 확실하게 알아야 하는 사실이 있습니다. 반드시 지원 가능한 타입을 State 로 바꿔줘야 합니다. 그래야 컴포저블들이 자동으로 State가 바뀔 때 recompose 할 수 있습니다.컴포즈는 안드로이드 앱에서 사용되는 관찰가능한 타입에 State 를 생성할 수 있는 함수를 올려놨습니다.Flow의존성dependencies{ implementation("androidx.lifecycle:lifecycle-runtime-compose:2.6.2")}collectAsStateWithLifecycle()라이프 사이클에..

    State and Jetpack Compose

    State and Jetpack Compose

    State(상태)에 대해 한 줄 요악하면 시간이 지남에 따라 변경될 수 있는 어떤 값 이라 할 수 있습니다. 시간에 따라 변경될 수 있다? 일반 변수나 LiveData도 사용자가 작성해 놓고 시간만 지나면 변경될 수 있는 값인데 무슨 소리를 하는 거지?라는 의문이 들 겁니다. (저는 그렇게 생각이 들더라고요) 그래서 저는 State를 UI를 그리는 데 사용하는 관찰 가능 한 값 이라 정의하겠습니다. State and Jetpack Compose State를 배우기 앞서 Compose를 간단하게 알아보겠습니다. 기본적으로 Compose는 '선언형'입니다. 따라서 UI를 업데이트하는 방법은 새로운 인수로 같은 Composable을 호출하는 것입니다. 그렇게 만들어진 인수는 UI State라고 불립니다. 언제..