Google은 흑인 공동체를 위한 인종 간 평등을 진전시키기 위해 노력하고 있습니다. Google에서 어떤 노력을 하고 있는지 확인하세요.

Compose Material

즉시 사용 가능한 머티리얼 디자인 구성요소로 Jetpack Compose UI를 빌드할 수 있습니다. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2020년 9월 16일 - - - 1.0.0-alpha03

구조

Compose는 androidx 내의 Maven 그룹 ID 7개의 조합입니다. 각 그룹에는 타겟팅된 일부 기능이 포함되고 각 기능에는 자체 출시 노트 세트가 있습니다.

다음 표에서는 각 출시 노트 세트에 관한 그룹과 링크를 설명합니다.

그룹설명
compose모양과 데이터 종속 항목을 설명하는 구성 가능 함수를 사용하여 프로그래매틱 방식으로 UI를 정의합니다.
compose.animationJetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더하세요.
compose.foundation즉시 사용 가능한 기본 요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 토대를 확장해 나만의 디자인 시스템을 구축하세요.
compose.material즉시 사용 가능한 머티리얼 디자인 구성요소로 Jetpack Compose UI를 빌드하세요. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다.
compose.runtimeCompose의 프로그래밍 모델과 상태 관리용 기본 요소 및 타겟팅용 Compose Compiler Plugin의 핵심 런타임입니다.
compose.ui레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.
uiJetpack Compose 라이브러리로 작업합니다.

종속 항목 선언

Compose의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용을 알아보려면 Google Maven 저장소를 읽어보세요.

다음과 같이 앱 또는 모듈의 build.gradle 파일에 필요한 아티팩트의 종속 항목을 추가합니다.

dependencies {
    implementation "androidx.compose.material:material:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha07"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참조하세요.

의견

제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 만들기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.

새 문제 만들기

자세한 내용은 Issue Tracker 문서를 참조하세요.

버전 1.0.0

버전 1.0.0-alpha03

2020년 9월 16일

androidx.compose.material:material:1.0.0-alpha03, androidx.compose.material:material-icons-core:1.0.0-alpha03androidx.compose.material:material-icons-extended:1.0.0-alpha03이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • BottomNavigationItemonSelect 매개변수 이름이 onClick으로 바뀌었습니다. (I91925, b/161809324)
  • BottomNavigationItem 및 Tab에 InteractionState 매개변수를 추가하여 이 상태를 유지하고 구성요소가 다양한 상태에서 표시되는 방식을 조정할 수 있게 합니다. (Ia3e9e, b/168025711)
  • 버튼에서 disabledBackgroundColordisabledContentColor 매개변수를 삭제합니다. 대신 ButtonConstants 내에서 새로운 기본 색상 함수를 사용해야 합니다. contentColor/backgroundColor를 이미 명시적으로 설정한 경우, 이러한 기본 함수를 사용하고 전체/일부 매개변수를 맞춤설정하여 사용 설정된 상태 및 사용 중지된 상태의 색상을 덮어쓰지 않도록 해야 합니다. (If9b52)
  • Textfield의 배경 색상에 더 이상 투명도 알파를 암시적으로 적용하지 않습니다. 대신, backgroundColor 매개변수를 통해 제공되는 모든 색상이 직접 적용됩니다. (Iecee9, b/167951441)
  • InnerPadding이 PaddingValues로 이름이 바뀌었습니다. (I195f1, b/167389171)
  • Modifier.swipeableresistanceFactorAtMinresistanceFactorAtMax 매개변수가 단일 저항 매개변수로 대체되었습니다. SwipeableConstants에 새로운 defaultResistanceConfig 메서드가 추가되었습니다. (I54238)
  • Button 및 FloatingActionButton에 대한 애니메이션 스테이트풀(Stateful) 고도 지원을 추가합니다. 이제 고도에서 기본 상태와 눌림 상태 사이에 애니메이션을 적용합니다. 상태 간의 고도를 맞춤설정하려면 모든 경우에 flat Dp 값을 설정하는 대신 ButtonConstants.defaultAnimatedElevation()FloatingActionButtonConstants.defaultAnimatedElevation()을 사용합니다. (I37925)
  • TextField 및 OutlinedTextField 내의 라벨이 선택적 매개변수가 되었습니다. (I267f6, b/162234081)

버그 수정

  • onNode 또는 waitForIdle과 같은 전역 테스트 함수는 이제 지원 중단되었습니다. ComposeTestRule에 정의된 새로운 함수로 이전하세요. (I7f45a)
  • DpConstraints 및 DpConstraints를 사용하는 API가 지원 중단되었습니다. (I90cdb, b/167389835)
  • widthIn의 minWidth와 maxWidth 매개변수의 이름이 min과 max로 바뀌었습니다. preferredWidthIn, heightIn 및 preferredHeightIn도 마찬가지입니다. (I0e5e1, b/167389544)
  • 앞으로 스크롤하거나 뒤로 스크롤하는 의미론적 작업을 삭제합니다. AccessibilityRangeInfo에 단계가 추가되었습니다. (Ia47b0)
  • 레이아웃 API에서 중력 사용에 관한 이름이 align 또는 alignment로 일관성 있게 바뀌었습니다. (I2421a, b/164077038)
  • 현재 전역 메서드가 지원 중단될 예정이므로 onNode 및 다른 전역 메서드가 ComposeTestRule에 추가되었습니다. (Ieae36)
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android에서 androidx.ui.test로 이동했습니다. (Idef08, b/164060572)

버전 1.0.0-alpha02

2020년 9월 2일

androidx.compose.material:material:1.0.0-alpha02, androidx.compose.material:material-icons-core:1.0.0-alpha02androidx.compose.material:material-icons-extended:1.0.0-alpha02가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 실험용 BackdropScaffold 구성요소가 추가되었습니다. (Iad908)

버그 수정

  • Matrix4가 Matrix로 대체되었습니다. vectormath 패키지의 다른 모든 부분이 삭제되었습니다. (Ibd665, b/160140398)

버전 1.0.0-alpha01

2020년 8월 26일

androidx.compose.material:material:1.0.0-alpha01, androidx.compose.material:material-icons-core:1.0.0-alpha01androidx.compose.material:material-icons-extended:1.0.0-alpha01이 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.

알려진 문제

머티리얼 TextField의 첫 번째 문자는 백스페이스를 사용하여 삭제할 수 없습니다. (b/165956313)

버전 0.1.0-dev

버전 0.1.0-dev17

2020년 8월 19일

androidx.compose.material:material:0.1.0-dev17, androidx.compose.material:material-icons-core:0.1.0-dev17androidx.compose.material:material-icons-extended:0.1.0-dev17이 출시되었습니다. 버전 0.1.0-dev17에 포함된 커밋을 확인하세요.

API 변경사항

  • 이전에 지원 중단된 RadioGroup 및 RadioGroupItem을 삭제했습니다. 대신 Row 및 RadioBotton을 사용해야 합니다. (I381b7, b/163806637)
  • TextField에서 onFocusChanged 콜백을 삭제했습니다. 대신 Modifier.focusObserver를 사용해야 합니다. (I51089, b/161297615)
  • Modifier.drawBorder가 지원 중단되었습니다. 대신 Modifier.border를 사용하세요. Border 데이터 클래스를 BorderStroke로 대체했습니다. (I4257d, b/158160576)
  • SwipeableState에서 일부 속성의 이름을 바꿨습니다(swipeTarget -> targetValue, swipeProgress -> progress, swipeDirection -> direction). SwipeableState를 생성하기 위한 rememberSwipeableState 함수를 추가했습니다. (I2fc9c, b/163129614, b/163132293)
  • 위치 지정 및 적절한 큐 추가가 포함된 스낵바 지원을 추가했습니다. SnackbarHostState.showSnackbar 정지 함수를 통해 액세스할 수 있습니다. 또한 다음 변경사항에 유의하세요.
    • SnackbarHost 구성요소를 추가했습니다. 이 구성요소는 상태를 기반으로 스낵바를 호스팅하며 스낵바 간 전환을 담당합니다.
    • SnackbarHostState를 추가하여 스낵바 및 스낵바 호스트를 제어할 수 있으며 ScaffoldState에서 이를 분리하였습니다. scaffoldState.snackbarHostState를 통해서도 이 상태에 액세스할 수 있습니다.
    • snackbarHostState와 스낵바 자체 간의 공통 인터페이스를 지원하기 위해 스낵바 오버로드를 추가했습니다. (I79aaa)
  • 사용 설정된 매개변수를 IconButton에 추가하고 IconToggleButton의 매개변수를 재정렬했습니다. (I0a941, b/161809385, b/161807956)
  • 문자열 기반 API가 있는 ListItem 버전을 삭제했습니다. 대신 슬롯 버전을 사용해야 합니다. (Ib8f57, b/161804681)
  • 지원 중단된 FilledTextField 구성요소를 삭제했습니다. 채워진 텍스트 입력란의 머티리얼 디자인 구현을 얻으려면 대신 TextField를 사용하세요. (I5e889)
  • AlertDialog는 이제 버튼에 FlowRow를 사용합니다. (I00ec1, b/161809319, b/143682374)
  • 경계를 지나 스와이프할 때 저항의 양을 변경할 수 있도록 Modifier.swipeable에 매개변수를 추가했습니다. [min/max]Value 매개변수를 삭제했습니다. (I93d98)
  • LinearProgressIndicator에 backgroundColor 매개변수를 추가하고 CircularProgressIndicator에서 내부 패딩을 삭제했습니다. 값 사이의 진행률을 애니메이션화할 때 기본 AnimationSpec으로 사용할 수 있는 새로운 ProgressIndicatorConstants.DefaultProgressAnimationSpec을 추가했습니다. (If38b5, b/161809914, b/161804677)
  • Modifier.swipeable에 선택적 매개변수 velocityThreshold를 추가했습니다. (I698ba)
  • bottomBarSize, fabSize 등을 ScaffoldState에서 더 이상 사용할 수 없습니다. 크기를 알고 싶은 구성요소에는 Modifier.onPosition을 대신 사용해야 합니다. contentColor 및 수정자 매개변수를 Scaffold에 추가했습니다. (Ic6f7b, b/161811485, b/157174382)
  • 다른 API와의 일관성을 위해 Tab에서 일부 매개변수의 이름을 변경하고 재정렬합니다. (Ia2d12, b/161807532)
  • TabRow를 TabRow 및 ScrollableTabRow로 분할하며 TabRow에서 isScrollable을 삭제합니다. 또한 ScrollableTabRow의 edgePadding을 노출하여 탭 앞/뒤의 여유 공간을 제어할 수 있습니다. (I583e8, b/161809544)
  • TabRow 객체를 삭제하여 TabConstants로 대체하였습니다. TabRow.TabPosition을 최상위 수준(TabPosition)으로 이동하였으며 indicatorContainer의 이름을 indicator로 변경했습니다. 업데이트된 API 및 기본값 사용 방법에 관한 자세한 내용은 샘플 및 문서를 참조하세요. (I54d45, b/161809544)
  • Modifier.swipeable의 임계값 매개변수를 수정했습니다. 이제 한 쌍의 상태(T 유형)를 사용하여 이러한 상태 간의 임계값을 ThresholdConfig 형식으로 반환합니다. 매개변수 dismissThresholds를 SwipeToDismiss에 추가했습니다. 이는 람다(DismissDirection) -> ThresholdConfig입니다. (Ie1080)
  • 슬라이더에 세분화된 맞춤설정을 위한 색상이 추가되었습니다. (I73e64, b/161810475)
  • 카드의 색상 매개변수 이름을 backgroundColor로 바꿨습니다. (I01fc1, b/161809546)
  • 이제 스낵바에 맞춤설정 가능한 배경 및 콘텐츠 색상이 있습니다. (I238f2, b/161804381)
  • modifier, backgroundColor, contentColor 및 scrimColor 맞춤설정 매개변수를 Drawer에 추가했습니다. (I23655, b/161804378)
  • state { ... } 컴포저블이 이제 지원 중단되고 명확성을 위해 명시적 remember { mutableStateOf(...) } 호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한 by mutableStateOf() 패턴과 일치합니다. (Ia5727)
  • 버튼의 패딩 매개변수 이름을 contentPadding으로 바꿨습니다. (Id252e, b/161809394)
  • 실험용 머티리얼 구성요소인 SwipeToDismiss를 추가했습니다. (I129e5)

버그 수정

  • onChildPositionedOnChildPositionedModifier가 삭제되었습니다. 개발자는 하위 레이아웃에서 onPositionedOnPositionedModifier를 대신 사용해야 합니다. (I4522e, b/162109766)
  • SemanticsPropertyKey에 mergePolicy 람다를 추가했습니다. 이는 mergeAllDescendants 의미 체계 병합을 위한 맞춤 정책을 정의하는 데 사용할 수 있습니다. 기본 정책은 상위 값이 이미 있다면 상위 값을 사용하고 상위 값이 없으면 하위 값을 사용하는 것입니다. (Iaf6c4, b/161979921)
  • IntSize는 이제 인라인 클래스입니다. (I2bf42)
  • PlacementScope.placeAbsolute()의 이름이 PlacementScope.place()로 변경되었으며 이전 PlacementScope.place()의 이름은 PlacementScope.placeRelative()로 변경되었습니다. 따라서 PlacementScope.place() 메서드는 더 이상 RTL 컨텍스트의 위치를 자동으로 미러링하지 않습니다. 이를 원한다면 PlacementScope.placeRelative()를 대신 사용해야 합니다. (I873ac, b/162916675)
  • PxBounds가 지원 중단되고 Rect로 대체되었습니다. PxBounds의 모든 사용이 Rect로 업데이트되었으며 이전을 지원하기 위해 적절한 지원 중단/주석으로 대체가 추가되었습니다. (I37038, b/162627058)
  • Compose 이름 지정 패턴에 더 잘 맞게 RRect의 이름을 RoundRect로 변경했습니다. RRect와 유사한 함수 생성자를 만들었으며 RRect 함수 생성자는 지원 중단되었습니다. (I5d325)

버전 0.1.0-dev16

2020년 8월 5일

androidx.compose.material:material:0.1.0-dev16, androidx.compose.material:material-icons-core:0.1.0-dev16androidx.compose.material:material-icons-extended:0.1.0-dev16이 출시되었습니다. 버전 0.1.0-dev16에 포함된 커밋을 확인하세요.

API 변경사항

  • Colors는 인터페이스가 아닌 최종 클래스입니다. 맞춤 구현을 확장하고 제공하는 대신 맞춤 테마 객체의 새 앰비언트를 생성하고 MaterialTheme가 내부적으로 작동하는 방식과 유사하게 구성요소의 새 앰비언트를 통해 테마 객체에 액세스해야 합니다. (Ibae84)
  • 머티리얼 색상 시스템에 더 잘 매핑하고 ColorPalette가 머티리얼 색상 시스템의 특정 구현이 아니라 '일반적인' 테마 객체인 것과 관련한 혼동을 없애기 위해 ColorPalette가 Colors로 이름이 변경되었습니다. 또한 lightColorPalette 및 darkColorPalette가 각각 lightColors 및 darkColors로 이름이 변경되었습니다. (I9e976, b/161812111)
  • BottomNavigationItem의 매개변수 이름을 text에서 label로, onSelected에서 onSelect로, activeColor에서 selectedContentColor로, inactiveColor에서 unselectedContentColor로 바꾸고 가이드라인과 일치하도록 매개변수 순서를 업데이트했습니다. (Icb605, b/161809324)
  • Modifier.stateDraggable이 완전히 재작업되고 Modifier.swipeable로 이름이 바뀌었습니다. 새로운 SwipeableState 클래스가 도입되었으며 DrawerState 및 BottomDrawerState가 이 클래스에서 상속하도록 리팩터링되었습니다. [Modal/Bottom]DrawerLayout은 더 이상 onStateChange 매개변수를 사용하지 않습니다. (I72332, b/148023068)
  • foundation.shape.corner 패키지가 foundation.share로 평면화되었습니다. (I46491, b/161887429)
  • ExperimentalMaterialApi 주석을 추가했습니다. RippleTheme을 실험용으로 표시했습니다. (Ic5fa0, b/161784800)
  • 머티리얼 FilledTextField는 TextField로 이름이 바뀌었으며 기본 TextField는 BaseTextField로 이름이 바뀌어 원하는 가장 간단한 API를 쉽게 찾고 사용할 수 있습니다. (Ia6242, b/155482676)

버그 수정

  • OnChildPositioned가 지원 중단되었습니다. 대신 하위 요소에서 OnPositioned를 사용해야 합니다. (I87f95, b/162109766)
  • 광범위한 API 수정사항을 처리했습니다. (I077bc)
    1. 사용하지 않는 OffsetBase 인터페이스를 삭제했습니다.
    2. 일관된 API 노출 영역을 갖도록 Offset 및 IntOffset 클래스를 정렬했습니다.
    3. Offset API와 일치하도록 IntOffset.Origin의 이름을 IntOffset.Zero로 바꿨습니다.
    4. 소비자가 자체 캔버스 인스턴스를 만들 수 있도록 지원하기 위해 캔버스 인터페이스에서 nativeCanvas 메서드를 이동했습니다.
    5. lateinit 대신 null이 아닌 매개변수가 되도록 DrawScope를 리팩터링하고 필드의 비 null 허용 여부를 보장하기 위해 스터브 EmptyCanvas 클래스를 만들었습니다.
    6. ClipOp enum의 이름을 파스칼 표기법으로 바꿨습니다.
    7. FilterQuality enum의 이름을 파스칼 표기법으로 바꿨습니다.
    8. StrokeJoin enum의 이름을 파스칼 표기법으로 바꿨습니다.
    9. PointMode enum의 이름을 파스칼 표기법으로 바꿨습니다.
    10. PaintingStyle enum의 이름을 파스칼 표기법으로 바꿨습니다.
    11. PathFillType enum의 이름을 파스칼 표기법으로 바꿨습니다.
    12. StrokeCap enum의 이름을 파스칼 표기법으로 바꿨습니다.
    13. lateinit 매개변수를 더 이상 사용하지 않도록 DrawCache 구현을 업데이트했습니다.
    14. fillPaint 및 strokePaint 내부 매개변수에 지연 위임을 더 이상 사용하지 않도록 DrawScope를 업데이트했습니다.
    15. 적은 오버헤드로 Box 사용을 방지하기 위해 이미지 컴포저블을 업데이트했습니다.
    16. @Immutable 주석을 포함하도록 Outline 클래스를 업데이트했습니다.
    17. 각 경로 명령에 대해 @Immutable 주석을 포함하도록 PathNode를 업데이트했습니다.
    18. 동등성에 대한 중복 조건부 검사를 삭제하도록(Compose가 사전에 처리하므로) 벡터 하위 구성을 업데이트했습니다.
    19. Rect 컴패니언 생성자 메서드를 지원 중단하고 함수 생성자로 대체했습니다.
    20. @Immutable 및 @Stable API를 사용하여 Brush 클래스 및 함수 생성자를 업데이트했습니다.
    21. VertexMode enum을 파스칼 표기법으로 업데이트했습니다.
    22. 페인트의 stroke 매개변수가 변경된 경우 이 매개변수를 조건부로 덮어쓰도록 DrawScope selectPaint 메서드를 업데이트했습니다.
    23. 디스트럭처링 API를 추가하고 UnspecifiedSize 이름을 Unspecified로 바꾸며 사용하지 않는 메서드를 삭제하도록 Size를 업데이트했습니다.
  • 대화상자를 UI로 이동합니다. (I47fa6)
  • SemanticsNodeInteraction.performPartialGesture를 삭제했습니다. 대신 SemanticsNodeInteraction.performGesture를 사용해야 합니다. (Id9b62)
  • SemanticsNodeInteraction.getBoundsInRoot() 이름을 SemanticsNodeInteraction.getUnclippedBoundsInRoot()로 바꿨습니다. (Icafdf, b/161336532)
  • 오른쪽에서 왼쪽 지원을 위한 API가 업데이트되었습니다. LayoutDirectionAmbient가 추가되어 레이아웃 방향을 읽고 변경하는 데 사용할 수 있습니다. Modifier.rtl 및 Modifier.ltr이 삭제되었습니다. (I080b3)
  • Modifier.deternimateProgress 이름을 Modifier.progressSemantics로 바꿨습니다. (I9c0b4)
  • Material.io/icons에 추가된 최신 아이콘으로 material-icons-extended를 업데이트합니다. (I4b1d3)
  • transitionDefinition에 T 유형을 명시적으로 지정해야 합니다. (I1aded)
  • Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'은 더 강력한 순서 지정 신호를 가지고 있지만 체인을 끊으며 읽기가 더 어려운 Modifier.padding().background() + anotherModifier 입력도 금지합니다. (Iedd58, b/161529964)
  • AndroidComposeTestRule 이름을 createAndroidComposeRule로 바꿨습니다. (I70aaf)
  • isFocused() 및 isNotFocused() SemanticsMatcher가 추가됩니다. (I0b760)
  • 테스트에서 사용해서는 안 되는 BaseGestureScope.globalBounds가 삭제되었습니다. 상호작용하고 있는 노드에 로컬인 좌표를 대신 사용하세요. (Ie9b08)
  • 잘라낸 디스플레이에서 팝업 위치가 수정되었습니다. (Idd7dd)
  • Modifier.drawBackground 이름을 Modifier.background로 바꿨습니다. (I13677)

버전 0.1.0-dev15

2020년 7월 22일

androidx.compose.material:material:0.1.0-dev15, androidx.compose.material:material-icons-core:0.1.0-dev15androidx.compose.material:material-icons-extended:0.1.0-dev15 버전이 출시되었습니다. 버전 0.1.0-dev15에 포함된 커밋을 확인하세요.

종속 항목 업데이트

  • Compose의 0.1.0-dev15 버전을 사용하려면 위의 종속 항목 선언에 표시된 새로운 코드 스니펫에 따라 종속 항목을 업데이트해야 합니다.

API 변경사항

  • 이제 @Model 주석이 지원 중단됩니다. state 및 mutableStateOf를 대안으로 사용합니다. 이번 지원 중단은 여러 신중한 논의 끝에 결정되었습니다.

    근거

    근거에는 다음이 포함되지만 이에 국한되지는 않습니다.

    • 교육이 필요한 API 노출 영역 및 개념이 감소합니다.
    • 다른 유사한 툴킷(Swift UI, React, Flutter)과 더욱 원활하게 호환됩니다.
    • 되돌릴 수 있는 결정입니다. 나중에 언제든지 @Model을 가져올 수 있습니다.
    • @Model을 처리해야 할 작업으로 구성하는 데 있어서 발생하는 특수한 사용 및 답변하기 어려운 질문을 삭제합니다.
    • @Model 데이터 클래스, 등호, 해시코드 등
    • 일부 속성은 '관찰'되고 나머지는 관찰되지 않게 하려면 어떻게 해야 하나요?
    • 관찰에서 사용할 구조 동등성과 참조 동등성을 각각 지정하려면 어떻게 해야 하나요?
    • 시스템에서 '매직'을 줄입니다. 즉, 시스템이 실제보다 더 영리하다고(즉, 목록을 식별하는 방법을 알고 있다고) 가정할 가능성을 줄입니다.
    • 관찰의 세부사항을 더 직관적으로 파악할 수 있습니다.
    • 클래스의 변수에서 속성으로의 리팩터링 가능성을 개선합니다.
    • State별로 수동 최적화할 가능성이 잠재적으로 생깁니다.
    • 나머지 생태계와 더 원활하게 호환되고 불변 또는 '변경 가능한 상태를 허용'하는 데 모호성을 줄입니다.

    이전 참고사항

    @Model의 거의 모든 기존 사용법은 두 가지 방법 중 하나로 상당히 쉽게 변환됩니다. 아래 예에서는 속성이 두 개인 @Model 클래스가 호환 가능하게 사용됨을 보여줍니다.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    대안 1: State<OriginalClass> 사용 및 사본 생성

    이 접근 방식은 Kotlin의 데이터 클래스를 사용하면 더 쉽습니다. 기본적으로 모든 이전 var 속성을 데이터 클래스의 val 속성으로 만들고 remember 대신 state를 사용한 다음 데이터 클래스 copy(...) 편의 메서드를 사용하여 상태 값을 원본을 복제한 사본에 할당합니다.

    데이터 클래스의 유일한 변형이 State 인스턴스가 만들어진 동일한 범위에서 실행된 경우에만 이 접근 방식이 효과가 있다는 데 유의해야 합니다. 데이터 클래스가 내부적으로 자신을 변형하여 사용 범위 밖에서 사용되고 있으며 이를 관찰하는 데 의존하고 있다면 다음 접근 방식을 사용하는 것이 좋습니다.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    대안 2: mutableStateOf 및 속성 위임 사용

    이 접근 방식은 Kotlin의 속성 위임과 개발자가 MutableState 인스턴스를 구성 밖에서 만들도록 허용하는 mutableStateOf API를 사용하면 더 쉽습니다. 기본적으로 원래 클래스의 모든 var 속성을 속성 위임으로 mutableStateOf가 있는 var 속성으로 교체합니다. 이렇게 하면 클래스 사용법이 전혀 변경되지 않고 클래스의 내부 구현만 변경되는 이점이 있습니다. 그러나 각 속성이 이제 개별적으로 관찰/작성되므로 동작은 원래 예와 완전히 동일하지는 않습니다. 따라서 리팩터링 후에 확인하는 재구성 범위가 더 좁아질 수 있는데 이는 좋은 현상입니다.

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)

  • 텍스트 필드의 onFocusChange 콜백 이름을 onFocusChanged로 바꿨습니다. (Ida4a1)

  • 앵커 사이에 임계값을 지정하기 위해 stateDraggable에 thresholds 매개변수를 추가했습니다. 이는 하단 창에서 56dp 임계값을 설정하는 데 사용되었습니다. 또한, 이제 BottomDrawerLayout에서 별도의 BottomDrawerState enum을 사용합니다. (I533fa)

  • 이전에 지원 중단된 Modifier.ripple을 삭제합니다. 이제 clickable이 ripple을 기본 표시로 사용하므로(애플리케이션에 MaterialTheme {} 세트가 있는 경우) 대부분의 경우 clickable을 사용하여 자유롭게 ripple 표시를 가져올 수 있습니다. ripple의 색상/크기/제한 매개변수를 맞춤설정해야 한다면 수동으로 RippleIndication을 만들어 표시 매개변수로 clickable에 전달하면 됩니다. (I663b2, b/155375067)

  • 지원 중단된 FilledTextField 컴포저블 재정의를 삭제했습니다. (I7f8f8)

  • Button 객체(Button 함수에서 사용되는 기본값 포함)의 이름이 ButtonConstants로 바뀌었습니다. (I7c5f7, b/159687878)

  • 이제 버튼 콘텐츠의 슬롯이 행처럼 작동합니다. 이는 텍스트가 있는 아이콘이 필요한 경우 유용합니다. 작성 방법은 Button의 샘플을 참조하세요. (I0ff10, b/158677863)

  • RadioGroup 및 RadioGroupItem이 지원 중단되었습니다. 디자인에 따라 radioButton 선택의 적절한 세트를 만들도록 Modifier.selectable, Row, Column과 함께 Box를 사용합니다. (I7f5cf, b/149528535)

  • Material Outlined Textfield를 추가했습니다. (I1a518)

  • androidx.ui.foundation.TextFieldValue 및 androidx.ui.input.EditorValue는 지원 중단되었습니다. 이 유형을 사용하는 TextField, FilledTextField, CoreTextField 컴포저블도 지원 중단되었습니다. 대신 androidx.ui.input.TextFieldValue를 사용하세요. (I4066d, b/155211005)

  • TabRow.TabPosition에는 IntPx가 아닌 Dp 위치가 포함되지 않습니다. (I34a07, b/158577776)

  • IntPx 사용을 Int로 대체했습니다. IntPxPosition은 IntOffset으로 대체했습니다. IntPxSize를 IntSize로 대체했습니다. (Ib7b44)

  • 크기 정보를 표시하는 데 사용되는 클래스의 수를 통합하려면 PxSize 대신 Size 클래스 사용을 표준화합니다. 이렇게 하면 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 너비와 높이를 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (Ic0191)

  • Modifier.ripple을 지원 중단합니다. 이제 clickable이 ripple을 기본 표시로 사용하므로(애플리케이션에 MaterialTheme {} 세트가 있는 경우) 대부분의 경우 clickable을 사용하여 자유롭게 ripple 표시를 가져올 수 있습니다. ripple의 색상/크기/제한 매개변수를 맞춤설정해야 한다면 수동으로 RippleIndication을 만들어 표시 매개변수로 clickable에 전달하면 됩니다. (I101cd, b/155375067)

  • Scaffold API가 재작업되었습니다. 이름이 바뀐 매개변수가 거의 없고 더 나은 맞춤설정을 위해 새 매개변수가 추가되었습니다. Fab, TopBar 및 BottomBar의 쿼리 크기에 Getter를 추가했습니다. (I0e7ce)

  • 머티리얼 디자인 메뉴 구현인 ui-material에 DropdownMenu 구성요소를 추가했습니다. (I9bb3d)

  • SoftwareKeyboardController를 사용하여 소프트웨어 키보드를 수동으로 표시하거나 숨길 수 있습니다. (Ifb9d6, b/155427736)

  • Modifier.indication을 기본 패키지에 추가했습니다. 이 패키지를 사용하여 상호작용 가능한 맞춤 요소에 누르기/드래그/기타 표시를 나타낼 수 있습니다. (I8425f, b/155287131)

  • CanvasScope 구현이 통합되어 이제 DrawScope와 ContentDrawScope만 있습니다. CanvasScope 이름을 DrawScope로 바꿨습니다. DrawScope는 Density 인터페이스를 구현하고 LayoutDirection을 제공하도록 업데이트되었으며 ContentDrawScope의 DrawScope 서브클래스는 삭제되었습니다. RTL 속성을 수동으로 제공하지 않아도 이미 DrawScope에서 제공하므로 Painter와 PainterModifier가 더 이상 RTL 속성을 자체적으로 유지하지 않도록 업데이트되었습니다. (I1798e)

  • Emphasis.emphasize() 이름이 Emphasis.applyEmphasis()로 바뀌었습니다. (Iceebe)

  • 사용 중지된 버튼은 머티리얼 디자인 사양을 시각적으로 따릅니다. (I47dcb, b/155076924)

  • FilledTextField는 IME 작업, 시각적 변환 및 키보드 유형 지원을 받습니다. (I1f9cf, b/155075201)

  • 획 크기를 맞춤설정하도록 strokeWidth 매개변수가 CircularProgressIndicator에 추가되었습니다. LinearProgressIndicator의 획 크기(높이)를 변경하려면 Modifier.preferredHeight() 또는 다른 크기 수정자를 사용하면 됩니다. (Icea16, b/154919081)

  • 획 크기를 맞춤설정하도록 strokeWidth 매개변수가 CircularProgressIndicator에 추가되었습니다. LinearProgressIndicator의 획 크기(높이)를 변경하려면 Modifier.preferredHeight() 또는 다른 크기 수정자를 사용하면 됩니다. (Icea16, b/154919081)

  • FilledTextField의 후행 및 선행 아이콘과 오류 상태 처리를 위한 슬롯 API를 추가했습니다. (Ic12e0)

  • FAB 및 확장 FAB의 기본 색상이 MaterialTheme.colors.secondary로 변경되었습니다. (I3b9b9, b/154118816)

  • API의 모든 null을 허용하는 Color 사용을 null을 허용하지 않는 것으로 대체했습니다. null 대신 Color.Unset을 사용하세요. (Iabaa7)

  • EdgeInsets 이름을 InnerPadding으로 바꿨습니다. 머티리얼 버튼의 innerPadding 매개변수 이름을 padding으로 바꿨습니다. (I66165)

  • 슬라이더가 이제 상태를 추적하지 않습니다. 사용자는 다른 컨트롤의 경우처럼 직접 상태를 전달하고 업데이트해야 합니다. (Ia00aa)

  • StaticDrawer가 삭제되었습니다. StaticDrawer가 필요한 경우, 대신 머티리얼 사양에 지정된 너비로 Box를 사용하세요. (I244a7)

  • 머티리얼 디자인의 채워진 텍스트 입력란 구현을 추가했습니다. (Ic75cd)

  • ListItem에 수정자 매개변수를 추가하고 후행 람다 본문의 순위를 올리기 위해 매개변수를 재정렬했습니다. (I66e21)

  • 글꼴 모음이 설정되지 않은 TextStyle이 제공된 경우 여기에 사용될 기본 글꼴 모음을 지정하도록 Typography에 defaultFontFamily 생성자 매개변수를 추가합니다. (I89d07)

  • API 노출 영역에서 머티리얼 데이터 테이블을 일시적으로 삭제했습니다. (Iaea61)

  • Divider 컴포저블의 매개변수 이름을 바꿨습니다. (Ic4373)

  • 하위 요소 (Ia6d19)

  • MaterialTheme.emphasisLevels를 삭제하고 대신 강조 수준을 가져오도록 EmphasisAmbient.current를 사용합니다. (Ib5e40)

  • 도형 테마 설정 시스템이 머티리얼 디자인 사양에 따라 업데이트됩니다. 이제 대부분의 구성요소에 사용되는 소형, 중형, 대형 도형을 제공할 수 있습니다. (Ifb4d1)

  • MaterialTheme.colors(), MaterialTheme.typography()와 같은 MaterialTheme API를 함수가 아닌 속성으로 변경했습니다. 기존 호출에서 괄호를 삭제했습니다. 동작 변경사항은 없습니다. (I3565a)

  • 프리미티브 대신 구성 가능한 람다를 허용하도록 FloatingActionButton API를 리팩터링했습니다. 사용량 정보는 업데이트된 샘플을 참조하세요. (I00622)

  • Checkbox, Switch 및 Toggleable에 enabled 매개변수를 추가합니다. (I41c16)

  • 물결 효과는 이제 수정자입니다. Clickable이 아직 전환되지 않은 동안 권장되는 사용법은 Clickable(onClick = { ... }, modifier = ripple())입니다. (Ie5200, b/151331852, b/150060763)

  • Surface 및 Card는 androidx.ui.material.surface에서 androidx.ui.material로 이동했습니다. (I88a6d, b/150863888)

  • 이제 Button, FloatingActionButton, Clickable에 별도의 enabled 매개변수가 있습니다. Button의 일부 매개변수가 이름이 변경되거나 재정렬되었습니다. (I54b5a)

  • Image 데이터와 레이아웃에 참여하고 콘텐츠를 그리는 데 사용되는 예정된 Image 컴포저블 사이의 차이를 더 잘 구분하기 위해 Image 이름을 ImageAsset으로 바꿨습니다. _Body:기존 Android 애플리케이션 개발을 Compose 프레임워크와 결합하는 데 유용한 ImageAsset 인스턴스를 만들 수 있도록 android.graphics.Bitmap에 asImageAsset()이라는 확장 메서드를 만들었습니다. (Id5bbd)

  • String 매개변수가 있는 Snackbar API를 삭제했으며 대신 구성 가능한 람다를 허용하는 오버로드를 사용합니다. 사용법 정보는 업데이트된 샘플을 참조하세요. (I55f80)

  • texticon 람다를 허용하도록 Tab API를 리팩터링했습니다. (Ia057e)

  • BottomNavigation 구성요소를 추가했습니다. 사용법에 관한 정보는 문서와 샘플을 참조하세요. (I731a0)

  • Icon, IconButton, IconToggleButton을 추가하고 AppBarIcon을 삭제했습니다. 기존의 AppBarIcon 사용을 IconButton으로 직접 대체할 수 있으며 이제 터치 타겟이 올바르게 지정됩니다. 사용법 정보는 샘플을 참조하고 이러한 구성요소와 함께 직접 사용할 수 있도록 제공되는 머티리얼 아이콘을 확인하려면 아이콘을 참조하세요. (I96849)

  • ButtonStyle을 고유 함수로 대체했으며 텍스트(문자열) 오버로드를 삭제했습니다. 사용량 정보는 업데이트된 샘플을 참조하세요. (If63ab, b/146478620, b/146482131)

  • Border 수정자의 이름을 DrawBorder로 바꿨습니다. (I8ffcc)

  • LayoutCoordinate에 더 이상 위치 속성이 없습니다. 위치 속성은 LayoutModifier, 회전 또는 크기 조정을 고려할 때 의미가 없습니다. 대신 개발자는 parentCoordinates 및 childToLocal()을 사용하여 LayoutCoordinate 간의 변환을 계산해야 합니다.

    LayoutCoordinates는 크기 속성으로 PxSize가 아닌 IntPxSize를 사용합니다. Layout은 레이아웃에 정수 픽셀 크기를 사용하므로 모든 레이아웃 크기에 부동 소수점 값이 아닌 정수를 사용해야 합니다. (I9367b)

  • ambients API에 브레이킹 체인지가 있습니다. 자세한 내용은 로그와 Ambient<T> 문서를 참조하세요. (I4c7ee, b/143769776)

  • Scaffold 머티리얼 구성요소가 추가되었습니다. Scaffold를 구현합니다. (I7731b)

  • DrawBorder를 Border 수정자로 대체했습니다. (Id335a)

버그 수정

  • FocusModifier는 지원 중단되고 Modifier.focus, Modifier.focusRequester, Modifier.focusObserver로 대체되었습니다. FocusState 및 FocusDetailedState는 지원 중단되고 FocusState2로 대체되었습니다. (I46919, b/160822875, b/160922136)
  • VerticalScroller와 HorizontalScroller는 지원 중단되었습니다. 열/행 동작 및 매개변수를 사용하는 내장 환경에는 ScrollableColumn과 ScrollableRow를 사용하고, 개발자의 자체 요소에는 Modifier.verticalScroll 및 Modifier.horizontalScroll을 사용하세요. 마찬가지로, ScrollerPosition이 지원 중단되고 ScrollState로 대체되었습니다. (I400ce, b/157225838, b/149460415, b/154105299)
  • Modifier.draggable 및 Modifier.scrollable API는 다시 작동합니다. DragDirection은 삭제되고 Orientation으로 대체되었습니다. 스크롤에 필요한 상태가 간소화되었습니다. ScrollableState의 이름이 ScrollableController로 바뀌었습니다. (Iab63c, b/149460415)
  • runOnIdleCompose의 이름이 runOnIdle로 바뀌었습니다. (I83607)
  • 이제 단일 값 semantics 속성에서 호출 스타일을 사용합니다. 예를 들어, 'semantics { hidden = true }'는 이제 'semantics { hidden() }'으로 작성됩니다. (Ic1afd, b/145951226, b/145955412)
  • 여러 테스트 API의 이름이 더 직관적으로 바뀌었습니다. 모든 findXYZ API의 이름이 onNodeXYZ로 바뀌었습니다. 모든 doXYZ API의 이름이 performXYZ로 바뀌었습니다. (I7f164)
  • TransitionState를 하위 요소에 전달하는 대신 TransitionState를 반환하도록 Transition API가 변경되었습니다. 이렇게 하면, API와 animate() API의 일관성이 더 높아집니다. (I24e38)
  • 레이아웃에서 정수 픽셀 경계를 표현하는 IntBounds 단위 클래스가 추가되었습니다. 이 기능을 사용하도록 PopupPositionProvider API를 업데이트했습니다. (I0d8d0, b/159596546)
  • 테스트 찾기에 새 옵션 플래그인 useUnmergedTree가 추가되었습니다. (I2ce48)
  • 더 이상 사용되지 않는 크기 테스트 API를 삭제했습니다. (Iba0a0)
  • NativeShader 클래스를 래핑했던 Shader 인라인 클래스를 삭제하고 NativeShader 이름을 Shader로 바꿨습니다. 래핑된 Shader 인라인 클래스는 API 노출 영역에 중요한 항목을 추가하지 않았으며 인라인 클래스이므로 NativeShader 클래스를 직접 사용하면 됩니다. (I25e4d)
  • 이제 팝업, 대화상자 및 메뉴에서 상황별 MaterialTheme을 상속합니다. (Ia3665, b/156527485)
  • 이제 머티리얼의 DropdownMenu에서 스크롤이 가능합니다. (Ide699)
  • Layout() 함수의 측정 블록에서 레이아웃 방향 매개변수를 삭제했습니다. 하지만, 레이아웃 방향은 측정 범위 객체를 통해 콜백 내에서 사용할 수 있습니다. (Ic7d9d)
  • 정적 애니메이션 사양 개념을 명확하게 하려면 최상위 API에서 AnimationBuilder 대신 AnimationSpec을 사용하세요. -트윈, 스프링과 같은 AnimationSpec을 만들기 위한 람다 요구사항을 삭제하여 전환 DSL을 개선합니다. 대신 생성자 매개변수가 직접 사용됩니다. -빌더에 의존하는 대신 생성자를 여는 AnimationSpec의 사용 편의성이 전반적으로 향상됩니다. -KeyFrames와 Tween의 재생 시간과 지연이 Int로 변경됩니다. 이를 통해 불필요한 유형 변환 및 메서드 오버로드가 사라집니다(Long과 Int를 모두 지원하는 경우). (Ica0b4)
  • 이제 enabled가 거짓으로 설정되면 스위치가 사용 중지 상태로 표시됩니다. (If4624, b/155941869, b/159331694)
  • Modifier.tag는 Modifier.testTag와 혼동을 피하고자 Modifier.layoutId로 이름이 바뀌었습니다. (I995f0)
  • 이제 Placeable#get(AlignmentLine)에서 반환된 정렬 행 Int 위치는 null이 아닙니다. 쿼리된 정렬 행이 없으면 AlignmentLine.Unspecified가 반환됩니다. (I896c5, b/158134875)
  • Radius 클래스를 인라인 클래스로 리팩터링했습니다. y축의 반경이 필수 x축 반경 매개변수의 반경과 일치하도록 컴패니언 생성 메서드가 삭제되고 기본 매개변수가 있는 함수 생성자로 대체되었습니다.

    x축 및 y축 반경에 2개의 별도 부동 소수점 값 대신 단일 Radius 매개변수를 사용하도록 DrawScope.drawRoundRect를 업데이트했습니다. (I46d1b)

  • 위치 정보를 나타내는 데 사용되는 클래스 수를 통합하려면 PxPosition 대신 Offset 클래스 사용을 표준화합니다. 이렇게 하면, 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 x 및 y 오프셋을 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (I3ad98)

  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. Px 클래스 전체가 삭제되었습니다. (I3ff33)

  • Toggleable 구성요소가 지원 중단되었습니다. 대신 Modifier.toggleable을 사용합니다. (I35220, b/157642842).

  • 대규모 리팩터링 작업의 일환으로 여러 컴포즈 클래스에서 Px 클래스가 더 이상 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I086f4)

  • 대규모 리팩터링 작업의 일환으로 여러 컴포즈 클래스에서 Px 클래스가 더 이상 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (Id3434)

  • 대규모 리팩터링 작업의 일환으로 여러 컴포즈 클래스에서 Px 클래스가 더 이상 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I97a5a)

  • DropdownMenuItems에 onClick이 호출되지 않는 문제를 수정했습니다. (I3998b, b/157673259)

  • MutuallyExclusiveSetItem이 지원 중단되었습니다. 대신 Modifier.selectable을 사용하세요. (I02b47, b/157642842)

  • 이제 TestTag는 지원 중단됩니다. 대신 Modifier.testTag를 사용하세요. (If5110, b/157173105)

  • TextField의 커서에 깜박이는 애니메이션이 있습니다. (Id10a7)

  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I19d02)

  • 이제 VerticalScroller에서 즉시 Column을 제공합니다. 이제 HorizontalScroller에서 즉시 Row를 제공합니다. (Ieca5d, b/157020670)

  • 대규모 리팩터링 작업의 일환으로 여러 컴포즈 클래스에서 Px 클래스가 더 이상 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (Iede0b)

  • 상위 수준 구성요소에 사용할 수 있도록 Modifier.semantics의 지원 중단이 해제되었습니다. (I4cfdc)

  • DrawLayer 수정자 API가 변경되었습니다. outlineShape 이름이 shape으로 바뀌었으며 기본값으로 RectangleShape을 사용하고 이제 null이면 안 됩니다. clipToOutline 이름은 clip으로 바뀌었으며, clipToBounds는 RectangleShape을 사용하면 clip == true와 동일하므로 삭제되었습니다. (I7ef11, b/155075735)

  • 캔버스를 노출하여 CanvasScope를 대신 노출하는 상위 수준 Compose API를 업데이트했습니다. 따라서 소비자가 자체 Paint 객체를 유지하지 않아도 됩니다. 캔버스에 계속 액세스해야 하는 소비자의 경우 콜백을 제공하여 기본 캔버스에서 그리기 명령어를 실행하는 drawCanvas 확장 메서드를 사용하면 됩니다. (I80afd)

  • AlignmentLineOffset 컴포저블이 지원 중단되었습니다. relativePaddingFrom() 수정자를 대신 사용하세요. CenterAlignmentLine 컴포저블을 삭제했습니다. (I60107)

  • 람다 API 후행 WithConstraints가 변경되었습니다. 이제 두 매개변수 대신 제약 조건 및 layoutDirection 외에도 Dp에서 minWidth, maxWidth, minHeight 및 maxHeight 속성을 제공하는 수신기 범위가 있습니다. (I91b9a, b/149979702)

  • 상응하는 수신 제약 조건이 지정되지 않은 경우에만(최소 제약 조건은 0, 최대 제약 조건은 무한대) 크기 제약 조건을 래핑된 레이아웃으로 설정하는 defaultMinSizeConstraints 레이아웃 수정자를 추가했습니다. (I311ea, b/150460257)

  • FocusManagerAmbient가 삭제되었습니다. 포커스를 가져오려면 FocusModifier.requestFocus를 사용합니다. (Ic4826)

  • 상태를 추적하지 않는 선언적 그리기 API 표면을 노출하기 위해 Canvas 객체를 래핑하는 CanvasScope API를 만들었습니다. 변환은 자체 수신기 범위 내에 포함되며 크기 정보도 상응하는 인셋 경계로 범위가 지정됩니다. 소비자가 그리기 작업을 구성하기 위해 자체 Paint 상태 객체를 유지할 필요는 없습니다.

    선언적 그래픽 데모를 포함하기 위해 CanvasScopeSample을 추가하고 데모 앱을 업데이트했습니다. (Ifd86d)

  • TextField에 커서 색상 맞춤설정을 추가합니다. (I6e33f)

  • 이제 TextField와 함께 사용되는 TextFieldValue가 var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }와 같이 사용되면 활동 재현에도 유지될 수 있습니다. (I5c3ce, b/155075724)

  • LayoutModifier2 이름을 LayoutModifier로 바꿨습니다. (Id29f3)

  • 지원 중단된 LayoutModifier 인터페이스를 삭제했습니다. (I2a9d6)

  • 포커스 하위 시스템과 통합하기 위해 CoreTextField/TextField focusIdentifier 매개변수를 FocusNode로 대체했습니다. (I7ea48)

  • 이제 Layout 및 LayoutModifier2의 내장 기능 측정 함수에 IntrinsicMeasureScope 수신기가 있으며, 이는 내장 기능 쿼리 API에 암시적으로 전파된 레이아웃 방향을 제공합니다. (Id9945)

  • 동일한 상위 요소 레이아웃 내에서 하위 요소의 그리기 순서를 제어하기 위해 새로운 Modifier.zIndex()가 추가되었습니다. DrawLayerModifier의 elevation 속성 이름은 shadowElevation으로 바뀌고 더 이상 그리기 순서를 제어하지 않습니다. DrawShadow의 매개변수 순서가 변경되었습니다. 첫 번째 매개변수는 elevation이고 두 번째 매개변수인 shape은 RectangleShape을 기본값으로 사용합니다. (I20150, b/152417501)

  • RectangleShape을 androidx.ui.foundation.shape.*에서 androidx.ui.graphics.*로 이동했습니다. (Ia74d5, b/154507984)

  • TextField API 업데이트 - onFocus 및 onBlur 콜백을 매개변수가 있는 하나의 onFocusChange(Boolean) 콜백으로 병합했습니다. (I66cd3)

  • Row와 Column에 각각 verticalGravity 및 horizontalGravity 매개변수를 추가했습니다. (I7dc5a)

  • 임의의 Alignment가 아닌 세로 또는 가로 Alignment를 예상하도록 wrapContentWidth 및 wrapContentHeight를 업데이트했습니다. 중력 수정자가 세로 또는 가로 Alignment를 허용하도록 업데이트되었습니다. 맞춤 연속 Alignment를 지원하기 위해 Row, Column, Stack이 업데이트되었습니다. (Ib0728)

  • ImageAsset에서 픽셀 정보 쿼리를 지원하는 PixelMap API를 만들었습니다. (I69ad6)

  • ProvideContentColor가 삭제됩니다. 대신 Providers를 통해 ContentColorAmbient를 직접 사용하세요. (Iee942)

  • ui-text-compose 모듈의 이름이 ui-text로 바뀌었습니다. 이제 ui-text에는 CoreText 및 CoreTextField 컴포저블이 포함됩니다. (Ib7d47)

  • ui-text 모듈의 이름이 ui-text-core로 바뀌었습니다. (I57dec)

  • ui-framework/CoreText, CoreTextField 컴포저블이 ui-text-compose 아래로 이동했습니다. 프로젝트에 ui-text-compose를 포함하는 것이 좋습니다. (I32042)

  • 다음과 같이 DrawModifier API를 개선합니다.

    • draw()의 수신기 범위를 ContentDrawScope로 설정했습니다.
    • draw()의 모든 매개변수를 삭제했습니다.
    • DrawScope는 이전 CanvasScope와 동일한 인터페이스를 사용합니다.
    • ContentDrawScope에 drawContent() 메서드가 있습니다. (Ibaced, b/152919067)
  • 이제 runOnIdleComposerunOnUiThread는 ComposeTestRule의 메서드가 아닌 전역 함수입니다. (Icbe8f)

  • [변경 가능] 주 속성 위임 연산자가 Kotlin 1.4 속성 위임 최적화를 지원하기 위해 확장 프로그램으로 이동했습니다. by state { ... } 또는 by mutableStateOf(...)를 계속 사용하려면 호출자가 가져오기를 추가해야 합니다. (I5312c)

  • LayoutCoordinates에 positionInParent 및 boundsInParent를 추가했습니다. (Icacdd, b/152735784)

  • ColoredRect는 지원이 중단되었습니다. 대신 Box(Modifier.preferredSize(width, height).drawBackground(color))를 사용하세요. (I499fa, b/152753731)

  • LayoutResult 이름을 MeasureResult로 바꿨습니다. (Id8c68)

  • 레이아웃 수정자를 정의하는 새로운 API인 LayoutModifier2가 추가되었고, LayoutModifier는 지원 중단되었습니다. (If32ac)

  • 수정자와 연산자를 팩토리 확장 함수로 대체했습니다. (I225e4)

  • Draggable을 수정자로 이동했습니다. (Id9b16, b/151959544)

  • ParentData 컴포저블이 지원 중단되었습니다. ParentDataModifier 인터페이스를 구현하는 수정자를 만들거나, 측정 블록 내에서 인식되도록 레이아웃 하위 요소에 태그만 지정하면 되는 경우에는 LayoutTag 수정자를 사용해야 합니다. (I51368, b/150953183)

  • Center 컴포저블을 지원 중단했습니다. LayoutSize.Fill + LayoutAlign.Center 수정자로 대체되거나 적절한 수정자가 적용된 Box 또는 Stack 컴포저블 중 하나로 대체됩니다. (Idf5e0)

  • 기존의 벡터 그래픽용 하위 구성 API를 대체하는 VectorPainter API를 추가했습니다. 하위 구성의 결과는 DrawModifier가 아닌 VectorPainter 객체입니다. 이전의 DrawVector 컴포저블을 지원 중단하고 VectorPainter로 대체했습니다.

    Image(Painter) API 이름을 PaintBox(Painter)로 바꿨습니다. Image 컴포저블과 같이 동작하는 Vector 컴포저블을 만들었습니다(ImageAsset 대신 VectorAsset을 사용하는 경우 제외). (I9af9a, b/149030271)

  • LayoutFlexible을 LayoutWeight로 이름을 변경했습니다. 채우기 위해 긴 매개변수의 이름을 변경했습니다. (If4738)

  • RepaintBoundary를 삭제하고 DrawLayerModifier로 대체했습니다. (I00aa4)

  • 일반적인 구성 가능한 함수인 DrawVector를 레이아웃의 배경으로 벡터를 그리는 수정자인 drawVector()를 반환하는 기능으로 변경했습니다. (I7b8e0)

  • 불투명도 구성 가능한 함수를 drawOpacity 수정자로 대체했습니다. (I5fb62)

  • 구성 가능한 함수 Clip을 수정자 drawClip()으로 대체합니다. DrawClipToBounds는 사각형으로 레이어 경계에 맞춰 잘라내야 하는 경우에만 사용하기 편리한 수정자입니다. (If28eb)

  • DrawShadow 구성 가능한 함수를 drawShadow() 수정자로 대체했습니다. 이제 그림자가 LayerModifier의 일부로 그려집니다. (I0317a)

  • Layout의 RenderNode를 추가할 수 있는 수정자인 LayerModifier를 추가했습니다. 자르기, 불투명도, 회전, 크기 조정, 그림자를 설정할 수 있습니다. RepaintBoundary를 대체합니다. (I7100d, b/150774014)

  • androidx.compose.ViewComposer가 androidx.ui.node.UiComposer로 이동했습니다. androidx.compose.Emittable은 삭제되었습니다. 이 항목은 ComponentNode와 중복되었습니다. androidx.compose.ViewAdapters는 삭제되었습니다. 더 이상 지원되지 않는 사용 사례입니다. Compose.composeInto가 지원 중단되었습니다. 대신 setContent 또는 setViewContent를 사용하세요. Compose.disposeComposition이 지원 중단되었습니다. 대신 setContent에서 반환되는 Composition에서 dispose 메서드를 사용하세요. androidx.compose.Compose.subcomposeInto는 androidx.ui.core.subcomposeInto로 이동했습니다. ComponentNode#emitInsertAt의 이름이 ComponentNode#insertAt으로 바뀌었습니다. ComponentNode#emitRemoveAt의 이름이 ComponentNode#removeAt으로 바뀌었습니다. ComponentNode#emitMode의 이름이 ComponentNode#move로 바뀌었습니다. (Idef00)

  • 지정된 ImageAsset을 화면에 그리는 것 외에 크기 조정/레이아웃도 처리하는 Image 컴포저블을 만들었습니다. 또한, 이 컴포저블은 고유의 크기를 고려하면서도 지정된 고정 크기나 최소 크기를 지원하며 임의의 Painter 인스턴스 그리기를 지원합니다. (Ibcc8f)

  • Wrap 컴포저블을 지원 중단했습니다. LayoutAlign 수정자나 Stack 컴포저블로 대체할 수 있습니다. (Ib237f)

  • WithConstraints에서 LayoutDirection 매개변수를 사용합니다. (I6d6f7)

  • 레이아웃 방향을 상위 요소 레이아웃 노드에서 하위 요소로 전파되도록 만들었습니다. 레이아웃 방향 수정자를 추가했습니다. (I3d955)

  • 지원 중단됨: 현 상황에서 버그의 일반적인 원인은 Draw 컴포저블입니다. (I78392, b/149827027)

  • 스택 구성요소가 오른쪽에서 왼쪽 방향을 지원합니다. (Ic9e00)

  • DrawShape 컴포저블이 삭제되었습니다. 대신 DrawBackground 수정자를 사용하세요. (I7ceb2)

  • LayoutPadding 수정자의 오른쪽에서 왼쪽 방향을 지원합니다. (I9e8da)

  • 표시되는 항목만 작성하고 배치하는 스크롤 목록 구성요소인 AdapterList를 추가했습니다. 현재 알려진 문제는 이 기능이 세로 모드에만 가능하고 하위 요소에서 발생하는 모든 변경 사례를 완전히 처리하지는 않는다는 점입니다. (Ib351b)

  • ComposeFlags.COMPOSER_PARAM 플래그를 true로 업데이트했습니다. 이는 Compose 플러그인의 코드 생성 전략을 변경합니다. 높은 수준에서 이는 @Composable 함수가 추가 합성 매개변수와 함께 생성되어 후속 @Composable 호출로 전달되도록 합니다. 이는 실행을 적절히 관리하기 위한 런타임을 확보하기 위함입니다. 그러나, 이 기능은 중요한 바이너리 브레이킹 체인지이므로 승인된 모든 Compose 사용 시 소스 수준의 호환성을 유지해야 합니다. (I7971c)

  • Canvas 구성요소를 추가했습니다. 이 컴포저블은 (사용자가 제공한) 일부 크기를 차지하며 CanvasScope를 사용하여 그릴 수 있습니다. (I0d622)

  • Density와 DensityScope를 하나의 인터페이스로 병합했습니다. 이제 ambientDensity() 대신 DensityAmbient.current를 사용할 수 있으며 withDensity(density) 대신 with(density)를 사용하면 됩니다. (I11cb1)

  • providedAlignmentLines를 Map이 아닌 Set으로 만들고 LayoutCoordinates에서 값을 검색하는 대신 get() 연산자를 구현하도록 LayoutCoordinates를 변경했습니다. 이에 따라 수정자별로 새 컬렉션을 만들지 않고도 수정자가 세트에서 하나 이상의 값을 더 쉽게 수정할 수 있습니다. (I0245a)

  • 이제 스크롤러에서 네이티브 Android 플링 모션 동작을 표시합니다. (I922af, b/147493715)

  • 제약 조건의 API 노출 영역 개선 (I0fd15)