Compose UI

레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2021년 9월 1일 1.0.2 - - 1.1.0-alpha03

구조

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

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

그룹설명
compose.animationJetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더합니다.
compose.compilerKotlin 컴파일러 플러그인으로 최적화를 사용 설정하고 @Composable 함수를 변환합니다.
compose.foundation즉시 사용 가능한 구성요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 기초를 확장해 나만의 디자인 시스템 요소를 빌드합니다.
compose.material즉시 사용 가능한 머티리얼 디자인 구성요소로 Jetpack Compose UI를 빌드합니다. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다.
compose.runtimeCompose의 프로그래밍 모델과 상태 관리를 위한 기본 구성요소 및 타겟팅용 Compose 컴파일러 플러그인 핵심 런타임입니다.
compose.ui레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다.

종속 항목 선언

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

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

Groovy

dependencies {
    implementation "androidx.compose.ui:ui:1.1.0-alpha04"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha04"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.1.0-alpha04")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha04"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

의견

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

새로운 문제 제출하기

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

버전 1.1.0

버전 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.2

버전 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

버전 1.0.1

2021년 8월 4일

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

종속 항목 업데이트

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

버전 1.0.0

버전 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, detectVerticalGesturesdetectHorizontalGestures는 자동으로 위치 변경사항을 사용하므로 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)

  • 다음과 같이 머티리얼 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 and 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)
  • 의미 체계 역할 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 가이드라인과의 일관성을 확인하기 위해 컴포저블 람다 매개변수 이름 지정 및 위치에 관한 린트 검사를 추가했습니다. 또한 Lint 검사와 지침에 따라 후행 람다의 이름으로 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)
  • provideDefault를 앰비언트를 제공하기 위한 대안으로 추가했습니다. 이미 제공된 앰비언트 값이 없을 때만 설정될 앰비언트 값을 지정하는 데 사용할 수 있습니다. (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)
  • 머티리얼 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)
  • 다음과 같은 다양한 인라인 클래스 유형에 복사 메서드를 추가했습니다.

    • Offset
    • 크기
    • 반경
    • 모션
    • 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)

  • 머티리얼 디자인 메뉴 구현인 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)