Compose UI

레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.
최근 업데이트 안정화 버전 출시 후보 버전 베타 버전 알파 버전
2024년 3월 20일 1.6.4 - - 1.7.0-alpha05

구조

Compose는 androidx 내의 Maven 그룹 ID 7개의 조합입니다. 각 그룹에는 타겟팅된 기능의 하위 집합이 있으며, 각 기능은 자체적인 출시 노트를 포함하고 있습니다.

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

그룹설명
compose.animationJetpack Compose 애플리케이션에서 애니메이션을 빌드하여 풍부한 사용자 경험을 제공합니다.
compose.compilerKotlin 컴파일러 플러그인으로 최적화를 사용 설정하고 @Composable 함수를 변환합니다.
compose.foundation즉시 사용 가능한 구성요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 기초를 확장해 나만의 디자인 시스템 요소를 빌드합니다.
compose.material즉시 사용 가능한 Material Design 구성요소로 Jetpack Compose UI를 빌드합니다. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다.
compose.material3차세대 Material Design인 Material Design 3 구성요소로 Jetpack Compose UI를 빌드합니다. Material 3은 업데이트된 테마 설정 및 구성요소, Material You 맞춤설정 기능(동적 색상 등)을 포함하며 새로운 Android 12의 시각적 스타일 및 시스템 UI와 일관되도록 설계되었습니다.
compose.runtimeCompose의 프로그래밍 모델과 상태 관리를 위한 기본 구성요소이며, Compose 컴파일러 플러그인이 타겟팅하는 핵심 런타임입니다.
compose.ui레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.

종속 항목 선언

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

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

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.6.4"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.6.4")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.11"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

의견

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

새로운 문제 제출하기

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

버전 1.7

버전 1.7.0-alpha05

2024년 3월 20일

androidx.compose.ui:ui-*:1.7.0-alpha05가 출시되었습니다. 버전 1.7.0-alpha05에 포함된 커밋을 확인하세요.

새로운 기능

  • 표시 목록에 그리기 명령어와 표시 목록의 렌더링에 영향을 미치는 추가 속성을 기록하는 새 GraphicsLayer API를 도입했습니다. 이는 전체 장면을 다시 만들지 않고도 복잡한 장면을 서로 개별적으로 업데이트할 수 있는 작은 조각으로 분할하는 격리 경계를 제공합니다. GraphicsLayer에 실행된 변환은 표시 목록을 다시 기록하지 않고도 실행할 수 있습니다. Modifier.graphicsLayer와 달리 GraphicsLayer는 다른 곳에 컴포저블 콘텐츠를 렌더링할 수 있으며 콘텐츠가 여러 장면에서 렌더링될 것으로 예상되는 애니메이션 사용 사례에 유용합니다.

API 변경사항

  • GraphicsLayer.draw(Canvas)는 더 이상 공개 API가 아닙니다. 대신 DrawScope.drawLayer(GraphicsLayer) 확장 함수를 사용하여 레이어를 그리세요. 추가했습니다. (I7a7c0)
  • restrictedConstraints()fitPrioritizingWidth()fitPrioritizingHeight()의 두 메서드로 분할했습니다. (I6d7fd)
  • Android L 사용을 위한 HardwareCanvas 스텁을 도입했습니다. (I1c3b5, b/288494724)
  • 소유자, DelegateableNode, drawWithCache 수정자 구현 업데이트와 함께 GraphicsContext 컴포지션 로컬을 노출하도록 Compose 프레임워크를 업데이트하여 수정자가 해제될 때 GraphicsLayer 인스턴스를 자동으로 정리하는 범위 지정 액세스를 위해 GraphicsContext에 대한 액세스 권한을 노출합니다. 추가했습니다. (I64a2f, b/288494724)
  • 하위 수준 IME 관련 테스트 및 기타 하위 수준 IME 사용 사례를 작성하는 데 도움이 되도록 InterceptPlatformTextInput를 도입했습니다. PlatformTextInputTestOverride가 지원 중단되었습니다. 추가했습니다. (I862ed, b/322680547)
  • GraphicsLayer.setOutline(Outline) 확장 함수를 추가했습니다. 추가했습니다. (Ib81f4)
  • GraphicsContext 함수 생성자를 도입하여 GraphicsLayer 인스턴스를 만드는 팩토리를 만듭니다. (Ib98d6, b/288494724)
  • 다른 곳에 그리는 데 사용할 수 있는 그리기 명령어를 캡처하는 데 있어 개발자가 정의한 유연성을 제공하고 최종 결과에 다양한 시각 효과를 적용할 수 있도록 GraphicsLayer API를 노출했습니다. 추가했습니다. (I80245, b/288494724)
  • 지정된 직사각형 영역에 속하는 텍스트 범위를 반환하는 Paragraph#getRangeForRect를 도입합니다. 추가했습니다. (Iee516, b/325660505)
  • onLinkClicked 인수가 있는 BasicText의 실험용 재정의를 삭제했습니다. 향후 하이퍼링크 지원을 위한 대체 API가 출시될 예정입니다. 추가했습니다. (I107d5)

버그 수정

  • 선택적 합성 시각 효과와 변환을 사용하여 그리기 명령어의 캡처와 재생을 지원하는 GraphicsLayer 예상/실제 API 정의를 추가했습니다. GraphicsLayer 인스턴스 생성 및 관리를 포함한 그래픽 종속 항목을 포함하는 GraphicsContext 인터페이스를 도입했습니다. 추가했습니다. (I4a8d6, b/288494724)
  • 다른 뷰 사이에 삽입된 ComposeView 내부에서 포커스가 멈추는 1D 포커스 검색의 상호 운용성 문제를 해결했습니다. 추가했습니다. (I08fd4)

외부 기여

  • Compose UI 외부에서 Compose 기반 도우미 API를 사용할 수 있도록 LocalLifecycleOwner가 Compose UI에서 lifecycle-runtime-compose로 이동했습니다. 도움을 주신 제이크 와튼에게 감사드립니다. 추가했습니다. (I6c41b, b/328263448)
  • 모든 바이어스 기반 정렬 하위유형에 바이어스 부동 소수점 속성을 일관되게 노출합니다. 추가했습니다. (I69f0f, b/328088992)

버전 1.7.0-alpha04

2024년 3월 6일

androidx.compose.ui:ui-*:1.7.0-alpha04가 출시되었습니다. 버전 1.7.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • Android U 이후 기기에서 BasicTextField2의 스타일러스 필기 입력 기능을 지원합니다. 추가했습니다. (I002e4)
  • 이 CL에서는 Compose에서 스크롤되고 있는 구성요소에 관한 정보를 a11y 시스템으로 파이핑할 수 있도록 GetScrollViewportLength 시맨틱 작업을 추가합니다. 이 CL은 기반 스크롤 가능 목록에서 해당 속성의 사용도 적용합니다. 추가했습니다. (Ic5fa2)
  • 이제 FocusRequester.createRefs가 안정화되었습니다. (I4d92c, b/261436820)
  • 수정자 노드가 컴포지션 로컬을 읽지 않고도 현재 Android View를 가져올 수 있도록 DelegatableNode.requireView()를 도입했습니다. 추가했습니다. (I40768)
  • 경로 방향을 역전하는 새로운 API Path.reverse()를 추가했습니다. (I36348)
  • 특정 언어로 IME에 기본 언어를 미리 설정하는 기능을 TextFields에 제공하기 위해 KeyboardOptionshintLocales를 추가했습니다.
  • 기본 플랫폼 객체를 반환하는 LocaleplatformLocale 속성(예: java.util.Locale)을 노출합니다. 추가했습니다. (I921c6)

버전 1.7.0-alpha03

2024년 2월 21일

androidx.compose.ui:ui-*:1.7.0-alpha03가 출시되었습니다. 버전 1.7.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • ContextualFlowRow 및 MaxLines 및 Overflow를 사용한 향상된 FlowRow/Column를 소개합니다. ContextualFlowRowContextualFlowColumn의 출시와 함께 maxLines와 오버플로 지원이 포함된 실험용 FlowRowFlowColumn의 개선사항을 발표하게 되어 기쁩니다. 이 업데이트는 성능에 최적화된 구성요소를 제공하도록 설계되었습니다. 여기서 ContextualFlow*는 작은 maxLines 구성 및 동적 +N 더보기 버튼을 사용하는 많은 수의 항목에 적합하고 FlowRowFlowColumn는 100개 미만의 적은 수의 항목에 적합합니다. 중요: 교차 축 최댓값에 관계없이 모든 항목이 구성된 FlowRow 또는 FlowColumn에서 기존 동작을 유지하려면 초기화 중에 overflowFlowRowOverflow.Visible 또는 FlowColumnOverflow.Visible로 설정하세요. ContextualFlowRowSampleFlowRowSample에서 이러한 새 기능의 실제 작동 예를 살펴보세요. 추가했습니다. (Ib9135, b/293577082)
  • 최대 허용 문자 수를 필터링하는 텍스트 필드에 설정해야 하는 maxTextLength 시맨틱 속성을 추가합니다. 추가했습니다. (I24d9f, b/170648072)
  • Modifier.inspectable 래퍼가 지원 중단되었습니다. 이 API는 필요한 것보다 더 많은 수정자를 무효화하므로 사용하지 않는 것이 좋습니다. 개발자가 수정자 속성을 도구에 노출하려면 ModifierNodeElement에서 inspectableProperties() 메서드를 구현하는 것이 좋습니다. 추가했습니다. (Ib3236)
  • WindowManager.LayoutParams 플래그를 완전히 제어할 수 있는 PopupProperties의 새로운 생성자입니다. 추가했습니다. (Ibb33e, b/312485503)
  • onPlaced를 재정의하고 좌표를 속성에 직접 저장하지 않고도 Modifier.Node의 현재 LayoutCoordinates를 가져오는 방법으로 DelegatableNode.requireLayoutCoordinates()를 도입했습니다. 추가했습니다. (Ia8657)
  • onPlaced를 재정의하고 좌표를 속성에 직접 저장하지 않고도 Modifier.Node의 현재 LayoutCoordinates를 가져오는 방법으로 DelegatableNode.currentLayoutCoordinates를 도입했습니다. (이아에바)
  • BasicTextField2androidx.compose.foundation.text2 패키지 아래의 관련 API를 androidx.compose.foundation.text로 이동했습니다. 추가했습니다. (I9f635)
  • 명시적 수정자 노드에서 맞춤 접근 로직 생성을 지원하는 새 ApproachLayoutModifierNode API를 추가했습니다. 또한 인스턴스화 시 타겟을 알 수 없는 애니메이션을 위한 새로운 실험용 DeferredTargetAnimation API를 추가했습니다. 추가했습니다. (I60745)
  • 새로운 Path API를 사용하여 경로의 방향을 쿼리하고 Path에서 윤곽을 추출합니다. 추가했습니다. (I63d04)
  • Path에 특정 점이 포함되어 있는지 확인하기 위해 PathHitTestPath.contains(Offset)를 추가했습니다. 추가했습니다. (I3b218)
  • 이제 TextLayoutResultgetLineBaseline(lineIndex) 메서드를 노출합니다. 이렇게 하면 기존의 편의 속성 firstBaselinelastBaseline 외에도 임의의 텍스트 줄의 기준선을 읽을 수 있습니다. 추가했습니다. (Ide4e8, b/237428541)
  • AnnotatedStrings의 주석만 비교하는 메서드를 추가했습니다. 추가했습니다. (I32659)

버그 수정

  • SemanticsPropertyReceiver.performImeActionSemanticsActions.PerformImeAction와의 이전 버전과의 호환성 문제가 수정되었습니다. 추가했습니다. (Id0528, b/322269946)

버전 1.7.0-alpha02

2024년 2월 7일

androidx.compose.ui:ui-*:1.7.0-alpha02가 출시되었습니다. 버전 1.7.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • SemanticsPropertyReceiver.performImeAction의 바이너리 호환성 문제가 해결되었습니다. 추가했습니다. (I65865, b/322269946)
  • usePlatformDefaultWidth 매개변수를 사용하는 PopupProperties 생성자가 더 이상 실험용이 아닙니다. 추가했습니다. (I8f8d2)
  • 시간 제한 메시지에 포함할 조건의 문자열 설명을 가져오는 ComposeTestRule.waitUntil의 오버로드를 추가했습니다. 추가했습니다. (I9413e)
  • 동일한 수정자 체인에 추가된 시맨틱 속성을 삭제하는 새 시맨틱 API unset() 새 시맨틱 속성 isOpaque 추가했습니다. (I8c583, b/317966058, b/246056649)
  • PointerInputChange의 공개 API의 복사 메서드에서 originalEventPosition를 삭제했습니다. 추가했습니다. (I7bead)

버그 수정

  • 선택 시 탭이 아닌 버튼과 비라디오 버튼을 클릭할 수 있는 a11y 버그를 수정했습니다. 추가했습니다. (I2181c)
  • 이제 VelocityTracker에서 기본적으로 지점을 추가하는 수정사항이 있습니다. 문제가 있는 경우 VelocityTrackerAddPointsFix를 false로 설정하면 수정사항을 사용 중지할 수 있습니다. 추가했습니다. (Ib3877, b/269487059)
  • TextStyleParagraphStyle의 하위 바이너리 비호환성 문제가 수정되었습니다. 추가했습니다. (I179f0, b/320819734)

외부 기여

  • 플랫폼별 매개변수가 없는 새 DialogProperties 생성자가 추가되었습니다. 추가했습니다. (I45829)
  • 플랫폼별 매개변수가 없는 새 PopupProperties 생성자가 추가되었습니다. 추가했습니다. (I9a038)

버전 1.7.0-alpha01

2024년 1월 24일

androidx.compose.ui:ui-*:1.7.0-alpha01가 출시되었습니다. 버전 1.7.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 이미지와 같은 임의의 콘텐츠를 지원하기 위해 ClipEntryClipMetadata를 추가하여 ClipboardManager를 확장했습니다.
  • 사용 가능한 크기, 언어, 레이아웃 방향, 글꼴 크기 또는 테마를 지정하는 등 테스트 중인 콘텐츠의 동작을 로컬에서 재정의할 수 있도록 ui-testDeviceConfigurationOverride API를 추가합니다.

버전 1.6

버전 1.6.4

2024년 3월 20일

androidx.compose.ui:ui-*:1.6.4가 출시되었습니다. 버전 1.6.4에 포함된 커밋을 확인하세요.

버전 1.6.3

2024년 3월 6일

androidx.compose.ui:ui-*:1.6.3가 출시되었습니다. 버전 1.6.3에 포함된 커밋을 확인하세요.

버전 1.6.2

2024년 2월 21일

androidx.compose.ui:ui-*:1.6.2가 출시되었습니다. 버전 1.6.2에 포함된 커밋을 확인하세요.

버전 1.6.1

2024년 2월 7일 androidx.compose.ui:ui-*:1.6.1이 출시되었습니다. 버전 1.6.1에 포함된 커밋을 확인하세요.

버그 수정

  • SemanticsPropertyReceiver.performImeActionSemanticsActions.PerformImeAction와의 이전 버전과의 호환성 문제가 수정되었습니다. 추가했습니다. (Ie0bb2, b/322269946)
  • 이제 레이아웃에서 비정상적으로 큰 크기를 반환하는 경우 측정할 때 오류가 발생합니다. 이러한 유형의 오류는 일반적으로 측정에서 Constraints.Infinity를 확인하지 않고 직접 최대 제약 조건을 사용할 때 발생합니다. 이 검사는 개발자가 레이아웃이 포함된 레이아웃이 아닌 잘못된 크기의 레이아웃 문제를 찾는 데 도움이 됩니다. 추가했습니다. (I339a9)

버전 1.6.0

2024년 1월 24일

androidx.compose.ui:ui-*:1.6.0가 출시되었습니다. 버전 1.6.0에 포함된 커밋을 확인하세요.

버전 1.6.0-rc01

2024년 1월 10일

androidx.compose.ui:ui-*:1.6.0-rc01가 출시되었습니다. 버전 1.6.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • 추가 리컴포지션을 최소화하여 성능을 개선하도록 벡터 그래픽 구현을 최적화했습니다.

버전 1.6.0-beta03

2023년 12월 13일

androidx.compose.ui:ui-*:1.6.0-beta03가 출시되었습니다. 버전 1.6.0-beta03에 포함된 커밋을 확인하세요.

새로운 기능

  • 이제 노드를 분리하지 않고도 LayoutCoordinates를 분리할 수 있습니다. Compose Layout Inspector에서 이를 방지합니다. (If693)

버그 수정

  • PlatformImeOptions는 이제 인터페이스가 아닌 구체적인 클래스입니다. 추가합니다. (If40a4)
  • 루트가 재구성될 때마다 새 값이 제공되는 LocalSoftwareKeyboardControllerLocalTextInputService로 인해 발생하는 추가 다운스트림 리컴포지션이 수정되었습니다. 추가했습니다. (I42190, b/310510985)

버전 1.6.0-beta02

2023년 11월 29일

androidx.compose.ui:ui-*:1.6.0-beta02가 출시되었습니다. 버전 1.6.0-beta02에 포함된 커밋을 확인하세요.

버전 1.6.0-beta01

2023년 11월 15일

androidx.compose.ui:ui-*:1.6.0-beta01가 출시되었습니다. 버전 1.6.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 DragAndDropTarget 수정자는 DragAndDropTarget 수신을 명시적으로 가져오고 드래그 앤 드롭 세션을 선택하는 람다를 포함합니다. 이제 DragAndDropModifierNode의 팩토리 함수가 두 개 있습니다. 하나는 전송 수신용, 다른 하나는 데이터 전송용입니다. (I69481)
  • maximumFlingVelocity가 부동으로 표시되도록 업데이트했습니다. maximumFlingVelocity 단위에 관해 더 명확하게 이해할 수 있도록 문서를 업데이트했습니다. 추가했습니다. (I8adc7)
  • DragAndDropModifierNode 팩토리의 onDragAndDropStart 이름이 acceptDragAndDropTransfer로 변경되었습니다.드래그 앤 드롭 세션에서 수락하도록 acceptsDragAndDropTransferdragAndDropTarget 수정자에 추가했습니다. 이 람다는 드래그 앤 드롭 세션에 관심이 있는 경우 실행 가능한 DragAndDropTarget를 반환합니다. 드래그 이벤트 처리를 위한 다른 람다를 이 메서드로 대체했습니다. 드래그 앤 드롭 세션에서 수신하는 DragAndDropTarget 팩토리 함수가 추가되었습니다. (Iebf3a)
  • DragAndDropModifierNode.drag 유형이 이제 transferData, 장식 크기, 드래그 장식 DrawScope 람다의 매개변수를 사용하므로 DragAndDropInfo를 삭제했습니다.

    DragAndDropTarget에는 단일 추상 메서드가 아닌 특정 드래그 앤 드롭 이벤트를 위한 메서드가 있습니다.

    제공된 DragAndDropTarget가 지정된 드래그 앤 드롭 세션에만 유효함을 더 잘 전달하기 위해 DragAndDropModifierNode의 팩토리 함수에서 onDragAndDropEvent의 이름을 onDragAndDropStart로 바꾸었습니다.

    DragAndDropEventType를 삭제했습니다. (I645b1)

  • PlatformTextInputModifierNode.runTextInputSession의 이름이 establishTextInputSession로 변경되었습니다. 추가했습니다. (I03cd0)

  • 순회 가능한 노드 API 이름을 개선하여 더 이해하기 쉽게 만듭니다. 추가했습니다. (Ia4474)

  • OriginalTextTextSubstitution로 바꿉니다. 추가합니다. (Ifa5a8)

  • PlatformTextInputModifierNode.textInputSession에서 runTextInputSession으로 이름이 변경되었습니다. 추가했습니다. (Ie9c6b)

  • SubcomposeLayout의 하위 요소 (및 이 하위 요소를 기반으로 하는 LazyColumn와 같은 레이아웃)는 비활성화된 것으로 간주됩니다. 이러한 노드를 테스트하기 위해 새로운 assertIsDeactivated() 테스트 API가 도입되었습니다. 테스트 API의 나머지 부분은 기본적으로 비활성화된 노드를 필터링합니다. 추가했습니다. (I2ef84, b/187188981)

  • FocusDirection.InFocusDirection.Out를 삭제하고 대신 FocusDirection.EnterFocusDirection.Exit를 사용합니다. (I2f660)

  • 이제 Material SwipeToReveal API (카드 및 칩용)가 데이터 클래스 기반 인스턴스 대신 슬롯 기반 API (Compose에서 권장)를 사용하여 이러한 슬롯을 만듭니다. 브레이킹 체인지입니다. 새 API 사용 방법에 관한 예는 데모 및 샘플 코드를 참고하세요. 추가했습니다. (Ia8943)

  • FontStyle(int) 생성자가 지원 중단되었습니다. 대신 FontStyle.Normal 또는 FontStyle.Italic를 사용하세요. 추가했습니다. (I66610)

  • FontScalable 인터페이스의 이름을 FontScaling로 바꿨습니다. (Ie804a)

버그 수정

  • 텍스트 편집기에 포커스가 없으면 SoftwareKeyboardController.show()에 더 이상 소프트웨어 키보드가 표시되지 않습니다. 추가했습니다. (I2165a, b/301477279)
  • 이제 동일한 Compose 뷰에서 Down 이벤트를 수신하지 않은 키의 하드웨어 키 위로 이벤트가 무시됩니다. 추가했습니다. (Ib37b4, b/305518328)
  • ArcLine에 스윕 그라데이션의 렌더기 지원을 추가합니다. 추가했습니다. (I4d5bb)
  • PageSize.Fixed에 등호 및 해시코드를 구현합니다. 추가했습니다. (Ie3ede, b/300134276)
  • 창 인셋 변경과 관련된 바이너리 호환성 문제를 수정했습니다. (Iee695)
  • Material3 칩/버튼의 Material Core 레이어를 삭제했습니다. 이 레이어가 없을 경우 Microbenchmark가 더 나은 성능을 보여주므로 추가했습니다. (I55555)
  • 이제 Compose 테스트에 effectContext로 전달된 TestDispatcher가 테스트 및 프레임 클록을 만드는 데 사용됩니다. 추가했습니다. (Ia7178)

버전 1.6.0-alpha08

2023년 10월 18일

androidx.compose.ui:ui-*:1.6.0-alpha08가 출시되었습니다. 버전 1.6.0-alpha08에 포함된 커밋을 확인하세요.

API 변경사항

  • Modifier.dragAndDrawSource에서 onDrawDragShadow 람다의 이름이 drawDragDecoration로 바뀌었으며 DragAndDropInfo의 크기 매개변수 이름이 dragDecorationSize로 변경되었습니다. 추가했습니다. (Id0e30, b/303904810)
  • SemanticsNodeInteraction.isDisplayed()SemanticsNodeInteraction.isNotDisplayed()를 도입하여 일치하는 노드가 표시되는지 여부를 확인합니다. 이때 어설션도 하지 않습니다. 추가했습니다. (I2c196, b/302100809)
  • null를 대체하기 위해 ParagraphTextStyleTextAlign, TextDirection, Hyphens, LineBreak 필드에 특별한 Unspecified 값을 도입했습니다. 이러한 클래스는 인라인 클래스이므로 nullable을 Unspecified로 대체하여 원시 유형 박싱을 피합니다. 언급된 매개변수를 null이 아닌 유형으로 허용하도록 TextStyle 및 단락 스타일의 생성자, getter 및 기타 메서드를 업데이트했습니다. 추가했습니다. (I4197e, b/299490814)
  • XML에서 GoogleFont를 읽는 GoogleFont 오버로드를 추가합니다. 추가합니다. (If8f59)
  • LoremIpsum PreviewParameterProvider을(를) 공개 클래스로 만들었습니다. 추가했습니다. (I41bf5, b/266918816, b/300116360)

버그 수정

  • FontFamilyResolver는 이제 캐시 관리 코루틴에 Dispatchers.Main를 사용합니다. 추가했습니다. (Ie8dd9)
  • 이제 AndroidViewBinding는 이전에 사용하던 commit 대신 commitNow를 사용하여 onRelease의 일부로 레이아웃에 FragmentContainerView를 포함하여 확장된 Fragment 인스턴스를 동기식으로 삭제합니다. 따라서 변경 시 컴포지션을 대체하는 실시간 편집의 메서드와 관련된 문제를 해결합니다. 추가했습니다. (I58fbf)

버전 1.6.0-alpha07

2023년 10월 4일

androidx.compose.ui:ui-*:1.6.0-alpha07가 출시되었습니다. 버전 1.6.0-alpha07에 포함된 커밋을 확인하세요.

API 변경사항

  • 맞춤 텍스트 편집기용 테스트를 작성하기 위한 PlatformTextInputMethodTestOverride를 도입했습니다. 추가했습니다. (Id159b)
  • 드래그 앤 드롭 세션을 시작하는 dragAndDropSource 수정자와 드래그 앤 드롭 세션에서 수신하는 dragAndDropTarget 수정자를 추가합니다. 추가했습니다. (Ib7828, b/286038936)
  • 할당을 방지하는 ColorListColorSet 컬렉션을 추가했습니다. 추가했습니다. (I744bd)
  • 비선형 글꼴 크기 조정을 사용 중지하는 DisableNonLinearFontScalingInCompose 임시 플래그를 추가했습니다. 정리하는 데 시간이 필요하다면 테스트에서 DisableNonLinearFontScalingInCompose = true를 설정하세요. 이 플래그는 Compose 1.6.0-beta01에서 삭제됩니다. 추가했습니다. (Ic9486)

버그 수정

  • XML 벡터 드로어블 파싱을 최적화했습니다. 추가했습니다. (Ibb015)

버전 1.6.0-alpha06

2023년 9월 20일

androidx.compose.ui:ui-*:1.6.0-alpha06가 출시되었습니다. 버전 1.6.0-alpha06에 포함된 커밋을 확인하세요.

API 변경사항

  • 머티리얼 아이콘에 대한 추가 최적화 추가했습니다. (I3e08d)
  • 위/아래 수정자 트리를 순회하여 유사한 노드를 찾는 기능이 추가되었습니다. 추가했습니다. (I2d234)
  • focusRestorer() 수정자에 onRestoreFailed() 콜백을 추가했습니다. (Ie1d43)
  • ColorInt, FloatRange, IntRange, Size 등을 지정하기 위해 다양한 그래픽 API에 androidx 주석을 추가했습니다. 추가했습니다. (Id65c8, b/290950582)
  • PreviewScreenSizes 정의에 showSystemUi=true를 추가했습니다. (Ib61d3)

동작 변경사항

  • 이제 Compose에서 더 나은 가독성과 접근성을 위해 비선형 글꼴 크기 조정을 사용합니다. 시스템 설정에서 글꼴 배율이 100% 를 초과하면 작은 텍스트의 크기는 정상적으로 증가하지만 이미 큰 텍스트의 경우 약간만 커집니다. 또한 SP에 정의된 행 높이는 100% 배율의 의도된 높이에 비례하도록 자동 조정됩니다. 자세한 내용은 글꼴 크기 조정 권장사항을 참고하세요. (I11518)

버전 1.6.0-alpha05

2023년 9월 6일

androidx.compose.ui:ui-*:1.6.0-alpha05가 출시되었습니다. 버전 1.6.0-alpha05에 포함된 커밋을 확인하세요.

API 변경사항

  • AndroidComposeViewAccessibilityDelegateCompat에서 콘텐츠 캡처를 사용 설정합니다. 추가했습니다. (Ib2969)
  • ScrollViewRecyclerView와 같은 뷰 구성요소의 플링 속도는 ViewConfiguration.ScaledMaximumFlingVelocity로 제한됩니다. 이제 Compose에는 이제 Draggable에 적용되는 자체 버전의 maximumFlingVelocity가 포함됩니다. 추가했습니다. (Ibf974)
  • 플랫폼 드래그 앤 드롭 API를 지원하는 초기 스캐폴딩을 추가합니다. 추가합니다. (If84ce)
  • RotaryScrollEventdeviceId를 추가합니다. (Iba3bf)
  • 최신 기기를 포함하도록 ui-tooling Devices API를 업데이트했습니다. (Ib25b4)

버전 1.6.0-alpha04

2023년 8월 23일

androidx.compose.ui:ui-*:1.6.0-alpha04가 출시되었습니다. 버전 1.6.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • ReusableComposition를 비활성화하여 관찰을 삭제하지만 노드를 제자리에 유지하는 메서드를 추가했습니다. 비활성화된 컴포지션은 setContent를 호출하여 다시 활성화할 수 있습니다. 추가했습니다. (Ib7f31)
  • 하위 구성의 수명 주기 및 재사용을 관리하는 ReusableComposition 인터페이스를 추가했습니다. 추가했습니다. (I812d1, b/252846775)
  • Modifier.focusGroup가 안정적인 API로 승격되었습니다. 추가했습니다. (I7ffa3)
  • ColorInt, FloatRange, IntRange, Size 등을 지정하기 위해 다양한 그래픽 API에 androidx 주석을 추가했습니다. 추가했습니다. (I70487, b/290950582)
  • 매개변수의 검사 가능성을 개선하기 위해 구체적인 서브클래스 유형을 포함하도록 ColorFilter API를 업데이트했습니다. 추가했습니다. (I5fe29)
  • UI 미리보기에 사용할 수 있는 유효한 Wear 기기를 나열하는 wear-tooling-preview 라이브러리를 도입했습니다. (Ib036e)
  • Density 인터페이스의 글꼴 크기 조정 부분을 처리하는 FontScalable 인터페이스를 만들었습니다. 추가했습니다. (I2cf3f)

버전 1.6.0-alpha03

2023년 8월 9일

androidx.compose.ui:ui-*:1.6.0-alpha03가 출시되었습니다. 버전 1.6.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • 들어가기/나가기 애니메이션 중에 애니메이션 컨테이너의 크기에 따라 콘텐츠의 크기를 조정하는 새로운 유형의 들어가기/나가기 전환입니다. LookaheadScope 이제 구성 가능한 함수와 인터페이스가 안정화되었습니다. 추가합니다. (Ifb2ce)
  • privateImeOptions 구성 지원을 추가했습니다. (Idb772)

버그 수정

  • 이제 계산에서 상태 읽기가 변경되면 PopupPositionProvider.calculatePosition가 팝업의 위치를 자동으로 업데이트합니다. 추가했습니다. (I676a1, b/292257547)
  • readOnly가 true일 때 키보드를 표시하고 수정할 수 있는 텍스트 필드를 수정했습니다. 또한 포커스가 있는 동안 readOnly가 true에서 false로 변경될 때 키보드가 표시되지 않는 문제를 수정했습니다. 추가했습니다. (I34a19, b/246909589)
  • UI 테스트에서 전역 어설션의 적용이 확장되었습니다. 추가했습니다. (I1f90d)

버전 1.6.0-alpha02

2023년 7월 26일

androidx.compose.ui:ui-*:1.6.0-alpha02가 출시되었습니다. 버전 1.6.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 원래 컴포지션에 대한 다른 컴포지션 위임 서비스에 위임하는 컴포지션의 구현을 허용하는 컴포지션의 구현자가 구현할 수 있는 서비스 로케이터 인터페이스를 추가했습니다. 이것을 directy라고 부르면 안 되며, UI 모듈과 같이 컴포저블의 래핑된 버전에서 찾을 수 있는 실험용 API를 런타임에 생성하도록 사용 설정하는 데 사용됩니다. 추가했습니다. (I296b9)
  • PlatformTextInput* API를 완전히 새롭게 디자인했습니다. 추가했습니다. (I6c93a, b/274661182, b/267235947, b/277380808)
  • SoftwareKeyboardControllerLocalSoftwareKeyboardController는 더 이상 실험용이 아닙니다. LocalSoftwareKeyboardController도 이제 올바른 CompositionLocal입니다. 추가했습니다. (I4c364)
  • LookaheadLayoutLookaheadLayoutScope가 일부 출시에서 지원 중단되었으며 이제 삭제되었습니다. 대체 API는 모든 레이아웃에서 작동할 수 있는 LookaheadScope입니다. 추가했습니다. (I12ac3)
  • 테스트에서 포커스를 요청하는 더 편리하고 검색 가능한 방법으로 SemanticsNodeInteraction.requestFocus를 추가했습니다. 추가했습니다. (Ie8722)
  • 향후 프레임워크에서 사용할 수 있도록 전역 어설션을 등록하는 실험용 API를 추가합니다. 추가했습니다. (I12d77)

버그 수정

  • 이제 AndroidViewupdate 콜백의 첫 번째 호출이 AndroidView를 도입하는 컴포지션이 적용될 때 실행되지 않고 뷰가 연결될 때까지 지연됩니다. 이렇게 하면 읽은 상태가 효과에 의해 즉시 변경되는 경우 update 콜백이 무효화되지 않는 버그가 수정되었습니다. 추가했습니다. (Ie9438, b/291094055)

버전 1.6.0-alpha01

2023년 6월 21일

androidx.compose.ui:ui-*:1.6.0-alpha01가 출시되었습니다. 버전 1.6.0-alpha01에 포함된 커밋을 확인하세요.

새로운 기능

  • LazyList에서 전방 탐색이 지원됩니다. 이를 통해 전방 탐색 패스의 LazyList가 모든 애니메이션 (예: 항목 게재위치 애니메이션, AnimatedVisibility 등)을 우회하고 모든 하위 요소의 전방 크기와 위치를 계산할 수 있습니다. 전방 탐색 패스 후 LazyList의 하위 요소는 전방 탐색 패스에서 보이는 실제와 같이 독립적으로 애니메이션될 수 있습니다.

동작 변경: Compose에서 includeFontPadding이 이제 기본적으로 false입니다.

이제 Compose에서 includeFontPadding는 기본적으로 false입니다 (21d806).

includeFontPadding는 텍스트 기준선 위 또는 아래로 확장될 수 있는 문자를 수용하기 위해 텍스트의 첫 번째 줄과 마지막 줄 상단에 추가 패딩을 포함할지 여부를 제어하는 기존 속성입니다.

이 Compose 버전을 업데이트하면 표시하는 모든 텍스트의 첫 번째 줄과 마지막 줄 위에 있는 추가 패딩을 삭제하여 UI에서 모든 텍스트가 렌더링되는 방식이 수정됩니다.

UI 요구사항과 사용 중인 글꼴 측정항목에 따라 변경사항이 최소화됩니다. 그러나 다음과 같은 차단 프로그램이 발생할 수 있습니다. - 스크린샷 테스트 손상 필요한 경우 UI를 수정하고 골든 이미지를 다시 생성합니다. - 텍스트가 약간 잘못 정렬되었습니다. 맞춤 음수 패딩을 삭제하거나 필요한 경우 패딩을 추가합니다.

각 텍스트에 PlatformTextStyle를 사용하여 includeFontPadding를 선택할 수 있습니다.

Text(
 text = myText,
 style = TextStyle(
   lineHeight = 2.5.em,
   platformStyle = PlatformTextStyle(
     includeFontPadding = true/false
   )
   /* … */
  )
)

Material 스타일을 구성하여 모든 텍스트에 includeFontPadding를 선택할 수 있습니다. 매개변수 이름은 M2와 M3에서 서로 다릅니다.

val Typography = Typography(
   body1 = TextStyle(
       fontFamily =    /* … */,
       fontSize =    /* … */,
       platformStyle = PlatformTextStyle(
           includeFontPadding = false
       )
   /* … */
   )
)

MaterialTheme(
   typography = Typography,
   /* … */
)

Compose includeFontPadding에 관한 자세한 내용은 개발자 문서이 블로그 게시물을 참고하세요.

이 변경사항과 관련된 문제/버그가 발생하면 Issue Tracker를 사용하여 버그를 신고하세요.

API 변경사항

  • InputConnection#requestCursorUpdates를 지원합니다. (I0c69b)
  • FocusRequester.saveFocusedChildFocusRequester.restoreFocusedChild를 추가했습니다. (Ic557e, b/272302679, b/275157318)
  • 비트맵 애셋을 로드하지 못한 애셋 경로 설명과 함께 로드하려고 할 때 발생하는 throwable을 래핑하는 ResourceResolutionException 유형을 추가합니다. 추가했습니다. (I19f44, b/230166331, b/278424788)
  • 성능 및 메모리 할당을 위한 접근성이 최적화되었습니다. 추가했습니다. (Iede48)
  • 텍스트 번역을 지원하는 시맨틱 속성 및 작업을 추가했습니다. 추가했습니다. (I4a6bc)
  • 현재 측정 패스가 전방 탐색 패스인지 여부를 나타내는 IntrinsincMeasureScope의 새 속성 및 구현 (예: MeasureScope) 추가했습니다. (I7a812)
  • 대체 밀도/layoutdirection 및 크기를 사용하여 렌더링을 다른 캔버스에 재타겟팅하는 기능을 도입하도록 DrawScope API를 업데이트했습니다.
  • 밀도와 레이아웃 방향의 구성을 지원하고 캔버스를 구성할 수 있도록 DrawContext를 업데이트했습니다. 추가했습니다. (Ie1f9b, b/225408150)
  • 문자 경계 상자를 계산하는 Paragraph#fillBoundingBoxes를 추가했습니다. (If30ee)
  • 공통 MultiPreviews 세트를 추가했습니다. (Ia5a27)

버그 수정

  • 맞춤 FocusTarget를 만드는 데 사용할 수 있는 FocusTargetModifierNode 인터페이스가 추가되었습니다. 추가했습니다. (I9790e)
  • TextMeasurer 생성자의 fallback* 매개변수 이름을 default*로 변경했습니다. 추가했습니다. (I940a5)
  • SemanticsPropertyReceiver.performImeAction의 이름이 onImeAction으로, SemanticsActions.PerformImeAction의 이름이 OnImeAction으로 변경되었습니다. 추가했습니다. (I8e841)
  • 중첩 스크롤 (특히 NestedScrollConnection)에서 마우스 스크롤과 드래그를 구별하도록 Wheel을 추가합니다. (Ie57e4)
  • 반환된 객체가 원래 android.graphics.Paint를 래핑하므로 toComposePaint를 대체하는 asComposePaint API를 추가했습니다. (I22b4c)
  • SemanticsProperties.imeAction를 지원 중단하고 SemanticsActions.performImeAction의 새 매개변수로 바꿉니다. 추가했습니다. (I4a587)
  • 마우스 선택에 대한 지원이 추가되었습니다. 터치 기반 선택은 단어 단위로 확장되고 문자 단위로 축소됩니다. 추가했습니다. (Ic0c6c, b/180639271)
  • 범위를 벗어난 오프셋의 AssertionError을 발생시키는 데 사용된 Paragraph 메서드에서 이제 MultiParagraph과 마찬가지로 IllegalArgumentException이 발생합니다. 추가했습니다. (I549d3, b/243338896)

버전 1.5

버전 1.5.4

2023년 10월 18일

androidx.compose.ui:ui-*:1.5.4가 출시되었습니다. 버전 1.5.4에 포함된 커밋을 확인하세요.

버전 1.5.3

2023년 10월 4일

androidx.compose.ui:ui-*:1.5.3가 출시되었습니다. 버전 1.5.3에 포함된 커밋을 확인하세요.

버그 수정

  • (b/301209788) 한국어 입력에 초점을 맞추고 입력할 때 TextField에서 이전 명령어를 잘못 적용하여 문자가 누락되는 경우가 있었습니다.

버전 1.5.2

2023년 9월 27일

androidx.compose.ui:ui-*:1.5.2가 출시되었습니다. 버전 1.5.2에 포함된 커밋을 확인하세요.

버그 수정

  • 백그라운드 스레드에서 접근성 스크롤 API에 액세스할 때 발생하는 비정상 종료 해결 방법을 추가했습니다.
  • 연결되지 않은 노드가 시맨틱 트리에 추가되는 문제를 수정했습니다.

버전 1.5.1

2023년 9월 6일

androidx.compose.ui:ui-*:1.5.1가 출시되었습니다. 버전 1.5.1에 포함된 커밋을 확인하세요.

버그 수정

  • readOnly가 true일 때 키보드를 표시하고 수정할 수 있는 텍스트 필드를 수정했습니다. 또한 포커스가 있는 동안 readOnly가 true에서 false로 변경될 때 키보드가 표시되지 않는 문제를 수정했습니다. 추가했습니다. (I34a19, b/246909589)

버전 1.5.0

2023년 8월 9일

androidx.compose.ui:ui-*:1.5.0가 출시되었습니다. 버전 1.5.0에 포함된 커밋을 확인하세요.

버전 1.5.0-rc01

2023년 7월 26일

androidx.compose.ui:ui-*:1.5.0-rc01가 출시되었습니다. 버전 1.5.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • movableContentOf() 내에서 SubcomposeLayout를 사용할 때 발생하는 비정상 종료 문제를 해결했습니다.

버전 1.5.0-beta03

2023년 6월 28일

androidx.compose.ui:ui-*:1.5.0-beta03가 출시되었습니다. 버전 1.5.0-beta03에 포함된 커밋을 확인하세요.

버그 수정

  • 맞춤 FocusTarget을 만드는 데 사용할 수 있는 FocusTargetModifierNode 인터페이스를 추가했습니다. 추가합니다. (Ifb1d6)
  • usePlatformDefaultWidth=true일 때 하위 창의 크기가 예상대로 조절되지 않을 수 있는 대화상자 및 Popup 컴포저블 관련 문제가 수정되었습니다. 추가했습니다. (I112ee)

버전 1.5.0-beta02

2023년 6월 7일

androidx.compose.ui:ui-*:1.5.0-beta02가 출시되었습니다. 버전 1.5.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • Compose에서 사용할 android.graphics.Paint 인스턴스의 사용을 사용 설정하는 asComposePaint API를 추가했습니다.

버그 수정

  • 반환된 객체가 원래 android.graphics.Paint를 래핑하므로 toComposePaint를 대체하는 asComposePaint API를 추가했습니다. (I22b4c)

버전 1.5.0-beta01

2023년 5월 24일

androidx.compose.ui:ui-*:1.5.0-beta01가 출시되었습니다. 버전 1.5.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • 리컴포지션, 색상 애니메이션, AndroidComposeView에서 할당을 삭제했습니다. (Ib2bfa)
  • 위임을 허용하는 도우미 재미 CacheDrawModifierNode()를 추가합니다. (Icf8f9)
  • MeasureScope에서 액세스할 수 있는 isLookingAhead 속성을 도입하여 전방 탐색 결과를 관찰하고 원하는 경우 기본 패스에 영향을 줍니다. 추가했습니다. (Ibf4c3)
  • 새로운 시맨틱 속성 traversalIndexTalkBack 순회에서 노드의 순서를 재정렬하는 데 사용되는 부동 소수점입니다 (더 낮은 값이 앞에 옴). 추가했습니다. (I9a81b, b/186443263)
  • 시맨틱 속성 isContainer의 이름을 isTraversalGroup로 변경했습니다. (I121f6)
  • 이제 ColorProducerproduce 대신 operator fun invoke가 있습니다. (I4a9a2)
  • Path 변환 API를 추가하여 경로 객체에 변환/배율/회전 변환을 적용합니다. 추가했습니다. (I23434, b/233772232)
  • ColorProducer의 메서드는 produce입니다. 추가했습니다. (I78bde)
  • toFrameworkColorSpace의 이름을 toAndroidColorSpace로 바꿨습니다. (I4f547)
  • ColorLambda의 이름을 ColorProducer로 바꿉니다. 추가했습니다. (I73b1a)
  • Android와 Compose 색상 공간 유형 간에 변환하는 API를 도입했습니다. 추가했습니다. (Ie7db4, b/279979665)
  • 텍스트 색상을 효율적으로 애니메이션 처리하거나 설정할 수 있도록 BasicText에 색상 매개변수를 추가했습니다. 추가했습니다. (Iffd88, b/246961787)
  • TextRange.constrain에서 TextRange.coerceIn으로 이름이 변경되었습니다. 추가했습니다. (I31be2)
  • 전체 매개변수 목록이 있는 최적화된 TextStyle.merge(...)가 추가되었습니다. 추가했습니다. (Iad234, b/246961787)
  • Brush, DrawStyle, TextMotion, DrawScope.drawText, Paragraph.paint(Brush), MultiParagraph.paint(Brush)를 포함한 여러 Text API가 안정화되었습니다. 추가했습니다. (I2f740, b/261581564, b/261581931, b/261561245)
  • PlatformTextStyle.includeFontPadding의 지원 중단이 해제되었습니다. 원래 의도는 이 필드를 삭제하는 것이었지만 개발자에게 이 구성 옵션이 필요하다는 것을 보여줍니다. 따라서 필드에서 지원 중단을 삭제합니다. (I98e96, b/277703184)
  • 공개 TextRange.constrain 메서드를 추가했습니다. 추가했습니다. (I97912)
  • 이제 TalkBack와 같은 접근성 서비스를 통해 AnnotatedStringUrlAnnotation을 열 수 있습니다. 추가했습니다. (If4d82, b/253292081)
  • 텍스트 필드에 InsertTextAtCursor 시맨틱 작업을 추가했습니다. 추가했습니다. (I11ed5)
  • LineHeightStyle.Alignment(topRatio) 생성자가 안정적인 API로 승격됩니다. 추가했습니다. (I79c32, b/261565383)
  • TextMeasurer 및 관련 API가 더 이상 실험용이 아닙니다. 추가했습니다. (I74647, b/261581753)
  • 텍스트 편집기 노드에서 IME 작업을 호출하는 PerformImeAction 시맨틱 작업을 추가했습니다. 추가했습니다. (Ic606f, b/269633506)
  • PlatformTextInput API가 더 이상 Android용 실험용이 아닙니다. 추가했습니다. (I668eb)
  • Enum.valueOf의 값 매개변수 이름이 변경되었습니다. (Ia9b89)
  • enum valueOf에서 예외가 더 많이 발생합니다. (I818fe)
  • 플랫폼 API와 직접 통신하는 맞춤 텍스트 입력 구현을 빌드하기 위한 새로운 하위 수준 PlatformTextInputAdapter API를 도입했습니다. 추가했습니다. (I58df4)
  • 캔버스에 텍스트를 그릴 때 여러 블렌딩 알고리즘이 지원되도록 DrawScope.drawText, Paragraph.paint, MultiParagraph.paint 메서드에 BlendMode 매개변수를 추가했습니다. (I57508)
  • Font.MaximumAsyncTimeout의 이름을 Font.MaximumAsyncTimeoutMillis로 바꿉니다. 이름 변경만 가능합니다. (I07af5)
  • @Preview 참조 기기의 DPI 값을 업데이트했습니다. (Id6151, b/254528382)
  • 텍스트 브러시를 효율적으로 애니메이션 처리하거나 설정할 수 있도록 BasicTextbrush, alpha 매개변수를 추가합니다.
  • :ui:ui-unit에서 Float, Double, Long, Int, Short의 박스 없는 람다 유형을 정의합니다. (I6f18d, b/246961787)

버그 수정

  • 포인터 속도 추적에서 여러 할당을 삭제했습니다. (I26bae)
  • 레이아웃 및 포인터 입력 관리의 할당을 줄였습니다. (I5333a)
  • 벡터 메모리 사용량과 첫 번째 프레임 렌더링을 최적화합니다. (I2f3c6)
  • 캔버스로 선과 점을 그릴 때 할당이 삭제되었습니다. (I9f535)
  • AndroidFont.fontVariationSettings 문서를 추가합니다. (I7d9e2)

외부 기여

  • Vector API의 성능을 개선하고 할당을 줄였습니다. (I906cb)

버전 1.5.0-alpha04

2023년 5월 10일

androidx.compose.ui:ui-*:1.5.0-alpha04가 출시되었습니다. 버전 1.5.0-alpha04에 포함된 커밋을 확인하세요.

새로운 기능

  • Modifier.Node 위임 개선 DelegatingNode에서 다른 Modifier.Node 인스턴스에 위임하는 기능이 향상되었습니다. delegateundelegate API를 사용하면 됩니다. 이 변경사항이 적용되기 전에는 위임 노드의 모든 API를 위임된 노드에 명시적으로 위임해야 했습니다. 이 변경 후에는 DelegatingNode가 명시적으로 재정의하지 않는 한 노드 인터페이스가 암시적으로 위임됩니다. 수정합니다. (67352bc)

API 변경사항

  • 위임할 수 있는 NestedScroll Modifier.NodeNestedScrollModifierNode를 도입합니다. 추가했습니다. (I69513)
  • AndroidViewBinding 컴포저블에 onResetonRelease 매개변수를 추가하여 AndroidView 컴포저블을 미러링하고 ViewBinding를 사용한 뷰 재사용을 지원합니다. 추가했습니다. (I00b1e, b/276802519)
  • 자주 경로를 조작하고 더 빠르게 재사용하는 사용 사례를 지원하기 위해 되감기 작업을 지원하도록 Compose Path API를 업데이트했습니다. 추가했습니다. (I7b797)
  • 전체 매개변수 목록이 있는 최적화된 TextStyle.merge(...)가 추가되었습니다. 추가했습니다. (Iad234, b/246961787)
  • Brush, DrawStyle, TextMotion, DrawScope.drawText, Paragraph.paint(Brush), MultiParagraph.paint(Brush)를 포함한 여러 Text API가 안정화되었습니다. 추가했습니다. (I2f740, b/261581564, b/261581931, b/261561245)
  • PlatformTextStyle.includeFontPadding의 지원 중단이 해제되었습니다. 원래 의도는 이 필드를 삭제하는 것이었지만 개발자에게 이 구성 옵션이 필요하다는 것을 보여줍니다. 따라서 필드에서 지원 중단을 삭제합니다. (I98e96, b/277703184)

버그 수정

  • Dialog 컴포저블에 의해 생성되지 않은 대화상자 내의 텍스트 필드에 키보드가 표시되지 않는 회귀 문제를 수정했습니다. 추가했습니다. (I82551, b/262140644)

버전 1.5.0-alpha03

2023년 4월 19일

androidx.compose.ui:ui-*:1.5.0-alpha03가 출시되었습니다. 버전 1.5.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

  • LookaheadScope의 새로운 SubcomposeLayout 기본 동작: 조건부 슬롯이 없는 SubcomposeLayouts (예: TabRow, Scaffold, BoxWithConstraints 등)가 이제 전방 애니메이션에서 원활하게 작동합니다.

API 변경사항

  • 전방 탐색 패스의 측정 정책을 재사용하는 새로운 기본 intermediateMeasurePolicy를 사용하면 Scaffold, TabRow, BoxWithConstraints와 같은 조건부 슬롯이 없는 SubcomposeLayout 하위유형을 기본적으로 전방 탐색과 함께 사용할 수 있습니다. 추가했습니다. (Id84c8)
  • Android 창용으로 생성된 Recomposer가 이제 ON_STOP 알림을 수신할 때 모든 컴포지션이 아닌 withFrameNanos 호출만 차단합니다. 즉, 중지된 활동과 연결된 창은 데이터 변경을 위해 계속 재구성되지만 애니메이션 또는 withFrameNanos의 다른 호출자는 차단됩니다. 추가했습니다. (Id9e7f, b/240975572)
  • motionEventSpy를 안정화 버전으로 변경합니다. 추가했습니다. (Ic5ec4, b/261560988)
  • 공개 TextRange.constrain 메서드를 추가했습니다. 추가했습니다. (I97912)
  • 개발자가 이 호환성 API를 사용하여 includeFontPadding false 설정을 전환하고 테스트하도록 장려하기 위해 PlatformTextStyle.includeFontPadding가 더 이상 지원 중단되지 않습니다. 추가했습니다. (I98e96, b/277703184)

버전 1.5.0-alpha02

2023년 4월 5일

androidx.compose.ui:ui-*:1.5.0-alpha02가 출시되었습니다. 버전 1.5.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 전방 탐색 기반 애니메이션 중에 측정/레이아웃 로직을 처리하기 위한 중간 측정 정책을 추가로 사용하는 새로운 SubcomposeLayout API입니다. 추가했습니다. (I017d3)
  • 이제 PointerInput이 지연되고 성능 향상을 위해 Modifier.Node를 사용합니다 (사소한 동작 변경사항 참고). 추가합니다. (15dab9)
  • 실험용 API를 Key 이벤트가 있는 안정화 버전으로 변경합니다. 추가했습니다. (I9c7d8, b/261566839, b/261567368)
  • 실험용 API를 PointerInputChange의 안정화 버전으로 변경합니다. 추가했습니다. (I1b543, b/261560988, b/261565762, b/261565749)
  • 더 복잡한 Modifier.Node 구현을 위해 SuspendingPointerInputModifierNode를 인스턴스화하는 방법을 추가합니다. 추가했습니다. (Ic4933)
  • 이제 TalkBack와 같은 접근성 서비스를 통해 AnnotatedStringUrlAnnotation을 열 수 있습니다. 추가했습니다. (If4d82, b/253292081)
  • 하드웨어 키가 소프트 키보드로 전송되기 전에 가로채는 API를 추가했습니다. (I4f4c6, b/186800395)
  • 텍스트 필드에 InsertTextAtCursor 시맨틱 작업을 추가했습니다. 추가했습니다. (I11ed5)
  • 이제 텍스트 관련 테스트 작업 (예: performTextInput)이 필드를 클릭하는 대신 시맨틱 작업을 사용하여 직접 포커스를 요청합니다. 추가했습니다. (I6ed05)

버그 수정

  • 이제 텍스트 테스트 작업을 사용하려면 텍스트 필드를 사용 설정해야 합니다. 추가했습니다. (Iab328)

버전 1.5.0-alpha01

2023년 3월 22일

androidx.compose.ui:ui-*:1.5.0-alpha01가 출시되었습니다. 버전 1.5.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 Modifier.PartialLayout에 명시적인 LookaheadScope가 필요하지 않습니다. mediumLayout의 측정 블록에는 IntermediateMeasureScope가 수신기로 포함되어 있어 편리한 CoroutineScope, LookaheadScope, MeasureScope를 제공합니다.(Ibe2e5)
  • LookaheadLayout이 더 이상 레이아웃이 아닌 LookaheadScope로 대체되었습니다. 이를 통해 LookaheadScope의 차드 콘텐츠를 상위 요소의 MeasurePolicy로 직접 제어할 수 있습니다. 추가했습니다. (Ibe2e5)
  • Modifier.Nodes가 코루틴을 실행할 수 있도록 Modifier.Node#coroutineScope를 추가합니다. 추가했습니다. (I76ef9)
  • CompositionLocalConsumerModifierNode 인터페이스를 구현하여 Modifier.Nodes가 CompositionLocals를 읽을 수 있습니다. 추가했습니다. (Ib44df)
  • @Deprecated 클래스를 속성으로 전파 추가했습니다. (I882d1)

버전 1.4

버전 1.4.3

2023년 5월 3일

androidx.compose.ui:ui-*:1.4.3가 출시되었습니다. 버전 1.4.3에 포함된 커밋을 확인하세요.

버그 수정

  • 특정 수정자와 함께 사용할 때 AndroidView가 올바르게 배치되지 않을 수 있는 문제를 수정했습니다. 추가했습니다. (I4dc77, b/274797771)
  • DropDown 메뉴에 영향을 미치는 2D 포커스 검색의 버그를 수정했습니다. (b/276811828)
  • 람다가 처음 호출될 때 들어가기/나가기 블록만 실행하는 맞춤 포커스 들어가기/나가기 속성의 버그를 수정했습니다. (b/277234245)
  • focusProperties를 읽는 동안 비정상 종료를 일으키는 포커스 시스템의 회귀 문제가 수정되었습니다. b/271324781b/274897776을 참조하세요.

버전 1.4.2

2023년 4월 19일

androidx.compose.ui:ui-*:1.4.2가 출시되었습니다. 버전 1.4.2에 포함된 커밋을 확인하세요.

버그 수정

  • AndroidView가 수정자를 올바르게 재사용하지 않아 예기치 않은 동작과 비정상 종료가 발생할 수 있는 문제가 수정되었습니다. 추가했습니다. (Ib67ee, b/275919849)
  • Dialog 컴포저블에서 만들지 않은 대화상자 내의 텍스트 필드에 키보드가 표시되지 않는 회귀 문제를 수정했습니다. (I82551, b/262140644)

버전 1.4.1

2023년 4월 5일

androidx.compose.ui:ui-*:1.4.1가 출시되었습니다. 버전 1.4.1에 포함된 커밋을 확인하세요.

버그 수정

  • AndroidView에 영향을 미치지 않는 ParentDataModifier의 문제가 해결되었습니다. (b/274797771)

버전 1.4.0

2023년 3월 22일

androidx.compose.ui:ui-*:1.4.0가 출시되었습니다. 버전 1.4.0에 포함된 커밋을 확인하세요.

1.3.0 이후 중요 변경사항

  • 지연 목록 항목을 고정할 수 있는 새로운 PinnableContainer API를 추가했습니다. 지연된 항목을 범위 밖으로 스크롤할 때 항목이 삭제되지 않습니다. 예를 들어 Modifier.focusable()은 이 메커니즘을 사용하여 현재 포커스가 설정된 항목을 고정합니다. (Ib8881, b/259274257, b/195049010)
  • 포커스 시스템은 새로운 실험용 Modifier.Node API를 사용하여 다시 작성됩니다. (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589)
  • Surface의 IsContainer 시맨틱 속성을 추가했습니다. 이 속성은 나중에 노출 영역과 같은 요소의 시맨틱 의미를 기준으로 순회 순서를 결정하는 데에 사용됩니다. (I63379)
  • 새로운 접근성 역할 DropdownList을 추가했습니다. 이는 android.widget.Spinner에 포커스를 둘 때 TalkBack의 동작을 복제하는 데 사용할 수 있습니다. (I177e5, b/236159001)
  • 이제 PlatformTextStyle(emojiSupportMatch)를 사용하여 단일 단락에서 그림 이모티콘 지원 처리를 선택적으로 사용 중지할 수 있습니다. (Ia7100, b/139326806)
  • 이제 Android Compose UI 테스트가 프레임을 실행하여 유휴 상태가 될 때(예: waitForIdle을 통해) 각 프레임의 레이아웃 패스를 실행합니다. 이는 레이아웃 애니메이션의 개별 프레임에서 어설션하는 테스트에 영향을 미칠 수 있습니다. (I8ea08, b/222093277)
  • 텍스트를 Static(default) 또는 애니메이션으로 정의하기 위한 실험용 TextMotionTextStyle에 추가했습니다. 애니메이션을 통해 텍스트가 크기 조정되거나 변환되거나 회전되는 경우 TextMotion.Animated를 사용합니다. (I24dd7)

버전 1.4.0-rc01

2023년 3월 8일

androidx.compose.ui:ui-*:1.4.0-rc01가 출시되었습니다. 버전 1.4.0-rc01에 포함된 커밋을 확인하세요.

API 변경사항

  • onReset 매개변수를 허용하는 구성 가능한 AndroidView 함수의 오버로드를 추가했습니다. 이를 통해 컴포지션의 노드가 삭제되고 호환되는 방식으로 재사용될 때 View 인스턴스를 재사용할 수 있습니다. 이는 뷰의 LazyRowsLazyColumns에 특히 유용합니다. 추가했습니다. (I3f10d, b/230099236)
  • 플랫폼 API와 직접 통신하는 맞춤 텍스트 입력 구현을 빌드하기 위한 새로운 하위 수준 PlatformTextInputAdapter API를 도입했습니다. 추가했습니다. (I58df4)

버그 수정

  • 이제 BasicTextFieldSetText 의미 체계 작업이 IME 업데이트 및 테스트 함수 (예: performTextReplacement)와 동일한 코드 경로를 사용하여 텍스트 버퍼를 업데이트합니다.
  • 텍스트 테스트 함수 performTextClearance, performTextReplacement, performTextSelection가 이제 SemanticsActions를 사용합니다. 추가했습니다. (I0807d, b/269633168, b/269624358)

버전 1.4.0-beta02

2023년 2월 22일

androidx.compose.ui:ui-*:1.4.0-beta02가 출시되었습니다. 버전 1.4.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • modifierElementOf() API를 삭제했습니다. ModifierNodeElement에서 직접 확장하세요. (I2256b)
  • Layout이 재사용되는 사례(예: LazyColumn의 항목)를 적절하게 처리할 수 있도록 일부 로컬 상태를 재설정하는 새 Modifier.Node.onReset() 콜백을 추가했습니다. 포커스 상태를 적절하게 재설정하도록 FocusTargetModifierNode를 수정했습니다. (I65495, b/265201972)
  • 캔버스에 텍스트를 그릴 때 여러 블렌딩 알고리즘이 지원되도록 DrawScope.drawText, Paragraph.paint, MultiParagraph.paint 메서드에 BlendMode 매개변수를 추가했습니다. (I57508)

버그 수정

  • 접근성 포커스 순서 알고리즘을 개선했습니다. 예를 들어 상단/하단 막대가 첫 번째/마지막 막대를 각각 더 자주 읽습니다. (74e9c5)

버전 1.4.0-beta01

2023년 2월 8일

androidx.compose.ui:ui-*:1.4.0-beta01가 출시되었습니다. 버전 1.4.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • PinnableContainer.PinnedHandle.unpin()의 이름을 release()로 바꾸었습니다. (I4667a)
  • waitUntilNodeCount, waitUntilAtLeastOneExists, waitUntilExactlyOneExists, waitUntilDoesNotExistComposeTestRule에 실험용 API로 추가하여 모든 매처와 노드 수를 허용하도록 waitUntil API를 확장했습니다. 자세한 내용은 ComposeTestRule을 참고하세요. (Ifa1b9, b/226934294)
  • Font.MaximumAsyncTimeout의 이름을 Font.MaximumAsyncTimeoutMillis로 바꿉니다. (I07af5)
  • GoogleFont.Provider.AllFontsListUri를 삭제하고 ktdoc로 연결했습니다. (I16f29)

버그 수정

  • AndroidFont.fontVariationSettings 문서를 추가합니다. (I7d9e2)

버전 1.4.0-alpha05

2023년 1월 25일

androidx.compose.ui:ui-*:1.4.0-alpha05가 출시되었습니다. 버전 1.4.0-alpha05에 포함된 커밋을 확인하세요.

API 변경사항

  • CoroutineContext 매개변수를 허용하는 runComposeUiTest 함수와 create*ComposeRule 함수에 새로운 실험용 오버로드를 도입했습니다. 컨텍스트는 테스트 컴포지션 및 컴포지션의 모든 LaunchedEffectrememberCoroutineScope() 호출에 사용됩니다. (I10614, b/265177763)
  • 1차원 속도를 추적하는 새 API를 추가했습니다. (If5a82)
  • 이제 FocusRequester@Stable로 표시됩니다. (I580ee)
  • usePlatformDefaultWidth 매개변수를 사용하는 DialogProperties 생성자에서 실험용 주석을 삭제합니다. (Ic4048)
  • PathMeasure.getPosition()PathMeasure.getTangent()를 사용하여 경로의 거리에서 계산 위치 및 탄젠트에 함수를 추가했습니다. (I3b47c)
  • PlatformParagraphStyle에 실수로 노출된 공개 setter를 삭제했습니다. (I07f47)
  • 인라인/지원 중단된 숨겨진 함수의 유형/null 허용 여부가 추가되었습니다. (I24f91)
  • 할당이 0인 주석을 쿼리하도록 AnnotatedString.hasStringAnnotations를 추가합니다. (I94dfe, b/246960758)
  • String을 텍스트로 가져오는 TextMeasurer.measure 함수의 새 오버로드를 추가했습니다. (I47b2d, b/242705342)
  • TextStyle의 LineBreakHyphens API가 안정화 버전으로 전환되었습니다. (Ic1e1d)

외부 기여

  • TextInputSessionTextInputServicenotifyFocusedRect 메서드가 다시 지원 중단되지 않습니다. (I23a04, b/262648050)

버전 1.4.0-alpha04

2023년 1월 11일

androidx.compose.ui:ui-*:1.4.0-alpha04가 출시되었습니다. 버전 1.4.0-alpha04에 포함된 커밋을 확인하세요.

새로운 기능

  • 지연 목록 항목을 고정할 수 있는 새로운 PinnableContainer API를 추가했습니다. 지연된 항목을 범위 밖으로 스크롤할 때 항목이 삭제되지 않습니다. 예를 들어 Modifier.focusable()은 이 메커니즘을 사용하여 현재 포커스가 설정된 항목을 고정합니다. (Ib8881, b/259274257, b/195049010)
  • 포커스 시스템은 새로운 실험용 Modifier.Node API를 사용하여 다시 작성됩니다. (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589)
  • Surface의 IsContainer 시맨틱 속성을 추가했습니다. 이 속성은 나중에 노출 영역과 같은 요소의 시맨틱 의미를 기준으로 순회 순서를 결정하는 데에 사용됩니다. (I63379)
  • 새로운 접근성 역할(DropdownList)을 추가했습니다. 이는 android.widget.Spinner에 포커스를 둘 때 TalkBack's 동작을 복제하는 데 사용할 수 있습니다. (I177e5, b/236159001)
  • 이제 PlatformTextStyle(emojiSupportMatch)를 사용하여 단일 단락에서 그림 이모티콘 지원 처리를 선택적으로 사용 중지할 수 있습니다. (Ia7100, b/139326806)
  • 이제 Android Compose UI 테스트가 프레임을 실행하여 유휴 상태가 될 때(예: waitForIdle을 통해) 각 프레임의 레이아웃 패스를 실행합니다. 이는 레이아웃 애니메이션의 개별 프레임에서 어설션하는 테스트에 영향을 미칠 수 있습니다. (I8ea08, b/222093277)
  • 텍스트를 Static(default) 또는 애니메이션으로 정의하기 위한 실험용 TextMotionTextStyle에 추가했습니다. 애니메이션을 통해 텍스트가 크기 조정되거나 변환되거나 회전되는 경우 TextMotion.Animated를 사용합니다. (I24dd7)

API 변경사항

  • 다른 DrawScope 함수와 일치하도록 drawTextmaxSize: IntSize 인수를 size: Size로 대체했습니다. size는 기본적으로 Size.Unspecified로 설정되며 이전 기본 동작은 변경되지 않습니다. (Icd27d)
  • 지원 중단된 실험용 글꼴 생성자를 삭제했습니다. (I8a724, b/261435386)
  • 이제 UI 도구 데이터 클래스 Group에 그룹이 구성 가능한 인라인 함수 호출인지를 나타내는 isInline 필드가 있습니다. isInlinetrue이면 구성 가능한 인라인 함수가 호출됩니다. 그러나 인라인 함수 정보를 생성하지 않는 Compose 컴파일러 플러그인 버전으로 컴파일된 모듈의 구성 가능한 인라인 함수 호출에 대한 값은 false일 수 있습니다. (Idb846)
  • 다수의 이전 실험용 API를 안정화 버전으로 전환했습니다.
  • 이제 Rotary Scroll Event API가 안정화되었습니다. (I42ad3, b/261561229)
  • 이제 FontVariation API가 안정화되었습니다. (I8779f, b/241016309)
  • 이제 모든 Font() 생성자가 안정화된 API입니다. (I5948b, b/261435386)
  • 이제 DeviceFontFamilyName이 안정화되었습니다. (I8b640, b/261435386)
  • 이제 variationSettings가 있는 AndroidFont 생성자가 안정화된 API이며 새로운 유형의 글꼴 설명자를 만드는 데 사용될 수 있습니다. (I5adcc, b/261565807)
  • 이제 createFontFamilyResolver API가 안정화되었습니다. 이 API는 비동기식으로 글꼴을 로드하는 중에 포착되지 않은 예외를 포착하는 데 사용할 수 있습니다. (Ibb481, b/261435386)
  • 이제 Font.loadingStrategy API가 안정화되었습니다. (I5937c, b/261435386)
  • 이제 GoogleFont API가 안정화되었습니다. (Ic90b0, b/261435386)
  • 이제 TextUnit(float, TextUnitType)은 안정화된 API입니다. (I90c84, b/261561612)
  • 이제 pluralStringResource는 안정화된 API입니다. (I09849, b/261439703)

버전 1.4.0-alpha03

2022년 12월 7일

androidx.compose.ui:ui-*:1.4.0-alpha03가 출시되었습니다. 버전 1.4.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • PointerIcon에서 ExperimentalComposeUiApi를 삭제했습니다. (I23af8)
  • 페이지 접근성 작업 PageUp, PageDown, PageLeft, PageRight를 도입했습니다. 이 작업은 API 29부터 사용할 수 있습니다. (Ida4ab)
  • rememberNestedScrollConnection 매개변수 뷰를 루트 뷰에서 호스트 뷰로 업데이트했습니다. (Ia5200)
  • 쿼리 상위 항목 스크롤 정보에 Modifier API를 추가했습니다. (I2ba9d, b/203141462)
  • 동작이 스크롤 이벤트가 될 가능성이 있는 경우 누르기 상호작용이 올바르게 지연되도록 Clickable을 수정했습니다.
  • ClickablesScrollable ViewGroup 내에서 사용될 때 물결 효과가 올바르게 지연되지 않는 문제를 수정했습니다.
  • 동작이 스크롤 이벤트가 될 가능성이 있는 경우 누르기가 올바르게 지연되도록 창 및 시트를 업데이트했습니다.
  • graphicsLayer가 항상 중간 버퍼로 렌더링된다는 사실을 나타내기 위해 CompositingStrategy.Always의 이름을 Offscreen으로 바꿨습니다. (I47dc1)
  • 여러 콘텐츠 슬롯을 포함하는 레이아웃 오버로드가 안정화되었습니다. (I10566, b/248294649)
  • 테스트 동작 및 성능을 검사하기 위해 Perfetto 트레이스(시스템 트레이스라고도 함)를 캡처하도록 새로운 실험용 API PerfettoTrace.record {}PerfettoTraceRule을 추가했습니다. (I3ba16)
  • Compose 규칙을 사용하는 UI 테스트에서, withFrameNanos 콜백 중에 재개된 연속은 모든 프레임 콜백의 실행이 완료될 때까지 전달되지 않습니다. 이는 정상적으로 실행될 때의 Compose 동작과 일치합니다. 그러나 기존의 동작을 사용하는 테스트는 실패할 수 있습니다. 이는 withFrameNanos 또는 withFrameMillis를 직접 호출하는 코드에만 영향을 미쳐야 하고 콜백 내부로 이동해야 할 수도 있는 이러한 함수에 전달되는 로직이 콜백 외부에 있어야 합니다. 예시를 보려면 이 CL의 애니메이션 테스트 변경사항을 참고하세요.
  • withFrameNanos 콜백 후 호출자의 코루틴을 재개하기 전에 코드를 실행하도록 TestMonotonicFrameClock 생성자 및 팩토리 함수에 선택적 매개변수 onPerformTraversals: (Long) -> Unit을 추가했습니다. (Idb413, b/254115946, b/222093277, b/255802670)
  • Compose에 EmojiCompat을 추가했습니다. (Ibf6f9, b/139326806)
  • 동적 색상을 지원하기 위해 @Preview에 새 배경화면 매개변수를 추가했습니다. (I9f512)

버그 수정

  • 이제 Recomposer가 변경사항 적용을 완료하면 스냅샷 적용 알림이 전송됩니다. (Iad6c0, b/222093277)
  • 멀티 윈도우 스크린샷을 캡처할 수 있도록 captureToImage에 변경사항을 도입했습니다. 이는 Compose 팝업을 사용하는 스크린샷 테스트에 유용합니다. (I169c5)

종속 항목 업데이트

  • 이제 Compose UI 및 Compose Material이 Lifecycle 2.5.1에 종속됩니다. (I05ab0, b/258038814)

버전 1.4.0-alpha02

2022년 11월 9일

androidx.compose.ui:ui-*:1.4.0-alpha02가 출시되었습니다. 버전 1.4.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • graphicsLayer의 현재 크기를 노출하도록 GraphicsLayerScope를 업데이트했습니다. 이는 컴포저블 크기의 함수로 graphicsLayer 변환을 계산하는 데 유용합니다. (If8c43,b/181387080)
  • graphicsLayer 콘텐츠를 렌더링하기 위해 오프스크린 합성 레이어를 활용할 시점을 결정하는 CompositingStrategy를 도입했습니다. Auto는 알파가 적용되거나 RenderEffect/Overscroll인 경우 레이어를 내부적으로 활용하는 기본 동작을 유지합니다. Always는 ModulateAlpha가 오프스크린 버퍼를 활용하지 않고 대신 graphicsLayer 내에서 기록된 각 그리기 명령을 조정하는 오프스크린 버퍼를 항상 도입합니다. ModulateAlpha 사용은 여전히 RenderEffect/Overscroll 사용의 오프스크린 버퍼를 활용합니다. (I25e82, b/256382834)
  • 레이아웃 및 그리기의 전체 계층 구조를 무효화할 수 있도록 invalidateSubtree()Modifier.Node에 추가했습니다. (I4bd90)
  • rememberNestedScrollInteropConnection을 안정화 버전으로 승격합니다. 루트 뷰를 rememberNestedScrollInteropConnection에 전달하는 기능을 도입했습니다. 이렇게 하면 특히 비표준 뷰(예: ModalBottomSheetDialog)에서 맞춤 뷰가 스크롤 제약 조건에 더 잘 반응할 수 있습니다. (I9e107)
  • 이전에 읽은 값이 변경될 때 알림을 받아야 하는 Modifier.Node 구현에서 사용할 수 있는 ObserverNode 인터페이스를 추가했습니다. (I5728b, b/247716483)
  • 네이티브 android.graphics.Paint를 허용하는 새 생성자를 Paint에 추가했습니다. 기존 네이티브 Paint 객체를 Compose Paint로 변환하는 확장 함수 toComposePaint()도 추가했습니다. (Ica91b)
  • Android에서 사용할 새 FontFamily.Resolver.resolveAsTypeface를 추가합니다. (I8950b)
  • 도구에서 컴포저블의 내부 상태를 변경할 수 있도록 ToolingState를 추가합니다. (Ie6614)
  • 새로 추가된 애니메이션을 더 잘 지원하도록 도구를 리팩터링합니다. (I8677b)
  • material 및 material3 텍스트 TextFieldOutlinedTextFieldminLines 매개변수를 추가했습니다. 이를 통해 구성요소의 최소 높이를 줄 수로 설정할 수 있습니다. (I4af1d)

버전 1.4.0-alpha01

2022년 10월 24일

androidx.compose.ui:ui-*:1.4.0-alpha01이 출시되었습니다. 버전 1.4.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 동작 감지기용 메서드 awaitEachGesture()가 새로 추가되었습니다. 이 메서드는 forEachGesture()와 유사하게 작동하지만, 반복과 반복 사이에 이벤트가 손실되지 않도록 동작 루프가 전적으로 AwaitPointerEventScope 내에서 작동합니다.
  • forEachGesture()로 인해 동작 간에 이벤트가 손실될 수 있으므로 이 메서드가 지원 중단되고 awaitEachGesture()로 대체되었습니다. (Iffc3f, b/251260206)
  • androidx에서 접근성 객체의 재사용이 지원 중단되었습니다. 지원되는 가장 오래된 버전에서도 성능상의 변화가 미미한 것으로 확인되었습니다. (I0a961)
  • 윤곽선 텍스트 그리기를 지원하기 위해 TextStyleSpanStyle에 실험용 속성으로 DrawStyle이 추가되었습니다. (If24b8, b/155421273)
  • 이제 AnnotatedString.Builderkotlin.text.Appendable을 구현합니다. (I1a061, b/231030444)
  • AnnotatedString.BuilderAnnotatedString의 하위 문자열 및 교차하는 스타일을 추가하는 append(AnnotatedString, start: Int, end: Int) 메서드가 추가되었습니다.
  • ParagraphMultiParagraph 페인트 함수에 윤곽선 텍스트 그리기를 지원하는 DrawStyle 매개변수가 추가되었습니다. (Ic8102, b/155421273)

외부 기여

  • 미리보기에 TV 기기를 추가해주신 vighnesh님께 감사드립니다. (Ie15cd)

버전 1.3

버전 1.3.3

2023년 1월 11일

androidx.compose.ui:ui-*:1.3.3가 출시되었습니다. 버전 1.3.3에 포함된 커밋을 확인하세요.

버그 수정

  • 활동이 Compose View의 상태를 저장할 때 Android 9에서 가끔 발생하는 비정상 종료 문제를 해결했습니다. (I0b755, b/260322832)

버전 1.3.2

2022년 12월 7일

androidx.compose.ui:ui-*:1.3.2가 출시되었습니다. 버전 1.3.2에 포함된 커밋을 확인하세요.

버그 수정

  • protobuf-javalite:3.19.4에서 보안 알림이 발생하지 않도록 하는 Profobuf 3.21.8을 사용하도록 업데이트했습니다(CVE-2022-3171). (b/255545055)

버전 1.3.1

2022년 11월 9일

androidx.compose.ui:ui-*:1.3.1가 출시되었습니다. 버전 1.3.1에 포함된 커밋을 확인하세요.

버전 1.3.0

2022년 10월 24일

androidx.compose.ui:ui-*:1.3.0이 출시되었습니다. 버전 1.3.0에 포함된 커밋을 확인하세요.

1.2.0 이후 중요 변경사항

  • 새로운 실험용 API 모음 LookaheadLayout(이전에 가능하지 않았던 애니메이션 동작 지원)
  • 새로운 실험용 API 모음 Modifier.Node(Modifier.composed의 고성능 대안)
  • 창 인셋 지원이 개선되었습니다.
  • LazyLists의 D패드 및 하드웨어 키보드를 위한 포커스 지원.
  • 대화상자와 팝업에서 지원되는 고도가 8dp로 감소했습니다(일부 맞춤 디자인 시스템의 동작 브레이킹 체인지 - 근거는 beta01 출시 노트 참고).
  • 브레이킹 체인지 없는 사소한 API 개선 다수
  • 여러 가지 버그 수정 및 성능 개선

버전 1.3.0-rc01

2022년 10월 5일

androidx.compose.ui:ui-*:1.3.0-rc01가 출시되었습니다. 버전 1.3.0-rc01에 포함된 커밋을 확인하세요.

API 변경사항

  • Text에서 자동 하이픈 연결을 지원하는 새로운 실험용 API 하이픈을 추가했습니다. (Iaa869)

버그 수정

  • DeviceFontFamilyName 글꼴은 기본적으로 wghtital 변형 설정을 구성하지 않으며, 대신 로드된 Typeface에 플랫폼 설정을 사용합니다. (Ia7a6d, b/246989332)
  • LazyColumn 메모리 누수를 수정했습니다. 수정자가 재사용될 때 onModifierLocalsUpdated가 기본값을 사용하여 호출되지 않고 있었습니다. (b/230168389)

버전 1.3.0-beta03

2022년 9월 21일

androidx.compose.ui:ui-*:1.3.0-beta03가 출시되었습니다. 버전 1.3.0-beta03에 포함된 커밋을 확인하세요.

API 변경사항

  • Text에서 줄바꿈을 맞춤설정하는 옵션을 추가합니다. (I86907)
  • 최소 너비 제약 조건을 지원하기 위해 TextMeasurer.measure 메서드의 size:IntSize 인수를 constraints: Constraints로 변경했습니다. (I37530, b/242707525)

버그 수정

  • 이제 AndroidX 활동의 BackHandler API가 Dialog 컴포저블 내에서 작동합니다. (I35342)

버전 1.3.0-beta02

2022년 9월 7일

androidx.compose.ui:ui-*:1.3.0-beta02가 출시되었습니다. 버전 1.3.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • 여러 컴포저블 콘텐츠 람다 목록을 허용하는 레이아웃에 대한 실험용 오버로드를 추가했습니다. 이를 통해 다른 콘텐츠 람다에 투입된 측정 항목을 다르게 처리할 수 있습니다. (Ic1b4e)

실험용 Focus API 변경사항:

  • FocusDirection.InFocusDirection.Out이 지원 중단되고 FocusDirection.EnterFocusDirection.Exit으로 대체되었습니다. (Ia4262, b/183746982)
  • FocusManager.moveFocus(Enter)FocusManager.moveFocus(Exit)의 맞춤 동작을 지정하기 위해 두 개의 새로운 포커스 속성 들어가기와 나가기 작업을 추가했습니다. (I5f3f9, b/183746982)
  • 이제 FocusRequester.Cancel을 사용하여 포커스 이동을 취소할 수 있습니다. FocusRequester.Cancel은 위, 아래, 왼쪽, 오른쪽, 다음, 이전, 시작, 끝, 들어가기, 나가기와 같은 포커스 속성에서 사용할 수 있습니다. (Ib300f)

버전 1.3.0-beta01

2022년 8월 24일

androidx.compose.ui:ui-*:1.3.0-beta01이 출시되었습니다. 버전 1.3.0-beta01에 포함된 커밋을 확인하세요.

수정자 노드 리팩터링

Modifier/Modifier.Element 인스턴스를 처리하고 LayoutNodes에서 동작을 조정하는 레이어가 대부분 리팩터링되었습니다. 리팩터링은 Compose에 있는 많은 수정자의 공개 API에 영향을 미치지 않았으며 구현 전용 변경사항으로 볼 수 있습니다. 하지만 이 변경사항은 여러 가지 이유로 중요합니다. (Ie4313)

변경사항 요약

추가된 실험용 Modifier.Node API는 레이아웃 노드의 수명 주기와 함께 유지되고 이를 생성한 해당 Modifier.Element의 레이아웃 노드 및 사용량별로 할당되는 인스턴스에서 상태를 유지할 수 있는 추상화를 제공합니다.

일반적으로 이 추상화는 Modifier.composed API의 메커니즘에 의존하지 않고 스테이트풀(Stateful) 수정자를 생성하는 대체 메커니즘을 제공합니다.

위험

이 변경사항은 이전 버전과 엄격하게 바이너리 호환되며 실용적이고 합리적인 한 관찰 가능한 동작 측면에서 이전 버전과 호환됩니다. 그렇지만 이 리팩터링의 영향을 받지 않은 Compose의 하위 시스템은 거의 없으며 테스트에서 다루지 않았고 아직 발견되어 수정되지 않은 방식으로 동작이 변경되었을 가능성이 높습니다.

주의해서 이 버전으로 업그레이드하세요. 문제가 있다고 생각되면 Google에 알려주시기 바랍니다.

실험용 API

모두 '수정자 노드'라는 새로운 개념과 관련된 여러 실험용 API가 추가되었습니다. Modifier.Node는 다음의 결과로 만들어집니다.

  • fun modifierElementOf(…): Modifier
  • abstract class ModifierNodeElement
  • abstract class Modifier.Node
  • abstract class DelegatingNode
  • interface LayoutModifierNode
  • interface DrawModifierNode
  • interface SemanticsNode
  • interface PointerInputNode
  • interface ModifierLocalNode
  • interface ParentDataModifierNode
  • interface LayoutAwareModifierNode
  • interface GlobalPositionAwareModifierNode
  • interface IntermediateLayoutModifierNode

동작 브레이킹 체인지

대화상자 및 팝업에서 지원되는 최대 높이가 8dp로 줄었습니다.

Compose 대화상자 및 팝업에서 지원되는 최대 높이가 30dp에서 8dp로 줄었습니다. 이 변경사항은 머티리얼과 UI 맞춤 대화상자 및 팝업에 모두 영향을 미칩니다. 이 변경사항의 목적은 Android S 미만 버전에서의 접근성 버그를 완화하고, 이러한 창 내의 접근성 서비스가 대화상자나 팝업 내부의 콘텐츠와 상호작용할 수 있도록 보장하는 것입니다.

높이가 8dp보다 높은 수준으로 설정된 맞춤 대화상자나 팝업 구현을 만드는 경우에만 이번 변경사항의 영향을 받습니다. 대화상자 또는 팝업의 높이를 낮춰 보세요. 이 새로운 동작을 선택 해제해야 하는 경우 원하는 높이로 설정된 자체 대화상자 또는 팝업을 포크하는 것을 고려해 보세요. 접근성에 부정적인 영향을 미칠 수 있으며 접근성 서비스에서 대화상자나 팝업의 하단 부분을 조작하고 읽을 수 있도록 하는 것은 개발자의 책임이므로 권장되지 않습니다.

API 변경사항

  • painterResource가 구성 변경 시 업데이트되지 않는 문제를 수정했습니다. (I58e73, b/228862715)
  • rememberTextMeasurer가 더 이상 FontFamily.Resolver 또는 Density, LayoutDirection 매개변수를 사용하지 않습니다. 이러한 매개변수에 맞춤 값을 제공하려면 TextMeasurer 생성자를 사용하세요. (Ia1da3)
  • 대화상자에서 WindowInsets를 지원할 수 있도록 DialogProperties.decorFitsSystemWindows 속성을 추가했습니다. (I57742, b/229378542)
  • 바이너리 호환성을 유지하기 위해 글꼴 생성자를 원래 kotlin 파일로 다시 이동했습니다. 마지막 공개 버전에서 변경된 사항이 없습니다. (Ieb2f3)
  • 여러 등호 정의에서 불필요한 연산자를 삭제했습니다. 이는 아무 효과가 없습니다. (I6c309)
  • FontVariation.Setting이 향후 클램핑 API를 허용하는 봉인 인터페이스입니다. (I11021, b/143703328)
  • CompositionGroup.findParametersSlotTree.kt에 추가합니다. 이를 통해 도구가 전체 슬롯 표를 파싱할 필요 없이 CompositionGroup의 매개변수를 검색할 수 있습니다. (I124fe)

버전 1.3.0-alpha03

2022년 8월 10일

androidx.compose.ui:ui-*:1.3.0-alpha03가 출시되었습니다. 버전 1.3.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 LayoutCoordinates.findRootCoordinates()가 공개됩니다. (I7fa37, b/204723384)
  • PlacementScopeLayoutCoordinates를 가져오는 실험용 API를 추가했습니다. 개발자는 이 API를 사용해 현재 레이아웃의 위치를 기준으로 하위 요소를 어디에 배치할지 알 수 있습니다. (I5482b, b/238632578)
  • 하나의 LayoutCoordinates에서 다른 항목으로 매트릭스 변환을 가져오는 LayoutCoordinates.transformFrom을 추가했습니다. (Ic5ab1, b/238632578)
  • SemanticsModifier.id를 지원 중단하고 대신 시맨틱 ID를 LayoutInfo.semanticsId로 이동했습니다. (Iac808, b/203559524)
  • 이제 API 수준 26 이상의 리소스 글꼴에서 글꼴 변형 설정을 지원합니다. (I900dd, b/143703328)
  • DeviceFontFamilyNameFont에서 가변 글꼴을 지원합니다. (Ic1279, b/143703328)
  • 이제 글꼴 생성자가 O+ 기기에서 가변 글꼴을 구성하기 위해 FontVariation.Setting 목록을 허용합니다. (I11a9d, b/143703328)
  • 가변 글꼴을 정의하고 사용하기 위한 FontVariation API를 추가했습니다. (I3c40c, b/143703328)
  • 이제 LineHeightStyle.Alignment 생성자가 공개됩니다(실험용). (I4bbbe, b/235876330)
  • 이제 Paragraph가 예상/실제이며 Android 및 데스크톱에서 정의됩니다. (Id387e, b/239962983)
  • 이제 인터페이스 Paragraph가 봉인됩니다. Paragraph를 서브클래스로 분류하는 사용 사례는 없으며, 이 변경사항이 본인에게 영향을 주는 경우 Google에 문의해 주시기 바랍니다. (If5247, b/239962983)
  • PlatformTextStyleLineHeightStyle에서 실험용 주석을 삭제했습니다. (I64bef)
  • TextInputService.show|hideSoftwareKeyboard가 지원 중단되었습니다. 대신 앱 코드에서는 SoftwareKeyboardController를, IME 관리 코드에서는 TextInputSession을 (I14e4c, b/183448615)
  • 기존 애니메이션 유형을 위한 새로운 API를 추가했습니다. (I26179)

버그 수정

  • SDK 33 이상에서 POST_NOTIFICATIONS 권한을 부여해야 하는 API에 @RequiresPermission이 추가되었습니다. (Ie542e, b/238790278)

버전 1.3.0-alpha02

2022년 7월 27일

androidx.compose.ui:ui-*:1.3.0-alpha02가 출시되었습니다. 버전 1.3.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 압력을 검색하는 새 속성 PointerInputChange#pressure를 추가했습니다. (I45a5e, b/205164819)
  • 컴포지션에서 TextMeasurer 인스턴스를 쉽게 만들고 기억하는 rememberTextMeasurer를 추가했습니다. (I8d66e)
  • Rect, RoundRect, MutableRect가 이제 contains 함수를 호출하는 Kotlin in 문법을 지원합니다. (Ie42b0, b/238642990)
  • KeyInjectionScope에서 불필요한 함수를 삭제합니다. API의 더 간단한 부분으로 쉽게 구현할 수 있기 때문입니다. 삭제된 함수에는 pressKeys, keysDown, keysUp이 포함됩니다. (I81d77)
  • KeyInjectionScope의 상수 및 매개변수 이름을 리팩터링하여 해당 상수 및 매개변수 단위가 밀리초인 접미사 'Millis'를 포함합니다. (Iabef5)
  • 텍스트 수정 문제를 해결하는 데 도움이 되도록 toStringForLog() 메서드를 EditCommand에 추가했습니다. (I53354, b/228862731)
  • CanvasdrawBehind와 같은 DrawScope에서 작동하는 컴포저블과 수정자 위에서 다양한 스타일의 텍스트를 그리는 방법을 제공하기 위해 DrawScopedrawText 확장 함수를 추가했습니다. (I16a62, b/190787898)
  • Compose 런타임과 별개로 BasicText와 동일한 결과를 생성하는 임의의 텍스트 레이아웃 계산을 지원하는 TextMeasurer라는 새로운 실험용 API를 도입합니다. (I17101)
  • mapTreeSlotTree.kt에 추가합니다. 이를 통해 도구는 asTree와 같이 먼저 메모리 내에서 복사하지 않고도 SlotTree를 검사할 수 있습니다. Layout Inspector의 경우 성능이 약 10배 향상됩니다. (I5e113)
  • 개발자가 라이브러리에서 MultiPreview 주석을 작성하고 재사용할 수 있도록 Compose 미리보기를 변경하여 바이너리 출력 파일에 저장되도록 했습니다. (I85699, b/233511976)

버그 수정

  • Velocity Tracker에 InputEventChange 이벤트를 추가할 때 이제 위치 대신 델타를 고려하므로 타겟 요소가 이동하더라도 모든 사례에서 속도가 올바르게 계산됩니다. (Icea9d, b/216582726, b/223440806, b/227709803)
  • 주석이 있을 때 AnnotatedString.toUpperCase로 인해 발생하는 NPE를 수정했습니다. (I0aca2, b/210899140)

버전 1.3.0-alpha01

2022년 6월 29일

androidx.compose.ui:ui-*:1.3.0-alpha01가 출시되었습니다. 버전 1.3.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 실제 측정/레이아웃 전에 전방 탐색 패스를 지원하는 새 LookaheadLayout을 추가했습니다. 이를 통해 레이아웃이 변경될 때 레이아웃을 사전에 계산할 수 있는 반면 사후 전방 탐색 측정/레이아웃을 허용하여 사전 계산된 크기/위치를 사용하면 타겟에 대한 크기와 위치에 애니메이션을 적용할 수 있습니다. SubcomposeLayouts는 아직 지원되지 않지만, 향후 출시될 예정입니다. (I477f5)
  • 전체 Text의 불투명도를 수정하기 위해 TextStyleSpanStyle의 브러시 버전을 선택적 알파 매개변수에 추가합니다. (Ic2fac, b/234117635)
  • AnnotatedStringTalkBack 링크 지원을 위해 UrlAnnotation 주석 유형과 관련 메서드를 도입했습니다. (I1c754, b/231495122)
  • 유틸리티 함수를 런타임으로 이동했습니다. (I4f729)

버그 수정

  • TextLayoutResult.getLineForOffset에서 예외가 발생하지 않습니다. (Idc5d6, b/235876324)

외부 기여

  • 구성 가능한 함수 내에서 또는 snapshotFlow를 통해 상태를 관찰하는 새 API WindowInfo.keyboardModifiers를 추가했습니다. (Icdb8a)

버전 1.2

버전 1.2.1

2022년 8월 10일

androidx.compose.ui:ui-*:1.2.1가 출시되었습니다. 버전 1.2.1에 포함된 커밋을 확인하세요.

버그 수정

  • 검사기의 nullpointer를 수정했습니다. (b/237987764)
  • 검사기에서 remember 도중 클래스 변환 예외를 수정했습니다. (b/235526153)

버전 1.2.0

2022년 7월 27일

androidx.compose.ui:ui-*:1.2.0가 출시되었습니다. 버전 1.2.0에 포함된 커밋을 확인하세요.

1.1.0 이후 중요 변경사항

  • 포커스 순회 개선:

    • 이제 새로운 BeyondBoundsLayout 핵심 API를 사용하여 Lazy 목록의 포커스 기반 스크롤이 작동합니다.
    • FocusOrderFocusProperties의 새로운 동작 맞춤설정 API
    • 물리적 키보드 또는 TV 리모컨을 사용한 동작 개선
  • 새로운 API:

    • 창 인셋
    • 동작 기반, 무한, 레이아웃 애니메이션의 핵심 프리미티브
    • GraphicsLayer 기능(RenderEffect 포함)
  • 여러 가지 버그 수정 및 성능 개선

버전 1.2.0-rc03

2022년 6월 29일

androidx.compose.ui:ui-*:1.2.0-rc03가 출시되었습니다. 버전 1.2.0-rc03에 포함된 커밋을 확인하세요.

  • 1.2.0-rc02 이후 변경사항 없음

버전 1.2.0-rc02

2022년 6월 22일

androidx.compose.ui:ui-*:1.2.0-rc02가 출시되었습니다. 버전 1.2.0-rc02에 포함된 커밋을 확인하세요.

버전 1.2.0-rc01

2022년 6월 15일

androidx.compose.ui:ui-*:1.2.0-rc01가 출시되었습니다. 버전 1.2.0-rc01에 포함된 커밋을 확인하세요.

API 변경사항

  • Compose 라이브러리의 인터페이스는 이제 jdk8 기본 인터페이스 메서드를 사용하여 빌드됩니다. (I5bcf1)
  • 다른 키를 길게 누르거나 켜는 동안 키 누름을 삽입할 수 있도록 고차 함수를 KeyInjectionScope에 추가했습니다. 이러한 함수에는 withKeysDown, withKeysToggled 등이 포함됩니다. 또한, 특정 메타 키가 눌렸는지 확인하는 속성도 추가되었습니다(예: 제어 키가 눌렸는지 확인하는 isCtrlDown). 각 함수에 관한 문서는 KeyInjectionScope를 참고하세요. (I9f6cd, b/229831515)
  • 맞춤 오버스크롤 효과를 허용하는 Modifier.scrollable 오버로드와 함께 맞춤 오버스크롤 효과가 가능한 실험용 OverscrollEffect가 도입되었습니다.
  • 실험용 LocalOverScrollConfigurationfoundation.gesture에서 기초 패키지로 이동되었으며 이름이 LocalOverscrollConfiguration으로 바뀌었습니다. (If19fb, b/204650733)
  • runComposeUiTestWithoutActivity {}의 이름을 runEmptyComposeUiTest {}로 바꿉니다. 이렇게 하면 이름이 createEmptyComposeRule()에 맞춰집니다. (I6fed7)

버전 1.2.0-beta03

2022년 6월 1일

androidx.compose.ui:ui-*:1.2.0-beta03가 출시되었습니다. 버전 1.2.0-beta03에 포함된 커밋을 확인하세요.

API 변경사항

  • pressKeyTimesisCapsLockOn, 친구를 KeyInjectionScope에 추가했습니다. 또한 이 API는 이제 마우스와 키보드가 결합된 삽입 패턴을 지원합니다(예: 메타 키를 누른 상태에서 마우스 버튼을 클릭). (I4c8da, b/229831515)
  • 키 이벤트 삽입을 위한 실험용 지원을 추가했습니다. performKeyInput을 사용하여 키 이벤트를 전송하거나 performMultiModalInput을 사용한 다중 모달 입력 동작 중에 MultiModalInjectionScopekey 속성을 통해 키 이벤트를 전송합니다. API 문서는 KeyInjectionScope을 참고하세요. (Ic5000, b/229831515)
  • Android에서 지원하는 Google Fonts의 표준 인터넷 소스를 가져오기 위한 새 GoogleFont.Provider.AllFontsListUri를 추가합니다.
  • GoogleFonts가 Compose에서 로드되지 않을 때 다시 발생하는 오류 메시지를 개선합니다. (I0416c)

버그 수정

  • Velocity Tracker에 InputEventChange 이벤트를 추가할 때 이제 위치 대신 델타를 고려하므로 타겟 요소가 이동하더라도 모든 사례에서 속도가 올바르게 계산됩니다. (I51ec3, b/216582726, b/223440806, b/227709803)
  • 이제 활동을 나갔다가 다시 들어가지 않아도 빠른 설정 타일에서 전환한 직후 컴포저블에 Show Layout Bounds 설정이 적용됩니다. (I843d5, b/225937688)
  • 접근성 문자열 조회 시 글꼴 로드가 트리거되지 않습니다. 이전에는 StyleSpans 글꼴을 로드하려고 했으므로 FontFamily.Resolver를 덮어쓴 경우 비정상 종료가 발생했습니다. (I4609d)
  • 커서가 텍스트 필드 끝에 있을 때 앞으로 삭제 키를 눌러도 더 이상 다운되지 않습니다.
  • 이제 DeleteSurroundingTextCommandDeleteSurroundingTextInCodePointsCommand는 생성자 인수가 음수가 아니어야 합니다. (Ica8e6, b/199919707)

버전 1.2.0-beta02

2022년 5월 18일

androidx.compose.ui:ui-*:1.2.0-beta02가 출시되었습니다. 버전 1.2.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • 다른 미리보기 유형에서 기능을 재사용합니다. (I19f39)

버그 수정

  • 단순히 폐기되지 않을 때가 아니라 폐기될 때를 더 잘 반영하기 위해 ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer의 이름을 DisposeOnDetachedFromWindowOrReleasedFromPool로 바꾸었습니다. (If15ca)

버전 1.2.0-beta01

2022년 5월 11일

androidx.compose.ui:ui-*:1.2.0-beta01가 출시되었습니다. 버전 1.2.0-beta01에 포함된 커밋을 확인하세요.

새로운 기능

  • 이 출시는 1.2의 첫 번째 베타 버전입니다.

API 변경사항

  • 표시 가능한 범위를 넘어 항목을 배치할 때 LazyList의 맞춤 구현에서 사용할 수 있는 실험용 BeyondBoundsInterval을 추가했습니다. (Ifabfb, b/184670295)
  • 이제 Modifier.composed의 키가 지정된 버전이 안정적인 API입니다. (Ie65e4, b/229988420)
  • 컴포지션 로컬을 사용하여 현재 뷰 정보를 가져오도록 rememberNestedScrollConnection API를 단순화했습니다. (I67ca7)
  • 이제 @ComposableTarget 주석과 @ComposableTargetMarker로 표시된 주석을 @file 접두사를 사용하여 파일 범위에서 사용할 수 있습니다. 파일 범위에서 타겟 주석을 사용하면 컴파일러는 파일의 모든 구성 가능한 함수가 연결된 Applier를 타겟팅한다고 가정하게 됩니다. 예를 들어 @file:UiComposable을 사용하면 모든 @Composable 함수가 Compose UI Applier를 타겟팅한다고 선언합니다. 다른 Applier를 타겟팅해야 하는 함수는 원하는 Applier에 맞는 타겟 마커 주석을 명시적으로 제공해야 합니다. (I40804)
  • 플랫폼에 독립적인 새 실험용 테스트 API interface ComposeUiTestfun runComposeUiTest(block: ComposeUiTest.() -> Unit)을 도입했습니다. 이 API는 TestRule이 없어도 Compose UI 테스트를 실행하는 데 사용할 수 있습니다. ComposeTestRule 없이 테스트를 실행하려면 테스트를 runComposeUiTest에 람다로 전달하고 수신기 범위 ComposeUiTest의 메서드와 멤버를 사용합니다. 이는 ComposeContentTestRule의 메서드 및 멤버와 동일합니다.

    Android 전용 interface AndroidComposeUiTestfun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)이 추가되어 AndroidComposeTestRule과 마찬가지로 기본 활동에 액세스할 수 있습니다. 더 세밀한 관리를 위해 class AndroidComposeUiTestEnvironment를 직접 인스턴스화할 수 있습니다.

    데스크톱 구현은 class DesktopComposeUiTest이지만, 현재 데스크톱 전용 실행 함수는 제공되지 않습니다.

    테스트를 ComposeTestRule에서 ComposeUiTest로 이전하려면 이 Android 예와 같이 하면 됩니다. 보낸사람:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @get:Rule val rule = createComposeRule()
        @Test
        fun test() {
            rule.setContent {
                Text("Hello Compose!")
            }
            rule.onNodeWithText("Hello Compose!").assertExists()
        }
    }
    

    이전한 후:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @Test
        @OptIn(ExperimentalTestApi::class)
        fun test() = runComposeUiTest {
            setContent {
                Text("Hello Compose!")
            }
            onNodeWithText("Hello Compose!").assertExists()
        }
    }
    
  • 현재 ComposeContentTestRuleComposeTestRuleComposeUiTest에서 확장되지 않습니다. 즉, ComposeUiTest의 확장 함수는 아직 TestRule 인터페이스에서 호출할 수 없습니다. ComposeUiTest가 안정화 API로 전환되면 ComposeContentTestRuleComposeTestRuleComposeUiTest에서 확장되어 변경됩니다. (Ib4e90)

  • LineHeightBehavior의 이름을 LineHeightStyle로 바꿨습니다.

  • LineVerticalAlignment의 이름을 LineHeightStyle.Alignment로 바꿨습니다.

  • LineHeightTrim의 이름을 LineHeightStyle.Trim으로 바꿨습니다.

  • LineHeightStyle의 기본 생성자 값을 삭제했습니다. (I582bf, b/181155707)

  • TextStyleSpanStyleBrush를 추가하여 그라데이션 색으로 텍스트를 그리는 방법을 제공합니다. (I53869, b/187839528)

  • LineHeightBehaviortrimFirstLineTop, trimLastLineBottom 속성을 단일 enum(LineHeightTrim)으로 변경했습니다. LineHeightTrim에는 2개의 불리언으로 정의된 4개의 상태 값(FirstLineTop, LastLineBottom, 모두, 모두 아님)이 있습니다. (Ifc6a5, b/181155707)

  • LineHeightBehaviorTextStyleParagraphStyle에 추가되었습니다. LineHeightBehavior는 줄 높이를 첫 번째 줄의 상단과 마지막 줄의 하단에 적용할지를 제어합니다. 또한, TextStyle(lineHeight)에서 제공하는 공간의 선 정렬도 정의합니다.

    예를 들어, LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)를 통해 CSS가 정의한 것과 비슷한 동작을 가져올 수 있습니다.

  • trimFirstLineTop, trimLastLineBottom 구성은 includeFontPadding이 false인 경우에만 올바르게 작동합니다. (I97332, b/181155707)

  • PlatformParagraphStyle.lerpPlatformSpanStyle.lerp 함수가 최상위 함수로 변경되었습니다. (I9a268)

버그 수정

  • 이제 PointerInputChange::copy 문서가 단순 복사본임을 올바르게 표시합니다. (I182f5)
  • 높이가 제한되고 모든 텍스트 줄이 담기지 않는 경우 생략 부호를 지원합니다. (Ie528c, b/168720622)
  • 기본 includeFontPadding을 사용 설정했습니다. TextStyle.platformTextStyle 속성을 사용하여 includeFontPadding을 사용 중지할 수 있습니다. 조만간 기본 동작을 변경할 예정이지만 그때까지는 이 방법을 사용하여 줄 높이 개선사항을 더 원활하게 통합하고(aosp/2058653) TextField 클리핑 문제를 해결할 수 있습니다. (I01423, b/171394808)

외부 기여

  • 이제 세로로 스크롤하면 Android에서 MouseInjectionScope.scroll(delta = someDelta)가 반전됩니다(someDelta가 양수이면 아래로 스크롤됨). (Ifb697, b/224992993)

버전 1.2.0-alpha08

2022년 4월 20일

androidx.compose.ui:ui-*:1.2.0-alpha08가 출시되었습니다. 버전 1.2.0-alpha08에 포함된 커밋을 확인하세요.

API 변경사항

  • 발전을 통해 향후 국제화 과정을 제대로 지원할 수 있도록 pluralStringResource 함수를 실험용으로 표시했습니다. (If24e4)
  • 이제 Paragraph 및 MultiParagraph에서 Constraints 매개변수를 허용합니다. Constraints.maxHeight를 전달하는 것은 현재 작동하지 않지만 나중에 높이를 기준으로 줄임표를 추가하는 등 일부 계산이 가능해집니다. (I6afee, b/168720622)
  • 이제 SubcomposeSlotReusePolicy.getSlotsToRetain()이 내부에 새 항목 추가를 허용하지 않는 맞춤 MutableSet 같은 클래스를 허용합니다. (Icd314)
  • 이제 PointerIcon이 @Stable 인터페이스입니다. (I9dafe)
  • PointerInputChange에서 부분 소비(아래쪽 OR 위치)를 지원 중단했습니다. consume()을 사용하여 변경사항을 완전히 사용할 수 있습니다. isConsumed를 사용하여 다른 사용자가 이전에 변경사항을 사용했는지 확인할 수 있습니다.
  • 이제 PointerInputChange::copy()가 항상 얕은 복사본을 만듭니다. 즉, 사본 중 하나가 소비되면 PointerInputChange의 사본이 사용됩니다. 결합되지 않은 PointerInputChange를 만들려면 생성자를 대신 사용하세요. (Ie6be4, b/225669674)
  • Compose > View 방향으로 Compose와 View 간의 중첩 스크롤 상호 운용성을 사용 설정합니다. 즉, Compose 상위 요소가 중첩 스크롤 뷰에서 중첩 스크롤 델타를 수신할 수 있습니다. (If7949, b/174348612)
  • 새로운 SemanticsProperty testTagsAsResourceId를 Compose가 뷰 시스템용으로 설계된 UIAutomator 테스트를 준수하도록 하는 데 사용할 수 있습니다. (I39c20)
  • FontFamily.SansSerif를 사용할 때 Android의 시스템 글꼴에 사용 가능한 모든 가중치를 표시합니다. 이렇게 하면 API 21~28에서 내부적으로 sans-serif-medium 같은 대체 글꼴 이름이 사용됩니다. 이는 동작 변경사항입니다. 이전에는 API 21~28에서 가중치 400과 700만 지원되었기 때문입니다. (I380fe, b/156048036, b/226441992)
  • Paragraph 및 Multiparagraph 지시자가 위치 인수를 선택적 인수 앞에 재정렬했습니다. (Idafaa)
  • 이제 AndroidFont가 typefaceLoader를 생성자 매개변수로 사용합니다. (I2c971)

버전 1.2.0-alpha07

2022년 4월 6일

androidx.compose.ui:ui-*:1.2.0-alpha07가 출시되었습니다. 버전 1.2.0-alpha07에 포함된 커밋을 확인하세요.

API 변경사항

  • 새 함수 Snapshot.withoutReadObservation { ... }을 추가했습니다. 이를 통해 사용자는 이 블록 중에 읽은 상태 값의 변경사항을 구독하지 않고 전달된 람다를 실행할 수 있습니다. 스냅샷 기반 스레드에서 안전하게 읽고 쓸 수 있는 이점을 원하지만 불필요한 재구성 또는 재측정을 유발하지 않고 값을 읽고자 하는 사용 사례에 유용할 수 있습니다. (I9f365, b/214054486)
  • 개발자는 ComposeViewconsumeWindowInsets 확장 속성을 사용하여 Android WindowInsets 사용을 중지할 수 있습니다. 이렇게 하면 계층 구조에 있는 별도의 ComposeViews가 서로 간섭하지 않고 각각 WindowInsets를 적용할 수 있습니다. (I0ef08, b/220943142)
  • IME에 소수 구분자를 특별히 포함하기 위해 Keyboard.Number의 대안으로 KeyboardType.Decimal을 추가했습니다. (Iec4c8, b/209835363)
  • PointerEventType.ScrollPointerEvent.scrollDelta는 이제 안정적인 API입니다. (I574c5, b/225669674)
  • 뷰 클래스 협력을 위해 View와 Compose 간의 중첩 스크롤 상호 운용성을 사용 설정합니다. 즉, Compose가 이제 스크롤 델타를 (협력하는) 뷰 상위 요소로 전달할 수 있습니다. (I5d1ac, b/174348612)
  • 시스템 전체의 텍스트 굵게 표시 접근성 설정을 통합하도록 FontFamily.Resolver를 업데이트했습니다. (I6c1e7)
  • Font(AssetManager, String, ...)를 지원 중단하고 Font(String, AssetManager, ...)로 대체했습니다. 이는 실험용 API입니다. (I1c7a4)
  • 글꼴 대체 체인 중에 시스템에서 설치된 글꼴을 선택적으로 조회할 수 있는 새로운 글꼴 설명자 Font(DeviceFontFamilyName)를 추가합니다. (I30468, b/219754572)
  • TextStyle/ParagraphStyle에 includeFontPadding의 임시 호환성 구성을 추가했습니다. includeFontPaddingTextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))을 통해 변경할 수 있습니다. 이는 이전을 사용 설정하기 위한 임시 구성 옵션이며 삭제됩니다. (If47be, b/171394808)
  • 디버깅 도움말을 위해 GoogleFont.Provider.isAvailableOnDevice 확장 프로그램을 추가합니다. (I64e31)
  • @ArrayRes와 함께 사용할 GoogleFont.Provider 생성자를 추가합니다. (Ic5ee1, b/225984280)
  • Compose GoogleFont가 이제 Font(GoogleFont)이며 그 외의 경우 API가 안정적으로 유지됩니다. (I125f2)

버그 수정

  • 내부 패딩이 사용되도록 린트 검사를 material/Scaffold에 추가했습니다. (Ifb111)

버전 1.2.0-alpha06

2022년 3월 23일

androidx.compose.ui:ui-*:1.2.0-alpha06가 출시되었습니다. 버전 1.2.0-alpha06에 포함된 커밋을 확인하세요.

API 변경사항

  • 포커스를 포커스 가능 타겟에 요청하는 RequestFocus 시맨틱 작업을 추가했습니다. (I17b71)
  • 현재 레이아웃 방향이 RTL인 경우 VectorPainter의 콘텐츠를 뒤집을 수 있는 자동 미러링을 지원하도록 벡터 드로어블 파싱을 업데이트했습니다. (I79cd9, b/185760237)
  • API 호환성을 위해 그림자/주변 색상이 Modifier.graphicsLayer의 후행 매개변수가 되도록 업데이트되었습니다. (I3f864, b/160665122)

  • 브레이킹 체인지 없는 API 변경을 위해 GraphicsLayerScope의 그림자/주변 색상에 기본 구현을 추가했습니다.

  • RSB 이벤트에 이벤트 시간을 추가했습니다. (Ief8ae)

  • 이제 FocusOrderFocusProperties에 병합되었으며 focusProperties()에서 이제 focusOrder()의 모든 기능을 사용할 수 있습니다. FocusOrderfocusOrder()가 지원 중단되었습니다. focusRequester를 허용하는 focusOrder()focusProperties()가 결합된 focusRequester() 수정자로 대체해야 합니다. 이를 통해 수정자는 관심사를 더 강력하게 분리할 수 있습니다. (I601b7)

  • 이제 RecyclerViewCompose를 모두 업그레이드하면 Compose 뷰를 하위 요소로 사용하는 RecyclerView의 스크롤 성능이 훨씬 향상됩니다.

  • 내장된 기본 전략을 검색하는 수단으로 ViewCompositionStrategy.Default를 추가합니다.

  • 새로운 기본 전략인 ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer를 추가합니다. RecyclerView와 같은 풀링 컨테이너를 적절하게 처리하는 역할을 합니다. (If7282)

  • 다중 미리보기 기능을 추가하는 첫 번째 단계로 주석 클래스에 @Preview로 주석을 달 수 있는 지원을 추가했습니다. 이러한 주석은 컴포저블 메서드나 기타 주석 클래스에 주석을 달 때 사용할 수 있으며, 그러면 지정된 @Preview에 간접적으로 주석이 달린 것으로 간주될 수 있습니다. (I12eff)

  • @Preview의 기기 목록에 참조 기기가 추가되었습니다. (I071c9)

버그 수정

  • @UiComposable 대신 적절하고 구성 가능한 주석 @VectorComposable을 사용하도록 벡터 그래픽 API를 업데이트했습니다. (I942bc)
  • AnnotatedString.Builder.withStyle에서 교차 인라인을 삭제합니다. (If84d5)

외부 기여

  • compose-ui: GraphicsLayerScopeambientShadowColorspotShadowColor 속성을 추가합니다. (I1ba1a, b/160665122)
  • 이제 복수형 리소스가 pluralStringResource 함수를 통해 지원됩니다. (Ib2f23, b/191375123)

버전 1.2.0-alpha05

2022년 3월 9일

androidx.compose.ui:ui-*:1.2.0-alpha05가 출시되었습니다. 버전 1.2.0-alpha05에 포함된 커밋을 확인하세요.

API 변경사항

  • TextToolbar는 이제 ActionCallback 대신 람다 인수를 사용합니다. (Ib2eb9, b/197950089)
  • Tiramisu DP2와 일치하도록 코어와 appcompat의 null 허용 여부를 업데이트했습니다. (I0cbb7)
  • 측정된 인터페이스가 이제 parentData 속성을 노출합니다. (I3313f)
  • 이제 Modifier.onPlacedOnPlacedModifier 인터페이스가 안정화되었습니다. (Ib5482)
  • 만세! 이제 Compose 애니메이션이 개발자 옵션의 'Animator 길이 배율' 설정을 지원합니다. (I5a4fc, b/161675988)
  • BeyondBoundsLayout 수정자 로컬을 추가했습니다. (If8b51, b/184670295)
  • 텍스트: 이제 includeFontPadding은 기본적으로 꺼져 있습니다. includeFontPadding=false의 결과로 발생하는 클리핑 문제가 처리되며 세로로 긴 스크립트의 경우 클리핑이 발생하지 않습니다. (I31c84, b/171394808)

버그 수정

  • 이미 콘텐츠가 있는데 콘텐츠를 설정하려고 하면 ComposeContentTestRule.setContent에서 IllegalStateException이 발생합니다. (I888a5, b/199631334)
  • Android에서 클립보드를 읽는 동안 클립보드 콘텐츠로 인해 발생하는 비정상 종료 문제를 해결했습니다. (I06020, b/197769306)
  • RSB 스크롤 샘플을 개선했습니다. (I6a596)

외부 기여

  • Kotlinx 코루틴 1.6.0을 사용하도록 업데이트했습니다. (I3366d)

버전 1.2.0-alpha04

2022년 2월 23일

androidx.compose.ui:ui-*:1.2.0-alpha04가 출시되었습니다. 버전 1.2.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • 구성 가능한 함수가 사용 목적으로 설계되지 않은 Applier를 타겟팅하도록 호출되면 컴파일 시간 보고를 허용하는 ComposableTarget, ComposableTargetMarkerComposableOpenTarget을 추가했습니다.

    대부분의 경우 Compose 컴파일러 플러그인에서 주석을 추론할 수 있으므로 이러한 주석을 직접 사용할 일은 거의 없습니다. 추론할 수 없는 경우는 맞춤 Applier, 구성 가능한 추상 함수(예: 인터페이스 메서드), 구성 가능한 람다인 필드나 전역 변수(로컬 변수 및 매개변수가 추론됨)를 생성 및 사용하는 경우 또는 ComposeNode나 구성 가능한 관련 함수를 사용하는 경우입니다.

    맞춤 Applier의 경우 ComposeNode 또는 ReusableComposeNode를 호출하는 구성 가능한 함수는 함수와 구성 가능한 람다 매개변수 유형에 ComposableTarget 주석을 추가해야 합니다. 하지만 ComposableTarget을 직접 사용하는 대신 ComposableTargetMarker 주석이 달린 주석을 만들어 표시된 주석을 사용하는 것이 좋습니다. ComposableTargetMarker로 표시된 구성 가능한 주석은 applier 매개변수로 속성 클래스의 정규화된 이름을 갖는 ComposbleTarget과 동일합니다. ComposableTargetMarker를 사용하는 예는 anroidx.compose.ui.UiComposable을 참고하세요. (I38f11)

  • Font(resId, ...)는 이제 안정적인 API에서 loadingStrategy를 사용합니다. (Ief3d2)

  • FontLoadingStrategy는 이제 안정적인 API입니다. (I1ee35, b/174162090)

  • Text에서 비동기 글꼴 로드를 지원합니다. (I77057, b/214587005)

  • 맞춤 Font.ResourceLoaderFontFamily.Resolver로 변환하기 위한 브리지 API를 추가했습니다. (Ia0060)

버그 수정

  • 제공된 FontFamily.Resolver는 Popup과 같은 하위 컴포지션에 전달됩니다.
  • 제공된 Font.ResourceLoader는 Popup과 같은 하위 컴포지션에 전달됩니다. (I48fa5)

버전 1.2.0-alpha03

2022년 2월 9일

androidx.compose.ui:ui-*:1.2.0-alpha03가 출시되었습니다. 버전 1.2.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • TextInputSessionTextInputServicenotifyFocusedRect 메서드가 이제 지원 중단되며 호출되지 않습니다. 대신 BringIntoViewRequester를 사용하세요. (Ia4302, b/192043120, b/216842427, b/178211874)
  • RenderNode 스텁 클래스에 destroyDisplayListData 메서드를 도입했습니다. (I1e659, b/216660268)
  • 사전 작성된 SubcomposeLayout의 하위 요소를 미리 측정할 수 있는 새 API를 추가했습니다. (I857ea)
  • 컴포저블 람다를, 호출되는 새 위치로 상태 및 상응하는 노드를 이동시키는 람다로 변환하는 movableContentOf를 추가했습니다. 이전 호출이 컴포지션을 종료하면 상태가 일시적으로 유지되고 새 람다 호출이 컴포지션에 진입하면 상태 및 관련 노드가 새 호출 위치로 이동됩니다. 새로 추가된 호출이 없으면 상태는 완전히 삭제되고 관찰자가 알림을 받습니다.

    동일한 컴포지션에서 movableContentOf 람다가 여러 번 호출되면 호출마다 새 상태와 노드가 생성되고, 호출이 컴포지션을 종료하고 새 호출이 진입함에 따라 상태는 호출되는 순서로 첫 번째 종료 호출에서 진입 호출로 이동됩니다. 새 호출로 요청하지 않은 모든 상태는 완전히 삭제됩니다. (Ib4850)

  • 이제 LocalFontFamilyResolver.current를 통해 FontFamilyResolver를 사용할 수 있습니다.

  • Compose 사용 외부에서 새로운 FontFamily 리졸버를 만드는 createFontFamilyResolver(context)createFontFamilyResolver(context, coroutineScope)를 추가했습니다.

  • Paragraph 및 MultiParagraph에서 이제 FontFamily.Resolver를 사용합니다.

  • 이제 TextLayoutResult.layoutInput.fontFamilyResolver에 이 레이아웃에 사용되는 리졸버가 포함되며 TextLayoutResult.layoutInput.resourceLoader는 더 이상 사용되지 않으므로 지원 중단되었습니다. (Id5a45, b/174162090)

  • 대체 동작으로 비동기 및 선택적 글꼴 로드를 지원합니다. 이 경로는 Text 및 TextField에서 사용되며 FontFamilyResolver를 통해 노출됩니다.

  • FontFamilyResolver.preload를 통한 글꼴 미리 로드를 지원합니다.

  • FontFamilyResolver.setAsyncLoadContext를 사용하여 비동기 글꼴 로드에 사용되는 전역 코루틴 컨텍스트를 설정할 수 있습니다. (I87fe8, b/174162090)

  • Android에서 새로운 유형의 글꼴 리소스 설명자를 제공하는 새로운 하위 수준 API인 AndroidFont를 추가했습니다. 예를 들어 앱별 백엔드에서 글꼴을 로드하거나 기기에 사전 설치된 글꼴을 선택적으로 찾거나 현재 글꼴 팩토리에서 제공하지 않는 리소스에서 글꼴을 로드합니다.

  • 선택적 및 비동기 글꼴 로드를 지원하도록 Font.ResourceLoaded API를 확장했습니다. 애플리케이션 개발자는 이 API를 직접 사용하지 않는 것이 좋습니다. 새로운 유형의 글꼴을 추가하려면 AndroidFont를 참고하세요.

  • Font.AndroidResourceLoader 확장 함수를 사용하면 컴포지션 외부에 있을 때 Font.ResourceLoader를 구성할 수 있습니다.

  • 리소스 글꼴이 다운로드 가능한 글꼴 XML을 참조할 때 비동기 로드를 허용하도록 리소스 기반 글꼴에 loadingStrategy 매개변수를 추가했습니다. (Ie5aea, b/174162090)

  • Typeface(FontFamily) 생성자가 지원 중단되었습니다. 이전에는 글꼴 미리 로드에 사용되었으며 다운로드 가능한 글꼴의 경우에는 최대 10초가 걸릴 수 있습니다. 다운로드 가능한 글꼴을 사용하면 이 호출이 10초 동안 차단될 수 있습니다. 대신 FontFamilyResolver.preload를 사용하세요.

  • fontResource(FontFamily): Typeface는 지원 중단되었습니다. 이전에는 글꼴 미리 로드에 사용되었으며 다운로드 가능한 글꼴의 경우에는 최대 10초가 걸릴 수 있습니다. 대신 FontFamilyResolver.preload를 사용하세요. (If8e7c, b/174162090)

  • maxSlotsToRetainForReuse를 허용하는 SubcomposeLayoutState 생성자가 이제 지원 중단됩니다. 대신 SubcomposeSlotReusePolicy를 허용하는 새 생성자가 있습니다. 새 인터페이스를 통해 향후 재사용을 위해 유지해야 하는 슬롯을 더 세밀하게 제어할 수 있습니다. (I52c4d)

  • HSV 및 HSL 함수를 Color에서 비실험용 API로 노출합니다. Oklab 색상 공간은 이제 공개 API입니다. (I08fb6, b/180731008)

  • 공개 API에 있도록 의도하지 않았으며 어떤 작업도 하지 않은 AndroidComposeTestRule.AndroidComposeStatement가 지원 중단되었습니다. (Ibc46b)

  • 내부 생성 kt 클래스 이름을 바꿨습니다. (Ia0b9e, b/174162090)

  • FontLoadingStrategy.values를 삭제했습니다. (I42a9d, b/174162090)

  • 전역 글꼴 로더가 이제 FontFamilyResolver입니다. (I4f773, b/174162090)

  • 데스크톱용 새 글꼴 로드 시스템을 사용합니다. (I9ce5c, b/174162090)

  • FontFamily.Resolver.resolveState<Any>를 반환합니다. (I4406c, b/174162090)

버그 수정

  • 소프트 입력 모드가 ADJUST_PAN일 때 TextField에 포커스가 있고 키보드가 표시되는 경우 TextField가 이제 키보드 위에 유지됩니다. (I8eaeb, b/190539358, b/192043120)
  • 데스크톱에서 FontFamily.Resolver에 컴포지션 로컬을 사용합니다.
  • 데스크톱 FontLoader가 지원 중단되었습니다.
  • 데스크톱의 새로운 createFontFamilyResolver 팩토리 (I6bbbb, b/174162090)
  • 텍스트 필드 간 포커스를 변경할 때 소프트 키보드 입력 유형이 더 이상 깜박이지 않습니다. (I1bf50, b/187746439)

버전 1.2.0-alpha02

2022년 1월 26일

androidx.compose.ui:ui-*:1.2.0-alpha02가 출시되었습니다. 버전 1.2.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 측면 버튼이 회전하는 Wear 기기의 Modifier.onRotaryScrollEvent()Modifier.onPreRotaryScrollEvent()를 추가했습니다. (I18bf5, b/210748686)
  • 실험용 View.createLifecycleAwareRecomposer 확장 프로그램을 추가합니다. (I0cde6)

외부 기여

  • 이제 PointerEvent.scrollDelta.y가 Android에서 반전됩니다. 마우스 휠을 오른쪽으로 기울이면 이제 -1이 아닌 1을 반환합니다. (Ia9811)

버전 1.2.0-alpha01

2022년 1월 12일

androidx.compose.ui:ui-*:1.2.0-alpha01가 출시되었습니다. 버전 1.2.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • FontFamily.canLoadSynchronously가 지원 중단되었습니다. 이 속성에는 시맨틱 의미가 없습니다. (Ica5ef)
  • Layout Inspector에서 변하지 않는 ID를 생성하도록 ID 필드가 CompositionData에 추가되었습니다. (Ic116e)
  • 미리보기 기기 목록에 Wear OS 기기 ID가 추가되었습니다. (I93232)

종속 항목 업데이트

  • 이제 Kotlin 1.6.10에 종속됩니다.

버전 1.1

버전 1.1.1

2022년 2월 23일

androidx.compose.ui:ui-*:1.1.1가 출시되었습니다. 버전 1.1.1에 포함된 커밋을 확인하세요.

버그 수정

  • androidx.compose.ui.platform.RenderNodeLayer.updateDisplayList에서 발생하는 NullPointerException을 수정합니다. (aosp/1947059, b/206677462)
  • Android에서 클립보드를 읽는 동안 클립보드 콘텐츠로 인해 발생하는 비정상 종료 문제를 해결했습니다. (I06020, b/197769306)
  • LazyVerticalGrid의 RTL을 수정했습니다. (aosp/1931080, b/207510535)

버전 1.1.0

2022년 2월 9일

androidx.compose.ui:ui-*:1.1.0가 출시되었습니다. 버전 1.1.0에 포함된 커밋을 확인하세요.

1.0.0 이후 중요 변경사항

  • Android 12 오버스크롤 효과의 공개 버전 지원
  • 터치 영역 크기 조정 개선
    • Compose 1.0의 경우 Material 구성요소는 Material 접근성 가이드라인 터치 영역 크기에 맞게 레이아웃 공간을 확장합니다. 예를 들어 Button의 크기를 더 작게 설정하더라도 버튼 터치 영역은 최소 48x48dp로 확장됩니다. 이렇게 하면 Compose Material이 Material Design 구성요소의 동작과 동일하게 정렬되어 뷰와 Compose를 함께 사용할 때 일관되게 동작합니다. 또한 이러한 변경을 통해 Compose Material 구성요소를 사용하여 UI를 만들 때 터치 영역 접근성에 관한 최소 요구사항이 충족됩니다.
  • Navigation Rail의 공개 버전 지원
  • 다수의 이전 실험용 API의 공개 버전 전환
  • 최신 버전의 Kotlin 지원

버전 1.1.0-rc03

2022년 1월 26일

androidx.compose.ui:ui-*:1.1.0-rc03가 출시되었습니다. 버전 1.1.0-rc03에 포함된 커밋을 확인하세요.

버그 수정

  • Compose Material 1.1.0-rc03을 지원하도록 업데이트했습니다.

버전 1.1.0-rc01

2021년 12월 15일

androidx.compose.ui:ui-*:1.1.0-rc01가 출시되었습니다. 버전 1.1.0-rc01에 포함된 커밋을 확인하세요.

버그 수정

  • 접근성 스크롤 작업 누락을 일으키는 버그를 수정했습니다. (I7cbfb)
  • 이제 HardwareRenderer.isDrawingEnabled()false이면 호출 시간 동안 이를 사용 설정하여 SemanticsNodeInteraction.captureToImage()도 작동합니다. (Idf3d0)

버전 1.1.0-beta04

2021년 12월 1일

androidx.compose.ui:ui-*:1.1.0-beta04가 출시되었습니다. 버전 1.1.0-beta04에 포함된 커밋을 확인하세요.

새로운 기능

  • Kotlin 1.6.0과 호환되도록 업데이트했습니다.

API 변경사항

  • androidx.core.view에서 null 허용 여부를 정리했습니다. (I7078a, b/204917439)
  • 사용자가 PointerInputchange를 전체로 소비하거나 소비 여부를 확인할 수 있는 실험용 API를 추가했습니다. (I2e59d)
  • UI 레이어에 마우스 스크롤 휠 이벤트 지원을 추가했습니다. (Ia14eb, b/198214718)
  • 동등성을 비교하고 최적화를 건너뛰는 데 적합한 키를 허용하는 실험용 Modifier.composed 오버로드를 추가했습니다. (Ice799, b/205851704)
  • 이제 ComposeNotIdleExceptionThrowable에서 직접 확장되지 않고 Exception에서 확장됩니다. 즉, Exception을 포착한 catch 절이 이제 ComposeNotIdleException을 포착할 수도 있습니다. 이전에는 포착하지 않았습니다. (I9c217)

버그 수정

  • IME 가시성이 변경될 때 텍스트 핸들이 이동하지 않는 문제를 수정했습니다. (I25f2e)

버전 1.1.0-beta03

2021년 11월 17일

androidx.compose.ui:ui-*:1.1.0-beta03이 출시되었습니다. 버전 1.1.0-beta03에 포함된 커밋을 확인하세요.

API 변경사항

  • 배치 변경사항을 준수할 수 있도록 새로운 수정자 Modifier.onPlaced를 추가했습니다. 적용된 배치 변경사항에 따라 하위 수정자의 오프셋이 추가로 변경될 수 있습니다. (I558fd)
  • InjectionScope.flush()InjectionScope.dispose()를 삭제했습니다. 모든 이벤트 플러시와 범위 삭제가 이제 전과 같이 호출된 perform*Input() 메서드 끝에서 발생합니다. (I2bed8)
  • MultiModalInjectionScope.TouchMultiModalInjectionScope.Mouse를 삭제했습니다. 다중 모달 동작의 터치 및 마우스 이벤트를 삽입하기 위해 이제 MultiModalInjectionScope.touch()MultiModalInjectionScope.mouse()를 사용할 수 있습니다. 둘 다 모달리티의 수신기 범위가 있는 람다를 허용합니다. (Idde18)

버그 수정

  • 이제 TouchInjectionScope.swipeWithVelocity의 기본 durationMillis 값이 스와이프가 가능하도록 계산됩니다. (I19deb)

버전 1.1.0-beta02

2021년 11월 3일

androidx.compose.ui:ui-*:1.1.0-beta02가 출시되었습니다. 버전 1.1.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • 스크롤하여 항목을 뷰로 가져오도록 상위 요소에 요청을 전송할 수 있는 실험용 BringIntoView API를 추가했습니다. (Ib918d, b/195353459)
  • 도구 지원을 위한 새로운 Animation API가 있습니다. 특히, 이 API를 통해 전환에서 애니메이션과 구성을 검사하는 도구를 사용할 수 있습니다. (I4116e)

외부 기여

  • Modifier.pointerHoverIcon을 추가했습니다. (I95f01)

버전 1.1.0-beta01

2021년 10월 27일

androidx.compose.ui:ui-*:1.1.0-beta01가 출시되었습니다. 버전 1.1.0-beta01에 포함된 커밋을 확인하세요.

API 변경사항

  • 스크롤하여 항목을 뷰로 가져오도록 요청을 상위 요소에 보낼 수 있는 실험용 API인 BringIntoView를 추가했습니다. (Ib918d, b/195353459)
  • 도구 지원을 위한 새로운 Animation API가 있습니다. 특히, 이 API를 통해 전환에서 애니메이션과 구성을 검사하는 도구를 사용할 수 있습니다. (I4116e)

버전 1.1.0-alpha06

2021년 10월 13일

androidx.compose.ui:ui-*:1.1.0-alpha06가 출시되었습니다. 버전 1.1.0-alpha06에 포함된 커밋을 확인하세요.

API 변경사항

  • ViewRootForInspectorLayoutInfo.ownerViewId에서 ExperimentalComposeUiApi를 삭제합니다. (I5c2e3)
  • Layout에 하위 요소가 없는 오버로드가 추가되었으며 효율성이 개선되었습니다. (Ib0d9a)
  • 교차 모듈을 호출해야 하는 컴포저 메서드에서 InternalCompilerApi를 삭제했습니다. (I1aa0b)
  • 이제 SemanticsNodeInteraction.performSemanticsAction이 함수가 호출된 SemanticsNodeInteraction을 반환합니다. (I9e5db)
  • TouchMode/NonTouchMode를 감지하도록 LocalInputModeManager CompositionLocal을 추가했습니다. (I6a83c, b/175899786)
  • 소비자가 길게 누르기 제한 시간과 같은 항목의 올바른 값을 가져올 수 있도록 LayoutInfoviewConfiguration: ViewConfiguration을 추가했습니다. (I76ca6)
    • 테스트에서 길게 누르기 제한 시간이나 터치 슬롭과 같은 항목에 따라 입력 삽입을 조정할 수 있도록 InjectionScopeviewConfiguration: ViewConfiguration이 추가되었습니다.
    • 터치 입력과 마우스 입력 모두, 길게 누르기와 두 번 탭의 기본 지속 시간이 InjectionScope.viewConfiguration의 값에 기반하도록 변경했습니다.
  • TextField와 DropdownMenu가 내부에 있는 ExposedDropdownMenuBox에 따라 ExposedDropdownMenu를 구현합니다. (If60b2)
  • dismissOnOutsideClick을 PopupProperties에 추가했습니다. 지원 중단된 dismissOnClickOutside를 대체합니다. 새 속성은 클릭 위치와 앵커 경계를 수신하여 onDismissRequest의 호출 여부를 더욱 세밀하게 제어합니다. 예를 들어 이 속성은 앵커에 적용된 터치와 관련해 앵커 해제를 방지하는 데 유용할 수 있습니다.
    • updateAndroidWindowManagerFlags를 PopupProperties에 추가했습니다. 팝업에서 Android WindowManager에 전달된 플래그를 하위 수준으로 제어합니다. 람다의 매개변수는 PopupProperties 값에서 계산된 플래그가 되고 이 플래그는 결과적으로 WindowManager 플래그가 됩니다(예: 포커스 가능). 람다의 결과는 Android WindowManager에 전달되는 최종 플래그입니다. 기본적으로 updateAndroidWindowManagerFlags는 매개변수에서 계산된 플래그를 그대로 둡니다. 이 API는 팝업에 매우 특정한 동작 요구사항이 있는 경우에만 주의해서 사용해야 합니다. (I6e9f9)
  • Recomposer.state를 지원 중단하고 Recomposer.currentState로 대체하여 유형을 StateFlow로 변경했습니다. (Ic2ab3, b/197773820)
  • flush()dispose()InjectionScope에 추가했습니다. 큐에 추가된 모든 이벤트를 즉시 플러시하려는 경우 및 범위를 삭제하려는 경우에 각각 사용하세요. (Ifb73a)
  • 스크롤 가능한 컨테이너를 주어진 매처와 일치하는 콘텐츠까지 스크롤하는 performScrollToNode(matcher: SemanticsMatcher)를 추가했습니다. (Ic1cb8)
  • 이제 InjectionScopeDensity를 구현하므로 performTouchInput과 친구에서 px와 dp 간에 쉽게 변환할 수 있습니다. (I8fe1f)

버그 수정

  • 이제 AndroidView가 ViewTreeLifecycleOwner 및 ViewTreeSavedStateRegistryOwner를 통해 LocalLifecycleOwner 및 LocalSavedStateRegistryOwner를 뷰에 전파합니다. (I38f96, b/179708470)
  • WearOS SwipeToDismissBox가 때때로 스와이프를 처리하지 않는 문제를 수정했습니다. (I9387e)
  • 삽입된 입력 이벤트 간의 기본 시간을 10ms에서 16ms로 변경했습니다. 이를 통해 특정 스와이프와 같은 입력 동작을 실행하는 테스트의 결과가 변경될 수 있습니다. (I829fd)

버전 1.1.0-alpha05

2021년 9월 29일

androidx.compose.ui:ui-*:1.1.0-alpha05가 출시되었습니다. 버전 1.1.0-alpha05에 포함된 커밋을 확인하세요.

API 변경사항

  • 수정자 간 통신 지원을 추가했습니다. (Id5467, b/198826874)
  • PointerEventChange에 실험용 기록 포인터를 추가했습니다. (Ic1fd8, b/197553056, b/199921305)
  • density: DensitylayoutDirection: LayoutDirectionLayoutInfo에 추가했습니다. 이를 통해 LayoutInfo 사용자는 LayoutInfo에 노출된 측정기준과 위치를 올바르게 해석할 수 있습니다. (I002f1)
  • 마우스 이벤트 삽입을 위한 실험용 지원을 추가했습니다. performMouseInput을 사용하여 마우스 이벤트 전송을 시작하거나 performMultiModalInput을 사용한 다중 모달 입력 동작 중에 MultiModalInjectionScopeMouse 속성을 통해 마우스 이벤트를 전송합니다. 사용 가능한 API 문서는 MouseInjectionScope를 참고하세요. (Iaa4a8, b/190493367)

버그 수정

  • 스크롤과 관련하여 스크롤 가능 항목(지연 및 비지연 모두 해당됨)에 대한 접근성 지원 문제를 해결했습니다. (I6cdb0)
  • TouchInjectionScope.swipeWithVelocity를 개선했습니다. 이제 더 광범위한 입력 변수를 허용하고 스와이프를 만들 수 없는 경우 입력 변경사항을 제안합니다. (I40fbe, b/182477143)

버전 1.1.0-alpha04

2021년 9월 15일

androidx.compose.ui:ui-*:1.1.0-alpha04가 출시되었습니다. 버전 1.1.0-alpha04에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 PointerEvent에 마우스 오버 이벤트를 지원하는 PointerEventType이 있습니다. (I091fa)
  • 하위 요소가 상위 요소의 포인터 입력 경계 외부의 포인터 입력을 허용하도록 합니다. 상위 요소는 PointerInputScope.alwaysInterceptChildEvents 속성을 사용하여 이러한 호출을 가로챌 수 있습니다. (I9eae3, b/192479655)
  • performGestureGestureScope은 지원 중단되었으며 performTouchInputTouchInjectionScope으로 대체되었습니다. (Ia5f3f, b/190493367)
  • 개발자가 터치 영역이 접근성 최소 수준을 충족하는지 확인할 수 있도록 최소 터치 영역 크기를 포함하는 touchBoundsInRootSemanticsNode에 추가했습니다. (I2e14b, b/197751214)
  • 수정자 inspectable의 구현을 다시 실행합니다. (I927bc, b/191017532)
  • 수정자 composed와 일치하도록 inspectable의 매개변수 이름을 변경했습니다. (I3a482, b/191017532)
  • 다른 모달리티(예: 마우스)를 준비하기 위해 performTouchInputTouchInjectionScope의 대체 요소로 performTouchInputTouchInjectionScope을 도입했습니다.

    TouchInjectionScope에는 GestureScope과 동일한 메서드가 있지만, 이름이 updatePointerToupdatePointerBy로 바뀐 movePointerTomovePointerBy는 예외입니다. 다른 모든 메서드는 동일합니다.

    TouchInjectionScope의 동작은 GestureScope과 거의 동일하며, 두 가지 작은 세부정보가 있습니다.

    1. 이동 이벤트를 전송하지 않고 포인터를 이동하는 동안 다운 이벤트를 전송하면(즉, move()가 아닌 updatePointerTo()를 사용했고 그다음 down()이 호출됨) 다운 이벤트를 전송하기 전에 이전 구현이 이벤트 시간을 앞당기고 이동 이벤트를 전송합니다. 새 구현은 계속해서 이동 이벤트를 보내지만, 이 특정 시나리오에서는 이벤트 시간을 앞당기지 않습니다.
    2. 위와 같이 이동 이벤트를 전송하지 않고 포인터를 이동하는 동안 업 이벤트를 전송하면 이전 구현에서는 위로 이벤트를 전송하기 전에 이벤트 시간을 앞당기고 이동 이벤트를 전송합니다. 새로운 구현은 둘 다 하지 않습니다. 포인터의 새 위치는 업 이벤트를 통해서만 반영됩니다.

    마지막으로 TouchInjectionScope은 특정 포인터의 현재 위치를 가져오기 위한 새로운 메서드 currentPosition(pointerId: Int)를 도입합니다. (If1191, b/190493367)

버그 수정

  • 클립이 최소 터치 영역의 목표치를 충족할 수 있도록 클립 영역을 넘어 터치 영역 경계로 확장하는 것을 허용합니다. (I43e10, b/171509422)
  • Android 12 기기에 스트레치 오버스크롤 지원을 추가했습니다. (Iccf3c, b/171682480)

버전 1.1.0-alpha03

2021년 9월 1일

androidx.compose.ui:ui-*:1.1.0-alpha03가 출시되었습니다. 버전 1.1.0-alpha03에 포함된 커밋을 확인하세요.

새로운 기능

  • Kotlin 1.5.30에 종속되도록 Compose 1.1.0-alpha03을 업데이트했습니다. (I74545)

API 변경사항

  • 다른 수정자를 래핑하기 위해 Modifier.inspectable을 추가했습니다. (I1909b, b/191017532)
  • 블러 사용 사례를 클립 플래그와 TileMode의 보다 일반적인 조합으로 단순화하기 위해 BlurredEdgeTreatment API를 추가했습니다. 대부분의 사용 사례에서 블러 콘텐츠는 원래 콘텐츠 경계 밖에서 렌더링되고 경계 밖에 있는 영역은 투명한 검은색으로 블러 처리됩니다. 또는 콘텐츠 경계를 넘어 확장되는 블러 커널의 가장 가까운 가장자리를 샘플링하여 경계까지 콘텐츠를 자릅니다. (I6b4b7, b/166927547)
  • Compose Desktop에 RenderEffect 지원을 추가했습니다. 컴포지션 계층 구조의 일부에 블러 시각 효과를 적용하기 위한 간단한 방법으로 OffsetEffect와 블러 수정자를 도입했습니다. (I0f6aa, b/166927547)
  • 레이어 자체의 콘텐츠를 변경하기 위해 Modifier.graphicsLayer에 선택적으로 구성할 수 있는 RenderEffect API를 도입했습니다. 이 API는 컴포지션 계층 구조 내에서 컴포저블과 하위 컴포저블의 콘텐츠를 블러 처리하는 데 사용할 수 있습니다. (I47c4d, b/166927547)
  • 이제 AwaitPointerEventScope에 withTimeout() 및 withTimeoutOrNull()이 있습니다. (I507f0, b/179239764, b/182397793)
  • 접근성을 보장하기 위해 시맨틱 및 포인터 입력에 사용할 최소 터치 영역 크기를 ViewConfiguration에 추가했습니다. (Ie861c)
  • 블러 기반 RenderEffects의 가장자리 동작을 정의하는 데 유용한 TileMode.Decal 지원 기능을 추가했습니다. (I7e8ed, b/166927547)
  • 이제 performScrollToIndex, performScrollToKey, hasScrollToIndexAction, hasScrollToKeyAction은 안정적인 API입니다. (I142ae, b/178483889)
  • 잘린 경계를 가져오기 위한 테스트 메서드를 추가했습니다. (I6b28e)

버그 수정

  • Shape 매개변수가 null인지 명시적으로 확인하기 위해 BlurredEdgeTreatment에서 isBounded 메서드를 삭제했습니다. (I85d68)

버전 1.1.0-alpha02

2021년 8월 18일

androidx.compose.ui:ui-*:1.1.0-alpha02가 출시되었습니다. 버전 1.1.0-alpha02에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 PointerEvent가 마우스 버튼 상태와 키보드 특수키 상태를 읽을 수 있도록 지원합니다. (I6310c, b/180075467)
  • 삽입된 동작에서 이제 MainTestClock의 시간을 시간의 정보 소스로 사용합니다. performGesture에 삽입된 이벤트의 현재 시간은 MainTestClock의 현재 시간으로 초기화됩니다. (Ifb364, b/192064452)
  • DpRect(DpOffset, DpSize) 생성자를 추가했습니다. (I2cf16, b/194219828)
  • DpSize 클래스를 추가했습니다. (I7abb1, b/194219828)

버그 수정

  • ColorStateLists를 VectorDrawables의 루트 색 번짐 속성으로 지원하기 위해 벡터 그래픽 xml 파싱을 업데이트했습니다. (I86915, b/195668138)

버전 1.1.0-alpha01

2021년 8월 4일

androidx.compose.ui:ui-*:1.1.0-alpha01가 출시되었습니다. 버전 1.1.0-alpha01에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 RelocationRequester.bringIntoView는 컴포저블의 일부를 뷰에 가져올 수 있도록 하는 매개변수로 직사각형을 허용합니다. (Ice2c5, b/194330245)
  • AnimatedImageVector 및 관련 API가 이제 새 androidx.compose.animation:animation-graphics 모듈에 있습니다. (I60873)
  • 재배치 요청을 처리하기 위해 실험용 수정자를 추가했습니다. (I65a97, b/178211874)
  • ColorPainter와 유사한 Painter 내에 임의의 Brush 그리기를 지원하기 위해 BrushPainter API를 도입했습니다.

    BrushPainter 내에서 쿼리되는 고유 크기 매개변수를 포함하도록 Brush API를 업데이트했습니다. (Ia2752, b/189466433)

  • 선택적 FilterQuality 매개변수를 사용하기 위해 소스 및 대상 사각형을 사용하는 DrawScope#drawImage 메서드를 업데이트했습니다. 이 기능은 픽셀 기반 아트용으로 확장할 때 모자이크로 표현하도록 의도된 픽셀 아트에 유용합니다. 선택적 FilterQuality 매개변수도 사용할 수 있도록 BitmapPainter와 Image 컴포저블을 업데이트했습니다. (Ie4fb0, b/180311607)

  • 동작에서 이벤트 타이밍을 더 잘 제어하도록 GestureScope.advanceEventTime 메서드를 추가했습니다. (Ibf3e2)

버그 수정

  • 그리기 수정자의 체이닝을 더 잘 지원하려면 Modifier.paint 구현에서 drawsContent를 호출해야 합니다. 이전에는 Modifier.paint가 Modifier 체인의 리프 노드가 될 것으로 예상했지만, 그렇게 하면 컴포저블 컨테이너(예: 상자)에서 구성할 수 없거나 추가 장식을 맨 위에(예: Modifier.paint().border()) 추가할 수 없습니다. 지정된 페인터의 콘텐츠를 그린 후 Modifier.paint가 drawContent를 호출하게 하여 수정자 패턴을 사용하는 동작의 동작 일관성이 향상됩니다. (Ibb2a7, b/178201337, b/186213275)
  • 대화상자가 이제 플랫폼 크기 조정 동작을 따릅니다. 이 동작을 재정의하려면 usePlatformDefaultWidth를 false로 설정합니다. (Iffaed, b/192682388)
  • InfiniteAnimationPolicy를 :compose:ui로 이동했습니다. (I5eb09, b/160602714)
  • 지연 목록 및 일반 스크롤 구성요소를 대상으로 하는 시맨틱 작업을 통한 스크롤이 이제 애니메이션 처리됩니다. (Id9066, b/190742024)

버전 1.0

버전 1.0.5

2021년 11월 3일

androidx.compose.ui:ui-*:1.0.5가 출시되었습니다. 버전 1.0.5에 포함된 커밋을 확인하세요.

버그 수정

  • derivedStateOf 인스턴스를 추적할 때 발생하는 비정상 종료 문제를 수정했습니다. (aosp/1792247)

버전 1.0.4

2021년 10월 13일

androidx.compose.ui:ui-*:1.0.4가 출시되었습니다. 버전 1.0.4에 포함된 커밋을 확인하세요.

종속 항목 업데이트

  • Kotlin 1.5.31에 종속되도록 업데이트했습니다.

버전 1.0.3

2021년 9월 29일

androidx.compose.ui:ui-*:1.0.3가 출시되었습니다. 버전 1.0.3에 포함된 커밋을 확인하세요.

종속 항목 업데이트

  • Kotlin 1.5.30에 종속되도록 업데이트했습니다.

버전 1.0.2

2021년 9월 1일

androidx.compose.ui:ui-*:1.0.2가 출시되었습니다. 버전 1.0.2에 포함된 커밋을 확인하세요.

Compose 1.0.2 출시를 지원하도록 업데이트되었습니다. Compose 1.0.2는 여전히 Kotlin 1.5.21과 호환됩니다.

버전 1.0.1

2021년 8월 4일

androidx.compose.ui:ui-*:1.0.1가 출시되었습니다. 버전 1.0.1에 포함된 커밋을 확인하세요.

종속 항목 업데이트

  • Kotlin 1.5.21에 종속되도록 업데이트했습니다.

버전 1.0.0

2021년 7월 28일

androidx.compose.ui:ui-*:1.0.0가 출시되었습니다. 버전 1.0.0에 포함된 커밋을 확인하세요.

1.0.0의 주요 기능

Compose의 첫 번째 안정화 버전입니다. 자세한 내용은 공식 Compose 버전 블로그를 참고하세요.

알려진 문제

  • Android 스튜디오 Bumblebee Canary 4 또는 AGP 7.1.0-alpha04/7.1.0-alpha05를 사용하는 경우 다음과 같은 비정상 종료가 발생할 수 있습니다.

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    이 문제를 해결하려면 build.gradle 파일에서 minSdkVersion을 24 이상으로 일시적으로 늘리세요. 이 문제는 Android 스튜디오 Bumblebee 향후 버전 및 AGP 7.1 버전에서 해결될 예정입니다. (b/194289155)

버전 1.0.0-rc02

2021년 7월 14일

androidx.compose.ui:ui-*:1.0.0-rc02가 출시되었습니다. 버전 1.0.0-rc02에 포함된 커밋을 확인하세요.

버그 수정

  • 대화상자가 이제 플랫폼 크기 조정 동작을 따릅니다. 이 동작을 재정의하려면 usePlatformDefaultWidth를 false로 설정합니다. (Iffaed, b/192682388)

버전 1.0.0-rc01

2021년 7월 1일

androidx.compose.ui:ui-*:1.0.0-rc01가 출시되었습니다. 버전 1.0.0-rc01에 포함된 커밋을 확인하세요.

새로운 기능

  • ui-tooling 모듈을 ui-toolingui-tooling-preview로 분할합니다. (Iefa28, b/190649014)

API 변경사항

  • 지원 중단된 실험용 FocusManager#moveFocusInFocusManager#moveFocusOut이 삭제되었습니다. (I227d7, b/170154986, b/186567354, b/168510304)
  • 이제 캔버스에서 접근성을 위해 contentDescription 매개변수를 지원합니다. (Ib547c)
  • PopupPropertiesuseDefaultMaxWidth 이름이 usePlatformDefaultWidth로 바뀌었습니다. (I05710)
  • 이제 대화상자에서 전체 화면 너비를 사용할 수 있습니다. (I83929, b/190810877)
  • HSV 및 HSL 색상 표현에 관한 실험용 지원이 추가되었습니다. (Id7cf8, b/180731008)

동작 변경사항

  • 이제 Compose @Preview는 기존 소유자에 종속되는 API(예: rememberLauncherForActivityResult())를 사용하는 컴포저블을 미리 볼 수 있는 LocalActivityResultRegistryOwner를 제공합니다. (Ib13d1, b/185693006)
  • 이제 Compose @Preview는 기존 소유자에 종속되는 API(예: BackHandler)를 사용하는 컴포저블을 미리 볼 수 있는 LocalOnBackPressedDispatcherOwner를 제공합니다. (Ia1c05, b/185693006)

버그 수정

  • InfiniteAnimationPolicyandroidx.compose.ui:ui로 이동했습니다. (I5eb09, b/160602714)
  • 모듈 구조를 변경하기 위해 AnimatedImageVector가 일시적으로 삭제되었습니다. (I41906, b/160602714)

버전 1.0.0-beta09

2021년 6월 16일

androidx.compose.ui:ui-*:1.0.0-beta09가 출시되었습니다. 버전 1.0.0-beta09에 포함된 커밋을 확인하세요.

API 변경사항

  • enum Role 및 LiveRegionMode를 비공개 생성자가 있는 인라인 클래스로 변경합니다. (Id1890)
  • KeyboardCapitalization이 인라인 클래스로 변환됩니다. (Id5a1c)
  • HapticFeedbackType을 인라인 클래스로 변경합니다. (I255ec)
  • Modifier.pointerInteropFilter가 @ExperimentalComposeUiApi입니다. (Iede6c)
  • TextAlign, FontSynthesis, TextDirection이 이제 인라인 클래스입니다. (I212fe)
  • TextOverflow를 인라인 클래스로 변경합니다. (I433af)
  • FontStyle이 이제 인라인 클래스입니다. (I9e48b)

버그 수정

  • 현재 키 상수는 @ExperimentalComposeUiApi입니다. 코드를 사용하면 안정화 전에 비공개 상수를 선언할 수 있습니다. (Ia5d48)
  • Compose 테스트를 이제 Robolectric에서 실행할 수 있습니다. 지금까지 확인된 제한사항은 다음과 같습니다.
    • 네이티브 비트맵이 없으므로 ImageBitmap()으로 인해 NullPointerException이 발생합니다.
    • 그리기가 없으므로 captureToImage()가 다음 그리기 패스를 무기한 대기합니다. 즉, 교착 상태에 빠집니다.
    • 로드된 글꼴이 없으므로 모든 텍스트가 잘못 측정됩니다. 모든 문자의 높이는 약 20px로, 너비는 1px로 고정됩니다.
    • ComposeTestRule.waitUntil {}은 대기하는 동안 기본 스레드를 실행하지 않으므로 ComposeTestRule.mainClock.advanceTimeUntil {}과 사실상 동일하게 됩니다. 앞으로 제한사항이 더 많이 확인될 것으로 예상됩니다. (I284fa)

추가된 프로필 규칙

이번 출시에서는 다음 Compose 모듈에 프로필 규칙이 추가됩니다. (I14ed6)

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

프로필 규칙이란 무엇인가요?

  • 라이브러리의 프로필 규칙은 src/main 또는 이에 상응하는 디렉터리에 있는 텍스트 파일 baseline-prof.txt에 지정됩니다. 이 파일에서는 줄별로 규칙을 지정합니다. 이때 규칙은 라이브러리의 메서드 또는 클래스와의 일치를 확인하는 패턴을 말합니다. 규칙의 문법은 adb shell profman --dump-classes-and-methods ...를 사용할 때 사용되며 사람이 읽을 수 있는 ART 프로필 형식의 상위 집합입니다. 규칙의 형식은 메서드 또는 클래스를 타겟팅하는 두 가지 형식 중 하나입니다.

  • 메서드 규칙의 패턴은 다음과 같습니다.

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • 클래스 규칙의 패턴은 다음과 같습니다.

    <CLASS_DESCRIPTOR>
    
  • 여기에서 <FLAGS>는 이 메서드의 플래그를 'Hot', 'Startup' 또는 'Post Startup'으로 지정해야 하는지를 나타내는 문자 H, S, P 중 하나 이상으로 구성됩니다.

  • <CLASS_DESCRIPTOR>는 타겟팅된 메서드가 속한 클래스의 설명자입니다. 예를 들어 androidx.compose.runtime.SlotTable 클래스는 Landroidx/compose/runtime/SlotTable;의 설명자를 포함합니다.

  • <METHOD_SIGNATURE>는 메서드의 서명이며 이름, 매개변수 유형, 메서드의 반환 유형을 포함합니다. 예를 들어 LayoutNodefun isPlaced(): Boolean 메서드는 서명이 isPlaced()Z입니다.

  • 이러한 패턴에는 단일 규칙이 여러 메서드나 클래스를 포괄하도록 와일드 카드(**, *, ?)가 포함될 수 있습니다.

규칙의 기능은 무엇인가요?

  • H 플래그는 'Hot' 메서드임을 나타내며, 이러한 메서드는 미리 컴파일해야 합니다.

  • S 플래그는 시작 시 호출되는 메서드임을 나타내며, 컴파일 비용을 발생시키지 않고 시작 시 메서드를 해석하지 않으려면 이러한 메서드를 미리 컴파일해야 합니다.

  • P 플래그는 시작 후에 호출되는 메서드임을 나타냅니다.

  • 이 파일에 있는 클래스는 시작 중에 사용된다는 사실을 나타내며, 클래스 로드 비용을 발생시키지 않으려면 클래스를 힙에 미리 할당해야 합니다.

어떤 방식으로 작동하나요?

  • 라이브러리는 이러한 규칙을 정의할 수 있고 규칙은 AAR 아티팩트에 패키징됩니다. 그런 다음, 이러한 아티팩트를 포함하는 앱을 빌드하면 규칙이 함께 병합되어 앱과 관련된 압축 바이너리 ART 프로필을 빌드하는 데 사용됩니다. 그러면 ART에서 앱을 기기에 설치할 때 예정보다 앞서 애플리케이션의 특정 하위 집합을 컴파일하여 애플리케이션의 성능을 향상하도록(특히, 첫 번째 실행 성능) 이 프로필을 활용할 수 있습니다. 디버그 가능한 애플리케이션에는 영향을 주지 않습니다.

버전 1.0.0-beta08

2021년 6월 2일

androidx.compose.ui:ui-*:1.0.0-beta08가 출시되었습니다. 버전 1.0.0-beta08에 포함된 커밋을 확인하세요.

API 변경사항

  • NestedScrollSource enum은 인라인 클래스로 대체되었습니다. (Ie321b, b/187055290)
  • FocusManager.clearFocus(forcedClear = true)의 이름이 FocusManager.clearFocus(force = true)로 바뀌었습니다. (Ia0c41)
  • 새로운 enum 값이 추가될 때 구문이 완전하지 않은 경우 발생하는 문제를 피하도록 인라인 클래스의 enum 사용법을 리팩터링했습니다. (I2b5eb)
  • PopupProperties에서 @ExperimentalComposeUiApi를 삭제합니다. (I01fa6)
  • PointerType이 enum에서 인라인 클래스로 변경되었습니다. (If5058)
  • ContentDescription 및 Text 시맨틱 속성은 더 이상 단일 값이 아니라 목록입니다. 이렇게 하면 연결하지 않고 그대로 병합할 수 있습니다. 이러한 변경사항을 활용하는 더 나은 테스트 API도 제공됩니다. (Ica6bf, b/184825850)
  • Modifier.focusModifier()가 지원 중단되었으며 Modifier.focusTarget()으로 대체되었습니다. (I6c860)
  • Modifier.onSizeChanged()Modifier.onGloballyPositioned()는 더 이상 인라인 함수가 아닙니다. (I727f6, b/186109675)
  • KeyboardType enum은 인라인 클래스로 대체되었습니다. (I73045, b/187055290)
  • FocusState enum을 FocusState 인터페이스로 대체했습니다. (Iccc1a, b/187055290)
  • ImeAction enum은 인라인 클래스로 대체되었습니다. (I18be5, b/187055290)
  • PlaceholderVerticalAlign은 인라인 클래스로 변환됩니다. (If6290)
  • TextUnitType은 이제 인라인 클래스입니다. (I4cba9)
  • AnnotatedString.withAnnotation 함수는 이제 ExperimentalComposeApi가 아니라 ExperimentalTextApi입니다. (I0cd0a)
    • TextUnitType이 포함된 TextUnit 생성자는 이제 ExperimentalComposeApi가 아니라 ExperimentalTextApi입니다.

버그 수정

  • 스크롤 후에 LazyColumn/Row 항목이 부분적으로 표시되던 beta07의 버그를 수정했습니다. (I8c9ac, b/188566058)
  • 이제 detectDragGesures, detectVerticalGestures, detectHorizontalGestures는 자동으로 위치 변경사항을 사용하므로 onDrag 콜백에서 change.consumePositionChange를 호출하지 않아도 됩니다. (I42fc4, b/185096350, b/187320697)
  • 정렬 선을 제공하는 LayoutModifiers를 수정했습니다. 하위 요소의 정렬 선이 변경되었을 때 상위 요소가 다시 측정되지 않는 버그를 수정했습니다. (I4401f, b/174315652)
  • 모든 수정자를 적용한 후 수정자 체인에서 레이아웃 좌표가 아닌 이 수정자의 좌표를 보고하도록 Modifier.onGloballyPositioned()를 수정했습니다. 즉, 이제 수정자의 순서가 보고되는 좌표에 영향을 미칩니다. (Ieb67d, b/177926591)

버전 1.0.0-beta07

2021년 5월 18일

androidx.compose.ui:ui-*:1.0.0-beta07가 출시되었습니다. 버전 1.0.0-beta07에 포함된 커밋을 확인하세요.

API 변경사항

  • 검사기에서 사용할 ViewRootForInspector 인터페이스를 추가했습니다. (Ib70df)
  • 이제 SubcomposeLayoutState가 재사용 가능한 슬롯 수 설정을 지원합니다. 레이아웃은 다음번에 새 슬롯이 필요할 때 슬롯을 재사용하기 위해 슬롯을 삭제하는 대신 최대 이 개수의 슬롯을 활성 상태로 유지합니다. (Ieb981)
  • KeyEventType enum은 인라인 클래스로 대체되었습니다. (Id670a, b/187055290)
  • FocusDirection enum은 인라인 클래스로 대체되었습니다. (Ib6d03, b/187055290, b/184086802)
  • SubcomposeLayout 상태를 호이스팅할 수 있는 기능이 도입되었습니다. 이 기능을 사용하면 필요한 slotId에 콘텐츠를 미리 작성할 수 있기 때문에 다음번 측정 패스의 속도가 더 빨라집니다. 지정된 slotId로 하위 콘텐츠를 작성해 놓으면 다음번에 작성할 필요가 없기 때문입니다. (I42580, b/184940225)
  • 클립 선택 핸들을 추가했습니다. (Iff80d, b/183408447)
  • LayoutInspector 지원과 관련된 미사용 API를 삭제했습니다. (I2ac78)

버그 수정

  • 이제 LazyColumn/Row는 이미 스크롤되었더라도 이전에 표시된 최대 2개의 항목을 활성 상태로 유지합니다. 이를 통해 스크롤 성능을 개선하는 새 항목을 작성해야 할 때 구성요소가 활성 상태의 하위 작성을 재사용할 수 있습니다. (Ie5555)
  • AnnotatedStringTextGeomerticTransformTextDecoration이 지정된 대로 적용됩니다. (I61900, b/184760917)

버전 1.0.0-beta06

2021년 5월 5일

androidx.compose.ui:ui-*:1.0.0-beta06가 출시되었습니다. 버전 1.0.0-beta06에 포함된 커밋을 확인하세요.

API 변경사항

  • 탐색 동작과의 충돌을 해결합니다. (I1145e)
  • @ComposeCompilerApi가 더 이상 @RequiresOptIn이 아닙니다. (Iab690)
  • 접근성 서비스의 컬렉션과 그 항목을 표시할 수 있는 CollectionInfo 및 CollectionItemInfo 접근성 API를 추가했습니다. (Id54ef, b/180479017)
  • 색인이 생성된 항목이 있는 목록을 특정 색인으로 스크롤하는 SemanticsActions.ScrollToIndex와 키가 지정된 항목이 있는 목록에서 항목의 색인을 가져오는 SemanticsProperties.IndexForKey를 추가했습니다. 두 작업 모두 LazyList로 구현됩니다.
    • 지정된 색인으로 목록을 스크롤하는 SemanticsNodeInteraction.performScrollToIndex와 지정된 키가 있는 항목으로 목록을 스크롤하는 SemanticsNodeInteraction.performScrollToKey를 추가했습니다. (I4fe63, b/178483889, b/161584524)
  • ownerViewId를 GraphicLayerInfo에 추가했습니다. (I19f62)
  • 애셋, 파일, FileDescriptor에서 글꼴을 로드하는 Font() 오버로드를 추가했습니다. (I5d382)
  • 잘못된 입력이 포함된 노드를 표시할 수 있는 접근성 API error를 추가했습니다. (I12997, b/180584804, b/182142737)
  • 애셋, 파일, FileDescriptor에서 글꼴을 로드하는 Font() 오버로드를 추가했습니다. (I43007)
  • AnnotatedString이 TextFieldValue.Saver 지원을 저장합니다. addTtsAnnotation 및 withAnnotation 유틸리티 함수를 AnnotatedString.Builder에 추가했습니다. (I8cbdc, b/178446304)
  • TextUnit 생성자 함수 TextUnit(value: Float, type: TextUnitType)을 추가했습니다. (I7ecce, b/178446304)

버전 1.0.0-beta05

2021년 4월 21일

androidx.compose.ui:ui-*:1.0.0-beta05가 출시되었습니다. 버전 1.0.0-beta05에 포함된 커밋을 확인하세요.

API 변경사항

  • 실험용 FocusManager.moveFocus(In)FocusManager.moveFocus(Out)을 추가했습니다. (Ic5534, b/183746743)
  • 실험용 performTextInputSelection API를 추가했습니다. (I2dcbb, b/178510628)
  • InputEventCallback 인터페이스는 지원 중단되었습니다. 이 인터페이스는 공개 API에서 사용할 수 없었으며 코드에서도 사용하지 않았습니다. (I34a02, b/184003208)
  • TextLayoutResult/createTextLayoutResult 함수가 지원 중단되었습니다. 이는 사용되지 않은 공개 함수로, 테스트용으로 추가되었습니다. 이 함수로 텍스트 작성 API에 할 수 있는 작업은 없습니다. 지원 중단되었으며 나중에 삭제될 예정입니다. (I80413)

버그 수정

  • ACTION_SCROLL_FORWARD, ACTION_SCROLL_BACKWARD, accessibilityActionScrollLeft, accessibilityActionScrollUp, accessibilityActionScrollRight, accessibilityActionScrollDown 접근성 스크롤 작업 문제를 해결했습니다. 이제 스크롤 가능 영역의 끝으로 스크롤하는 대신 한 화면의 주어진 방향으로 스크롤합니다. (Ieccb0)
  • ui-test-manifest 및 ui-tooling-data의 AndroidManifest 파일이 이제 Android 12와 호환됩니다. (I6f9de, b/184718994)

버전 1.0.0-beta04

2021년 4월 7일

androidx.compose.ui:ui-*:1.0.0-beta04가 출시되었습니다. 버전 1.0.0-beta04에 포함된 커밋을 확인하세요.

API 변경사항

  • SoftwareKeyboardControllerhideSoftwareKeyboardshowSoftwareKeyboard의 이름을 각각 hide()show()로 바꿉니다.
    • LocalSoftwareKeyboardController에 전체 CompositionLocal 인터페이스를 제공하여 설정 가능하도록 합니다(특히 테스트에서 유용함). (I579a6)
  • LiveRegion 접근성 API를 추가했습니다. 노드가 라이브 영역으로 표시되면 접근성 서비스가 사용자에게 자동으로 변경사항을 알립니다. (Idcf6f, b/172590946)
  • TextOverflow.Visible을 도입했습니다. (Ic8f89)

버그 수정

  • 에지에 있는 LazyColumn/LazyRow의 항목이 빠른 플링 후에 잘못 배치되는 문제를 수정했습니다. (Ie4d13, b/183877420)
  • 이제 compose 계층 구조에서 AndroidViewBinding을 삭제할 때 AndroidViewBindingFragmentContainerView를 통해 확장된 프래그먼트를 올바르게 삭제합니다. (Ib0248, b/179915946)
  • ComposeViewFragment 내에 있을 때 이제 AndroidViewBindingFragmentContainerView를 통해 확장된 프래그먼트를 올바르게 중첩하여 이러한 프래그먼트의 상태를 저장하고 복원하는 문제를 수정합니다. (I70eb0, b/179915946)
  • Compose ViewBinding이 이제 Fragment 1.3.2에 종속되며 이제 구성 변경 후 FragmentContainerView를 통해 확장된 프래그먼트를 일관되게 표시합니다. (I0743d, b/179915946)

버전 1.0.0-beta03

2021년 3월 24일

androidx.compose.ui:ui-*:1.0.0-beta03가 출시되었습니다. 버전 1.0.0-beta03에 포함된 커밋을 확인하세요.

API 변경사항

  • ComposeView의 ViewTree 종속 항목 검사를 연기했습니다. (I8dbbf, b/182466548)
  • 선택항목인 startX/endXstartY/endY 매개변수를 GestureScopeswipeUp/swipeDown/swipeLeft/swipeRight 함수에 추가했습니다. (I49e2d, b/182063305)

버전 1.0.0-beta02

2021년 3월 10일

androidx.compose.ui:ui-*:1.0.0-beta02가 출시되었습니다. 버전 1.0.0-beta02에 포함된 커밋을 확인하세요.

API 변경사항

  • TextField의 이전 SoftwareKeyboardController 인터페이스를 대체하기 위해 새로운 LocalSoftwareKeyboardController 컴포지션 로컬 API를 추가했습니다. (I5951e, b/168778053)
  • TextField의 이전 SoftwareKeyboardController 인터페이스를 대체하기 위해 새로운 LocalSoftwareKeyboardController 컴포지션 로컬 API를 추가했습니다. (I84472, b/168778053)
  • 다음 SemanticsMatcher를 삭제했습니다.
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (If16bd)
  • 다음 SemanticsMatchers를 @ExperimentalTestApi로 표시했습니다.
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (Ia600c)
  • 다음 SemanticsMatcher를 추가했습니다.
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (I2f502)

버그 수정

  • 실험용 API의 공개 사용에 제한을 적용합니다. (I6aa29, b/174531520)
  • androidx.compose.ui:ui는 더 이상 AppCompat 또는 Fragment에 종속되지 않습니다. 애플리케이션에서 ComposeView를 사용하면서 Fragment나 AppCompat를 사용한다면 AppCompat 1.3 이상/Fragment 1.3 이상을 사용해야 합니다. 이러한 버전은 ComposeView에 필요한 수명 주기 및 저장된 상태 소유자를 정확하게 설정하는 데 필요합니다. (I1d6fa, b/161814404)
  • navigation-compose의 대상 내에서 사용될 때 rememberSaveable { mutableStateOf(0) }이 중단되는 문제를 해결했습니다. (I1312b, b/180042685, b/180701630)
  • TextField의 이전 SoftwareKeyboardController 인터페이스를 대체하기 위해 새로운 LocalSoftwareKeyboardController 컴포지션 로컬 API를 추가했습니다. (I658b6, b/168778053)
  • ComposeRootRegistrytearDownRegistry()에서 드물게 발생하는 NoSuchElementException 문제를 해결했습니다. (Iddce1)

버전 1.0.0-beta01

2021년 2월 24일

androidx.compose.ui:ui-*:1.0.0-beta01가 출시되었습니다. 버전 1.0.0-beta01에 포함된 커밋을 확인하세요.

Compose 1.0.0 베타의 첫 번째 버전입니다.

API 변경사항

  • onStart 콜백을 detectDragGestures에 추가했습니다. (I67269, b/179995594)
  • 내장 기능에 맞게 크기를 조정하는 수정자는 더 이상 실험용이 아닙니다. (I15744)
  • MeasureBlocks 이름을 MeasurePolicy로 바꿔 흥미로운 인터페이스가 되었습니다. MeasurePolicy를 사용하도록 레이아웃 API를 업데이트/단순화했습니다. (Icab48, b/167662468, b/156751158)
  • InteractionState[Mutable]InteractionSource로 대체했습니다.
    • 인터페이스는 상호작용 이벤트를 방출/수집해야 합니다.
    • ButtonModifier.clickable() 등의 구성요소에 interactionState = remember { InteractionState() }를 전달하는 대신 interactionSource = remember { MutableInteractionSource() }를 사용합니다.
    • Interaction.Pressed in interactionState 대신 InteractionSource에서 InteractionSource.collectIsPressedAsState()와 같은 확장 함수를 사용해야 합니다.
    • 복잡한 사용 사례의 경우 InteractionSource.interactions를 사용하여 상호작용 스트림을 관찰할 수 있습니다. 자세한 내용은 InteractionSource 도움말과 샘플을 참고하세요.
    • (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
  • CompositionLocals에서 AccessibilityMananger 인터페이스 및 LocalAccessibilityMananger를 추가합니다. (I53520)
  • 지원 중단된 LayoutCoordinates 메서드를 삭제했습니다. positionInParent 및 boundsInParent의 속성 대신 함수를 사용합니다. (I580ed, b/169874631, b/175142755)
  • Typealiases를 기본 유형으로 대체했습니다.
    • ColorStop은 이제 Pair<Float, Color>입니다.
    • SpanStyleRange는 이제 `AnnotatedString.Range입니다.
    • ParagraphStyleRange는 이제 AnnotatedString.Range<ParagraphStyle>입니다.
    • StringAnnotation은 이제 AnnotatedString.Range<String>입니다.
    • (I8dd1a)
  • CoreTextField와 같은 하위 수준의 텍스트 구성요소의 입력 세션을 위한 새로운 TextInputSession을 만들었습니다. (I8817f, b/177662148)
  • Placeable이 이제 measuredSize를 노출하여 하위 레이아웃이 실제로 측정되는 크기를 나타냅니다. 이 크기는 측정 제약 조건을 따르지 않을 수도 있습니다. (Ib2729, b/172560206, b/172338608)
  • 접근성을 위해 Tabs 또는 RadioButtons 모음을 표시할 수 있는 selectionGroup 수정자를 추가합니다. (Ie5c29)
  • compositionLocalOfstaticCompositionLocalOfdefaultFactory는 이제 선택사항이 아닌 필수입니다.

    이 변경으로 인해 null을 허용하지 않는 유형 중 기본 팩토리가 제공되지 않은 유형에 관해 잠재적으로 발생할 수 있는 유형 오류가 발생하지 않습니다. 이전에는 null을 허용하지 않는 유형의 경우 null 참조가 제공되었습니다.

    null을 허용하는 유형에는 { null }을 기본 팩토리로 제공하는 것이 좋습니다.

    적절한 기본값을 제공할 수 없는 한, null을 허용하지 않는 유형에는 로컬을 사용하지 않는 것이 좋습니다. 적절한 기본값이 존재하지 않으면 defaultFactory 람다에서 예외가 발생합니다. 하지만 예외가 발생해도 로컬이 유형 시스템에 의해 실행되지 않는 한, 로컬의 사용자는 로컬에 관한 암시적 종속 항목을 갖게 됩니다. (Ifbd2a)

  • UI 모듈에서 지원 중단된 메서드를 삭제했습니다. (I646f6)

  • 크기 수정자의 이름을 바꿨습니다. Modifier.width/height/size의 이름이 requiredWidth/requiredHeight/requiredSize로, Modifier.preferredWidth/preferredHeight/preferredSize의 이름이 width/height/size로 변경되었습니다. (I5b414)

  • Modifier.tapGestureFilter를 삭제했습니다. 대신 Modifier.pointerInput { detectTapGestures(...) }를 사용합니다. (I266ed, b/175294473)

  • 포인터 입력 시스템에서 부분 소비를 삭제했습니다. 부분 소비를 조정하는 데 권장되는 방법은 Modifier.nestedScroll입니다. (Ie9c9b)

  • 방향을 기본 패키지로 이동했습니다. VelocirtTracker가 ui.gesture에서 ui.input.pointer로 이동했습니다. (Iff4a8, b/175294473)

  • imageResource 및 vectorResource는 이제 ImageBitmap 및 ImageVector 컴패니언의 확장 함수입니다. load{Image,Vector,Font}Resource 함수를 삭제했습니다. (I89130)

  • AnimationClockObservable 및 서브클래스를 삭제했습니다. AnimatedFloat를 삭제했습니다. (Icde52, b/177457083)

  • 제공자 이름을 CompositionLocalProvider로 바꿨습니다.

    • 컴포지션 생성자가 더 이상 키 매개변수를 허용하지 않으며 지원 중단되었습니다.
    • currentCompositeKeyHash가 최상위 컴포저블 함수가 아닌 최상위 컴포저블 속성으로 전환되었습니다.
    • CompositionData 및 CompositionGroup이 androidx.compose.runtime.tooling 네임스페이스로 이동했습니다.
    • ComposableLambda는 구체적인 클래스가 아닌 일종의 인터페이스가 되었으며 더 이상 유형 매개변수를 갖지 않습니다.
    • ComposableLambdaN은 구체적인 클래스가 아닌 일종의 인터페이스가 되었으며 더 이상 유형 매개변수를 갖지 않습니다.
    • snapshotFlow 함수가 androidx.compose.runtime 네임스페이스로 이동했습니다.
    • SnapshotMutationPolicy의 병합 메서드가 더 이상 실험용이 아닙니다.
    • @TestOnly 최상위 clearRoots 함수를 삭제했습니다. 더 이상 필요하지 않습니다.
    • keySourceInfoOf 및 resetSourceInfo 함수가 삭제되었습니다. 더 이상 필요하지 않습니다.
    • Composer.collectKeySourceInformation이 삭제되었습니다. 더 이상 필요하지 않습니다.
    • isJoinedKey, joinedKeyLeft 및 joinedKeyRight 메서드가 삭제되었습니다. 더 이상 필요하지 않습니다.
    • 다양한 최상위 API가 여러 파일로 이동되고 재구성되었습니다. Kotlin의 파일 클래스 의미 체계로 인해 바이너리 호환성이 중단되지만 소스 호환성은 중단되지 않습니다. 따라서 대부분의 사용자에게 문제가 되지 않습니다.
    • (I99b7d, b/177245490)
  • compose:ui에서 ComponentActivity.setContent()를 삭제했습니다. androidx.activity:activity-compose:1.3.0-alpha01에서 제공되는 것을 사용하세요. compose:ui에서 viewModel()LocalViewModelStoreOwner를 삭제했습니다. androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01에서 제공되는 것을 사용하세요. (I6f36b)

  • Modifier.scrollable을 재작업했습니다. 이제 ScrollableController 클래스 대신 Scrollable 인터페이스가 사용됩니다. (I4f5a5, b/174485541, b/175294473)

  • PointerInputModifier에서 CustomEvens 지원을 삭제했습니다. (I02707, b/175294473)

  • SnapshotStateObserver는 더 이상 실험용이 아닙니다. (Id2e6a)

  • 이전에 지원 중단된 일부 API를 삭제했습니다. (Ice5da, b/178633932)

  • longPressGestureFilter 및 doubleClickGestureFilter를 삭제했습니다. detectTapGestures 같은 도우미 함수와 함께 Modifier.pointerInput을 사용하세요. (I2fedf, b/175294473)

  • String.format을 내부적으로 활용하지 않도록 다양한 toString 메서드에서 String.format API 리팩터링 용도를 삭제했습니다. (Id1290)

  • dp 어설션을 삭제했습니다. (I798d2)

  • androidx.compose.runtime:runtime-dispatch를 삭제했습니다. (I55feb)

  • 텍스트 작업이 이제 자동으로 포커스를 확인합니다. (I13777, b/179648629)

  • runBlockingWithManualClock을 삭제했습니다. (I15cdc, b/179664814)

  • Modifier.verticalScroll()/horizontalScroll()에서 이제 스크롤 위치를 Ints로 표시합니다. (I81298)

  • FlingConfig 이름을 FlingBehavior로 바꿔 이제 사전 정의된 감쇠가 아닌 정지 애니메이션을 맞춤설정할 수 있습니다. (I02b86, b/175294473)

  • 모든 ImeAction 콜백에 동일한 작업을 설정하는 도우미 함수를 추가했습니다. (I63447, b/179226323)

  • 모든 텍스트 필드에서 SoftwareKeyboardController 콜백을 삭제했으며 곧 새 API로 대체할 예정입니다. (Iae869, b/168778053)

  • FontSpan 및 FontWeigthStyleSpan을 더 이상 사용하지 않아 삭제했습니다. (Ie5b56, b/177423444)

  • 다음과 같이 Material API가 변경되었습니다.

    • 기본 패딩을 맞춤설정할 수 있도록 contentPadding 매개변수를 Top/BottomAppBar에 추가했습니다.
    • 필수 매개변수가 선택 매개변수 앞에 와야 한다는 API 지침을 따르기 위해 BackdropScaffold의 매개변수를 재정렬했습니다.
    • BottomNavigationItem의 icon 매개변수를 selectedonClick 다음으로 이동했습니다.
    • BottomNavigationItem의 alwaysShowLabels 매개변수 이름을 alwaysShowLabel로 변경했습니다.
    • 몇몇 구성요소의 bodyContent 매개변수 이름을 단순하게 content로 변경했습니다.
    • ButtonDefaults.buttonColors()의 매개변수를 재정렬했습니다. 매개변수의 유형이 변경되지는 않았으므로 이로 인한 코드 오류는 발생하지 않습니다. 이름이 지정된 매개변수를 사용하거나 수동으로 정렬을 업데이트하세요. 그러지 않으면 코드가 이전과 동일하게 작동하지 않습니다.
    • darkColors()secondaryVariant 매개변수를 추가했습니다. 이 색상은 일반적으로 어두운 테마의 secondary와 동일하지만 일관성 및 세부 맞춤설정을 위해 추가되었습니다.
    • 공개 API 노출 영역에서 ElevationDefaults 및 animateElevation()을 삭제했습니다. 자주 사용되지 않거나 유용하지 않기 때문입니다.
    • SlideronValueChangeEnd 이름을 onValueChangeFinished로 바꾸고 null을 허용하도록 설정했습니다.
    • 일관성을 위해 Snackbartext 매개변수 이름을 content로 변경했습니다.
    • 기본 패딩의 맞춤설정이 가능하도록 DropdownMenuItemcontentPadding 매개변수를 추가했고, contentRowScope의 확장 프로그램으로 만들었습니다.
    • ModalDrawerLayout의 이름을 ModalDrawer로 변경했습니다.
    • BottomDrawerLayout의 이름을 BottomDrawer로 변경했습니다.
    • (I1cc66)

버그 수정

  • Compose에서 AnimatedVectorDrawable 리소스를 사용하도록 API를 추가했습니다. animatedVectorResource를 사용하여 <animated-vector> XML을 AnimatedImageVector로 로드하고 painterFor를 사용하여 애니메이션 처리합니다. (I8ea91)
  • TextField의 이전 SoftwareKeyboardController 인터페이스를 대체하기 위한 새로운 LocalSoftwareKeyboardController 컴포지션 로컬 API를 추가했습니다. (I658b6, b/168778053)

버전 1.0.0-alpha12

2021년 2월 10일

androidx.compose.ui:ui-*:1.0.0-alpha12가 출시되었습니다. 버전 1.0.0-alpha12에 포함된 커밋을 확인하세요.

API 변경사항

  • UiApplier에서 ViewGroups 지원이 삭제되었습니다. 지원 중단된 emitView 컴포저블을 삭제했습니다. (Ifb214)
  • 이제 Modifier.pointerInput에 새 종속 항목으로 인해 포인터 입력 감지 코루틴이 다시 시작되어야 할 때를 나타내는 기억 키가 필요합니다. (I849cd)
  • CompositionReference 이름을 CompositionContext로 바꾸었습니다. (I53fcb)
  • Bounds 이름을 DpRect로 바꾸었습니다. (I4b32a)
  • 업데이트 테스트: hasText()에서 텍스트 필드의 입력 및 라벨/힌트/자리표시자 텍스트를 모두 확인합니다. (Iab803)
  • viewModel() 컴포저블 및 LocalViewModelStoreOwner를 androidx.lifecycle.viewmodel.compose로 이동했습니다. 이제 이를 사용하려면 별도의 종속 항목 androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01을 추가해야 합니다. (I7a374)
  • AccessibilityAction에서 null 작업을 허용하고 AccessibilityAction 및 CustomAccessibilityAction의 작업 라벨을 CharSequence에서 String으로 변경합니다. (I0dc82)
  • ImageBitmap 및 ImageVector와 이름 지정 규칙을 더 잘 맞추기 위해 ImagePainter의 이름을 VectorPainter와 유사한 BitmapPainter로 바꾸었습니다. (Iba381, b/174565889)
  • 하위 문자열을 인수로 사용하는 더 나은 하위 문자열 테스트 API를 제공합니다. (Icbe78)
  • 맞춤 포커스 순서를 람다로 지정하지 않고 FocusRequester를 허용하는 Modifier.focusOrder()를 추가했습니다. 이는 컴포저블을 위해 맞춤 포커스 순서가 아닌 참조만 지정해야 할 때 유용합니다. (I4f52a, b/179180978)
  • ComponentActivity.setContent를 androidx.activity:activity-compose 모듈의 androidx.activity.compose.setContent로 이동했습니다. (Icf416)
  • 거의 사용하지 않는 여러 클래스의 디스트럭처링 메서드와 copy() 메서드를 삭제했습니다. (I26702, b/178659281)
  • 플랫폼에 맞게 Popup을 이동했습니다. AndroidPopupProperties의 이름을 PopupProperties로 바꾸었고 isFocusablePopupPropertiesfocusable 매개변수로 이동했습니다. (Ieeea5)
  • 플랫폼에 맞게 Dialog를 이동했습니다. AndroidDialogProperties의 이름을 DialogProperties로 바꾸었습니다. (I4ef69, b/179138130)
  • LayoutNode를 내부로 이동했습니다. (I8a7b1, b/175103944)
  • Constraints.enforce를 Constraints.constrain으로 대체했습니다. (I8b8ea)
  • loadFontResource가 지원 중단됩니다. 대신 fontResource를 사용하세요. imageResource, loadImageResource, vectorResource, loadVectorResource는 지원 중단됩니다. 대신 painterResource를 사용하세요. (I6b809)
  • 성능상의 이유로 ScrollAxisRange 의미 체계는 이제 직접 Float 값을 사용하는 대신 Float를 반환하는 람다를 사용합니다. (If4a35, b/178657186)
  • 텍스트 필드의 수정 가능한 입력 텍스트를 표시하는 EditableText 의미 체계와 이 의미 체계를 확인할 수 있도록 이에 대응하는 테스트 메서드를 추가했습니다. (I8e07a)
  • OwnerLayer/OwnerScope/OwnerSnapshotObserver를 비공개로 변경했습니다. (I4ffaf, b/175103944)
  • toIntPx()의 이름을 roundToPx()로 바꾸었습니다. (I9b7e4, b/173502290)
  • IntBounds의 이름을 IntRect로 바꾸고 API를 개선했습니다. (I1f6ff)
  • API 가이드라인을 준수하고 공개 API에서 내부 구현 클래스를 숨기도록 Snapshot API를 업데이트했습니다. (Id9e32)
  • 확장 및 축소 의미 체계 작업을 추가했습니다. ModalBottomSheetState에 expand 및 halfExpand를 추가했습니다. (Ib5064)
  • Modifier.dragGestureFilter가 지원 중단되었습니다. 대신 Modifier.pointerInput { detectDragGestures (...)}를 사용하세요. 또는, 하나의 축 드래그에 Modifier.draggable을 사용합니다. (I0ba93, b/175294473)
  • Ambients의 이름을 Ambient와 일치하도록 CompositionLocal로 바꾸었습니다. Ambients에서 AmbientFoo라고 했던 이름은 이제 CompositionLocals에서 LocalFoo가 됩니다. (I2d55d)
  • 이제 지원 중단된 BaseTextField가 삭제되었습니다. 대신 BasicTextField를 사용하세요. (I71368)
  • Selection은 foundation으로 이동했습니다. (I7892b)
  • 이전의 state { 0 } 컴포저블을 삭제하고 remember { mutableStateOf(0) }과 같은 사용을 촉진하는 것과 마찬가지로 savedInstanceState { 0 } 컴포저블을 삭제할 예정입니다. 대신 rememberSaveable { mutableStateOf(0) }을 사용해야 하며 이 방식은 MutableState 내에서 사용한 유형을 Bundle에 저장할 수 있다면 자동으로 저장하고 복원합니다. 이전에 맞춤 Saver 객체를 전달했다면 이제 stateSaver 매개변수가 있는 rememberSaveable의 새 오버로드를 사용해야 합니다. 사용법은 다음과 같습니다. val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) } (Ib4c26, b/177338004)
  • 접근성을 위해 비밀번호 의미 체계를 추가했습니다. (I231ce)
  • 접근성을 위해 미확정 진행률 표시줄을 표시하는 ProgressBarRangeInfo.Indeterminate를 추가했습니다. (I6fe05)
  • emptyContent()(@Composable () -> Unit).orEmpty() 유틸리티는 더 이상 성능에 긍정적인 영향이나 가치가 없으므로 지원 중단되었습니다. (I0484d)
  • snapshotFlowwithMutableSnapshot은 이제 실험용이 아닙니다. (I6a45f)
  • 이제 Recomposer를 종료할 수 있습니다. 종료된 Recomposer는 컴포지션 하위 코루틴이 완료될 때까지 리컴포지션을 계속합니다. close와 구분하기 위해 Recomposer.shutDown의 이름을 cancel로 바꾸었습니다. (Ib6d76)
  • UiSavedStateRegistry를 SaveableStateRegistry로, AmbientUiSavedStateRegistry를 AmbientSaveableStateRegistry로 이름을 바꾸고 모두 androidx.compose.runtime.saveable 패키지로 이동했습니다. (I30224)
  • 아티팩트 androidx:compose:runtime:runtime-saved-instance-state의 이름을 androidx:compose:runtime:runtime-saveable로 바꾸었습니다. (I6dcac)
  • ui 패키지에서 오랫동안 지원 중단된 많은 API를 삭제합니다. (I2f2dc)
  • compose:runtime-dispatch 아티팩트는 이제 지원 중단됩니다. 이제 MonotonicFrameClock은 compose:runtime에서, AndroidUiDispatcher는 compose:ui에서 찾을 수 있습니다. (Ib5c36)
  • Outline.* 클래스는 이제 데이터 클래스가 아닙니다. (I4879e, b/178001427)
  • view.captureToImage()를 삭제합니다(대체 메서드 없음). (I7fcd2)
  • 소스 콘텐츠의 RGB 값을 수정하는 데 사용할 수 있는 ColorMatrix API를 도입했습니다. ColorFilter API가 인스턴스가 되고 PathEffect 구현과 일치하도록 리팩터링했습니다. (Ica1e8)
  • layoutDirection 매개변수를 Shape의 createOutline에 추가합니다. 이렇게 하면 도형을 인식하는 레이아웃 방향을 만들 수 있습니다. (I57c20, b/152756983)
  • onImeActionPerformed가 지원 중단됩니다. 대신 KeyboardActions를 사용하세요. (If0bbd, b/179071523)
  • 무한 애니메이션에 적용될 InfiniteAnimationPolicy 코루틴 컨텍스트 요소를 도입했습니다. 기본적으로 ComposeTestRule을 사용하여 테스트를 실행하는 경우를 제외하고 설치되는 정책은 없습니다. (I50ec4, b/151940543)
  • Modifier.scrollable에서 canDrag가 삭제되었습니다. (Id66e7, b/175294473)
  • 새로운 parentCoordinates 속성을 허용하도록 LayoutCoordinates.parentCoordinates 이름을 LayoutCoordinates.parentLayoutCoordinates로 바꾸었습니다. 이제 parentCoordinates 속성에서 상위 수정자의 LayoutCoordintes를 제공합니다. 이는 onSizeChanged() 및 onGloballyPositioned()의 더 완전한 사용 사례에 도움이 됩니다. (Idfbfd, b/177926591)
  • tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter 및 pressIndicaitonGestureFilter가 지원 중단되었습니다. 대신 detectTapGestures 함수와 함께 Modifier.clickable 또는 Modifier.pointerInput을 사용합니다. (I6baf9, b/175294473)
  • SaveableStateRegistry의 unregisterProvider를 삭제했습니다. 대신 이제 registerProvider()에서 등록 취소 시 사용할 수 있는 SaveableStateRegistry.Entry 객체를 반환합니다. (Ic4274, b/178583739)
  • rememberSavedInstanceState()를 rememberSaveable()로 이름을 바꾸고 androidx.compose.runtime.saveable 패키지로 이동했습니다. (I1366e, b/177338004)
  • 공개 API에서 CoreText와 CoreTextField를 삭제했습니다.
    • 지원 중단된 SelectionContainer 오버로드가 삭제되었습니다.
    • (I99c19)
  • 이제 WindowManager에 직접 추가/삭제되는 계층 구조에서 Compose가 사용되는 테스트가 더 안정적입니다. (Ie81ed, b/175765614)
  • Recomposer.current()를 삭제했습니다. [Abstract]ComposeView는 이제 지연 생성되고 창으로 범위가 지정되며 창의 ViewTreeLifecycleOwner에서 구동하는 Recomposer를 기본값으로 설정합니다. Recomposition 및 withFrameNanos 기반 애니메이션 틱은 호스트 수명 주기가 중지된 동안 일시중지됩니다. (I38e11)
  • Recomposer.runningRecomposers는 이제 프로세스에서 진행 중인 컴포지션 상태를 관찰하기 위한 읽기 전용 RecomposerInfo의 전역 StateFlow를 제공합니다. 현재 지원 중단된 Recomposer.current()보다 이 API를 사용하는 것이 좋습니다. (If8ebe)
  • Saver, listSaver(), mapSaver(), autoSaver를 androidx.compose.runtime.savedinstancestate에서 androidx.compose.runtime.saveable로 이동했습니다. (I77fe6)
  • EditCommand는 AnnotatedString을 허용합니다. 그러나 이는 API 전용 변경사항이고 다중 스타일 텍스트 편집은 아직 구현되지 않았습니다. (I4c3ea)
  • Uptime 및 Duration을 삭제했습니다. (Ib9bf4, b/177420019)
  • CompositionData.asTree() 및 관련 API를 별도의 ui-tooling-data 모듈로 이동하고 실험용으로 표시했습니다. (Ic95b8)
  • RTL 방향에서 도형의 자동 미러링을 지원하기 위해 RounderCornerShape, CutCornerShape, CornerBasedShape의 매개변수 이름을 left/right에서 start/end로 바꾸었습니다. 자동 미러링을 사용하지 않는 경우를 위해 AbsoluteRounderCornerShape과 AbsoluteCutCornerShape을 도입했습니다. (I61040, b/152756983)
  • Compose 컴파일러 플러그인에서 타겟팅하는 API는 구체적인 클래스 대신 인터페이스를 사용하도록 리팩터링했습니다. 또한, 인터페이스는 더 이상 유형 매개변수를 사용하지 않습니다.

    이는 소스 코드 호환성에 영향을 주면 안 되는 내부 변경이지만, 바이너리 브레이킹 체인지입니다. (I3b922, b/169406779)

  • 의도치 않게 공개 StringBuilder.deleteAt 함수를 삭제했습니다. (Id6ed9)

버그 수정

  • 다른 컴포지션의 하위 요소인 뷰 계층 구조에 배치된 ComposeView는 이제 상위 요소의 하위 컴포지션을 호스팅합니다. (I92883)
  • ImageBitmap 객체를 로드할 때 리소스 드로어블 캐시를 재사용하도록 Compose의 imageFromResource API를 업데이트했습니다. (If3627, b/178751994)

버전 1.0.0-alpha11

2021년 1월 28일

androidx.compose.ui:ui-*:1.0.0-alpha11가 출시되었습니다. 버전 1.0.0-alpha11에 포함된 커밋을 확인하세요.

API 변경사항

  • WithConstraints를 BoxWithConstraints로 재작업하여 foundation.layout으로 이동했습니다. (I9420b, b/173387208)
  • Key.DPadUp이 지원 중단되었습니다. 대신 Key.DirectionUp을 사용하세요. (Iab335, b/177954892)
  • 이제부터 소유자 인터페이스는 내부 인터페이스입니다. (If8e35)
  • 프로그래매틱 방식으로 포커스를 이동하는 FocusManager.moveFocus() API를 추가했습니다. (I045cb, b/177681839)
  • 전역 좌표가 아닌 창 기준 좌표를 사용하도록 PopupPositionProvider를 변경합니다. parentGlobalBounds 이름을 anchorBounds로 바꾸고 windowGlobalBounds를 windowSize: IntSize로 변경합니다. (I2994a)
  • Duration과 Uptime이 Long 밀리초로 대체되며 이 단계에서는 이러한 클래스의 포인터 입력 종속 항목을 삭제합니다. (Ia33b2, b/175142755, b/177420019)
  • AmbientSavedStateRegistryOwner는 이미 기존 AmbientLifecycleOwner 및 AmbientViewModelStoreOwner와 비슷하게 추가되었습니다. (I9a3e8, b/176756365)
  • 벡터 그래픽의 루트에 적용된 색조 처리에 파싱을 지원하는 벡터 그래픽 API를 업데이트했습니다. (Id9d53, b/177210509)
  • 기기를 구분하기 위해 toolType을 PointerInputChange에 추가했습니다. (Iac787, b/175142755)
  • AmbientWindowManager의 이름이 AmbientWindowInfo로 변경되었습니다. (I2686a, b/177084714, b/177084983)
  • 전역 좌표 메서드를 지원 중단하고 창 기반의 좌표 메서드를 새로 만들었습니다. (Iee284)
  • 검사가 사용 설정되어 있을 때 그래픽 레이어 수정자를 추가하는 Modifier.toolingGraphicsLayer를 추가했습니다. (I315df)
  • 이제 FocusRequester.createRefs는 변경될 수 있으므로 실험용으로 표시됩니다. (I2d898, b/177000821)
  • SemanticsPropertyReceiver.hidden이 invisibleToUser로 이름이 변경되었으며 @ExperimentalComposeUiApi로 표시되었습니다. AccessibilityRangeInfo가 ProgressBarRangeInfo로, stateDescriptionRange가 progressBarRangeInfo로 이름이 변경되었습니다. AccessibilityScrollState가 ScrollAxisRange로, horizontalAccessibilityScrollState가 horizontalScrollAxisRange로, verticalAccessibilityScrollState가 verticalScrollAxisRange로 이름이 변경되었습니다. (Id3148)
  • PointerInputData의 모든 필드를 제공하도록 PointerInputData를 삭제하고 PointerInputChange를 수정했습니다. PointerInputEvent 및 PointerInputEventData가 공개 API에서 사용되지 않으므로 이를 내부 클래스로 변경했습니다. (Ifff97, b/175142755)
  • dp에서 원시 픽셀로 변환하는 것을 지원하도록 GraphicsLayerScope 구현 밀도를 업데이트했습니다. (Ied528, b/176819695)
  • 내부적으로 SkMatrix와 Matrix4 사이의 프레임워크 변환 로직과 일치하도록 다른 행렬 표현 간의 변환을 돕는 색인 상수를 제공하고 행의 주요 순서를 따르기 위해 행렬 API를 업데이트했습니다. (I432e6)
  • 실험용 monotonicFrameAnimationClockOf 메서드를 삭제했습니다. (Ib753f, b/170708374)
  • String.fintPrecedingBreak 및 String.fingFollowingBreak를 InternalTextApi로 이동합니다. (I657c4)
  • 공개 API에서 androidx.compose.ui.util.isSurrogatePair가 삭제되었습니다. (Ia9494)
  • TransformedText.transformedText 이름을 TransformedText.text로 변경했습니다.
    • TransformedText는 이제 데이터 클래스가 아닙니다. (Ie672a)
  • 다음 클래스에서 data class를 삭제했습니다.
    • InlineTextContent
    • LocaleList (I605c7)
  • 다음 클래스는 이제 데이터 클래스가 아닙니다.
    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • VisualTransformation을 기능 인터페이스로 변경했습니다. (I3bba4)
  • 함수 참조 매개변수 유형을 추가했습니다. (I5e1bd)
  • 변환된 경계를 InspectorNode에 추가합니다. (Ice42f)

버그 수정

  • onCommit, onDispose, onActive가 지원 중단되었으며 SideEffect 및 DisposableEffect API로 대체되었습니다. (If760e)
  • Font/FontFamily/Typeface의 팩토리 함수 변경사항

    • 대문자로 시작하는 팩토리 함수를 추가했습니다.
    • 첫 글자가 소문자인 기존의 팩토리 함수를 지원 중단했습니다.
    • 새 팩토리 함수는 서브클래스 대신 FontFamily를 반환합니다.
    • 팩토리 함수를 통해서만 생성될 수 있도록 서브클래스의 생성자를 숨겼습니다.
    • Font.asFontFamily의 이름을 Font.toFontFamily로 변경했습니다. (I42aa7)
  • ComposeTestRule을 확장하고 ComposeTestRule에서 삭제된 setContent를 정의하는 ComposeContentTestRule을 도입했습니다. ComposeTestRule을 반환하고 Activity를 실행하지 않는 createEmptyComposeRule() 팩토리 메서드를 추가했습니다. 테스트 중에 Activity를 실행하려면 이 메서드를 사용합니다(예: ActivityScenario.launch 사용). (I9d782, b/174472899)

  • animateAsState를 이제 animateFooAsState로 변경했으며, 여기에서 Foo는 애니메이션되는 변수 유형입니다(예: Float, Dp, Offset 등). (Ie7e25)

  • 콘텐츠 설명 매개변수를 Image 및 Icon에 추가했습니다. 접근성 서비스에 설명을 제공하는 데 사용됩니다. (I2ac4c)

  • displaySize는 사용하면 안 되므로 삭제합니다. 최소한 onRoot() 크기나 창 크기를 사용하는 것이 일반적으로 더 좋습니다. (I62db4)

  • OnSizeChanged는 레이아웃의 콘텐츠 크기를 보고했습니다. 그러나 이제는 수정자 체인 내의 위치에서 크기를 보고합니다. (I36b78, b/177562900)

  • emit() API와 모든 오버로드가 지원 중단되었으며 ComposeNode로 이름이 변경되었습니다. 이는 Compose의 이름 지정 규칙을 준수하기 위한 다른 이름일 뿐 API는 동일합니다. (I4137b)

  • TextFieldValue에서 AnnotatedString을 허용합니다. 그러나 이는 API 전용 변경사항이고 다중 스타일 텍스트 편집은 아직 구현되지 않았습니다.

    • EditingBuffer 생성자 매개변수에서 initial을 삭제했습니다. (I326d5)
  • 이제 invalidate와 compositionReference()가 지원 중단되며 currentRecomposeScope과 rememberCompositionReference로 각각 대체됩니다. (I583a8)

  • AnnotatedString이 kotlin.CharSequence에서 확장되도록 변경되었습니다. 따라서, 이제 length 및 subSequence는 인스턴스 함수이며 확장 함수는 삭제됩니다. (Iaf429)

  • CompositionLifecycleObserver가 RememberObserver로 대체되며 CompositionLifecycleObserver는 이제 지원 중단됩니다.

    RememberObserver는 수정된 의미 체계와 이름이 바뀐 메서드로 CompositionLifecycleObserver를 대체합니다. 새로운 API로 변경하는 것은 한 번만 기억되는 객체의 경우 기계적으로 실행할 수 있으며, 계속 이렇게 하는 것이 좋습니다. 그러나, 참조가 컴포지션에서 두 번 이상 기억된 경우 onEnter가 한 번만 호출되는 참조마다 onRemembered가 호출됩니다. 객체가 단일 onEnter 호출 보장을 신뢰할 수 없게 하는 WithConstraintsScaffold와 같은 하위 컴포지션에서 사용되었고 RememberObserver에서 삭제되었다면 onEnter가 여러 번 호출되었습니다.

    RememberObserver에서 onAbandoned를 추가합니다. 이 함수는 RememberObserver 인스턴스가 remember에 전달된 콜백에서 반환되지만 컴포지션 상태에 기억되지 않아서 onRemembered가 호출되지 않는 경우에 호출됩니다. 이러한 상황은 완료 전에 예외에서 컴포지션을 종료한 경우 또는 상태에서 더 이상 최신이 아니거나 필요하지 않은 컴포지션을 생성하므로 컴포지션이 삭제된 경우에 발생할 수 있습니다. 위의 단일 참조 권장사항을 따르는 RememberObserver 인스턴스가 외부 리소스를 추적하면 onForgottenonAbandoned는 모두 리소스가 더 이상 필요하지 않음을 나타냅니다. 객체가 시작된 작업 또는 onRemembered에 할당된 리소스를 추적하고 있다면 onRemembered가 호출되는 경우 onAbandoned는 호출되지 않으므로 무시될 수 있습니다. (I02c36)

  • 2개 이상의 TextUnit 간 연산 작업을 지원 중단했습니다. Int.sp 및 Int.em과 같은 확장 함수 대신 TextUnit.Sp와 TextUnit.Em 함수를 지원 중단했습니다. (I48369)

  • 이제 public.xml 등을 통해 명시적으로 선언된 공개 리소스가 없는 라이브러리의 리소스는 기본적으로 비공개입니다. (Ia1dcc, b/170882230)

  • ScrollableColumn/Row가 지원 중단되었습니다. 스크롤 콘텐츠가 많을 때 ScrollableColumn을 사용하는 것은 LazyColumn에 비해 효율성이 떨어집니다. LazyColumn을 사용하면 표시된 요소만 구성/측정하고 그릴 수 있기 때문입니다. 사용자가 비효율적인 방식을 사용하지 않도록 ScrollableColumn과 ScrollableRow를 지원 중단하고 대신 LazyColumn과 LazyRow의 사용을 장려합니다. 그러나 사용자는 여전히 지연 동작이 필요하지 않다고 판단하여 Column(Modifier.verticalScroll(rememberScrollState()))와 같은 수정자를 직접 사용할 수 있습니다. (Ib976b, b/170468083)

  • items(count: Int)는 LazyColumn/LazyRow/LazyVerticalGrid 범위의 새로운 팩토리 메서드입니다. items(items: List)itemsIndexed(items: List)는 이제 확장 함수이므로 사용할 때 직접 가져와야 합니다. items(items: Array)itemsIndexed(Array)는 배열의 새로운 확장 오버로드입니다. (I803fc, b/175562574)

  • ImeAction.NoAction 대신 ImeAction.None을 사용하세요.

    • ImeAction.Unspecified 대신 ImeAction.Default를 사용하세요. (Ie1bcc)
  • 테스트에서 TestCoroutineDispatcher를 활용합니다. (I532b6)

  • TextInputService.onStateUpdated 이름을 updateState로 변경했습니다. (Id4853)

  • TransitionDefinition 기반의 Transition이 지원 중단되었습니다. (I0ac57)

  • TextUnitType.Inherit가 삭제되었습니다. 대신 TextUnitType.Unspecified를 사용하세요. (I9ff64)

버전 1.0.0-alpha10

2021년 1월 13일

androidx.compose.ui:ui-*:1.0.0-alpha10가 출시되었습니다. 버전 1.0.0-alpha10에 포함된 커밋을 확인하세요.

브레이킹 체인지

  • 내부 컴파일러 API를 재구성하면 모든 @Composable 함수가 완료된 후에 구성의 결과로 생성된 노드 변경사항을 구성의 '변경사항 적용' 단계에 일괄 적용할 수 있습니다.

    이는 변경사항이 적용될 때까지 내부 및 실험용 API에서 더 이상 노드를 사용할 수 없으므로 애플리케이션 코드에 영향을 줄 수 있는 동작 브레이킹 체인지입니다. 이 문제는 일반적으로 노드가 생성 및 초기화될 때까지 코드 실행을 연기하도록 이러한 SideEffect 컴포저블의 종속 항목을 사용하여 코드를 둘러싸는 방식으로 해결할 수 있습니다. (I018da)

API 변경사항

  • 맞춤 포커스 순회 순서를 지정하는 데 사용할 수 있는 Modifier.focusOrder()를 추가했습니다. (I90cf5, b/175899543, b/170155556, b/170155429)
  • 지원 중단된 focusObserver를 삭제했습니다. 대신, onFocusChanged 또는 onFocusEvent를 사용하면 됩니다. (I3ecb9, b/175156387)
  • EditOperations API 변경사항
    • EditOperation의 이름을 EditCommand로 바꿈
    • EditOperation의 구체적인 구현을 위해 Command 접미사를 추가함
    • EditCommand가 더 이상 데이터 클래스가 아님
    • EditOperation.process 함수의 이름을 applyTo로 바꿈
    • InputEventListener의 이름을 InputEventCallback으로 바꿈
    • (I0a366)
  • 사용하지 않는 PxSquared, PxCubed, PxInverse를 삭제했습니다. Size.center()를 속성으로 변경했습니다. (I973f7)
  • ui-test 모듈은 이제 테스트 중인 UI용 Recomposer 생성을 구성할 수 있습니다. (Ibebd8)
  • 구성요소 부분과 수학 연산을 포함하도록 속도를 수정했습니다. (Ib0447)
  • 유사한 실험용 API 주석과 일치하도록 @ExperimentalTesting에서 @ExperimentalTestApi로 이름을 바꿨습니다. (Ia4502, b/171464963)
  • Color.useOrElse()의 이름을 Color.takeOrElse()로 바꿨습니다. (Ifdcf5)
  • 사용하지 않는 DpInverse, DpSquared, DpCube 클래스를 삭제했습니다. (I4d62b)
  • Constraints#satisfiedBy의 이름을 isSatisfiedBy로 바꿨습니다. (I9cf5c)
  • layoutnode 경계가 변경되면 소유자에게 알리는 콜백이 추가됩니다. (I72fd1)
  • Unspecified 상수가 있는 인라인 클래스용으로 isSpecified, isUnspecified, useOrElse를 추가했습니다. (I93f7b, b/174310811)
  • [Abstract]ComposeView API를 확장하여 Compose 기반 뷰를 재활용할 수 있도록 하고 나중에 다시 만들 수 있도록 뷰의 구성을 폐기합니다. 하위 구성을 만들기 위해 창으로 범위가 지정된 Recomposer 및 CompositionReference를 설치 및 탐색하는 API를 추가합니다.

    [Abstract]ComposeView의 구성 폐기 전략을 구성하기 위한 ViewCompositionStrategy를 추가합니다. 기본 동작은 창 분리에 사용됩니다. (I860ab)

  • Any.identityHashCode() 공개 API를 삭제했습니다. (I025d7)

  • 대신 String.format을 직접 사용하도록 toStringAsFixed API를 삭제했습니다. (Iaba6b)

  • 기본 Strings.kt에 Toggle을 추가합니다. (I4a5b7, b/172366489)

  • nativeClass를 모듈로 이동하여 내부 클래스로 만들었습니다. equals 구현에서 'is MyClass'를 대신 사용하도록 nativeClass 사용을 업데이트했습니다. (I4f734)

  • Modifier.focus()와 Modifier.focusRequester()가 지원 중단됩니다. 대신 Modifier.focusModifier()와 Modifier.focusReference()를 사용하세요. (I75a48, b/175160751, b/175160532, b/175077829)

  • Selectable 업데이트를 SelectionManager에 알리도록 SelectionRegistrar.notifySelectableChange를 도입했습니다. (I6ff30, b/173215242)

  • 다양한 윤곽선 구현을 위해 사각형 경계를 얻을 수 있는 Outline.bounds 속성이 도입되었습니다. (I16e74, b/175093504)

  • TestUiDispatcher를 지원 중단했습니다. 대신 Dispatchers.Main을 사용하세요. (Ic171f, b/175385255)

  • ImeOptions 및 KeyboardOptions는 더 이상 데이터 클래스가 아닙니다. (I3c898, b/168684531)

  • VisualTransformation API 변경사항

    • OffsetMap의 이름을 OffsetMapping으로 바꿈
    • OffsetMapping.identityOffsetMap의 이름을 OffsetMapping.Identity로 바꿈
    • PasswordTransformation이 더 이상 데이터 클래스가 아님
    • OffsetMapping을 자체 파일로 이동함
    • (I0bdf3)
  • Position의 이름을 DpOffset으로 바꿨고 getDistance()를 삭제했습니다. (Ib2dfd)

  • Dp.isFinite()를 val Dp.isFinite로 변경했습니다. (I50e00)

버그 수정

  • Recomposer는 이제 Recomposer의 활동과 연결된 효과의 활동을 모니터링할 수 있도록 현재 상태의 Flow를 노출합니다. (Ifb2b9)
  • 이제 keyEvent.nativeKeyEvent를 통해 네이티브 keyEvent에 액세스할 수 있습니다. (I87c57, b/173086397)
  • animate()가 이제 T 대신 State<T>를 반환하는 animateAsState()로 대체되었습니다. 상태 값이 판독되는 지점까지 무효화 범위를 좁힐 수 있으므로 성능이 향상됩니다. (Ib179e)
  • Semantics role API를 추가하고 역할을 클릭 가능하고 선택 가능하며 전환 가능한 SemanticsModifier에 매개변수로 추가합니다. 슬라이더에서도 사용할 수 있도록 Modifier.progressSemantics를 변경했습니다. (I216cd)
  • 새로운 코루틴 기반 API인 Animatable은 애니메이션 간의 상호 배타성을 보장합니다.
    • 새로운 DecayAnimationSpec은 다차원 감쇠 애니메이션을 지원합니다.
    • (I820f2, b/168014930)

버전 1.0.0-alpha09

2020년 12월 16일

androidx.compose.ui:ui-*:1.0.0-alpha09가 출시되었습니다. 버전 1.0.0-alpha09에 포함된 커밋을 확인하세요.

API 변경사항

  • 지원 중단된 KeyEvent.Alt를 삭제했습니다. 대신 KeyEvent.isAltPressed를 사용하세요. (Idd695)
  • Modifier.keyInputFilter와 Modifier.previewKeyInputFilter가 지원 중단됩니다. 대신 Modifier.onKeyEvent와 Modifier.onPreviewKeyEvent를 사용하세요. (Idbf1b, b/175156384)
  • Modifier.focusObserver가 지원 중단됩니다. 대신 Modifier.onFocusChanged나 Modifier.onFocusEvent를 사용하세요. (I30f17, b/168511863, b/168511484)
  • 정지 포인터 입력 API의 경우 HandlePointerInputScope의 이름을 AwaitPointerEventScope로 바꾸고 handlePointerInput()의 이름을 awaitPointerEventScope()로 바꿨습니다. (Idf0a1, b/175142755)
  • Autofill API는 이제 실험용 API이며 필수 선택 항목입니다. (I0a1ec)
  • FocuSRequester 인스턴스를 만들기 위해 디스트럭처링 선언을 추가했습니다. (I35d84, b/174817008)
  • accessibilityLabel의 이름을 contentDescription으로 바꿨습니다. accessibilityValue의 이름을 stateDescription으로 바꿨습니다. (I250f2)
  • 맞춤 이벤트를 정지 포인터 입력 API에서 삭제했습니다. (Ia54d5, b/175142755)
  • SelectionRegistrar에 몇 가지 새로운 함수를 도입하고 onPositionChange의 이름을 notifyPositionChange로 바꿨습니다. (Ifbaf7)
  • LayoutNode의 더 많은 구성요소를 내부용으로 표시했습니다. (I443c6)
  • 도구 및 테스트에서 사용하도록 LayoutInfo를 도입했습니다. (I9b190)
  • AndroidOwner를 내부로 이동했습니다. (Ibcad0, b/170296980)
  • ExperimentalPointerInput 주석을 삭제했습니다. (Ia7a24)
  • 중첩된 스크롤 시스템을 추가했습니다. 자세한 내용은 Modifier.nestedScroll을 참고하세요. (I36e15, b/162408885)
  • subcomposeInto(LayoutNode)를 내부로 이동했습니다. (Id724a)
  • 하향식 대신 상향식으로 트리를 간단히 빌드할 수 있도록 Applier 인터페이스를 변경했습니다.

    insert()에서 insertTopDown()으로 메서드 이름을 변경했습니다.

    새로운 메서드인 insertBottomUp()이 추가되었습니다.

    Applier에서 insertTopDown() 또는 insertBottomUp() 중 성능이 더 뛰어난 메서드를 사용하여 편집 중인 트리에 노드를 삽입합니다.

    LayoutNodeView와 같은 일부 트리는 하향식보다 상향식으로 빌드하는 것이 훨씬 더 효율적입니다. 이 변경사항이 적용되기 전에는 상향식을 구현하는 데 인서트 스택이 필요했는데, 성능을 위해 상향식 구조가 필요한 모든 applier에 이러한 스택을 복사해야 했습니다. 이번 변경사항에 따라 이제 Applier가 상향식 트리를 빌드하기 위해 insertBottomUp()을 재정의하고 하향식 트리를 빌드하기 위해 insertTopDown()을 재정의합니다. (Icbdc2)

  • dismissOnBackPress 및 dismissOnClickOutside 속성을 AndroidDialogProperties에 추가했습니다. 이를 통해 대화상자의 onDismissRequest 람다를 호출하는 시기를 구성할 수 있습니다. (If5e17)

  • 래스터화된 애셋 형식(예: PNG)이나 VectorDrawables에서 Painter 객체를 불투명하게 로드하는 작업을 처리하도록 painterResource API를 추가했습니다. 소비자는 더 이상 애셋 유형을 미리 결정하지 않아도 되고 이 메서드를 호출하여 이미지 컴포저블 또는 페인터 수정자에서 사용할 Painter 객체를 가져올 수 있습니다. (I2c703, b/173818471)

  • 하위 요소의 의미 체계를 지우고 새 의미 체계를 설정하는 Modifier.clearAndSetSemantics를 추가했습니다. (I277ca)

  • ContentDrawScope를 DrawScope와 함께 있도록 ui-graphics 모듈로 이동했습니다. (Iee043, b/173832789)

  • 스트로크가 적용된 도형에 다양한 패턴을 제공하는 PathEffect 그래픽 API를 도입했습니다. NativePathEffect 사용을 지원 중단했으며 PathEffect의 예상/실제 구현으로 대체했습니다. (I5e976, b/171072166)

  • Espresso 유휴 리소스의 Compose 지원 변형으로 Compose에 IdlingResource 인터페이스를 추가했습니다. 이는 ComposeTestRule을 통해 등록하거나 등록 취소할 수 있습니다. (I433f3)

  • ComposeIdlingResource의 전역 등록(등록 취소)과 ComposeIdlingResource의 클록 전역 등록(등록 취소)을 삭제했습니다. (I32660)

버그 수정

  • 오프셋 수정자의 람다가 이제 Float 대신 IntOffset을 반환합니다. (Ic9ee5, b/174137212, b/174146755)
  • 공개 API에서 SlotTable, SlotReader, SlotWriter가 삭제되었습니다. 이전에는 InternalComposeAPI로 표시되었으며 지금은 구성 모듈 내부에 있습니다.

    구성 정보를 추출하는 데 사용하는 ui-tooling API를 대체할 ComposeData 및 ComposeGroup이 추가되었습니다. 이러한 API는 공개되어 있지만 ui-tooling API가 해석하는 원시 정보를 제공하므로 ui-tooling API 외부에서 사용할 수는 없습니다. (I31a9c)

  • 그리기 환경의 크기 조절 정보를 사용할 수 있을 때 셰이더 인스턴스를 느리게 만들도록 ShaderBrush를 리팩터링했습니다. 이는 맞춤 DrawModifier 구현을 구현하지 않고도 구성 시간에 컴포저블의 전체 그리기 경계를 차지하는 그라데이션을 정의하는 데 유용합니다.

    그라데이션 함수 생성자 API를 지원 중단했으며 Gradient 객체의 팩토리 메서드로 대체했습니다. (I511fc, b/173066799)

  • LazyColumnFor, LazyRowFor, LazyColumnForIndexed, LazyRowForIndexed를 지원 중단했습니다. 대신 LazyColumn과 LazyRow를 사용하세요. (I5b48c)

  • BuildCompat.isAtLeastR을 지원 중단했습니다. (Idb37e)

  • AnnotatedString을 빌드하기 위해 buildAnnotatedString 팩토리 함수를 추가했습니다. annotatedString 빌더 함수를 지원 중단했습니다. (Idfe0b)

  • 값을 라디안으로 변환하기 위해 Float 및 Double의 확장 메서드를 삭제했습니다. 유일하게 사용되었던 위치인 PathParser 구현에서 비공개 함수가 되도록 이동했습니다. (I25f52)

버전 1.0.0-alpha08

2020년 12월 2일

androidx.compose.ui:ui-*:1.0.0-alpha08가 출시되었습니다. 버전 1.0.0-alpha08에 포함된 커밋을 확인하세요.

API 변경사항

  • 의미 체계 작업 닫기를 추가했습니다. (I2b706)
  • DrawModifier API를 androidx.compose.ui 패키지에서 androidx.compose.ui.draw 패키지로 이동했습니다. 지원 중단된 API에서 현재 API로 이전하는 데 도움이 되는 typealiases/helper 메서드를 포함하도록 DrawModifierDeprecated.kt 파일을 만들었습니다. (Id6044, b/173834241)
  • Modifier.drawLayer의 이름을 Modifier.graphicsLayer로 바꿨습니다. API 의견에 따라 관련 클래스도 GraphicsLayer로 업데이트했습니다. (I0bd29, b/173834241)
  • 맞춤 레이아웃과 레이아웃 수정자가 그리기용 그래픽 레이어를 도입하여 하위 요소를 배치할 수 있는 새로운 메서드인 placeable.placeWithLayer()와 placeable.placeRelativeWithLayer()를 추가했습니다. 새로운 메서드를 통해 우선 다시 그리기를 최적화할 수 있으므로 하위 요소를 이동해야 할 때 콘텐츠를 다시 그리지 않아도 되고, 하위 요소의 그리기 변환을 적용할 수 있습니다. (Ibd8f6, b/170296989, b/171493718, b/173030831)
  • SubcomposeLayout 선언에서 <T>를 삭제했습니다. 이제 유형을 지정하지 않고 사용할 수 있습니다. (Ib60c8)
  • drawLayer의 편의성을 위해 Modifier.scale/rotate API를 추가했습니다.
    • Modifier.drawOpacity의 이름을 Modifier.alpha로 바꿨습니다.
    • Modifier.drawShadow의 이름을 Modifier.shadow로 바꿨습니다. (I264ca, b/173208140)
  • PointerInputData의 가동시간 및 위치 필드가 null을 허용하지 않게 했습니다. (Id468a)
  • 이제 MaterialTheme이 선택 핸들과 선택 배경에 맞는 올바른 색상을 설정합니다. 머티리얼이 아닌 앱에서는 직접 AmbientTextSelectionColors를 사용하여 선택 옵션으로 사용되는 색상을 맞춤설정할 수 있습니다. (I1e6f4, b/139320372, b/139320907)
  • 호스트 창에 포커스가 있는지 확인하는 WindowManager.isWindowFocused와 onWindowFocusChanged 콜백을 제공하는 WindowFocusObserver를 추가했습니다. (I53b2a, b/170932874)
  • pivotFractionXpivotFractionYcomponent1component2로 반환하는 디스트럭처링 구문을 포함하도록 TransformOrigin API를 업데이트했습니다. (If43c4, b/173586560)
  • Compose 가이드라인과의 일관성을 확인하기 위해 컴포저블 람다 매개변수 이름 지정 및 위치에 관한 린트 검사를 추가했습니다. 또한 린트 검사와 지침에 따라 후행 람다의 이름으로 children을 사용하는 일부 API를 content로 이전했습니다. (Iec48e)
  • keyevent가 전달되었을 때 Alt, Ctrl, Meta 또는 Shift 특수키가 눌렸는지 확인하는 API를 추가했습니다. (I50ed9)
  • Modifier.drawLayer() 오버로드를 추가했습니다. 이 오버로드는 상태 변경이 발생할 때 재구성 및 재배열을 건너뛸 수 있는 방식으로 레이어 매개변수를 정의하는 새로운 GraphicsLayerScope에서 람다 블록을 사용합니다. LayoutModifier의 placeable.placeWithLayer() 메서드로 로직을 이전하는 작업을 준비하도록 DrawLayerModifier를 내부로 이동했습니다. (I15e9f, b/173030831)
  • 접미사로 Ambient라는 이름을 사용하는 Ambient가 지원 중단되고, 다른 Ambient 및 Compose API 가이드라인에 따라 Ambient를 접두사로 사용하는 새로운 속성으로 대체됩니다. (I33440)
  • androidx.compose.ui.text.Typefaceandroidx.compose.ui.text.font.Typeface로 이동했습니다. (Ic2b81)
  • 의미 체계 인수 mergeAllDescendants의 이름을 mergeDescendants로 바꿨습니다. (Ib6250)
  • 방향 잠금을 포함하여 새로운 드래그 동작 감지기 정지 포인터 입력 API를 도입했습니다. (Icef25)
  • VectorAsset의 이름을 ImageVector로 바꿨습니다. API 가이드라인에 따라 ImageVector의 내부 클래스가 되도록 VectorAsset을 Builder로 이동하고 이름을 바꿨습니다. 호환성을 위해 VectorAssetBuilder의 typealias를 ImageVector.Builder 링크에 추가했습니다. (Icfdc8)
  • ImageAsset 및 관련 메서드의 이름을 ImageBitmap으로 바꿨습니다. (Ia2d99)
  • PlacementScope place()의 zIndex 매개변수를 추가했습니다. 이를 통해 Modifier.zIndex()가 이제 LayoutModifier로 작동하고 모든 맞춤 레이아웃이 배치 블록에서 바로 하위 요소의 zIndex를 설정할 수 있습니다. (I711f7, b/171493718)
  • 기초 의미 체계 속성을 UI로 이동했습니다. (I6f05c)
  • place(Offset) 및 placeRelative(Offset)를 지원 중단했습니다. 대신 int 오프셋이 있는 오버로드를 사용하세요. (I4c5e7)
  • 이전에 지원 중단된 API를 삭제했습니다. Modifier.onPositioned를 삭제했습니다. Modifier.onGloballyPositioned를 사용하세요. Modifier.onDraw를 삭제했습니다. Modifier.onDrawBehind를 사용하세요. Modifier.plus를 삭제했습니다. Modifier.then을 사용하세요. Color.unset을 삭제했습니다. Color.Unspecified를 사용하세요. PxBounds 클래스를 삭제했습니다. 대신 Rect를 사용하세요. (Ie9d02, b/172562222)
  • 정렬 인터페이스가 업데이트되어 정상 작동합니다. (I46a07, b/172311734)
  • 탭, 두 번 탭, 길게 누르기, 누르기 표시를 위한 동작 감지기를 새로운 정지 포인터 입력을 사용하여 추가했습니다. 개발자가 자체 동작 감지기를 더욱 쉽게 작성할 수 있도록 몇 가지 유틸리티도 추가했습니다. (I00807)
  • LayoutIdParentData의 이름 중 idlayoutId로 바꿨습니다. Measurable.id의 이름을 Measurable.layoutId로 바꿨습니다. (Iadbcb, b/172449643)
  • 회전, 확대/축소, 화면 이동을 감지하는 도우미를 포함한 새로운 멀티터치 동작 감지기를 도입했습니다. (Ic459d)
  • SweepGradientShader 및 SweepGradientBrush API를 도입했습니다. (Ia22c1)
  • 테스트의 시간 제어(TestAnimationClock 및 사용)가 이제 실험용입니다. (I6ef86, b/171378521)
  • 코루틴 기반 스크롤 API를 추가했습니다.

    스크롤 제어를 위한 낮은 수준의 API는 물론 LazyListState.snapToItem 및 LazyListState.smoothScrollBy를 추가했습니다. 이러한 API는 반환하기 전에 스크롤이 완료될 때까지 대기하는 스크롤을 제어하기 위해 정지 인터페이스를 제공합니다. (Ie5642)

  • Modifier.focusable을 기초에 추가했습니다. 이를 사용하여 올바른 의미 체계와 접근성으로 포커스 가능 동작을 구성요소에 추가할 수 있습니다. (I41eb9, b/152525426, b/162865824)

  • clock에 위임될 수 있는 AnimationClockTestRule의 메서드와 속성의 기본 구현을 제공했습니다. (I7ea3d, b/173399709)

  • AndroidComposeTestRule이 이제 맞춤 활동 런처를 허용할 수 있습니다. (Ib8288, b/153623653, b/154135019)

  • TextLayoutResult.getLineVisibleEnd를 지원 중단했습니다. 대신 이제 TextLayoutResult.getLineEnd에 새로운 매개변수 visibleEnd가 있습니다. (I73282)

  • TextFieldValue API를 업데이트했습니다.

    • TextFieldValue.composition을 읽기 전용으로 만들었습니다.
    • 잘못된 선택 범위로 발생한 예외를 삭제했습니다. (I4a675, b/172239032)
  • TTS(텍스트 음성 변환) 엔진의 TtsAnnotation을 지원합니다. (I54cc6)

  • 코루틴에서 애니메이션을 실행하기 위한 새로운 API를 도입했습니다. (Ied662)

버그 수정

  • Box 정렬 매개변수의 이름을 contentAlignment로 바꿨습니다. (I2c957)
  • offsetPx 수정자의 이름을 offset으로 바꿨습니다. offsetPx 수정자는 이제 State 대신 람다 매개변수를 사용합니다. (Ic3021, b/173594846)
  • resetInput 매개변수를 TextInputService#onStateUpdated에 추가했습니다. (I3e8f5, b/172239032, b/171860947)
  • 구성 가능한 함수에 수정자 매개변수 린트 검사를 추가했습니다. 이 린트 검사에서는 Compose 가이드라인과의 일관성을 위해 매개변수의 이름 지정, 반환 유형, 기본값 및 순서를 확인합니다. (If493b)
  • TestAnimationClock의 기반을 MonotonicFrameClock으로 설정하도록 허용하는 옵션을 일시적으로 추가했습니다. (I1403b, b/173402197)
  • Android Typeface 래퍼를 추가했습니다. typeface 함수(예: typeface(Typeface.DEFAULT))를 통해 Android Typeface를 로드할 수 있습니다. 또한 typefaceFromFontFamily()의 이름을 typeface()로 바꿨습니다. (I52ab7)
  • 수정자 팩토리 함수가 수정자에서 확장 프로그램으로 정의되어 함께 원활하게 체인될 수 있는지 확인하기 위한 린트 검사를 추가했습니다. (I07981)
  • 이전 ui-test 모듈 및 모듈의 스텁을 삭제했습니다. (I3a7cb)
  • Recomposer에서 더 이상 EmbeddingContext를 수락하지 않습니다. 필수 예약 종속 항목을 effectCoroutineContext에서 가져옵니다. FrameManager가 지원 중단됩니다. 플랫폼 통합이 자체 전역 스냅샷 처리를 초기화해야 합니다. (I02369)
  • 접근성 노드에 스타일 정보를 전달했습니다. (If5e8d)
  • 다른 단위와의 일관성을 위해 TextUnit.Inherit의 이름을 TextUnit.Unspecified로 바꿨습니다. (Ifce19)

Compose UI 버전 1.0.0-alpha07

2020년 11월 11일

androidx.compose.ui:ui-*:1.0.0-alpha07가 출시되었습니다. 버전 1.0.0-alpha07에 포함된 커밋을 확인하세요.

API 변경사항

  • 균일하지 않은 확장 사용 사례를 지원하기 위해 가로축과 세로축의 배율을 서로 독립적으로 나타내는 ScaleFactor 인라인 클래스를 도입했습니다.
    • ContentScale에 computeScaleFactor 메서드를 추가했습니다.
    • 대상을 완전히 차지하도록 src 경계를 확장하기 위해 비균일 조정을 실행하는 ContentScale.FillBounds를 추가했습니다.
    • 크기 매개변수로 ScaleFactor 매개변수를 계산하는 연산자 메서드를 추가했습니다.
    • (Ic96a6, b/172291582)
  • 정렬을 만들기 위한 BiasAlignment 및 BiasAbsoluteAlignment 팩토리를 추가했습니다. (Iac836, b/169406772)
  • 개발자가 포커스를 강제로 삭제할 수 있습니다. (I90372)
  • Compose의 뷰에 고도가 그려지지 않는 버그를 수정했습니다. (If7782)
  • 이름 지정 규칙을 Modifier.drawBehind와 일치시키기 위해 ContentDrawScope에서 onDrawBehind API를 만들었습니다. (I4fc3a, b/171955269)
  • Layer API에서 3D 변환 rotationX/rotationY를 보완하기 위해 카메라 거리 지원을 추가했습니다. (I40213, b/171492100)
  • 콜백 없는 SelectionContainer를 추가했습니다. (Ibfadb)
  • ExperimentalSubcomposeLayoutApi 주석을 삭제했습니다. 이제 @OptIn을 추가하지 않고도 SubcomposeLayout을 사용할 수 있습니다. (I708ad)
  • FirstBaseline 및 LastBaseline을 androidx.compose.ui.layout 패키지로 이동했습니다. (Ied2e7)
  • drawShadow() 수정자에서 혼란을 야기했던 불투명도를 삭제했습니다. (I82c62, b/171624638)
  • MeasureResult를 MeasureScope 외부로 이동했습니다. (Ibf96d, b/171184002)
  • 여러 레이아웃 관련 기호를 androidx.compose.ui에서 androidx.compose.layout.ui로 이동했습니다. (I0fa98, b/170475424)
  • 지원 중단된 FocusState2를 삭제했습니다. (I686cb, b/168686446)
  • 이제 ZIndexModifier가 내부용으로 변경되었습니다. (I1808b, b/171493718)
  • 불필요한 복싱을 피하기 위해 null이 아닌 크기를 반환하도록 크기 매개변수의 lerp 메서드 반환 유형을 업데이트했습니다. (Ib0044)
  • kotlinx-coroutines-test의 runBlockingTest를 사용하여 테스트 코드용으로 TestMonotonicFrameClock을 추가했습니다. 이는 대기 중인 컴포지션 프레임 이벤트에 대해 Compose의 MonotonicFrameClock에 의존합니다. (I4402f)
  • GestureScope.localToGlobal을 삭제했습니다. (I15299, b/171462785)
  • onAllNodesWithSubstring 파인더를 추가했습니다. (I81dd7, b/171462889)
  • androidx.ui.test 모듈이 지원 중단되었습니다. androidx.compose.ui.test 및 androidx.compose.ui.test.junit4로 이전하세요. (I452e8)

버그 수정

  • captureToBitmap을 captureToImage로 이동했습니다. (I86385)
  • foundation.Text가 지원 중단되고 material.Text로 대체되었습니다. 테마의 값을 사용하지 않는 비독단적인 기본 텍스트 API는 androidx.compose.foundation.BasicText를 참고하세요. (If64cb)
  • keyboardOptions를 허용하도록 TextFields를 업데이트했습니다. (Ida7f3)
  • KeyboardOptions의 이름을 ImeOptions로 바꿨습니다. (I82f36)
  • KeyboardType 및 ImeAction을 KeyboardOptions로 이동했습니다. (I910ce)
  • Ambient를 제공하기 위한 대안으로 provideDefault를 추가했으며 이는 이미 제공된 Ambient 값이 없을 때만 설정되는 Ambient 값을 지정하는 데 사용할 수 있습니다. (Id6635, b/171024925)
  • BaseTextField가 지원 중단되었습니다. BasicTextField를 대신 사용하세요. (I896eb)
  • ui-test-junit4 모듈을 도입했습니다. (Ib91f8)
  • relativePaddingFrom 이름을 paddingFrom로 바꿨습니다. 레이아웃 경계에서 텍스트 기준선까지의 거리를 쉽게 지정하도록 paddingFromBaseline 수정자를 추가했습니다. (I0440a, b/170633813)
  • SideEffect 및 DisposableEffect API와 일관성을 유지하기 위해 LaunchedTask의 이름을 LaunchedEffect로 바꿨습니다. 제목 매개변수가 없는 LaunchedEffect는 권장사항을 따르도록 장려하기 위해 허용되지 않습니다. (Ifd3d4)
  • 구성 업데이트 시 재구성되는 리소스 컴포저블을 도입했습니다. (I6387c, b/167352819)
  • 이제 Recomposer에는 생성 시 CoroutineContext가 필요합니다. (Ic4610)
  • 여러 Modifier.zIndex()가 적용된 경우 zIndex 값을 합산합니다. 이전에는 첫 번째 값이 더 컸습니다. (Ic514c, b/170623936)
  • 공개 API에 영향을 주지 않아야 하는 내부 SlotTable 구현을 변경했습니다. (If9828)
  • 키보드 자동 수정 IME 옵션을 추가했습니다. (I57b8d)
  • androidx.ui.test를 androidx.compose.ui.test로 이동했습니다. (I9ffdb)
  • 공개 API에서 KeyboardOptions.toImeOptions를 삭제했습니다. (Ic2e45)

외부 기여

  • 내부 아티팩트 androidx.compose.ui:ui-text-android의 게시가 중지되었습니다. (Ib93fa)

버전 1.0.0-alpha06

2020년 10월 28일

androidx.compose.ui:ui-*:1.0.0-alpha06가 출시되었습니다. 버전 1.0.0-alpha06에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 Recomposer가 CompositionReference이자 유효한 컴포지션 상위 요소입니다. 이제 명시적 Recomposer가 필요한 위치가 줄었습니다. (I4036f)
  • 컴포저블 API에서 내부적으로 'remember'를 활용하여 컴포지션에서 데이터 유지를 더 잘 나타내도록 VectorPainter를 지원 중단하고 rememberVectorPainter로 대체했습니다. (Ifda43)
  • 그리기 명령어를 재정렬하는 기능을 구현하기 위해 DrawScope 대신 ContentDrawScope를 수신자 범위로 노출하도록 Modifier.drawWithCache API를 업데이트했습니다. 이는 상응하는 혼합 모드 알고리즘이 올바르게 적용되도록 콘텐츠 픽셀을 먼저 렌더링해야 하는 블렌딩/색조 조정 사용 사례에 유용합니다. (Ie7ec8)
  • SimpleContainer를 PopupTestUtils.kt로 이동했습니다. (I78c57)
  • ConsumedData가 더 이상 데이터 클래스가 아닙니다. 자세한 내용은 https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219를 참고하세요. (I1737f)
  • Rtl 핸들 위치를 수정했습니다. (I6e1e0)
  • DrawScope 및 ContentDrawScope를 추상 클래스가 아닌 인터페이스가 되도록 리팩터링했습니다.
    • DrawScope의 CanvasDrawScope 구현을 생성했습니다.
    • CanvasScope를 대신 사용하도록 DrawScope의 구현을 리팩터링했습니다.
    • DrawScope의 종속 항목을 래핑하도록 DrawContext를 생성했습니다.
    • DrawScope에서 지원 중단된 메서드를 삭제했습니다. (I56f5e)
  • 브레이킹 체인지: 포인터 이벤트에서 변경할 수 있는 유일한 값이 소비 데이터라는 점을 고려하여 PointerInputFilter.onPointerEvent(...)에서 반환 값을 삭제했습니다. PointerInputFilter.onPointerEvent(...)에서 데이터를 반환하는 대신 이제 전달된 PointerEvents의 소비 데이터를 변경할 수 있습니다. (I6acd0)
  • MeasureScope와 IntrinsicMeasureScope가 인터페이스로 만들어졌습니다. (I1a087, b/170461665)
  • AlignmentLine의 병합 함수가 숨겨졌습니다. (I9da1a, b/170612900, b/170611568)
  • 구성된 수정자에 검사기 정보를 지정하는 기능을 추가했습니다. (Idee08, b/163494569)
  • 선택 메뉴에 SelectAll 옵션을 추가했습니다. (Ief02b)
  • 문서와 일치하는 중앙의 기본 피벗 매개변수를 취하도록 DrawTransform.rotate를 업데이트했습니다.
    • 다른 변환 메서드와 일치하는 피벗 지점의 오프셋을 사용하기 위해 DrawScope.rotateRad를 업데이트했습니다.
    • 피벗의 x 및 y 좌표에 부동 소수점 수를 사용한 DrawScope.rotateRad 오버로드가 지원 중단되었습니다.
    • (Iffcbb, b/170434992)

버그 수정

  • MissingGetterMatchingBuilder의 API 린트 검사가 androidx용으로 사용 설정되었습니다. (I4bbea, b/138602561)
  • 테스트를 추가했습니다. (I6b8ae)
  • ComposeTestRule에서 전환을 사용 설정하여 ComposeTestRule에서 깜박이는 커서를 사용 설정하는 옵션을 삭제했습니다. (If0de3)
  • KeyboardCapitalization IME 옵션을 추가했습니다. (I8ac38)
  • CoreTextField에 한 줄 키보드 옵션을 추가했습니다. (I72e6d)
  • SimpleContainer를 PopupTestUtils.kt로 이동했습니다. (I65c3e)
  • Compose 전체에서 사용되는 방식을 더 잘 표현하도록 Radius API의 이름을 CornerRadius로 바꿨습니다. 음의 모서리 반지름이 0으로 고정되어 있음을 나타내도록 문서를 업데이트했습니다. (I130c7, b/168762961)
  • ACTION_DOWN을 제외한 모든 작업의 onTouchEvent에 false를 반환하는 하위 Android 뷰로 MotionEvent를 계속 전송하여 Android 상호 운용성을 개선했습니다. (I94c5a, b/170320973)
  • Box가 인라인 함수로 생성되었습니다. (Ibce0c, b/155056091)

외부 기여

  • AnnotatedString.capitalizeAnnotatedString.decapitalize에 다른 언어를 지원합니다. (I4aa7f)

버전 1.0.0-alpha05

2020년 10월 14일

androidx.compose.ui:ui-*:1.0.0-alpha05가 출시되었습니다. 버전 1.0.0-alpha05에 포함된 커밋을 확인하세요.

API 변경사항

  • 검사기 정보를 지정하기 위한 DSL을 추가합니다. (Ic9a22)
  • LongPress를 Text로 이동합니다. (Iff2bc)
  • 입력 수정자를 정지하는 실험용 Modifier.pointerInput을 추가했습니다. (Ia77d2)
  • 복사/붙여넣기/잘라내기 접근성 작업을 추가했습니다. (I6db4f)
  • AndroidOwner용 공개 생성자가 삭제되었습니다. (Iacaef)
  • 이제 팝업 및 대화상자는 상위 Window에서 FLAG_SECURE를 상속합니다. 또한, 이를 명시적으로 구성하는 옵션이 추가되었습니다. (I64966, b/143778148, b/143778149)
  • 이제 소비 데이터를 변경할 수 있습니다. 또한, 이제 소비를 사용하는 확장 함수를 호출하면 더 이상 새 PointerInputChange가 반환되지 않고 대신 제공된 PointerInputChange가 변경됩니다.

    이는 사용자 코드가 다른 포인터 데이터를 수정할 수 없도록 PointerEvent 데이터를 변경 가능하게 하는 2단계 프로세스의 첫 번째 단계입니다. 두 번째 단계는 PointerInputFilter.onPointerEvent(...)에서 List<PointerInputChange> 반환 유형을 삭제하는 것입니다. (Id067e)

  • Text 및 Demo에서 Selection 사용을 중지합니다. (Ie7e97)

  • onGloballyPositioned 인라인 함수를 만들었습니다. (I15830)

  • OnPositionedModifier 이름이 OnGloballyPositionedModifier로 바뀌고 onPositioned()의 이름이 onGloballyPositioned()로 바뀝니다. (I587e8, b/169083903)

  • hasPendingMeasureOrLayout 속성이 Owner에 추가되어 Owner에서 대기 중인 레이아웃 작업이 있는지 알려줍니다. (I3d9f8, b/169038599)

  • 프로그래매틱 방식으로 포커스를 지우는 API를 추가했습니다. (Ie1dc2, b/161487952)

  • PointerInputFilter.onPointerInput(...)을 삭제했습니다. 대신 PointerInputFilter.onPointerEvent(...)를 사용해야 합니다. (I6f04a)

  • Size 변경사항

    • Size.getFliped를 삭제했습니다.
    • Size.rem을 삭제했습니다.
    • Size.truncDiv를 삭제했습니다. (Ief44d, b/169790720)
  • 인라인 클래스의 센티널 값을 표준화하는 과정의 일환으로 다른 인라인 클래스와의 일관성을 위해 Color.Unset의 이름을 Color.Unspecified로 바꿉니다. (I97611, b/169797763)

  • TextOverflow.None이 도입되었습니다. 오버플로가 None이면 Text에서 더 이상 오버플로를 처리하지 않으며 LayoutNode에 실제 크기를 보고합니다. (I175c9, b/158830170)

  • API 일관성을 위해 AnnotatedString.Builder.addStringAnnotation 내의 scope 매개변수 이름이 tag로 바뀌었습니다. (I7c8cb)

버그 수정

  • 스크롤마다 하위 구성의 작업을 줄이는 방식으로 LazyColumn/Row의 스크롤 성능을 개선합니다. Composition 클래스에 새로운 hasInvalidations() 메서드가 추가되었습니다. Recomposer의 hasPendingChanges() 메서드 이름이 hasInvalidations()로 바뀌었습니다. (Ib2f32, b/168293643, b/167972292, b/165028371)
  • Size.Unspecified 매개변수를 Float.POSITIVE_INFINITY 대신 Float.NaN으로 업데이트했습니다. Size.Unspecified와 유한하지 않은 크기의 Size를 확인하기 위해 구현을 업데이트했습니다. (I95a7e)
  • 이제 맞춤 레이아웃에서 place() 호출 순서가 하위 요소의 그리기 순서를 정의합니다 (Ibc9f6).
  • 접근성을 위해 AnnotatedString에서 SpannableString으로의 변환을 지원합니다. (Ief907)
  • 가능한 경우 리플렉션 사용을 방지하기 위해 이전 플랫폼에 있는 Android 클래스의 스텁을 추가했습니다. (Ia1790)
  • 소프트웨어 키보드 표시로 인해 앱이 변환되는 경우, 포인터 입력 좌표가 잘못 정해지던 버그가 수정되었습니다. (Ic4cec, b/163077821)

버전 1.0.0-alpha04

2020년 10월 1일

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

API 변경사항

  • 더 이상 유효하지 않을 때 레이아웃과 그림 관찰 범위를 수집할 수 있도록 OwnerScope을 추가했습니다. (Ic4cf8)
  • 각각 콘텐츠 레이아웃이 다시 측정되고 크기가 변경될 때 콜백을 수신하도록 OnRemeasureedModifier 및 onSizeChanged()를 추가했습니다. (I657cf, b/154108792)
  • 긴 클릭 시맨틱 작업을 추가합니다. (I6281b, b/156468846)
  • FocusManager를 비공개로 설정했습니다. (I7872f)
  • DrawModifier에 선택적 속성을 추가하는 대신 전용 DrawCacheModifier 구현을 생성하도록 구현을 업데이트했습니다.

    다양한 메서드 관련 문서를 업데이트했습니다. (Ibd166)

  • TextRange를 인라인으로 만들어 객체 생성을 방지합니다. (Id034b)

  • 맞춤 레이아웃의 배치 블록에서 더 이상 PlacementScope#parentWidth 및 PlacementScope#parentLayoutDirection을 읽을 수 없습니다. (Icc1ae, b/168295623)

  • AccessibilityScrollState를 시맨틱 속성에 추가합니다. (Ifeda9)

  • 크기/상태 정보에 의존하는 종속 항목을 조건부로 다시 만드는 그리기 객체 생성을 지원하도록 Modifier.drawWithCache를 도입했습니다. (I376dc)

  • ParagraphConstraints를 삭제했습니다. 이제 너비가 단락에 직접 전달됩니다. (Ica712)

버그 수정

  • 여러 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)
  • foundation.Box가 지원 중단되었습니다. 대신 foundation.layout.Box를 사용하세요. (Ie5950, b/167680279)
  • 스택의 이름이 Box로 변경되었습니다. 이전의 기존 Box는 지원 중단되고 compose.foundation.layout의 새 Box로 대체됩니다. 새 Box의 동작은 하위 요소가 여러 개인 경우 하위 요소를 겹겹이 쌓는 것입니다. 이는 Column과 유사하게 동작했던 이전 Box와 다릅니다. (I94893, b/167680279)
  • Box 장식 매개변수가 지원 중단되었습니다. Box에 장식/패딩을 적용하려면 대신 수정자를 사용합니다(Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • 여러 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)
  • rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled, textInputServiceFactory에 @VisibleForTesting 주석을 달아 내부 API로 만들고 kdoc를 숨깁니다. (I554eb, b/168308412)
  • 상단에서 SelectionContainer를 삭제하여 기본 선택을 사용 중지하고 예기치 않은 동작을 방지합니다. 대신 특별히 SelectionContainer를 사용하여 선택 가능해야 하는 콘텐츠를 래핑할 수 있습니다. (I8dfe0, b/158459594)

버전 1.0.0-alpha03

2020년 9월 16일

androidx.compose.ui:ui-*:1.0.0-alpha03가 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.

API 변경사항

  • 앞으로 스크롤하거나 뒤로 스크롤하는 시맨틱 작업을 삭제합니다. AccessibilityRangeInfo에 단계가 추가되었습니다. (Ia47b0)
  • Owner에서 onInvalidate()가 삭제되었습니다. OwnedLayer에서 무효화를 처리합니다. (Ica72b, b/162061312)
  • Size API에서 Offset 매개변수를 사용하는 연산자 메서드가 삭제되었습니다. 이러한 연산의 결과는 불분명하며 이러한 작업의 결과 유형도 예상치 못한 유형입니다. 예: size - offset은 그 차이와 함께 오프셋 또는 크기 결과를 반환해야 하나요?

    Size 클래스의 지원 중단된 메서드도 삭제되었습니다. (Iec902, b/166514214)

버그 수정

  • 간혹 LazyColumn의 항목이 잘못 그려지고 이 항목이 일부 조건에서 비정상 종료를 일으키기도 하던 문제를 수정합니다. (Ibcf17, b/163066980, b/165921895)
  • DpConstraints 및 DpConstraints를 사용하는 API가 지원 중단되었습니다. (I90cdb, b/167389835)
  • createAndroidComposeRuleAndroidInputDispatcherandroidx.ui.test.android에서 androidx.ui.test로 이동했습니다. (Idef08, b/164060572)
  • 레이아웃 API에서 중력 사용에 관한 이름이 align 또는 alignment로 일관성 있게 바뀌었습니다. (I2421a, b/164077038)
  • 현재 전역 메서드가 지원 중단될 예정이므로 onNode 및 다른 전역 메서드가 ComposeTestRule에 추가되었습니다. (Ieae36)

버전 1.0.0-alpha02

2020년 9월 2일

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

API 변경사항

  • layoutnode 경계가 변경되면 소유자에게 알리는 콜백이 삭제됩니다. (If654e, b/166106882)
  • evenOdd 또는 NonZero 경로 채우기 규칙에 따라 도형 컷아웃을 지원하기 위해 벡터 그래픽 경로에 filltype 매개변수 지원이 추가되었습니다. (I43dd2)
  • 가동시간 및 속도가 이제 인라인 클래스입니다. (I48f4a)
  • 지속 시간이 이제 인라인 클래스입니다. (I565eb)
  • layoutnode 경계가 변경되면 소유자에게 알리는 콜백이 추가됩니다. (Ic40b3)
  • 오프셋과 반경이 있는 Rect 함수 생성자가 왼쪽, 상단, 오른쪽, 하단이 아닌 왼쪽, 오른쪽, 상단, 하단 순서로 Rect를 생성하는 문제가 수정되었습니다.

    Rect에서 지원 중단된 컴패니언 메서드가 삭제되고 함수 생성자로 대체되었습니다.

    Rect.kt에서 메서드를 확인하는 테스트가 추가되었습니다. (I08460, b/165822356)

버그 수정

  • 수정할 수 있는 직사각형인 MutableRect가 추가되었습니다. (I71bd2, b/160140398)
  • Matrix4가 Matrix로 대체되었습니다. vectormath 패키지의 다른 모든 부분이 삭제되었습니다. (Ibd665, b/160140398)
  • 구성 가능한 함수의 호출 규칙이 변경되었습니다. 바이너리 브레이킹 체인지입니다. 이 버전의 Compose 컴파일러 플러그인을 사용하려면 모든 라이브러리를 다시 컴파일해야 합니다.

    이 변경사항은 소스 수준의 브레이킹 체인지를 만들지 않습니다. 명시적인 선택이 있는 컴파일러 API만 변경되었기 때문입니다. (I7afd2, b/158123185)

  • PointerInputFilter로의 디스패치로 인해 PointerInputFilter가 동기적으로 삭제될 때 발생할 수 있는 비정상 종료 문제가 수정되었습니다. (I58f25)

버전 1.0.0-alpha01

2020년 8월 26일

androidx.compose.ui:ui-*:1.0.0-alpha01가 출시되었습니다. 버전 1.0.0-alpha01에 포함된 커밋을 확인하세요.

버전 0.1.0-dev

버전 0.1.0-dev17

2020년 8월 19일

androidx.compose.ui:ui-*:0.1.0-dev17가 출시되었습니다. 버전 0.1.0-dev17에 포함된 커밋을 확인하세요.

API 변경사항

  • emitView가 지원 중단되었습니다. Compose 내에서 뷰를 내보내기 위해서는 가능하면 AndroidView를 대신 사용합니다. View 및 ViewGroup을 직접 구성하는 것은 AndroidView를 사용하여 이를 달성할 수 있는 경우에 구성 트리에 남아있지 않는 한 향후에는 지원되지 않습니다. (I29b1e, b/163871221)
  • FocusState2는 지원 중단되었으며 FocusState로 대체되었습니다. (Ia8b79, b/160822876, b/160923332)
  • 지원 중단된 AndroidView 오버로드가 삭제되었습니다. (I946b9, b/163802393)
  • 이제 맞춤 emit에서 하나 이상의 setter를 건너뛰고 emit로부터 독립적으로 재구성할 수 있음을 선언할 수 있습니다. (Ibbd13)
  • 동일한 객체 인스턴스가 구성에 사용되므로 Vector 클래스가 더 이상 데이터 클래스가 되지 않도록 변경되었습니다.

    벡터 콘텐츠를 변경할 경우 조건부로 다시 그리도록 VectorPainter용 mutableStateOf 플래그가 추가되었습니다.

    VectorComponent 인스턴스가 구성 전체에 걸쳐 재사용되므로 VectorPainter에 속하도록 리팩터링되었습니다.

    GroupComponent 및 PathComponent가 이름 필드를 변경할 수 있도록 업데이트되었습니다. (Ieae45, b/151378808)

  • onChildPositionedOnChildPositionedModifier가 삭제되었습니다. 개발자는 하위 레이아웃에서 onPositionedOnPositionedModifier를 대신 사용해야 합니다. (I4522e, b/162109766)

  • Offset이 인라인 클래스가 되었습니다. (Iaec70)

  • SelectionContainer에 수정자 매개변수가 추가되었습니다. (I4aada, b/161487952)

  • 지원 중단된 FocusModifier가 삭제되었습니다. (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)

  • SemanticsPropertyKeymergePolicy 람다가 추가되었습니다. 이는 mergeAllDescendants 의미 체계 병합을 위한 맞춤 정책을 정의하는 데 사용할 수 있습니다. 기본 정책은 상위 값이 이미 있다면 상위 값을 사용하고 상위 값이 없으면 하위 값을 사용하는 것입니다. (Iaf6c4, b/161979921)

  • Constraints는 이제 인라인 클래스입니다. (I88736)

  • AndroidComposeView에서 공통 포커스 로직을 이동하는 FocusManager가 추가되었습니다. (I528ef, b/161487952, b/162206799)

  • 알파 버전의 PointerEventPass 이름이 업데이트되었습니다. (Ifda6f)

  • IntOffset은 이제 인라인 클래스입니다. (Iac0bf)

  • IntSize는 이제 인라인 클래스입니다. (I2bf42)

  • PlacementScope.placeAbsolute()의 이름이 PlacementScope.place()로 변경되었으며 이전 PlacementScope.place()의 이름은 PlacementScope.placeRelative()로 변경되었습니다. 따라서 PlacementScope.place() 메서드는 더 이상 RTL 컨텍스트의 위치를 자동으로 미러링하지 않습니다. 이를 원한다면 PlacementScope.placeRelative()를 대신 사용해야 합니다. (I873ac, b/162916675)

  • AlertDialog는 이제 버튼에 FlowRow를 사용합니다. (I00ec1, b/161809319, b/143682374)

  • 일부 테스트 유틸리티는 이들이 속한 곳에 있지 않으므로 비공개 상태가 되었습니다. 향후에 공개될 예정입니다. (I32ab1)

  • 포인터 입력 코드의 구성이 리팩터링되었습니다. (Ie3f45)

  • PxBounds가 지원 중단되고 Rect로 대체되었습니다. PxBounds의 모든 사용이 Rect로 업데이트되었으며 이전을 지원하기 위해 적절한 지원 중단/주석으로 대체가 추가되었습니다. (I37038, b/162627058)

  • 지원 중단된 KeyEvent2가 삭제되었습니다. 대신 KeyEvent를 사용해야 합니다. (Ied2d0, b/162097587)

  • KeyEvent에는 지정된 키와 메타 키 상태 조합에 의해 생성된 유니코드 문자를 가져오는 데 사용할 수 있는 유니코드 속성이 있습니다. (If3afc)

  • DelayUp 맞춤 이벤트 및 관련 클래스는 변경될 가능성이 매우 크므로 선택 가능한 API로 만들었습니다. (I56d6f)

  • 더 이상 필요하지 않은 PointerEventPass 2개가 삭제되었습니다. (I3dd9d)

  • Paragraph.paint에 매개변수 색상, 그림자 및 TextDecoration을 추가합니다. 이 함수는 불필요한 단락 재생성을 방지하는 데 유용합니다. (I81689)

버그 수정

  • TextField에서 onFocusChanged 콜백을 삭제했습니다. 대신 Modifier.focusObserver를 사용해야 합니다. (I51089, b/161297615)
  • Modifier.drawBorder가 지원 중단되었습니다. 대신 Modifier.border를 사용하세요. Border 데이터 클래스를 BorderStroke로 대체했습니다. (I4257d, b/158160576)
  • 지원 중단된 FrameManager 호출을 삭제했습니다.

    내부 Compose API를 변경하여 mutableStateof()와 같은 상태 객체를 추적하기 위한 오버헤드 양을 줄였습니다. (I80ba6)

  • VerticalScroller 및 HorizontalScroller를 삭제했습니다. 대신 ScrollableColumn/Row를 사용해야 합니다. Modifier.drawBackground를 삭제했습니다. Modifier.background를 사용해야 합니다. (I73b0d, b/163019183)

  • 상태를 저장하는 요소가 for 루프 내에서 사용되었을 때 비정상 종료가 발생하는 문제가 수정되었습니다. 이제 savedInstanceState()에서 동일한 키를 가질 수 있으며, UiSavedStateRegistry의 API가 이제 이 새로운 요구사항에 맞게 조정됩니다. (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)

  • state { ... } 컴포저블이 이제 지원 중단되고 명확성을 위해 명시적 remember { mutableStateOf(...) } 호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한 by mutableStateOf() 패턴과 일치합니다. (Ia5727)

  • Compose 이름 지정 패턴에 더 잘 맞게 RRect의 이름을 RoundRect로 바꿨습니다. RRect와 유사한 함수 생성자를 만들었으며 RRect 함수 생성자는 지원 중단되었습니다. (I5d325)

버전 0.1.0-dev16

2020년 8월 5일

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

API 변경사항

  • OnChildPositioned가 지원 중단되었습니다. 대신 하위 요소에서 OnPositioned를 사용해야 합니다. (I87f95, b/162109766)
  • setViewContent는 지원 중단되었습니다. 대신 setContent를 사용해야 합니다. (I7e497, b/160335130)
  • ViewBinding을 기반으로 레이아웃 리소스를 확장하고 구성하기 위한 AndroidViewBinding API가 추가되었습니다. (I081c6)
  • KeyEvent2가 KeyEvent로 대체되었습니다. (I2d770, b/162097585)
  • Alt 하드웨어 키 지원이 추가되었습니다. (I9036b)
  • FocusManager가 지원 중단되었습니다. 대신 Modifier.focus(), Modifier.focusObserver() 및 Modifier.focusRequester()를 사용해야 합니다. (I74ae4, b/162211322)
  • loadVectorResource는 trimPath 속성을 지원합니다. (I808fe)
  • 대화상자를 UI로 이동합니다. (I47fa6)
  • 더 이상 필요하지 않은 PointerEventPass 2개가 삭제되었습니다. (I33ca7)
  • Android View 구현과 마찬가지로 MotionEvents를 수신하고 Compose와 상호작용하는 기능을 제공하는 PointerInteropModifier를 구현했습니다. (Ieb08c)
  • 지원 중단된 태그 수정자가 삭제되었습니다. 대신 layoutId를 사용하세요. (Idaa05, b/162023919)
  • 오른쪽에서 왼쪽 지원을 위한 API가 업데이트되었습니다. LayoutDirectionAmbient가 추가되어 레이아웃 방향을 읽고 변경하는 데 사용할 수 있습니다. Modifier.rtl 및 Modifier.ltr이 삭제되었습니다. (I080b3)
  • 벡터 그래픽에서 경로 자르기를 지원합니다 (Ie16c9, b/158188351).
  • 맞춤 레이아웃 수정자를 쉽게 생성할 수 있도록 Modifier.layout()이 추가되었습니다. (I73b69, b/161355194)
  • 새로운 AndroidView API가 추가되었으며 기존 API가 지원 중단되었습니다. (I5bcfd)
  • Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'에는 더 강력한 순서 지정 신호가 있지만 체인을 끊으며 읽기가 더 어려운 Modifier.padding().background() + anotherModifier 입력도 금지합니다. (Iedd58, b/161529964)
  • 뷰 계층 구조에서 Compose 콘텐츠를 호스팅하기 위한 [Abstract]ComposeView 뷰 서브클래스를 추가합니다. (I46357)
  • RowColumn은 이제 인라인 함수이며 이러한 함수를 사용하는 오버헤드가 상당히 감소합니다. (I75c10)
  • SubcomposeLayout이 추가되었습니다. 이는 나중에 하위 트리 구성에 관한 측정 중에만 제공되는 일부 값을 사용하려는 경우 측정 도중에 하위 요소를 구성할 수 있는 낮은 수준의 프리미티브입니다. 예를 들어 WithConstraints는 SubcomposeLayout을 사용하여 구현되지 않습니다. (I25cc8)
  • Compose 계층 구조의 루트를 기준으로 SemanticsNode의 위치를 가져오는 SemanticsNode.positionInRoot가 추가되었습니다. (Icdf26, b/161336532)
  • MotionEvents는 Android에서 Compose로 그리고 다시 Android로 끊임없이 전달됩니다. (I14be8, b/158034713)
  • dropdownPopup이 삭제되었습니다. (I00430)
  • 잘라낸 디스플레이에서 팝업 위치가 수정되었습니다. (Idd7dd)
  • TextLayoutResult를 가져오는 접근성 작업이 추가됩니다. (I9d6e6)
  • RemeasurementModifier가 추가되었습니다. 이를 통해 레이아웃을 동기식으로 다시 측정할 수 있습니다. 일반적으로 재측정/재레이아웃이 자동으로 발생하므로 이 수정자가 필요하지 않지만 스크롤하는 동안 LazyColumnItems 내에서 이 수정자를 사용합니다. (I5f331, b/160791058)
  • getLineEllipsisOffset/getLineEllipsisCount를 삭제합니다. 대신 getLineVisibleEnd/getLineEnd/isLineEllipsized를 사용합니다. (I85aa2)
  • 권장사항을 위해 몇 가지 표시/주석을 추가합니다. (I66b20)
  • TextLayoutResult에 더 많은 Line API를 노출합니다. (I79bd2)
  • 이제 Foo.VectorConverter를 통해 내장 단위를 변환하는 내장 벡터 변환기에 액세스할 수 있습니다. 예: Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter 등 (I3e273)

버그 수정

  • 광범위한 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를 업데이트했습니다.
  • API 수준에 따라 Android 프레임워크 BlendMode와 PorterDuff 모드 간에 적절하게 매핑되도록 Compose BlendMode API 사용을 업데이트했습니다. BlendMode가 사용되기 전에 기기에서 지원되는지 여부를 확인하는 기능 쿼리 역할을 하는 BlendMode#isSupported API를 도입했습니다. (I0ef42)
  • Lazy 목록의 itemContent 매개변수에 관한 LazyItemScope를 추가했습니다. 이는 항목이 표시 영역을 채워야 하며 항목이 무한대 제약 조건으로 측정될 때 일반 Modifier.fillMaxSize()가 작동하지 않는 경우 사용 사례를 해결하는 상위 요소 최대 크기를 채우는 수정자를 제공합니다. (Ibd3b2, b/162248854)
  • SemanticsNodeInteraction.performPartialGesture를 삭제했습니다. 대신 SemanticsNodeInteraction.performGesture를 사용해야 합니다. (Id9b62)
  • LazyColumnItems 이름을 LazyColumnFor로 바꿨습니다. LazyRowItems 이름을 LazyRowFor로 바꿨습니다. (I84f84)
  • foundation.shape.corner 패키지가 foundation.share로 평면화되었습니다. (I46491, b/161887429)
  • AndroidComposeTestRule의 이름을 createAndroidComposeRule로 변경했습니다. (I70aaf)
  • TextLayoutResult에 API를 더 많이 추가했습니다. (Id7e04)
  • Material FilledTextFieldTextField로 이름이 바뀌었으며 기본 TextFieldBaseTextField로 이름이 바뀌어 원하는 가장 간단한 API를 쉽게 찾고 사용할 수 있습니다. (Ia6242, b/155482676)
  • Modifier.drawBackground 이름을 Modifier.background로 바꿨습니다. (I13677)

버전 0.1.0-dev15

2020년 7월 22일

androidx.compose.ui:ui-*:0.1.0-dev15가 출시되었습니다. 버전 0.1.0-dev15에 포함된 커밋을 확인하세요.

종속 항목 업데이트

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

API 변경사항

  • FocusModifier는 지원 중단되고 Modifier.focus, Modifier.focusRequester, Modifier.focusObserver로 대체됩니다. FocusState 및 FocusDetailedState가 지원 중단되고 FocusState2로 대체되었습니다. (I46919, b/160822875, b/160922136)
  • 포커스 상태 변경을 관찰하기 위한 수정자를 추가했습니다. (I05866, b/160924455, b/160923326)
  • 포커스 변경을 요청하는 수정자를 추가했습니다. (I8dd73, b/161182057, b/160924778)
  • 복사, 잘라내기, 붙여넣기를 올바르게 표시하기 위해 툴바 메뉴가 조정됩니다. (Id3955)
  • 이제 단일 값 시맨틱 속성에 호출 스타일이 사용됩니다. 예를 들어, 이제 'semantics { hidden = true }'는 semantics { hidden() }으로 작성됩니다. (Ic1afd, b/145951226, b/145955412)
  • FocusModifier를 대체하는 Modifier.focus를 추가했습니다. (Ib852a, b/160924778)
  • TextField Selection을 위한 FloatingToolbar가 추가됩니다. (Ie8b07)
  • 키 입력 관련 API용 실험 API 주석이 추가되었습니다. (I53c0a)
  • 모든 포커스 관련 API를 위해 실험용 API 주석을 추가했습니다. (I53b24, b/160903352)
  • FocusDetailedState를 대체하는 FocusState2를 추가했습니다. (I0a3ba, b/160822595)
  • Focus API용 @OptIn 주석인 ExperimentalFocus를 추가했습니다. (I1544b, b/160820961)
  • 레이아웃에서 정수 픽셀 경계를 표현하는 IntBounds 단위 클래스가 추가되었습니다. 이 기능을 사용하도록 PopupPositionProvider API를 업데이트했습니다. (I0d8d0, b/159596546)
  • 이제 Applier에 구성을 폐기하기 위한 clear() 메서드가 필요합니다. (Ibe697)
  • KeyEvent가 지원 중단되고 KeyEvent2로 대체되었습니다. (I68730)
  • 테스트 찾기에 새 옵션 플래그인 useUnmergedTree가 추가되었습니다. (I2ce48)
  • LayoutNode 실험용 API를 제작했습니다. (I4f2e9)
  • 다음과 같은 다양한 인라인 클래스 유형에 복사 메서드를 추가했습니다.

    • 오프셋
    • 크기
    • 반경
    • 모션
    • TransformOrigin

    • Size.copy 컴패니언 객체 메서드가 지원 중단되고 인스턴스 복사 메서드로 대체되었습니다. (Ife290, b/159905651)

  • 이제 팝업, 대화상자 및 메뉴는 상황별 MaterialTheme를 상속합니다. (Ia3665, b/156527485)

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

  • Layout() 함수의 측정 블록에서 레이아웃 방향 매개변수를 삭제했습니다. 하지만 레이아웃 방향은 측정 범위 객체를 통해 콜백 내에서 사용할 수 있습니다. (Ic7d9d)

  • 재사용을 위해 SelectionHandles를 리팩터링합니다. (I420e0)

  • Clickable이 삭제되었습니다. Modifier.clickable를 사용하세요. (I84bdf)

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

  • 이 변경 전에 Compose 컴파일러 플러그인은 @Composable 함수 내에 있는 생성자 호출(있는 경우)을 특별한 방식으로 가로챘습니다. (I5205a, b/158123804)

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

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

  • AndroidView 컴포저블이 수정자 매개변수에 추가되었습니다. (I48a88, b/158746303)

  • Semantics()가 지원 중단되었습니다. 대신 Modifier.semantics()를 사용하세요. (I72407, b/158841414)

  • Activity나 Fragment에서 작동하는 방식과 유사하게 ViewModel을 생성하거나 이미 생성된 ViewModel을 가져올 수 있는 viewModel() 컴포저블을 추가합니다. (I5fdd1)

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

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

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

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

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

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

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

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

  • 기본적으로 작동하지 않는 ParentDataModifier#modifyParentData 구현이 삭제되었습니다. 이는 애초에 인터페이스를 구현하지 않는 것과 같았습니다. (I0deaa)

  • 이전에 지원 중단된 ScaleFit이 삭제되었습니다. 대신 ContentScale을 사용하세요. (Ifbc5b)

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

  • Material Design 메뉴 구현인 ui-material에 DropdownMenu 구성요소를 추가했습니다. (I9bb3d)

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

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

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

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

  • 이제 DoubleTapGestureFilter가 트리에서 SingleTapGestureFilter를 구별합니다. (If92b1)

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

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

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

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

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

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

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

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

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

  • Owner의 onSizeChange 및 onPositionChange를 삭제했습니다. (I5c718)

  • IntPx 대신 Int 제약 조건 값만 지원하는 Constraints의 복사본인 Constraints2를 추가했습니다. IntPx는 삭제되고 모든 정수 제약 조건이 Android와 같은 픽셀로 간주됩니다.

    • 결국 IntPxSize를 대체할 IntSize도 추가했습니다. (I4b43a)
  • 정렬을 임의의 값으로 인스턴스화할 수 있게 만들었습니다. 1D 정렬을 추가했습니다. (Ia0c05)

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

  • (I45f09, b/152842521)

    • ScaleFit에서 ContentScale로 이름을 바꿨습니다.
    • Alignment API와 동일한 모듈에 두기 위해 ContentScale을 ui-graphics에서 ui-core로 이동했습니다.
    • FillMaxDimension 이름을 Crop으로 바꿨습니다.
    • FillMinDimension 이름을 Fit으로 바꿨습니다.
    • 더 정확하게 일치하도록 Fit 이름을 Inside로 바꾸었습니다.
    • ImageView.ScaleType 상응 항목
    • Crop과 Alignment.Center의 조합이 ImageView.ScaleType.CENTER_CROP의 결과와 같고 Alignment.Center와 함께 사용된 Fit의 결과는 ImageView.ScaleType.FIT_CENTER와 같으며 Alignment.Center와 함께 사용된 Inside는 ImageView.ScaleType.CENTER_INSIDE의 결과와 같다는 점을 나타내는 문서를 추가했습니다.
  • 그리기 수정자를 위한 Rtl 지원이 있습니다. (I0aaf9)

  • XML에서 Android 뷰를 확장하는 API를 출시했습니다. 자세한 내용은 ViewInCompose 데모를 참조하세요. (I42916)

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

    • draw()의 수신기 범위를 ContentDrawScope으로 설정했습니다.
    • draw()의 모든 매개변수를 삭제했습니다.
    • DrawScope는 이전 CanvasScope와 동일한 인터페이스를 사용합니다.
    • ContentDrawScope에 drawContent() 메서드가 있습니다. (Ibaced, b/152919067)
  • LayoutCoordinates에 positionInParent 및 boundsInParent를 추가했습니다. (Icacdd, b/152735784)

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

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

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

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

  • 특정 레이어의 그리기 명령어 표시 목록의 오프셋을 지원하는 translationX/Y 속성을 추가했습니다. 이는 애니메이션 또는 터치 이벤트의 반응으로 콘텐츠를 이동하는 데 유용합니다. (I8641c)

  • 레이어의 특정 지점에 회전 및 크기 조정을 지원하기 위해 Layer API에 pivotX, pivotY 매개변수를 추가했습니다. (Icf7c3)

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

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

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

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

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

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

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

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

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

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

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

    • 선언적 그래픽 데모를 포함하기 위해 CanvasScopeSample을 추가하고 데모 앱을 업데이트했습니다. (Ifd86d)
  • 사용하지 않는 MaskFilter API의 사용이 제한적이고 대부분의 사용 사례에서 하드웨어 가속이 최적화되지 않았으므로 이 API를 삭제했습니다. (I54f76)

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

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

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

  • Colors를 박싱하지 않고 설정되지 않은 값을 나타내기 위해 Unset Color를 추가했습니다. 추가합니다. (If901a)

  • 변환에 선택적 피벗 좌표를 사용하기 위해 Canvas.rotate 및 Canvas.scale 확장 메서드를 추가했습니다. 현재 캔버스 변환의 왼쪽 상단으로 기본 설정됩니다.

    또한, 일관성을 위한 확장 메서드가 되도록 Canvas.rotateRad를 이동했습니다. (Ibaca6)

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

  • Compose API와 Android 프레임워크 API 간 객체 변환에 이름 지정 규칙을 일치하기 위해 toFrameworkRect/toFrameworkRectF의 이름을 toAndroidRect/toAndroidRectF로 바꿨습니다. 이 API의 문서도 업데이트했습니다. (I86337)

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

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

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

  • TextDirection.Content를 추가했습니다. (I48f36)

  • TextDecoration.plus 연산자를 추가했습니다. (I0ad1a)

  • Force가 TextDirectionAlgorithm 열거형 값에서 삭제되었습니다. (Icc944)

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

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

  • 범위 내의 모든 주석을 반환하는 AnnotatedString.getStringAnnotations를 추가했습니다. (I1fa00)

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

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

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

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

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

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

  • merge() 함수에 위임하는 (Text/Paragraph/Span) 스타일에 더하기 연산자를 추가했습니다. 추가합니다. (Ia1add)

  • FontWeight.lerp는 더 이상 맞지 않습니다. 여전히 데이터 클래스입니다. (I521c2)

  • 이제 FontWeight 생성자가 공개되어 더 이상 데이터 클래스가 아닙니다. 추가했습니다. (Id6b1f)

  • TextLayoutResult에 getLineStart, getLineEnd, getEllipsisOffset 및 getEllipsisCount를 추가합니다. (Ibc801)

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

  • 사용 중인 ui-geometry 모듈에 중복된 Size 클래스가 있으므로 사용하지 않는 Size 클래스를 삭제했습니다. (I1b602)

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

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

버그 수정

  • 텍스트 필드의 onFocusChange 콜백 이름을 onFocusChanged로 바꿨습니다. (Ida4a1)
  • VerticalScroller와 HorizontalScroller는 지원 중단되었습니다. 열/행 동작 및 매개변수를 사용하는 내장 환경에는 ScrollableColumn과 ScrollableRow를 사용하고, 개발자의 자체 요소에는 Modifier.verticalScroll 및 Modifier.horizontalScroll을 사용하세요. 마찬가지로, ScrollerPosition이 지원 중단되고 ScrollState로 대체되었습니다. (I400ce, b/157225838, b/149460415, b/154105299)
  • runOnIdleCompose 이름을 runOnIdle로 바꿨습니다. (I83607)
  • 여러 테스트 API의 이름이 더 직관적으로 바뀌었습니다. 모든 findXYZ API의 이름이 onNodeXYZ로 바뀌었습니다. 모든 doXYZ API의 이름이 performXYZ로 바뀌었습니다. (I7f164)
  • 이제 새로운 구성이 없어도 ViewGroups 내에서 Compose UI를 구성할 수 있습니다. ViewInteropDemo 예를 참조하세요. (I9ab0b, b/160455080)
  • sortWith와 removeRange가 MutableVector에 추가되었습니다. (Icccf7)
  • TextField Selection을 변경할 수 있는 드래그 선택 핸들이 구현됩니다. (I27032)
  • NativeShader 클래스를 래핑했던 Shader 인라인 클래스를 삭제하고 NativeShader 이름을 Shader로 바꿨습니다. 래핑된 Shader 인라인 클래스는 API 노출 영역에 중요한 항목을 추가하지 않았으며 인라인 클래스이므로 NativeShader 클래스를 직접 사용하면 됩니다. (I25e4d)
  • 더 이상 특정 제약 조건과 ContentScale 매개변수에 기반한 크기 조정을 제공하지 않도록 PainterModifier를 리팩터링했습니다. Painter의 구현은 DrawScope의 특정 크기에 따라 그림 콘텐츠 자체의 크기를 조정하기 위한 것입니다.

    VectorPainter의 캐시 비트맵 크기가 지정된 크기 대신 기본 크기로 조정되던 문제를 수정했습니다.

    PainterModifier를 사용하는 대신 자체 콘텐츠 크기를 조정할 수 있도록 ImagePainter를 업데이트했습니다. (I6ba90)

  • 애니메이션 타이밍을 위한 최상위 withFrameNanos 함수가 추가됩니다. (Ie34c5)

  • @Untracked 주석이 지원 중단되었습니다. @ComposableContract(tracked=false)로 대체했습니다. (Id211e)

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

  • 전달 중에 하위 구성을 통해 PointerInputFilter가 삭제된 경우 포인터 입력 전달에서 비정상 종료가 발생하던 문제를 수정했습니다. 이제 이 문제가 해결되었습니다. (I1f48b, b/157998762)

  • 전달 중에 하위 구성을 통해 PointerInputFilter가 삭제된 경우 포인터 입력 전달에서 비정상 종료가 발생하던 문제를 수정했습니다. 이제 이 문제가 해결되었습니다. (Iab398, b/157998762)

  • 반경 클래스를 인라인 클래스로 리팩터링했습니다. y축의 반경이 필수 x축 반경 매개변수의 반경과 일치하도록 컴패니언 생성 메서드가 삭제되고 기본 매개변수가 있는 함수 생성자로 대체되었습니다.

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

  • Recompose 컴포저블은 더 이상 유용한 추상화가 아닙니다. 대부분의 재구성은 MutableState 할당의 결과로 발생해야 합니다. 그 외의 경우에는 invalidate 함수를 사용하여 현재 범위의 재구성을 트리거하는 것이 좋습니다. (Ifc992)

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

  • Compose 컴파일러의 코드 생성 전략을 변경했습니다. 변경하기 전에는 Compose 컴파일러에서 호출을 구성 가능한 함수로 변환했습니다. 이번 변경으로 이제 구성 가능한 함수의 본문은 변환하고 호출 사이트의 대부분은 변경하지 않고 그대로 둡니다.

    이는 Compose 런타임과 통신하는 로직이 대부분 호출 사이트가 아니라 함수 본문의 시작 부분에서 발생함을 의미합니다.

    이번 변경은 모든 Compose 사용에서 소스와 호환됩니다. 대부분의 Compose 사용자는 이번 변경으로 인해 어떤 코드도 업데이트할 필요가 없습니다.

    이 작업을 지원하기 위해 모든 구성 가능한 함수의 JVM 서명이 변경되었습니다. 단일 매개변수를 허용하는 구성 가능한 함수는 3개의 매개변수를 허용하는 함수로 변환됩니다. 추가 매개변수는 '키' 정수인 컴포저, 호출을 통한 메타데이터 전파에 사용되는 비트마스크 정수입니다.

    이제 Compose는 기본 인수를 구성 가능한 함수로도 변환합니다. 함수 자체의 추가 합성으로 인한 기본 오버로드 없이 기본 인수를 변환하므로 이러한 변경으로 인해 정의되는 함수의 수가 줄어듭니다.

    이로 인해 알려진 의도된 동작 변경사항은 다음과 같습니다.

    1. 일부 호출이 이전에는 건너뛰지 않던 곳을 건너뜁니다.
    2. 이제 기본 인수 표현식의 구성 가능한 표현식이 올바르게 작성 및 처리됩니다.

    이 작업에는 다음과 같은 최적화가 포함되어 있습니다. 1. 매개변수 비교 결과는 호출 그래프를 통해 다른 구성 가능한 함수로 전파됩니다. 이렇게 하면 런타임 시 비교 작업이 적게 발생하고 슬롯 표 크기가 줄며 이전에는 건너뛰지 않던 구성 가능한 함수를 더 많이 건너뜁니다. 2. 컴파일 시간에 '정적'이라고 판단된 매개변수는 더 이상 런타임에 비교되거나 저장되지 않습니다. 따라서 비교 횟수와 슬롯 표 크기가 줄어듭니다. 3. 함수 본문의 제어 흐름 구조는 생성되는 그룹 수를 최소화하는 데 사용되므로 슬롯 표 크기가 줄고 런타임 동안 작업도 줄어듭니다. 4. 함수의 사용되지 않은 전달 및 수신자 매개변수는 함수의 본문 안에서 사용되지 않으면 함수의 건너뛰기 가능성을 판단하는 데 포함되지 않습니다.

    대부분의 브레이킹 체인지는 다음과 같이 컴파일러가 직접 타겟팅하는 API로 인해 발생하며 Compose의 일반적인 사용에는 영향을 미치지 않습니다. 1. Composer::startExpr이 삭제되었습니다. 2. Composer::endExpr이 삭제되었습니다. 3. Composer::call이 지원 중단되었습니다. 4. key의 non-varargs 오버로드가 삭제되었습니다. 앞으로는 vararg 버전을 사용하세요. 5. Pivotal 주석이 지원 중단되었습니다. 대신 key를 사용하세요. 6. ScopeUpdateScope::updateScope가 함수 1이 아닌 함수 3을 예상하도록 변경되었습니다. 7. restartableFunction 및 restartableFunctionN이 추가 컴파일 시간 매개변수를 포함하도록 업데이트되었습니다. (I60756, b/143464846)

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

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

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

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

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

  • TextDirection을 LayoutDirection에서 결정하도록 기본 TextDirection 동작을 변경했습니다. 예를 들어, LayoutDirection이 RTL이면 기본적으로 TextDirection은 RTL이 됩니다. 이전에는 TextDirection.ContentOrLtr/Rtl이 사용되었습니다. (I4e803)

  • 버그 수정: 글꼴 두께와 글꼴 스타일이 AnnotatedString에 중첩되면 텍스트가 올바르게 렌더링되지 않습니다. (I77a9d)

  • 일반적으로 사용되는 매개변수를 Text()에 추가합니다. 현재 로컬 텍스트 스타일을 생성하여 이러한 소수의 매개변수를 전달한다면(예: Text(style = TextStyle(textAlign = TextAlign.Center))) 이제 매개변수를 직접 제공할 수 있습니다(예: Text(textAlign = TextAlign.Center). (I82768)

  • ui-android-text 모듈 이름이 ui-text-android로 바뀌었습니다. (I68cbe)