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

Compose Foundation

즉시 사용 가능한 구성요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 기초를 확장해 고유한 자체 디자인 시스템 요소를 빌드할 수 있습니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2020년 10월 1일 - - - 1.0.0-alpha04

구조

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

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

그룹설명
compose.animationJetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더하세요.
compose.compilerKotlin 컴파일러 플러그인으로 최적화를 사용 설정하고 @Composable 함수를 변환하세요.
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.foundation:foundation:1.0.0-alpha04"
}

android {
    buildFeatures {
        compose true
    }

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

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-alpha04

2020년 10월 1일

androidx.compose.foundation:foundation:1.0.0-alpha04, androidx.compose.foundation:foundation-layout:1.0.0-alpha04androidx.compose.foundation:foundation-text:1.0.0-alpha04가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • 스택의 이름이 Box로 변경되었습니다. 이전의 기존 foundation.Box는 지원 중단되고 compose.foundation.layout의 새 Box로 대체됩니다. 새 Box의 동작은 하위 요소가 여러 개인 경우 하위 요소를 겹겹이 쌓는 것입니다. Column과 유사하게 동작했던 이전 Box와는 다릅니다. (I94893, b/167680279)
  • Box 장식 매개변수가 지원 중단되었습니다. Box에 장식/패딩을 적용하려면 대신 수정자를 사용합니다(Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • 새 LazyListState 클래스를 추가합니다. 따라서 LazyRow 및 LazyColumn 구성요소의 스크롤 위치를 관찰하고 제어할 수 있습니다. rememberLazyListState()를 사용하여 인스턴스를 만들고 구성요소의 상태 매개변수로 전달할 수 있습니다. 현재 첫 번째 표시되는 항목과 오프셋을 이 초기 버전에서 관찰할 수 있습니다. (Ic7cb7, b/159307669)
  • Lazy 목록 위치 및 스크롤 오프셋이 이제 활동 재생성 전체에서 저장되고 복원됩니다. (Ie045f, b/166589058)
  • 긴 클릭 시맨틱 작업을 추가합니다. (I6281b, b/156468846)
  • MutatorMutex 유틸리티가 추가되어 시간 경과에 따라 공유 상태의 단일 뮤테이터를 유지하고 우선순위에 따라 충돌하는 뮤테이터를 취소합니다. (I3f975)
  • rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled, textInputServiceFactory에 @VisibleForTesting 주석을 달아 내부 API로 만들고 kdoc를 숨깁니다. (I554eb, b/168308412)
  • 문자열 입력이 있는 텍스트에서 inlineContent 매개변수를 삭제했습니다. inlineContent는 AnnotatedString과 함께 작동해야 하므로 사용되지 않습니다. (Ief403)
  • 지원 중단된 맞춤 Arrangement API를 삭제했습니다. (Ic576d, b/168297922, b/168297923)
  • unbounded 매개변수를 wrapContentSize 수정자에 추가했습니다. 따라서 무한 최대 제약 조건으로 레이아웃 요소를 측정할 수 있습니다. (I77951, b/158559319)
  • 레이아웃 범위 콘텐츠의 정적 가져오기(예: RowScope의 alignWithSiblings)를 방지했습니다. 대신 명시적인 대체 범위를 사용해야 합니다. with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) } (I216be, b/166760797)

버그 수정

  • 여러 Graphics API를 업데이트했습니다.
    • DrawScope 및 DrawTransform에서 별도의 x/y 좌표 float 매개변수 대신 피벗 좌표를 나타내는 단일 오프셋 매개변수를 사용하도록 배율 및 회전 변환 API를 업데이트했습니다.
    • Rect.expandToInclude 및 Rect.join 메서드를 삭제했습니다.
    • elliptical 외에도 oval을 나타내도록 Radius 문서를 업데이트했습니다.
    • 인라인 Radius 클래스의 공개 생성자를 직접 호출하는 것이 아니라 함수 생성자를 통해 Radius 객체를 인스턴스화해야 한다고 나타내는 문서를 추가했습니다.
    • topRight, bottomRight, bottomCenter 등을 쿼리하도록 RoundRect API를 삭제했습니다.
    • Rect.shift를 지원 중단하고 Rect.translate로 대체했습니다.
    • RoundRect.grow 및 Rect.shrink API를 삭제했습니다.
    • RoundRect.outerRect의 이름을 Rect.boundingRect로 변경했습니다.
    • RoundRect.middleRect/tallMiddleRect/wideMiddleRect 및 Rect.isStadium 메서드를 삭제했습니다.
    • RoundRect.longestSide의 이름을 RoundRect.maxDimension으로 변경했습니다.
    • RoundRect.shortestSide의 이름을 RoundRect.minDimension으로 변경했습니다.
    • RoundRect.center를 함수가 아닌 속성으로 변경했습니다.
    • x/y 반경 값에 개별 매개변수 대신 Radius 속성을 사용하도록 RoundRect 생성자를 업데이트했습니다.
    • 0,0에 원점이 있는 직사각형이라고 가정한 Size API를 삭제했습니다.
    • Radius에 소멸 API를 추가했습니다.
    • 대신 다양한 RoundRect 확장 함수를 속성이 되도록 이전했습니다.
    • (I8f5c7, b/168762961)
  • 스크롤 할 때마다 불필요한 재구성을 실행하지 않아 LazyColumnFor/LazyRowFor 스크롤의 성능 최적화를 지원합니다. (I64f65, b/168293643, b/167972292, b/165028371)
  • 스크롤하고 항목을 변경한 후 LazyColumnFor/LazyRowFor에서 비정상 종료를 수정하고 이전에 표시된 항목이 삭제될 때 자동 스크롤을 구현하여 마지막에 더 이상 빈 간격이 표시되지 않도록 했습니다. (I220ab, b/161480164, b/167855468)
  • ScrollableContainer 및 LazyColumnFor와 같은 동일 방향 컨테이너에서 스크롤 가능한 중첩은 더 이상 허용되지 않습니다. 이는 전혀 지원된 적이 없었으며 LazyColumnFor 항목을 구성하는 데 있어 플링과 모든 지연을 없앴습니다. (I6e101)
  • 여러 Graphics API를 업데이트했습니다.
    • 변환이 콜백 내에서만 적용되고 콜백이 호출된 후에는 삭제된다고 나타내도록 DrawScope API를 범위가 지정된 변환 메서드로 업데이트했습니다.
    • 둥근 직사각형 대신 Path를 참조하도록 clipPath 문서를 업데이트했습니다.
    • clipPath의 오른쪽 매개변수 문서에서 간격을 수정했습니다.
    • DrawScope.drawCanvas의 이름을 drawIntoCanvas로 변경하고 크기 매개변수를 삭제했습니다.
    • 인셋 메서드의 dx/dy 매개변수 이름을 수평 및 수직으로 변경했습니다.
    • 4개 경계에 모두 동일한 인셋 값을 제공하는 인셋 오버로드를 추가했습니다.
    • 인셋이 모든 네 면에 적용된다고 나타내는 인셋 메서드에 관한 문서를 삭제했습니다.
    • Rect 클래스 문서를 업데이트했습니다.
    • kdoc 스타일과 일치하도록 Rect 매개변수의 주석을 업데이트했습니다.
    • Rect.join 및 Rect.expandToInclude를 삭제했습니다.
    • Rect.translate(offset)의 오버로드를 만들고 Rect.shift를 지원 중단했습니다.
    • (If086a, b/167737376)
  • AccessibilityScrollState를 시맨틱 속성에 추가합니다. (Ifeda9)
  • TextRange를 인라인으로 만들어 객체 생성을 방지합니다. (Id034b)
  • ParagraphConstraints를 삭제했습니다. 이제 너비가 단락에 직접 전달됩니다. (Ica712)

버전 1.0.0-alpha03

2020년 9월 16일

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

API 변경사항

  • InnerPadding이 PaddingValues로 이름이 바뀌었습니다. (I195f1, b/167389171)
  • 레이아웃 API에서 중력 사용에 관한 이름이 align 또는 alignment로 일관성 있게 바뀌었습니다. (I2421a, b/164077038)
  • 정렬 매개변수가 Stack에 추가되어 모든 Stack 하위 요소의 기본 정렬을 지정할 수 있습니다. (Ie80ca, b/164085265)

버그 수정

  • DpConstraints 및 DpConstraints를 사용하는 API가 지원 중단되었습니다. (I90cdb, b/167389835)
  • widthIn의 매개변수 minWidthmaxWidth의 이름이 minmax로 바뀌었습니다. preferredWidthIn, heightIn, preferredHeightIn도 마찬가지입니다. (I0e5e1, b/167389544)
  • 현재 전역 메서드가 지원 중단될 예정이므로 onNode 및 다른 전역 메서드가 ComposeTestRule에 추가되었습니다. (Ieae36)
  • 잘못된 스와이프 동작의 생성에 특히 발생하는 GestureScope의 크기 및 위치 계산을 수정했습니다. (Iaf358, b/166589947)
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android에서 androidx.ui.test로 이동했습니다. (Idef08, b/164060572)

버전 1.0.0-alpha02

2020년 9월 2일

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

버그 수정

  • TestUiDispatcher가 실험용으로 표시됩니다. (Iae99d, b/161247083)
  • 클록에서 프레임을 기다리는 것이 있는지 확인하기 위해 ManualFrameClock.hasAwaiters가 추가되었습니다. ManualFrameClock이 필요한 테스트를 실행할 때 runBlockingrunWithManualClock으로 대체됩니다. TestUiDispatcher.Main으로 테스트에서 기본 UI 디스패처에 쉽게 액세스할 수 있습니다.

    예:

    @Test
    fun myTest() = runWithManualClock { clock ->
        // set some compose content
        withContext(TestUiDispatcher.Main) {
            clock.advanceClock(1000L)
        }
        if (clock.hasAwaiters) {
            println("The clock has awaiters")
        } else {
            println("The clock has no more awaiters")
        }
    }
    

    (I0a85b, b/161247083)

버전 1.0.0-alpha01

2020년 8월 26일

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

버전 0.1.0-dev

버전 0.1.0-dev17

2020년 8월 19일

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

API 변경사항

  • 행 및 열에 spacedBy Arrangment가 추가되어 레이아웃 하위 요소를 고정 간격으로 배치할 수 있습니다. 정렬된 Arrangment도 추가되어 레이아웃 하위 요소를 나란히 배치하고 Alignment에 따라 행/열에 정렬할 수 있습니다. 이전의 Arrangement.Vertical#arrange 및 Arrangement.Horizontal#arrange 메서드는 지원 중단되었으며 맞춤 Arrangement 작성은 향후에 지원되지 않습니다. (I6733d, b/161985975)
  • Offset이 인라인 클래스가 되었습니다. (Iaec70)
  • TextField에서 onFocusChanged 콜백을 삭제했습니다. 대신 Modifier.focusObserver를 사용해야 합니다. (I51089, b/161297615)
  • Modifier.drawBorder가 지원 중단되었습니다. 대신 Modifier.border를 사용하세요. Border 데이터 클래스를 BorderStroke로 대체했습니다. (I4257d, b/158160576)
  • VerticalScroller 및 HorizontalScroller를 삭제했습니다. 대신 ScrollableColumn/Row를 사용해야 합니다. Modifier.drawBackground를 삭제했습니다. Modifier.background를 사용해야 합니다. (I73b0d, b/163019183)
  • 지원 중단된 fillMax* 수정자로 표시된 수정자를 LazyItemScope에서 삭제합니다. LazyColumnFor의 직접 하위 요소가 아닌 항목에 대해 이러한 수정자를 정확하게 추가하기 어렵기 때문입니다. (Ifa78d)
  • LazyColumn/LazyRow 구현을 DSL로 추가했습니다. (I93cc6)
  • Constraints는 이제 인라인 클래스입니다. (I88736)
  • fillMaxWidth, fillMaxHeight 및 fillMaxSize 수정자를 통해 사용 가능한 공간의 일부에 레이아웃 크기를 조정하는 기능을 추가했습니다. (I945bb, b/161562591)

버그 수정

  • SelectionContainer에 수정자 매개변수가 추가되었습니다. (I4aada, b/161487952)
  • SemanticsPropertyKey에 mergePolicy 람다를 추가했습니다. 이는 mergeAllDescendants 의미 체계 병합을 위한 맞춤 정책을 정의하는 데 사용할 수 있습니다. 기본 정책은 상위 값이 이미 있다면 상위 값을 사용하고 상위 값이 없으면 하위 값을 사용하는 것입니다. (Iaf6c4, b/161979921)
  • PlacementScope.placeAbsolute()의 이름이 PlacementScope.place()로 변경되었으며 이전 PlacementScope.place()의 이름은 PlacementScope.placeRelative()로 변경되었습니다. 따라서 PlacementScope.place() 메서드는 더 이상 RTL 컨텍스트의 위치를 자동으로 미러링하지 않습니다. 이를 원한다면 PlacementScope.placeRelative()를 대신 사용해야 합니다. (I873ac, b/162916675)
  • 지원 중단된 FilledTextField 구성요소를 삭제했습니다. 채워진 텍스트 입력란의 머티리얼 디자인 구현을 얻으려면 대신 TextField를 사용하세요. (I5e889)
  • LinearProgressIndicator에 backgroundColor 매개변수를 추가하고 CircularProgressIndicator에서 내부 패딩을 삭제했습니다. 값 사이의 진행률을 애니메이션화할 때 기본 AnimationSpec으로 사용할 수 있는 새로운 ProgressIndicatorConstants.DefaultProgressAnimationSpec을 추가했습니다. (If38b5, b/161809914, b/161804677)
  • state { ... } 컴포저블이 이제 지원 중단되고 명확성을 위해 명시적 remember { mutableStateOf(...) } 호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한 by mutableStateOf() 패턴과 일치합니다. (Ia5727)
  • Compose 이름 지정 패턴에 더 잘 맞게 RRect의 이름을 RoundRect로 변경했습니다. RRect와 유사한 함수 생성자를 만들었으며 RRect 함수 생성자는 지원 중단되었습니다. (I5d325)
  • onChildPositioned 및 OnChildPositionedModifier를 삭제했습니다. 개발자는 하위 레이아웃에서 onPositioned 및 OnPositionedModifier를 대신 사용해야 합니다. (I4522e, b/162109766)
  • IntSize는 이제 인라인 클래스입니다. (I2bf42)
  • 수정할 빈 영역을 길게 누릅니다. (Ib1e5b)
  • 텍스트를 탭한 후 FloatingToolbar를 숨깁니다. (If4525)
  • 선택을 업데이트할 때 FloatingToolbar를 숨깁니다. (I8444c)
  • 블러 시 선택을 해제합니다. (I781a2)

버전 0.1.0-dev16

2020년 8월 5일

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

API 변경사항

  • Lazy 목록의 itemContent 매개변수에 관한 LazyItemScope를 추가했습니다. 이는 항목이 표시 영역을 채워야 하며 항목이 무한대 제약 조건으로 측정될 때 일반 Modifier.fillMaxSize()가 작동하지 않는 경우 사용 사례를 해결하는 상위 요소 최대 크기를 채우는 수정자를 제공합니다. (Ibd3b2, b/162248854)
  • 대화상자를 UI로 이동합니다. (I47fa6)
  • itemCallback의 색인과 항목을 모두 제공하는 LazyColumnFor/LazyRowFor 버전인 LazyColumnForIndexed/LazyRowForIndexed를 추가했습니다. 이는 현재 항목 외에 현재 색인을 알아야 할 때 유용합니다. (I65ff3)
  • Modifier.deternimateProgress 이름을 Modifier.progressSemantics로 바꿨습니다. (I9c0b4)
  • LazyColumnItems 이름을 LazyColumnFor로 바꿨습니다. LazyRowItems 이름을 LazyRowFor로 바꿨습니다. (I84f84)
  • 권장사항을 위해 몇 가지 표시/주석을 추가합니다. (I66b20)
  • foundation.shape.corner 패키지가 foundation.share로 평면화되었습니다. (I46491, b/161887429)
  • LazyRowItems/LazyColumnItems에 관한 сrossaxis 중력 매개변수를 추가했습니다. LazyRowItems/LazyColumnItems는 이제 콘텐츠 래핑 동작을 지원합니다. (Ib39fc)
  • ZoomableState 이름을 ZoomableController로 바꿨습니다. smoothScale에 관한 맞춤 곡선 지원을 추가했습니다. enabledonZoomStarted 기능을 추가했습니다. (If8b8f)
  • 머티리얼 FilledTextField는 TextField로 이름이 바뀌었으며 기본 TextField는 BaseTextField로 이름이 바뀌어 원하는 가장 간단한 API를 쉽게 찾고 사용할 수 있습니다. (Ia6242, b/155482676)
  • 이전에 지원 중단된 AdapterList를 삭제했습니다. 대신 LazyColumnItems를 사용합니다. (I12b9b)
  • Modifier.drawBackground 이름을 Modifier.background로 바꿨습니다. (I13677)
  • 이전 ConstraintLayout DSL을 삭제했습니다. ConstraintSet2 이름을 ConstraintSet으로 바꿨습니다. (If58d1, b/162450908)
  • Modifier.absoluteOffset() 및 Modifier.absoluteOffsetPx()를 추가했습니다. 오프셋 수정자와 달리 절대 오프셋 수정자는 오른쪽에서 왼쪽 컨텍스트에서 자동 미러링되지 않습니다. (I3aa21)
  • RowColumn은 이제 인라인 함수이며 이러한 함수를 사용하는 오버헤드가 상당히 감소합니다. (I75c10)

버그 수정

  • 광범위한 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를 업데이트했습니다.
  • MonotonicFrameClock을 AnimationClockObservable로 사용할 수 있게 하는 MonotonicFrameAnimationClock을 추가하여 새로운 코루틴 기반 클록과 여전히 이전 콜백 기반 클록을 사용하는 API 간의 간극을 메웠습니다.

    ManualAnimationClock에 상응하는 MonotonicFrameClock은 이제 ManualFrameClock입니다. (I111c7, b/161247083)

  • SemanticsNodeInteraction.performPartialGesture를 삭제했습니다. 대신 SemanticsNodeInteraction.performGesture를 사용해야 합니다. (Id9b62)

  • SemanticsNodeInteraction.getBoundsInRoot() 이름을 SemanticsNodeInteraction.getUnclippedBoundsInRoot()로 바꿨습니다. (Icafdf, b/161336532)

  • 오른쪽에서 왼쪽 지원을 위한 API가 업데이트되었습니다. LayoutDirectionAmbient가 추가되어 레이아웃 방향을 읽고 변경하는 데 사용할 수 있습니다. Modifier.rtl 및 Modifier.ltr이 삭제되었습니다. (I080b3)

  • Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'은 더 강력한 순서 지정 신호를 가지고 있지만 체인을 끊으며 읽기가 더 어려운 Modifier.padding().background() + anotherModifier 입력도 금지합니다. (Iedd58, b/161529964)

  • isFocused()isNotFocused() SemanticsMatcher를 추가했습니다. (I0b760)

  • RemeasurementModifier가 추가되었습니다. 이를 통해 사용자는 레이아웃을 동기식으로 다시 측정할 수 있습니다. 일반적으로 재측정/재레이아웃이 자동으로 발생하므로 이 수정자가 필요하지 않지만 스크롤하는 동안 LazyColumnItems 내에서 이 수정자를 사용합니다. (I5f331, b/160791058)

  • isSystemInDarkTheme은 이제 항상 시스템 전체의 어두운 테마 설정을 고려하며 최신 가이드에 따라 Q 이전의 절전 상태를 무시합니다. (I0c10c)

  • OnChildPositioned가 지원 중단되었습니다. 대신 하위 요소에서 OnPositioned를 사용해야 합니다. (I87f95, b/162109766)

  • AndroidComposeTestRule 이름을 createAndroidComposeRule로 바꿨습니다. (I70aaf)

  • TextLayoutResult를 가져오는 접근성 작업이 추가됩니다. (I9d6e6)

버전 0.1.0-dev15

2020년 7월 22일

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

Compose의 0.1.0-dev15 버전을 사용하려면 다음을 수행해야 합니다.

종속 항목 업데이트

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

API 변경사항

  • ScrollableColumn/ScrollableRow의 새로운 매개변수와 마찬가지로, LazyColumnItems/LazyRowItems도 이제 잘린 콘텐츠에 패딩을 추가할 수 있는 contentPadding 매개변수를 갖습니다(패딩 추가는 수정자 매개변수로는 불가능함). 또한 첫 번째 항목 앞과 마지막 항목 뒤에만 공백을 추가하도록 허용합니다. (Ibc24e)
  • 텍스트 필드의 onFocusChange 콜백 이름이 onFocusChanged로 변경되었습니다. (Ida4a1)
  • 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)
  • 이제 단일 값 시맨틱 속성에 호출 스타일이 사용됩니다. 예를 들어, 이제 'semantics { hidden = true }'는 semantics { hidden() }으로 작성됩니다. (Ic1afd, b/145951226, b/145955412)
  • RoundedCornerShape 및 CutCornerShape에 사용되는 모서리를 50%보다 더 큰 크기로 사용할 수 있습니다. (Id2340, b/160400213)
  • Image 컴포저블의 기본 ContentScale 매개변수를 Inside에서 Fit로 변경했습니다. 이같이 변경한 이유는 레이아웃 크기가 Painter의 고유 크기보다 큰 경우 비율을 그대로 유지하면서 기본 Painter를 확장하는 동작을 얻기 위함입니다. 이 동작은 컴포저블 크기를 계산할 때 고유 크기만 사용하는 경우에 기본 동작에 영향을 주지 않으면서, 이미지에 고정된 크기를 제공해야 하는 요구사항에 보다 정확하게 부응합니다. (I40ae3, b/159838006)
  • 정적 애니메이션 사양 개념을 명확하게 하려면 최상위 API에서 AnimationBuilder 대신 AnimationSpec을 사용하세요. -트윈, 스프링과 같은 AnimationSpec을 만들기 위한 람다 요구사항을 삭제하여 전환 DSL을 개선합니다. 대신 생성자 매개변수가 직접 사용됩니다. -빌더에 의존하는 대신 생성자를 여는 AnimationSpec의 사용 편의성이 전반적으로 향상됩니다. -KeyFrames와 Tween의 재생 시간과 지연이 Int로 변경됩니다. 이를 통해 불필요한 유형 변환 및 메서드 오버로드가 사라집니다(Long과 Int를 모두 지원하는 경우). (Ica0b4)
  • Clickable이 삭제되었습니다. Modifier.clickable를 사용하세요. (I84bdf)
  • LazyRowItems가 추가되었습니다. 이는 가로로 스크롤하는 LazyColumnItems 유사체입니다. (Ibbcf7)
  • 낮은 수준의 스테이트리스(Stateless) 애니메이션 API가 도입되었습니다. (I63bf7)
  • androidx.ui.foundation.TextFieldValue 및 androidx.ui.input.EditorValue는 지원 중단되었습니다. 이 유형을 사용하는 TextField, FilledTextField, CoreTextField 컴포저블도 지원 중단되었습니다. 대신 androidx.ui.input.TextFieldValue를 사용하세요. (I4066d, b/155211005)
  • IntPx 사용을 Int로 대체했습니다. IntPxPosition은 IntOffset으로 대체했습니다. IntPxSize를 IntSize로 대체했습니다. (Ib7b44)
  • androidx.ui.foundation.shape.RectangleShape가 삭제되었습니다. 대신 androidx.ui.graphics.RectangleShape를 사용하세요. (I94939, b/154507984)
  • 크기 정보를 표시하는 데 사용되는 클래스의 수를 통합하려면 PxSize 대신 Size 클래스 사용을 표준화합니다. 이렇게 하면 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 너비와 높이를 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (Ic0191)
  • 위치 정보를 나타내는 데 사용되는 클래스 수를 통합하려면 PxPosition 대신 Offset 클래스 사용을 표준화합니다. 이렇게 하면, 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 x 및 y 오프셋을 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (I3ad98)
  • 손가락으로 모으거나 펼쳐 확대/축소하는 기능을 위해 Modifier.zoomable이 추가되었습니다. (Id5d63)
  • Toggleable 구성요소가 지원 중단되었습니다. 대신 Modifier.toggleable을 사용하세요. (I35220, b/157642842)
  • MutuallyExclusiveSetItem이 지원 중단되었습니다. 대신 Modifier.selectable을 사용하세요. (I02b47, b/157642842)
  • 이제 TestTag는 지원 중단됩니다. 대신 Modifier.testTag를 사용하세요. (If5110, b/157173105)
  • 이전에 실수로 추가되지 않았던 fontWeight 매개변수가 Text에 추가되었습니다. (I56937)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I19d02)
  • 이제 VerticalScroller에서 즉시 Column을 제공합니다. 이제 HorizontalScroller에서 즉시 Row를 제공합니다. (Ieca5d, b/157020670)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (Iede0b)
  • Modifier.indication을 기본 패키지에 추가했습니다. 이 패키지를 사용하여 상호작용 가능한 맞춤 요소에 누르기/드래그/기타 표시를 나타낼 수 있습니다. (I8425f, b/155287131)
  • 이제 isReversed가 ScrollerPosition에 설정되어 있으면 VerticalScroller 및 HorizontalScroller가 역 스크롤을 지원합니다. (I953bd)
  • 텍스트 레이아웃에 컴포저블을 추가할 수 있습니다. (I1373c)
  • CanvasScope 구현이 통합되어 이제 DrawScope와 ContentDrawScope만 있습니다. CanvasScope 이름을 DrawScope로 바꿨습니다. Density 인터페이스를 구현하고 LayoutDirection을 제공하도록 DrawScope를 업데이트했습니다. ContentDrawScope의 DrawScope 서브클래스를 삭제했습니다. Painter 및 PainterModifier가 RTL 속성을 더 이상 자체적으로 유지하지 않도록 업데이트되었습니다. RTL 속성을 수동으로 제공하지 않아도 DrawScope가 이미 이 속성을 제공하기 때문입니다. (I1798e)
  • 지원 중단된 DrawBackground API를 삭제하고 수정자의 drawBackground 확장 API로 대체했습니다. 코드 경로를 줄이고 수정자를 구성의 일부로 생성할 필요가 없도록 색상, 브러시 및 페인트 drawBackground 구현을 리팩터링했습니다. (I0343a)
  • 캔버스를 노출하여 CanvasScope를 대신 노출하는 상위 수준 Compose API를 업데이트했습니다. 따라서 소비자가 자체 Paint 객체를 유지하지 않아도 됩니다. 캔버스에 계속 액세스해야 하는 소비자의 경우 콜백을 제공하여 기본 캔버스에서 그리기 명령어를 실행하는 drawCanvas 확장 메서드를 사용하면 됩니다. (I80afd)
  • 이제 HorizontalScroller 및 VerticalScroller가 저장된 인스턴스 상태를 사용하여 스크롤 위치를 복원합니다. (Ia0fae, b/155075048)
  • FocusManagerAmbient가 삭제되었습니다. 포커스를 가져오려면 FocusModifier.requestFocus를 사용합니다. (Ic4826)
  • 새로고침된 API로 다시 사용할 수 있게 될 때까지 테이블 레이아웃이 일시적으로 삭제되었습니다. (Id88a7)
  • 캔버스 객체를 래핑하여 상태 비추적의 선언적 그리기 API 표면을 노출하는 CanvasScope API를 만들었습니다. 변환은 자체 수신기 범위 내에 포함되며 크기 정보도 상응하는 인셋 경계로 범위가 지정됩니다. 소비자가 그리기 작업을 구성하기 위해 자체 Paint 상태 객체를 유지할 필요는 없습니다.

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

  • ColoredRect가 삭제되었습니다. 대신 drawBackground 수정자와 함께 Box를 사용하세요. (I983c7, b/152753731)

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

  • 이제 onTextInputStarted 콜백에서 제공하는 SoftwareKeyboardController를 사용하여 소프트웨어 키보드를 숨기거나 표시할 수 있습니다. (I8dc44, b/151860051)

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

  • 일반적으로 사용되는 매개변수가 Text()에 추가됩니다. Text(style = TextStyle(textAlign = TextAlign.Center))와 같이 현재 로컬 텍스트 스타일을 만들어 소수의 매개변수를 전달하고 있다면 이제 Text(textAlign = TextAlign.Center)와 같이 매개변수를 직접 제공할 수 있습니다. (I82768)

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

  • TextField 업데이트 - 가로 측정기준에서 부여된 모든 사용 가능한 공간을 차지합니다. (Ib08df, b/154638552)

  • InteractionState 및 Interaction을 추가했습니다. 따라서 UI 상태 변경(예: 누르기, 드래그)에 반응하는 구성요소를 더 쉽게 빌드할 수 있습니다. (Icfe25, b/152525426)

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

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

  • TextField API 업데이트 - onFocus 및 onBlur 콜백이 매개변수가 있는 단일 onFocusChange(부울) 콜백으로 병합되었습니다. (I66cd3)

  • ScaleFit의 이름이 ContentScale로 변경되었습니다. Alignment API와 동일한 모듈에 위치하도록 ContentScale을 ui-graphics에서 ui-core 모듈로 이동했습니다. FillMaxDimension의 이름이 Crop로 변경되었습니다. FillMinDimension의 이름이 Fit로 변경되었습니다. ImageView.ScaleType에 해당하는 항목에 더 어울리도록 Fit의 이름이 Inside로 변경되었습니다. Crop과 Alignment.Center를 함께 사용하면 ImageView.ScaleType.CENTER_CROP과 동일한 결과를 얻고, Fit을 Alignment.Center와 함께 사용하면 ImageView.ScaleType.FIT_CENTER와 동일한 결과를 얻으며, Inside를 Alignment.Center와 함께 사용하면 ImageView.ScaleType.CENTER_INSIDE와 동일한 결과를 얻는다는 점을 나타내는 문서를 추가했습니다. (I45f09, b/152842521)

  • ProvideContentColor를 삭제했습니다. 대신 Providers와 함께 ContentColorAmbient를 사용하세요. (Iee942)

  • 텍스트에 색상 매개변수를 추가하여 테마에 제공된 스타일과 수동으로 병합하지 않고도 텍스트 스타일의 색상을 재정의할 수 있습니다. (I41a66)

  • 다음과 같이 DrawModifier API가 개선됩니다.

    • draw()의 수신기 범위를 ContentDrawScope로 설정했습니다.
    • draw()의 모든 매개변수를 삭제했습니다.
    • DrawScope는 이전 CanvasScope와 동일한 인터페이스를 사용합니다.
    • ContentDrawScope는 drawContent() 메서드를 사용합니다. (Ibaced, b/152919067)
  • ColoredRect가 지원 중단되었습니다. 대신 Box(Modifier.preferredSize(width, height).drawBackground(color))를 사용하세요. (I499fa, b/152753731)

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

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

  • 드래그 가능 항목을 수정자로 이동했습니다. (Id9b16, b/151959544)

  • Text를 androidx.ui.core에서 androidx.ui.foundation 패키지로 이동했습니다. (I87ce5)

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

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

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

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

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

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

  • Image 데이터와 레이아웃에 참여하고 콘텐츠를 그리는 데 사용되는 예정된 Image 컴포저블 사이의 차이를 더 잘 구분하기 위해 Image 이름을 ImageAsset으로 변경했습니다.

    기존 Android 애플리케이션 개발을 작성 프레임워크와 결합하는 데 유용한 ImageAsset 인스턴스를 만들 수 있도록 android.graphics.Bitmap Bitmap.asImageAsset()에서 확장 메서드를 만들었습니다. (Id5bbd)

  • DrawImage 컴포저블이 삭제되었습니다. 기존 레이아웃에 이미지를 그릴 때는 ImagePainter를 사용하고, 공간을 차지하는 이미지를 넣을 때는 SimpleImage를 사용하세요. (I595e1, b/149827027).

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

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

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

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

  • 스크롤 가능한 구성요소가 추가되어 맞춤 스크롤러/목록을 만들 수 있습니다. (I5fd37)

  • 자연스럽게 기억할 수 있도록 background의 이름을 DrawBackground로 변경했습니다. (Ia0bd3)

  • 패딩, 테두리, 모양, 배경 매개변수가 Box에 추가됩니다. (I05027, b/148147281)

  • Canvas 구성요소를 추가했습니다. 크기(사용자가 제공함)를 일부 차지하는 이 컴포저블은 CanvasScope를 사용한 그리기를 허용합니다. (I0d622)

  • Border 수정자의 이름이 DrawBorder로 변경됩니다. (I8ffcc)

  • 레이아웃과 그리기 공통 기능을 결합하기 위한 Box 구성요소를 추가했습니다. (I6e2a7)

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

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

  • Modifier.tag는 Modifier.testTag와 혼동을 피하고자 Modifier.layoutId로 이름이 바뀌었습니다. (I995f0)

  • ConstraintLayout 가이드라인을 만들 때 비율 매개변수의 이름이 분수로 변경되었습니다. (Ida2db)

  • ConstraintLayout 배리어의 여백 지원이 추가되었습니다. (I47ffe)

  • ConstraintLayout의 RTL 지원이 수정되었습니다. RTL을 인식하지 못하는 API가 추가되었습니다. (I3b1c7)

  • ConstraintLayout을 위한 새 DSL이 추가되었습니다. 자세한 내용은 샘플을 참조하세요. (Icaa9a)

  • @ExperimentalLayout 주석이 추가되었습니다. 이제 ConstraintLayout, FlowRow 및 FlowColumn을 이 주석으로 태그하여 API가 변경될 예정인 것을 표시합니다. (I412a8)

  • Modifier.padding(InnerPadding)이 추가되었습니다. (I94985, b/157133803)

  • Row 및 Column에서 지원 중단된 RowAlign, ColumnAlign이 삭제되었습니다. (If60d4, b/155858731)

  • 지원 중단된 LayoutTag()를 삭제했습니다. 대신 Modifier.tag()를 사용하세요. 지원 중단된 Modifier.matchParent()를 삭제했습니다. 대신 Modifier.matchParentSize()를 사용하세요. (If8044)

  • (동적) 오프셋(단위: px)을 정의하는 데 사용할 수 있는 offsetPx 레이아웃 수정자가 추가되었습니다. (I5af57)

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

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

  • Container가 삭제되었습니다. 대신 Box를 사용하세요. (Ibbc2b, b/151407926)

  • 지원 중단된 LayoutWidth/Height/Size 수정자가 삭제되었습니다. (Ib0bc1)

  • 오프셋 수정자의 기본 매개변수 값을 추가했습니다. (I37f06)

  • 대칭 패딩 수정자를 추가했습니다. (I39840)

  • 지원 중단된 LayoutAspectRatio 수정자를 삭제했습니다. (I65a74)

  • 지원 중단된 LayoutAlign 수정자를 삭제했습니다. (I10877)

  • 반대 축 제약 조건 없이 래핑된 레이아웃을 측정하게 했던 너비 및 높이 수정자의 버그를 수정했습니다. (I210b8, b/154797971)

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

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

  • 정렬을 임의의 값으로 인스턴스화할 수 있게 만들었습니다. 1D 정렬을 추가했습니다. (Ia0c05)

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

  • 이제 alignToSiblings는 Placeable이 아닌 Measured를 허용합니다. (I5788d)

  • 내장된 측정에 크기 조정을 위한 수정자를 추가하고 이 목적으로 사용되는 구성요소를 지원 중단했습니다. (I8295d)

  • ConstraintLayout의 하위 요소에 관한 맞춤 측정기준을 위한 지원을 추가했습니다. (Idb1a5)

  • 지원 중단된 Wrap 및 Center 컴포저블을 삭제했습니다. (I29e23)

  • 레이아웃 수정자를 정의하는 새 API인 LayoutModifier2를 추가했으며, LayoutModifier를 지원 중단했습니다. (If32ac)

  • 행 및 열 외부에서 RowScope 및 ColumnScope 멤버에 액세스할 수 있습니다. (I3a641)

  • Container가 지원 중단되었습니다. 대신 Box를 사용하세요. (I675ce, b/151407926)

  • 레이아웃 위치 오프셋을 위한 LayoutOffset 수정자를 추가했습니다. (I0b8a3)

  • 작성 레이아웃에서 RTL을 최초로 지원합니다. (Ia5519)

  • 더 이상 사용 가능한 공간을 채우지 않도록 LayoutAlign을 업데이트했습니다. (I2b14f)

  • AspectRatio 컴포저블을 삭제하고 수정자로 대체했습니다. 더 이상 사용되지 않는 FlexColumn, FlexRow 컴포저블 및 Spacing 수정자를 삭제했습니다. (Iec8a7)

  • Row 및 Column의 LayoutInflexible 수정자를 삭제했습니다. (I0d820)

  • TextField Selection을 변경할 수 있는 드래그 선택 핸들이 구현됩니다. (I27032)

  • TextField Selection을 위한 LongPressAndDrag가 구현되었습니다. (I17919)

버그 수정

  • FocusModifier는 지원 중단되고 Modifier.focus, Modifier.focusRequester, Modifier.focusObserver로 대체되었습니다. FocusState 및 FocusDetailedState가 지원 중단되고 FocusState2로 대체되었습니다. (I46919, b/160822875, b/160922136)
  • runOnIdleCompose 이름을 runOnIdle로 바꿨습니다. (I83607)
  • 여러 테스트 API의 이름이 더 직관적으로 바뀌었습니다. 모든 findXYZ API의 이름이 onNodeXYZ로 바뀌었습니다. 모든 doXYZ API의 이름이 performXYZ로 바뀌었습니다. (I7f164)
  • 이전에 지원 중단된 Modifier.ripple을 삭제합니다. 이제 clickable이 ripple을 기본 표시로 사용하므로(애플리케이션에 MaterialTheme {} 세트가 있는 경우) 대부분의 경우 clickable을 사용하여 자유롭게 ripple 표시를 가져올 수 있습니다. ripple의 색상/크기/제한 매개변수를 맞춤설정해야 한다면 수동으로 RippleIndication을 만들어 표시 매개변수로 clickable에 전달하면 됩니다. (I663b2, b/155375067)
  • 더 이상 사용되지 않는 크기 테스트 API를 삭제했습니다. (Iba0a0)
  • LayoutNode 실험용 API가 제작되었습니다. (I4f2e9)
  • Compose에서 스크롤 방향 잠금의 버전 1이 구현되었습니다. (I1ce7a, b/150289741)
  • 이제 팝업, 대화상자 및 메뉴는 상황별 MaterialTheme를 상속합니다. (Ia3665, b/156527485)
  • Layout() 함수의 측정 블록에서 레이아웃 방향 매개변수를 삭제했습니다. 하지만 레이아웃 방향은 측정 범위 객체를 통해 콜백 내에서 사용할 수 있습니다. (Ic7d9d)
  • AbsoluteArrangement가 추가됩니다. 이 항목을 사용하면 RTL에서 자동 미러링 없이 Row 내에서 하위 요소를 정렬할 수 있습니다. (I3a1df)
  • @Untracked 주석이 지원 중단되었습니다. @ComposableContract(tracked=false)를 대신 사용하세요. (Id211e)
  • 이 변경 전에 Compose 컴파일러 플러그인은 @Composable 함수 내에 있는 생성자 호출(있는 경우)을 특별한 방식으로 가로챘습니다. (I5205a, b/158123804)
  • Activity 또는 Fragment에서 작동하는 방식과 유사하게 ViewModel을 만들거나 이미 만들어진 ViewModel을 가져올 수 있는 viewModel() 컴포저블이 추가되었습니다. (I5fdd1)
  • 반경 클래스를 인라인 클래스로 리팩터링했습니다. y축의 반경이 필수 x축 반경 매개변수의 반경과 일치하도록 컴패니언 생성 메서드가 삭제되고 기본 매개변수가 있는 함수 생성자로 대체되었습니다.

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

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

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

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

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

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

  • 부분 동작이 더 이상 GestureToken을 전달할 필요가 없습니다. (Id7ae5)

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

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

  • AnnotatedString.Builder.addAnnotationString의 이름을 addStringAnnotation으로 바꿨습니다. (I5059e)

  • Alignment API가 업데이트되고 절대 정렬을 위한 지원이 추가되었습니다(Rtl 컨텍스트에서 자동으로 미러링되지 않음). (I38cd3)

  • Layout 및 LayoutModifier 하위 요소는 다른 레이아웃 방향으로 측정될 수 있습니다. (Ibd731)

  • 기본 ImageAsset의 하위 섹션 그리기를 지원하기 위해 rect 매개변수(선택사항)가 ImagePainter에 추가로 도입됩니다. (I0ea9e)

  • 항목을 삭제할 때 AdapterList에서 발생하는 비정상 종료 문제를 수정했습니다. (Ic64b0, b/153195921)

  • activity.setContent { } 블록에 배치하는 첫 번째 레이아웃을 측정하는 방법을 변경했습니다. 이전에는 전체 활동 화면을 채워야 했지만 이제는 스택에 레이아웃을 배치한 것처럼 동작합니다. 즉, 레이아웃이 화면보다 작을 수 있으며 화면 왼쪽 상단에 배치됩니다. 이전 동작을 사용하려면 레이아웃에 Modifier.fillMaxSize()를 적용하면 됩니다. (Ie88a7, b/153453714)

  • 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)

  • 이제 runOnIdleComposerunOnUiThread는 ComposeTestRule의 메서드가 아닌 전역 함수입니다. (Icbe8f)

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

  • 이제 DrawLayerModifier 및 drawLayer()는 clipToBounds 및 clipToOutline의 기본값을 false로 설정합니다. (I0eb8b, b/152810850)

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

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

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

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

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

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

  • 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)

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

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

  • Painter.toModifier 이름이 Painter.asModifier로 변경됩니다. 새로 만든 Modifier에는 여러 Modifier 인스턴스에서 공유할 수 있는 원래 Painter에 관한 참조가 있기 때문입니다. (I7195b)

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

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

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

  • ValueHolder 클래스가 삭제되었습니다. 애니메이션 값 필드를 추상적으로 만들어 서브클래스에 값 업데이트가 표시될 수 있도록 AnimatedValue 및 AnimatedFloat 클래스를 재구성했습니다.

    • AnimatedValue, AnimatedFloat 등의 모델 클래스가 추가되었습니다.
    • 값 사이에 애니메이션을 적용하기 위한 새로운 경량 Composable API 세트를 추가했습니다.
    • (I79530)
  • ambients API에 브레이킹 체인지가 있습니다. 자세한 내용은 로그와 Ambient<T> 문서를 참조하세요. (I4c7ee, b/143769776)

  • 이제 Placeable#get(AlignmentLine)에서 반환된 정렬 행 Int 위치는 null이 아닙니다. 쿼리된 정렬 행이 없으면 AlignmentLine.Unspecified가 반환됩니다. (I896c5, b/158134875)

  • 재구성에 비정상 종료를 일으키는 ConstraintLayout 버그가 수정되었습니다. (Ibee5a, b/158164341)

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

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

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

  • LayoutDirectionAmbient가 지원 중단되었습니다. 언어로 정의된 레이아웃 방향을 읽으려면 ConfigurationAmbient에 localeLayoutDirection을 사용하세요. (I851b1)

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

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

  • OnPositioned 및 OnChildPositioned 구성 가능 함수를 대체할 OnPositionedModifier 및 OnChildPositionedModifier가 추가됩니다. (I2ec8f)

  • LayoutPadding에는 음수 패딩이 허용되지 않습니다. 음수 위치 오프셋을 위해서는 대신 LayoutOffset을 사용해야 합니다. (Ifb5b1)

  • withConstraints에 LayoutDirection 매개변수가 있습니다. (I6d6f7)

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

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

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

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

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

  • TextDirection.Content가 추가되었습니다. (I48f36)

  • 복사, 잘라내기, 붙여넣기를 올바르게 표시하기 위해 툴바 메뉴가 조정됩니다. (Id3955)

  • TextField Selection을 위한 FloatingToolbar가 추가됩니다. (Ie8b07)

  • TextDirectionAlgorithm의 이름이 TextDirection으로 바뀌었습니다. (I75ce8)

  • TextDirection의 이름이 ResolvedTextDirection으로 변경되었습니다. (I3ff38)

  • TextField Selection에 HapticFeedback이 추가됩니다. (I58050)

  • TextField Selection에 복사, 잘라내기 및 붙여넣기 메서드가 추가됩니다. (Idb70b)

  • TestTag와 Semantics가 삭제되었습니다. 대신 Modifier.testTag 및 Modifier.semantics를 사용하세요. (I15ff0, b/158841414)

  • Locale 및 LocaleList의 패키지 이름을 androidx.ui.text에서 androidx.ui.intl로 변경했습니다. (I8132c)

  • API 변경: AnnotatedString(builder: Builder)의 이름이 annotatedString(builder: Builder)로 변경되었습니다. (Ia6377)

  • API 변경: AnnotatedString.Item의 이름이 AnnotatedString.Range로 변경되었습니다. (I2d44d)

  • 텍스트 관련 작업을 위한 툴바가 추가됩니다. (I49d53)

  • 새로운 LifecycleOwnerAmbient를 사용할 수 있습니다. 이제 Compose UI와 함께 사용 중인 활동이 androidx.activity.ComponentActivity(또는 AppCompatActivity)를 확장합니다. android.app.Activity의 setContent가 이제 지원 중단되었습니다. (Idb25a, b/153141084)

  • androidx 정책에 맞도록 ui-android-text 패키지 이름(androidx.text)을 androidx.ui.text.platform으로 변경했습니다. (I42711)