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

Compose UI

Jetpack Compose 라이브러리로 작업합니다.
최근 업데이트 현재 안정화 버전 다음 버전 후보 베타 버전 알파 버전
2020년 9월 2일 - - - 1.0.0-alpha02

구조

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

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

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

종속 항목 선언

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

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

dependencies {
    implementation "androidx.ui:ui-tooling:1.0.0-alpha02"
    implementation "androidx.ui:ui-test:1.0.0-alpha02"
}

android {
    buildFeatures {
        compose true
    }

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

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

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

의견

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

새 문제 만들기

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

버전 1.0.0

UI 버전 1.0.0-alpha02

2020년 9월 2일

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

API 변경사항

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

    예:

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

    (I0a85b, b/161247083)

버그 수정

  • 구성 가능한 함수의 호출 규칙이 변경되었습니다. 바이너리 브레이킹 체인지입니다. 이 버전의 Compose 컴파일러 플러그인을 사용하려면 모든 라이브러리를 다시 컴파일해야 합니다.

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

버전 1.0.0-alpha01

2020년 8월 26일

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

버전 0.1.0-dev

버전 0.1.0-dev17

2020년 8월 19일

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

API 변경사항

  • Offset이 인라인 클래스가 되었습니다. (Iaec70)
  • IntSize는 이제 인라인 클래스입니다 (I2bf42).
  • AlertDialog는 이제 버튼에 FlowRow를 사용합니다. (I00ec1, b/161809319, b/143682374)
  • Class<T : ComponentActivity>를 매개변수로 사용하여 특정 활동 클래스에서 AndroidComposeRule을 쉽게 만드는 createAndroidComposeRule 함수가 추가되었습니다. (I40da4)

버그 수정

  • 알파 버전의 PointerEventPass 이름이 업데이트되었습니다. (Ifda6f)
  • PlacementScope.placeAbsolute()의 이름이 PlacementScope.place()로 변경되었으며 이전 PlacementScope.place()의 이름은 PlacementScope.placeRelative()로 변경되었습니다. 따라서 PlacementScope.place() 메서드는 더 이상 RTL 컨텍스트의 위치를 자동으로 미러링하지 않습니다. 이를 원한다면 PlacementScope.placeRelative()를 대신 사용해야 합니다. (I873ac, b/162916675)
  • 포인터 입력 코드의 구성이 리팩터링되었습니다. (Ie3f45)
  • PxBounds가 지원 중단되고 Rect로 대체되었습니다. PxBounds의 모든 사용이 Rect로 업데이트되었으며 이전을 지원하기 위해 적절한 지원 중단/주석으로 대체가 추가되었습니다. (I37038, b/162627058)
  • 상태를 저장하는 요소가 for 루프 내에서 사용되었을 때 비정상 종료가 발생하는 문제가 수정되었습니다. 이제 savedInstanceState()에서 동일한 키를 가질 수 있으며, UiSavedStateRegistry의 API가 이제 이 새로운 요구사항에 맞게 조정됩니다. (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561)
  • state { ... } 컴포저블이 이제 지원 중단되고 명확성을 위해 명시적 remember { mutableStateOf(...) } 호출로 대체됩니다. 이렇게 하면 전체 API 노출 영역 및 상태 관리를 위한 개념 수가 감소하고 클래스 속성 위임을 위한 by mutableStateOf() 패턴과 일치합니다. (Ia5727)
  • 행 및 열에 spacedBy Arrangement가 추가되어 레이아웃 하위 요소를 고정 간격으로 배치할 수 있습니다. 정렬된 Arrangement도 추가되어 레이아웃 하위 요소를 나란히 배치하고 Alignment에 따라 행/열에 정렬할 수 있습니다. 이전의 Arrangement.Vertical#arrange 및 Arrangement.Horizontal#arrange 메서드는 지원 중단되었으며 맞춤 Arrangement 작성은 향후에 지원되지 않습니다. (I6733d, b/161985975)
  • Modifier.drawBorder가 지원 중단되었습니다. 대신 Modifier.border를 사용하세요. Border 데이터 클래스가 BorderStroke로 대체되었습니다. (I4257d, b/158160576)

버전 0.1.0-dev16

2020년 8월 5일

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

대부분의 Jetpack Compose 패키지는 아래 표에 따라 리팩터링되었습니다.

Jetpack Compose 패키지 리팩터링

이전 패키지 이름 새 패키지 이름
androidx.animation androidx.compose.animation.core
androidx.ui.autofill androidx.compose.ui.autofill
androidx.compose androidx.compose.runtime
androidx.compose.dispatch androidx.compose.runtime.dispatch
androidx.ui.animation androidx.compose.animation
androidx.ui.core androidx.compose.ui
androidx.compose.ui.unit
androidx.compose.ui.graphics
androidx.ui.foundation androidx.compose.foundation
androidx.ui.geometry androidx.compose.ui.geometry
androidx.ui.graphics androidx.compose.ui.graphics
androidx.ui.input androidx.compose.ui.text.input
androidx.ui.intl androidx.compose.ui.text.intl
androidx.ui.layout androidx.compose.foundation.layout
androidx.ui.livedata androidx.compose.runtime.livedata
androidx.ui.material androidx.compose.material
androidx.ui.material.icons androidx.compose.material.icons
androidx.ui.rxjava2 androidx.compose.runtime.rxjava2
androidx.ui.savedinstancestate androidx.compose.runtime.savedinstancestate
androidx.ui.node androidx.compose.ui.node
androidx.compose.ui.input.pointer
androidx.ui.platform androidx.compose.ui.platform
androidx.ui.res androidx.compose.ui.res
androidx.ui.semantics androidx.compose.ui.semantics
androidx.ui.testutils androidx.compose.ui.input.pointer
androidx.ui.text androidx.compose.foundation.text
androidx.compose.ui.text
androidx.ui.text.platform androidx.compose.ui.text.android
androidx.compose.ui.platform
androidx.ui.unit androidx.compose.ui.unit
androidx.ui.util androidx.compose.ui.util
androidx.ui.viewinterop androidx.compose.ui.viewinterop
androidx.ui.viewmodel androidx.compose.ui.viewinterop
아직 리팩터링되지 않음(변경사항 없음)
androidx.ui.test
androidx.ui.tooling

Android 스튜디오를 사용하는 경우 import 문을 아래 코드 스니펫으로 대체하고 Android 스튜디오에서 Optimize Imports 버튼을 사용할 수 있습니다. Android 스튜디오에서 다루지 않는 모든 경우는 위 패키지 목록을 참조하세요.

  import androidx.compose.runtime.*
  import androidx.compose.animation.*
  import androidx.compose.animation.core.*
  import androidx.compose.foundation.*
  import androidx.compose.foundation.gestures.*
  import androidx.compose.foundation.layout.*
  import androidx.compose.foundation.lazy.*
  import androidx.compose.foundation.shape.*
  import androidx.compose.material.*
  import androidx.compose.material.icons.*
  import androidx.compose.material.icons.filled.*
  import androidx.compose.ui.*
  import androidx.compose.ui.geometry.*
  import androidx.compose.ui.draw.*
  import androidx.compose.ui.graphics.*
  import androidx.compose.ui.graphics.drawscope.*
  import androidx.compose.ui.graphics.painter.*
  import androidx.compose.ui.graphics.vector.*
  import androidx.compose.ui.layout.*
  import androidx.compose.ui.platform.*
  import androidx.compose.ui.res.*
  import androidx.compose.ui.text.*
  import androidx.compose.ui.text.font.*
  import androidx.compose.ui.text.style.*
  import androidx.compose.ui.unit.*
  import androidx.compose.ui.util.*
  import androidx.compose.ui.viewinterop.*
  import androidx.ui.tooling.preview.*

API 변경사항

  • KeyEvent2가 KeyEvent로 대체되었습니다. (I2d770, b/162097585)
  • SemanticsNodeInteraction.performPartialGesture를 삭제했습니다. 대신 SemanticsNodeInteraction.performGesture를 사용해야 합니다. (Id9b62)
  • SemanticsNodeInteraction.getBoundsInRoot()SemanticsNodeInteraction.getUnclippedBoundsInRoot()로 이름이 변경되었습니다. (Icafdf, b/161336532)
  • AndroidComposeTestRule 이름을 createAndroidComposeRule로 바꿨습니다. (I70aaf)
  • isFocused() 및 isNotFocused() SemanticsMatcher가 추가됩니다. (I0b760)
  • 테스트에서 사용해서는 안 되는 BaseGestureScope.globalBounds가 삭제되었습니다. 상호작용하고 있는 노드에 로컬인 좌표를 대신 사용하세요. (Ie9b08)
  • Inspector API의 정확성이 개선되었습니다. (I3cfbf)

버그 수정

  • 대화상자를 UI로 이동합니다. (I47fa6)
  • 오른쪽에서 왼쪽 지원을 위한 API가 업데이트되었습니다. LayoutDirectionAmbient가 추가되어 레이아웃 방향을 읽고 변경하는 데 사용할 수 있습니다. Modifier.rtl 및 Modifier.ltr이 삭제되었습니다. (I080b3)
  • transitionDefinition에 T 유형을 명시적으로 지정해야 합니다. (I1aded)
  • Modifier.plus가 지원 중단되었습니다. 대신 Modifier.then을 사용해야 합니다. 'then'에는 더 강력한 순서 지정 신호가 있지만 체인을 끊으며 읽기가 더 어려운 Modifier.padding().background() + anotherModifier 입력도 금지합니다. (Iedd58, b/161529964)
  • Compose 계층 구조의 루트를 기준으로 SemanticsNode의 위치를 가져오는 SemanticsNode.positionInRoot가 추가되었습니다. (Icdf26, b/161336532)
  • TextLayoutResult를 가져오는 접근성 작업이 추가됩니다. (I9d6e6)
  • 머티리얼 FilledTextField가 TextField로 이름이 변경되었으며 기본 TextField는 BaseTextField로 이름이 변경되어 원하는 가장 간단한 API를 쉽게 찾고 사용할 수 있습니다. (Ia6242, b/155482676)
  • Modifier.drawBackground가 Modifier.background로 이름이 변경되었습니다. (I13677)
  • 머티리얼 색상 시스템에 더 잘 매핑하고 ColorPalette가 머티리얼 색상 시스템의 특정 구현이 아니라 '일반적인' 테마 객체인 것과 관련한 혼동을 없애기 위해 ColorPalette가 Colors로 이름이 변경되었습니다. 또한 lightColorPalette 및 darkColorPalette가 각각 lightColors 및 darkColors로 이름이 변경되었습니다. (I9e976, b/161812111)
  • foundation.shape.corner 패키지가 foundation.share로 평면화되었습니다. (I46491, b/161887429)
  • RowColumn은 이제 인라인 함수이며 이러한 함수를 사용하는 오버헤드가 상당히 감소합니다. (I75c10)

버전 0.1.0-dev15

2020년 7월 22일

androidx.ui:ui-test:0.1.0-dev15androidx.ui:ui-tooling:0.1.0-dev15가 출시되었습니다. 0.1.0-dev15에 포함된 커밋을 확인하세요.

대부분의 Jetpack Compose 아티팩트는 아래 표에 따라 리팩터링되었습니다.

이번 출시 버전에서는 아티팩트 이름만 리팩터링되었습니다. 향후 출시 버전에서는 패키지 이름이 새로운 아티팩트 이름을 따르도록 업데이트될 예정입니다.

Jetpack Compose 아티팩트 리팩터링

이전 아티팩트 새로운 아티팩트
androidx.compose:compose-dispatch androidx.compose.runtime:runtime-dispatch
androidx.compose:compose-runtime androidx.compose.runtime:runtime
androidx.ui:ui-animation androidx.compose.animation:animation
androidx.ui:ui-animation-core androidx.compose.animation:animation-core
androidx.ui:ui-core androidx.compose.ui:ui
androidx.ui:ui-foundation androidx.compose.foundation:foundation
androidx.ui:ui-geometry androidx.compose.ui:ui-geometry
androidx.ui:ui-graphics androidx.compose.ui:ui-graphics
androidx.ui:ui-layout androidx.compose.foundation:foundation-layout
androidx.ui:ui-livedata androidx.compose.runtime:runtime-livedata
androidx.ui:ui-material androidx.compose.material:material
androidx.ui:ui-material-icons-core androidx.compose.material:material-icons-core
androidx.ui:ui-material-icons-extended androidx.compose.material:material-icons-extended
androidx.ui:ui-rxjava2 androidx.compose.runtime:runtime-rxjava2
androidx.ui:ui-saved-instance-state androidx.compose.runtime:runtime-saved-instance-state
androidx.ui:ui-text androidx.compose.foundation:foundation-text
androidx.ui:ui-text-android androidx.compose.ui:ui-text-android
androidx.ui:ui-text-core androidx.compose.ui:ui-text
androidx.ui:ui-unit androidx.compose.ui:ui-unit
androidx.ui:ui-util androidx.compose.ui:ui-util
아직 리팩터링되지 않음(변경사항 없음)
androidx.compose:compose-compiler
androidx.ui:ui-test
androidx.ui:ui-tooling

종속 항목 업데이트

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

API 변경사항

  • runOnIdleCompose 이름을 runOnIdle로 바꿨습니다. (I83607)
  • 여러 테스트 API의 이름이 더 직관적으로 바뀌었습니다. 모든 findXYZ API의 이름이 onNodeXYZ로 바뀌었습니다. 모든 doXYZ API의 이름이 performXYZ로 바뀌었습니다. (I7f164)
  • 앱의 시맨틱을 단순 목록이 아닌 계층 구조로 인쇄하는 API SemanticMatcher.any도 삭제됩니다. 시맨틱을 인쇄하려면 대신 findRoot().printToString()을 사용하세요. (I866b5)
  • KeyEvent가 지원 중단되고 KeyEvent2로 대체되었습니다. (I68730)
  • 테스트 찾기에 새 옵션 플래그인 useUnmergedTree가 추가되었습니다. (I2ce48)
  • 더 이상 사용되지 않는 크기 테스트 API를 삭제했습니다. (Iba0a0)
  • 레이아웃에서 정수 픽셀 경계를 표현하는 IntBounds 단위 클래스가 추가되었습니다. 이 기능을 사용하도록 PopupPositionProvider API를 업데이트했습니다. (I0d8d0, b/159596546)
  • @Preview에 새 기기 매개변수를 추가했습니다. (I39049)

버그 수정

  • VerticalScroller와 HorizontalScroller는 지원 중단되었습니다. 열/행 동작 및 매개변수를 사용하는 내장 환경에는 ScrollableColumn과 ScrollableRow를 사용하고, 개발자의 자체 요소에는 Modifier.verticalScroll 및 Modifier.horizontalScroll을 사용하세요. 마찬가지로, ScrollerPosition이 지원 중단되고 ScrollState로 대체되었습니다. (I400ce, b/157225838, b/149460415, b/154105299)
  • 이제 단일 값 semantics 속성에서 호출 스타일을 사용합니다. 예를 들어 'semantics { hidden = true }'는 이제 'semantics { hidden() }'으로 작성됩니다. (Ic1afd, b/145951226, b/145955412)
  • 키 입력 관련 API용 실험 API 주석이 추가되었습니다. (I53c0a)
  • TransitionState를 하위 요소에 전달하는 대신 TransitionState를 반환하도록 Transition API가 변경되었습니다. 이렇게 하면, API와 animate() API의 일관성이 더 높아집니다. (I24e38)
  • 이제 Applier에는 구성을 삭제하기 위한 clear() 메서드가 필요합니다. (Ibe697)
  • LayoutNode 실험용 API가 제작되었습니다. (I4f2e9)
  • 이제 팝업, 대화상자 및 메뉴는 상황별 MaterialTheme를 상속합니다. (Ia3665, b/156527485)
  • 애니메이션 타이밍을 위한 최상위 withFrameNanos 함수가 추가됩니다. (Ie34c5)
  • Layout() 함수의 측정 블록에서 레이아웃 방향 매개변수를 삭제했습니다. 하지만, 레이아웃 방향은 측정 범위 객체를 통해 콜백 내에서 사용할 수 있습니다. (Ic7d9d)
  • 정적 애니메이션 사양 개념을 명확하게 하려면 최상위 API에서 AnimationBuilder 대신 AnimationSpec을 사용하세요. -트윈, 스프링과 같은 AnimationSpec을 만들기 위한 람다 요구사항을 삭제하여 전환 DSL을 개선합니다. 대신 생성자 매개변수가 직접 사용됩니다. -빌더에 의존하는 대신 생성자를 여는 AnimationSpec의 사용 편의성이 전반적으로 향상됩니다. -KeyFrames와 Tween의 재생 시간과 지연이 Int로 변경됩니다. 이를 통해 불필요한 유형 변환 및 메서드 오버로드가 사라집니다(Long과 Int를 모두 지원하는 경우). (Ica0b4)
  • 이제 기본 스레드에서 동기화를 트리거하려고 할 때 IllegalStateException이 발생합니다. 예를 들어 다음과 같은 경우입니다.

    runOnIdleCompose {
        findByTag(\"tag\").assertExists()
    }
    

    이러한 경우에는 runOnIdleCompose에 대한 호출을 삭제하세요.

    findByTag(\"tag\").assertExists()
    

    (Idced7, b/159224666)

  • TextDecoration.plus 연산자가 추가되었습니다. (I0ad1a)

  • 이제 버튼의 콘텐츠 슬롯이 행처럼 동작합니다. 이는 텍스트를 넣어 아이콘을 만들어야 하는 경우에 유용합니다. 버튼 작성 방법은 버튼에 대한 샘플을 참조하세요. (I0ff10, b/15867786)

버전 0.1.0-dev14

2020년 6월 24일

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

API 변경사항

  • IntPx 사용이 Int로 대체되었습니다. IntPxPositionIntOffset으로 대체되었습니다. IntPxSizeIntSize로 대체되었습니다. (Ib7b44)
  • 크기 조정 정보를 표시하는 데 사용되는 클래스 수를 통합하기 위해 PxSize 대신 Size 클래스 사용을 표준화했습니다. 이렇게 하면 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 너비와 높이를 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (Ic0191)
  • 위치 지정 정보를 표시하는 데 사용되는 클래스 수를 통합하기 위해 PxPosition 대신 Offset 클래스 사용을 표준화했습니다. 이렇게 하면 인라인 클래스의 이점을 제공하여 부동 소수점으로 표시된 x 및 y 오프셋을 나타내는 long-pack 2 부동 소수점 값을 활용할 수 있습니다. (I3ad98)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I086f4)
  • 이제 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)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I97a5a)
  • 이제 TestTag가 지원 중단되었습니다. 대신 Modifier.testTag를 사용하세요. (If5110, b/157173105)
  • 기본 무작동 ParentDataModifier#modifyParentData 구현이 삭제되었습니다. 처음에 인터페이스를 구현하지 않는 것과 같았습니다. (I0deaa)
  • 이전에 지원 중단된 ScaleFit가 삭제되었습니다. 대신 ContentScale을 사용하세요. (Ifbc5b)
  • AdapterList의 이름이 LazyColumnItems로 변경되었습니다. (6decc02)
  • LazyRowItems가 추가되었습니다. 가로로 스크롤하는 LazyColumnItems 유사체입니다. (Ibbcf7)
  • androidx.ui.foundation.shape.RectangleShape가 삭제되었습니다. 대신 androidx.ui.graphics.RectangleShape를 사용하세요. (I94939, b/154507984)
  • 손가락으로 모으거나 펼쳐 확대/축소하는 기능을 위해 Modifier.zoomable이 추가되었습니다. (Id5d63)
  • Toggleable 구성요소가 지원 중단되었습니다. 대신 Modifier.toggleable을 사용하세요. (I35220, b/157642842)
  • MutuallyExclusiveSetItem이 지원 중단되었습니다. 대신 Modifier.selectable을 사용하세요. (I02b47, b/157642842)
  • 실수로 이전에는 추가되지 않았던 fontWeight 매개변수가 Text에 추가되었습니다. (I56937)
  • ConstraintLayout 가이드라인을 만들 때 비율 매개변수의 이름이 분수로 변경되었습니다. (Ida2db)
  • ConstraintLayout 배리어의 여백 지원이 추가되었습니다. (I47ffe)
  • ConstraintLayout의 RTL 지원이 수정되었습니다. RTL을 인식하지 못하는 API가 추가되었습니다. (I3b1c7)
  • ConstraintLayout을 위한 새 DSL이 추가되었습니다. 자세한 내용은 샘플을 참조하세요. (Icaa9a)
  • @ExperimentalLayout 주석이 추가되었습니다. 이제 ConstraintLayout, FlowRow 및 FlowColumn을 이 주석으로 태그하여 API가 변경될 예정인 것을 표시합니다. (I412a8)
  • Material Outlined Textfield가 추가되었습니다. (I1a518)
  • TabRow.TabPosition에는 IntPx가 아닌 Dp의 위치가 없습니다. (I34a07, b/158577776)
  • Modifier.ripple이 지원 중단되었습니다. 이제 clickable이 ripple을 기본 표시로 사용하므로(MaterialTheme {}을 애플리케이션에 설정한 경우) 대부분의 경우 clickable을 사용하여 무료로 ripple 표시를 가져오면 됩니다. ripple의 색상/크기/제한 매개변수를 맞춤설정해야 한다면 수동으로 RippleIndication을 만들어 표시 매개변수로 clickable에 전달하면 됩니다. (I101cd, b/155375067)
  • Scaffold API가 재작업되었습니다. 이름이 바뀐 매개변수가 거의 없고 더 나은 맞춤설정을 위해 새 매개변수가 추가되었습니다. getter가 Fab, TopBar 및 BottomBar의 쿼리 크기에 추가되었습니다. (I0e7ce)
  • 획 크기를 맞춤설정하도록 strokeWidth 매개변수가 CircularProgressIndicator에 추가되었습니다. LinearProgressIndicator의 획 크기(높이)를 변경하려면 Modifier.preferredHeight() 또는 다른 크기 수정자를 사용하면 됩니다. (Icea16, b/154919081)
  • GestureScopePartialGestureScoperelativeOffset(x, y)가 추가되어 구성요소 크기를 기준으로 한 값이 있는 Offset 인스턴스를 생성합니다. relativeOffset(.1f, .2f)는 x가 구성요소 너비의 10%이고 y가 구성요소 높이의 20%인 Offset을 의미합니다. (Ia4bf7, b/158291007)
  • 더블클릭과 긴 클릭을 삽입할 때 이제 삽입된 동작의 지속 시간을 지정할 수 있습니다. (I51c97, b/155464717)
  • 구성요소의 공통 좌표에 액세스하기 위해 GestureScope 및 PartialGestureScope에 속성이 추가되었습니다. right와 같은 1차원 속성 Float와 centerLeft와 같은 2차원 속성 Offset입니다.

    1차원 속성은 다음과 같습니다.

    • left
    • centerX
    • right
    • top
    • centerY
    • bottom

    2차원 속성은 다음과 같습니다. * topLeft * topCenter * topRight * centerLeft * center(이미 존재하며 완전성을 위해 언급됨) * centerRight * bottomLeft * bottomCenter * bottomRight

    사용 예:

    findByTag("widget")
        .doGesture {
            sendSwipe(topLeft, bottomRight)
        }
    

(I49ef3, b/158291007) - 멀티터치 동작을 실행할 때 구성요소를 테스트할 수 있도록 멀티터치 동작 삽입 API가 추가되었습니다.

동작을 삽입할 때 이제 부분 동작 메서드에 포인터 ID를 제공하여 여러 포인터를 지정할 수 있습니다. 포인터 ID를 지정하지 않으면 포인터 0이 기본 포인터라고 간주됩니다. 모든 prefab 동작(sendClick, sendSwipe 및 여기에 기반한 모든 메서드)이 기본 포인터를 사용합니다. 이제 PartialGestureScope의 다음 메서드에 sendDown, sendMoveTo, sendMoveBy, sendUp 포인터 ID를 허용하는 오버로드가 있습니다.

각 이벤트에는 이제 각 활성 포인터(다운인 활성 포인터)의 현재 위치에 관한 전체 목록이 포함되며 위에 나열된 메서드는 이벤트를 즉시 전송합니다. 또한 movePointerTo, movePointerBy, sendMove라는 세 가지 새로운 메서드가 도입되었습니다.

movePointerTomovePointerBy 메서드는 포인터의 현재 위치를 변경하지만 이를 반영하는 이벤트를 전송하지 않습니다. 따라서 동작의 현재 시간을 앞당기지 않습니다. 이렇게 하면 여러 포인터를 동시에 이동할 수 있습니다. 마지막 메서드 sendMove는 매개변수를 허용하지 않고 단순히 이동 이벤트를 전송하여 모든 포인터 이동을 '플러시'할 수 있습니다. 포인터가 movePointerXx로 업데이트되고 다운 또는 업 이벤트가 전송되면 이동 이벤트가 다운 또는 업 이벤트 직전에 전송됩니다.

모든 메서드의 타이밍도 약간 변경되었습니다. 현재 sendDownsendUp은 동작 시간을 더 이상 앞당기지 않으므로 여러 포인터를 동시에 위나 아래로 전송할 수 있습니다. 다른 모든 메서드는 동작 시간을 앞당깁니다. 현재 시간 델타는 아직 변경할 수 없습니다. (I9acac, b/157142514) - 범위 내 모든 주석을 반환하는 AnnotatedString.getStringAnnotations가 추가되었습니다. (I1fa00)

버그 수정

  • 낮은 수준의 스테이트리스(Stateless) 애니메이션 API가 도입되었습니다. (I63bf7)
  • Recompose 컴포저블은 더 이상 유용한 추상화가 아닙니다. 대부분의 재구성은 MutableState 할당의 결과로 발생해야 합니다. 그 외의 경우에는 invalidate 함수를 사용하여 현재 범위의 재구성을 트리거하는 것이 좋습니다. (Ifc992)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. Px 클래스 전체가 삭제되었습니다. (I3ff33)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (Id3434)
  • 이제 Crossfade가 null을 초기 값으로 사용할 수 있습니다. (Iad6a4, b/155947711)
  • 여러 컴포즈 클래스에서 Px 클래스가 더 이상 대규모 리팩터링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 기본 유형만 사용됩니다. (I19d02)
  • androidx.ui.foundation.TextFieldValueandroidx.ui.input.EditorValue가 지원 중단되었습니다. 이 유형을 사용하는 TextField, FilledTextField, CoreTextField 컴포저블도 지원 중단되었습니다. 대신 androidx.ui.input.TextFieldValue를 사용하세요. (I4066d, b/155211005)
  • 전달 중에 하위 구성을 통해 PointerInputFilters가 삭제된 경우 포인터 입력 전달이 비정상 종료를 일으키는 문제가 수정되었습니다. 이제 이 문제가 해결되었습니다. (I1f48b, b/157998762)
  • 전달 중에 하위 구성을 통해 PointerInputFilters가 삭제된 경우 포인터 입력 전달이 비정상 종료를 일으키는 문제가 수정되었습니다. 이제 이 문제가 해결되었습니다. (Iab398, b/157998762)
  • 반경 클래스를 인라인 클래스로 리팩터링했습니다. y축의 반경이 필수 x축 반경 매개변수의 반경과 일치하도록 컴패니언 생성 메서드가 삭제되고 기본 매개변수가 있는 함수 생성자로 대체되었습니다.

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

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

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

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

  • DropdownMenuItemonClick이 호출되지 않는 문제가 수정되었습니다. (I3998b, b/157673259)

  • LocaleLocaleList의 패키지 이름이 androidx.ui.text에서 androidx.ui.intl로 변경되었습니다. (I8132c)

버전 0.1.0-dev13

2020년 6월 10일

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

알려진 문제

  • 애플리케이션이 androidx.core:core-ktx:1.2.0에 종속되고 여러 개의 글꼴과 글꼴 두께를 갖는 FontFamily가 사용되는 경우 선택하는 글꼴은 일반 글꼴 두께로 렌더링됩니다. 이 문제를 해결하기 위해 노력하고 있으며 현재 해결 방법은 androidx.core:core-ktx:1.2.0-alpha01 또는 androidx.core:core-ktx:1.1.0을 사용하는 것입니다.

버전 0.1.0-dev12

2020년 5월 27일

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

API 변경사항

  • Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds, AnimationVector에 대한 animate() 지원이 추가되었습니다. (Ib7518, b/156559139)
  • 머티리얼 디자인 메뉴 구현인 ui-materialDropdownMenu 구성요소가 추가되었습니다. (I9bb3d, b/135742486)
  • 지원 중단된 LayoutTag()가 삭제되었습니다. 대신 Modifier.tag()를 사용하세요. (If8044, b/157020665, b/156577646)
  • 지원 중단된 Modifier.matchParent()를 삭제했습니다. 대신 Modifier.matchParentSize()를 사용하세요. (If8044, b/157020665, b/156577646)
  • 여러 컴포즈 클래스의 Px 클래스가 더 이상 대규모 리팩토링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 원시 유형만 사용됩니다. (I57bff, b/156681014)
  • 상위 수준 구성요소에 사용할 수 있도록 Modifier.semantics에 대한 지원 중단이 해제되었습니다. (I4cfdc, b/153198273, b/154023028)
  • DoubleTapGestureFilter가 이제 트리에서 SingleTapGestureFilter를 구별합니다. (If92b1, b/147609897, b/148553848, b/138605697, b/148464969)
  • Alignment API가 업데이트되고 절대 정렬을 위한 지원이 추가되었습니다(Rtl 컨텍스트에서 자동으로 미러링되지 않음). (I38cd3, b/153633345)
  • VerticalScroller는 이제 처음부터 Column을 제공합니다. HorizontalScroller는 이제 처음부터 Row을 제공합니다. (Ieca5d, b/157020670)
  • Modifier.indication이 기초 패키지에 추가되었습니다. 이 패키지를 사용하여 상호작용 가능한 맞춤 요소에 누르기/드래그/기타 표시를 나타낼 수 있습니다. (I8425f, b/155287131)
  • 이제 isReversedScrollerPosition에 설정되어 있으면 VerticalScrollerHorizontalScroller가 역 스크롤을 지원합니다. (I953bd, b/155852672)
  • 텍스트 레이아웃에 컴포저블을 추가할 수 있습니다. (I1373c, b/139320966)
  • 지원 중단된 DrawBackground API를 삭제하고 수정자의 drawBackground 확장 API로 대체했습니다. 코드 경로를 줄이고 수정자를 구성의 일부로 만들어야 할 필요성을 삭제하도록 색상, 브러시 및 페인트 drawBackground 구현을 리팩터링했습니다. (I0343a, b/155999867)
  • Modifier.padding(InnerPadding)이 추가되었습니다. (I94985, b/157133803)
  • Row 및 Column에서 지원 중단된 RowAlign, ColumnAlign이 삭제되었습니다. (If60d4, b/154524540, b/155858731)
  • (동적) 오프셋(단위: px)을 정의하는 데 사용할 수 있는 offsetPx 레이아웃 수정자가 추가되었습니다. (I5af57, b/154841615)
  • SoftwareKeyboardController를 사용하여 소프트웨어 키보드를 수동으로 표시하거나 숨길 수 있습니다. (Ifb9d6, b/155427736)
  • Emphasis.emphasize()Emphasis.applyEmphasis()로 이름이 변경되었습니다. (Iceebe, b/152874916)
  • 테스트 시 손가락 모으기 동작을 시뮬레이션할 수 있는 유틸리티가 추가되었습니다. (If6c42, b/145593752)
  • 사용 중인 ui-geometry 모듈에 중복된 Size 클래스가 있어 사용되지 않는 Size 클래스가 삭제되었습니다. (I1b602, b/156546424)
  • AnnotatedString.Item에서 AnnotatedString.Range로 이름이 변경되었습니다. (I2d44d, b/156126205)
  • 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)

@Model 주석 지원 중단

  • 이제 @Model 주석이 지원 중단됩니다. 대신 statemutableStateOf를 사용하세요. 이번 지원 중단은 여러 신중한 논의 끝에 결정되었습니다.

    근거

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

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

    이전 참고사항

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

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

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

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

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

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

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

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

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

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

버그 수정

  • 버그 수정됨: 글꼴 두께와 글꼴 스타일이 AnnotatedString에 중첩되면 텍스트가 올바르게 렌더링되지 않습니다. (I77a9d, b/155081453)
  • CanvasScope 구현이 통합되어 이제는 DrawScope와 ContentDrawScope만 있습니다.
    • CanvasScope에서 DrawScope로 이름이 변경되었습니다.
    • Density 인터페이스를 구현하고 LayoutDirection을 제공하도록 DrawScope를 업데이트했습니다.
    • ContentDrawScope에서 DrawScope 서브클래스가 삭제되었습니다.
    • Painter 및 PainterModifier가 RTL 속성을 더 이상 자체적으로 유지하지 않도록 업데이트되었습니다. RTL 속성을 수동으로 제공하지 않아도 DrawScope가 이미 이 속성을 제공하기 때문입니다. (I1798e, b/155918846)
  • 여러 컴포즈 클래스의 Px 클래스가 더 이상 대규모 리팩토링 작업의 일부로 사용되지 않습니다. 픽셀 매개변수에는 Dp 유형과 원시 유형만 사용됩니다. (Iede0b, b/156681014)

버전 0.1.0-dev11

2020년 5월 14일

androidx.ui:ui-*:0.1.0-dev11이 출시됩니다. 버전 0.1.0-dev11에 포함된 커밋을 확인하세요.

API 변경사항

  • 이제 크로스페이드는 애니메이션을 구성할 수 있는 선택적 AnimationBuilder 매개변수를 허용합니다. (I6d6e0)
  • 람다 API 후행 WithConstraints가 변경되었습니다. 이제 두 매개변수 대신 제약 조건 및 layoutDirection 외에도 Dp에서 minWidth, maxWidth, minHeight, maxHeight 속성을 제공하는 수신기 범위가 있습니다. (I91b9a, b/149979702)
  • LayoutModifier2의 이름이 LayoutModifier로 변경되었습니다. (Id29f3)
  • 지원 중단된 LayoutModifier 인터페이스가 삭제되었습니다. (I2a9d6)
  • 이제 HorizontalScrollerVerticalScroller가 저장된 인스턴스 상태를 사용하여 스크롤 위치를 복원합니다. (Ia0fae, b/155075048)
  • FocusManagerAmbient가 삭제되었습니다. 포커스를 얻으려면 FocusModifier.requestFocus를 사용하세요. (Ic4826)
  • 새로고침된 API로 다시 사용할 수 있게 될 때까지 테이블 레이아웃이 일시적으로 삭제되었습니다. (Id88a7)
  • 캔버스 객체를 래핑하여 상태 비추적의 선언적 그리기 API 표면을 노출하는 CanvasScope API를 만들었습니다. 변환은 자체 수신기 범위 내에 포함되며 크기 정보도 상응하는 인셋 경계로 범위가 지정됩니다. 소비자가 그리기 작업을 구성하기 위해 자체 Paint stateobject를 유지할 필요는 없습니다.
    • 선언적 그래픽 데모를 포함하기 위해 CanvasScopeSample을 추가하고 데모 앱을 업데이트했습니다. (Ifd86d)
  • ColoredRect를 삭제했습니다. 대신 drawBackground 수정자와 함께 Box를 사용하세요. (I983c7, b/152753731)
  • 커서 색상 맞춤설정을 TextField에 추가합니다. (I6e33f)
  • 이제 onTextInputStarted 콜백에서 제공하는 SoftwareKeyboardController를 사용하여 소프트웨어 키보드를 숨기거나 표시할 수 있습니다. (I8dc44, b/151860051)
  • 이제 TextField와 함께 사용되는 TextFieldValue가 다음과 같이 savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }에서 가변 텍스트로 사용되면 활동 재현에도 유지될 수 있습니다. (I5c3ce, b/155075724)
  • 일반적으로 사용되는 매개변수를 Text()에 추가합니다. 현재 로컬 텍스트 스타일을 만들어 Text(style = TextStyle(textAlign = TextAlign.Center))와 같이 소수의 매개변수를 전달하고 있다면 이제 Text(textAlign = TextAlign.Center)와 같이 매개변수를 직접 제공할 수 있습니다. (I82768)
  • 포커스 하위 시스템과 통합하기 위해 CoreTextField/TextField focusIdentifier 매개변수를 FocusNode로 대체했습니다. (I7ea48)
  • TextField 업데이트 - 가로 측정기준에서 부여된 모든 사용 가능한 공간을 차지합니다. (Ib08df, b/154638552)
  • AlignmentLineOffset 컴포저블이 지원 중단되었습니다. relativePaddingFrom() 수정자를 대신 사용하세요. CenterAlignmentLine 컴포저블을 삭제했습니다. (I60107)
  • 상응하는 수신 제약 조건이 지정되지 않은 경우에만(최소 제약 조건은 0, 최대 제약 조건은 무한대) 크기 제약 조건을 래핑된 레이아웃으로 설정하는 defaultMinSizeConstraints 레이아웃 수정자를 추가했습니다. (I311ea, b/150460257)
  • Container를 삭제했습니다. 대신 Box를 사용하세요. (Ibbc2b, b/151407926)
  • 지원 중단된 LayoutWidth/Height/Size 수정자를 삭제했습니다. (Ib0bc1)
  • 오프셋 수정자의 기본 매개변수 값을 추가했습니다. (I37f06)
  • 대칭 패딩 수정자를 추가했습니다. (I39840, b/152941819)
  • 지원 중단된 LayoutAspectRatio 수정자를 삭제했습니다. (I65a74)
  • 반대 축 제약 조건 없이 래핑된 레이아웃을 측정하게 했던 너비 및 높이 수정자의 버그를 수정했습니다. (I210b8, b/154797971)
  • 사용 중지된 버튼은 머티리얼 디자인 사양을 시각적으로 따릅니다. (I47dcb, b/155076924)
  • FilledTextField는 IME 작업, 시각적 변환, 키보드 유형 지원을 받습니다. (I1f9cf, b/155075201)
  • strokeWidth 매개변수를 CircularProgressIndicator에 추가하여 획 크기를 맞춤설정합니다. LinearProgressIndicator의 획 크기(높이)를 변경하려면 Modifier.preferredHeight() 또는 다른 크기 수정자를 사용하면 됩니다. (Icea16, b/154919081)
  • FilledTextField의 후행 및 선행 아이콘 및 오류 상태 처리를 위한 슬롯 API를 추가했습니다. (Ic12e0)
  • sendDown, sendMoveTo, sendMoveBy, sendUp, sendCancel 메서드가 있는 PartialGestureScope 수신기로 doPartialGesture 작업을 추가합니다. (I6b058, b/152477560)
  • sendDown, sendMove, sendUp, sendCancel 메서드를 InputDispatcher에 추가하고 이러한 개별 터치 이벤트를 한 동작으로 결합하는 GestureToken을 추가합니다. (Ibd278, b/152477560)
  • merge() 함수에 위임하는 (Text/Paragraph/Span) 스타일에 더하기 연산자를 추가했습니다. (Ia1add)
  • ui-frameworkui-platform 프로젝트는 ui-core로 병합되었으므로 이러한 모듈의 모든 종속 항목은 ui-core에만 종속되어야 합니다. (/I70067)

버그 수정

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

버전 0.1.0-dev10

2020년 4월 29일

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

API 변경사항

  • API의 모든 null을 허용하는 Color 사용을 null을 허용하지 않는 것으로 교체하고 null 대신 Color.Unset을 사용합니다. (Iabaa7)
  • 이제 LayoutLayoutModifier2의 내장 측정 함수에 IntrinsicMeasureScope 수신기가 있습니다. 이 수신기는 내장 기능 쿼리 API에 암시적으로 전파된 레이아웃 방향을 제공합니다. (Id9945)
  • LayoutLayoutModifier 하위 요소는 다른 레이아웃 방향으로 측정할 수 있습니다. (Ibd731)
  • Modifier.zIndex()가 추가되어 동일한 상위 요소 레이아웃 내에서 하위 요소의 그리기 순서를 제어합니다. DrawLayerModifier의 고도 속성의 이름이 shadowElevation으로 바뀌고 더 이상 그리기 순서를 제어하지 않습니다. DrawShadow의 매개변수 순서가 변경되었습니다. 이제 첫 번째 매개변수는 elevation이고 두 번째 매개변수는 shape이며 기본값은 RectangleShape입니다. (I20150, b/152417501)
  • Owner에서 onSizeChangeonPositionChange를 삭제했습니다. (I5c718)
  • IntPx 대신 Int 제약 조건 값만 지원하는 Constraints의 복사본인 Constraints2를 추가했습니다. IntPx는 삭제되고 모든 정수 제약 조건은 Android와 같은 픽셀로 간주됩니다.
    • IntSize도 추가했습니다. 최종적으로 IntPxSize를 대체할 예정입니다. (I4b43a)
  • InteractionStateInteraction을 추가했습니다. 따라서 UI 상태 변경(예: 누르기, 드래그)에 반응하는 구성요소를 더 쉽게 빌드할 수 있습니다. (Icfe25, b/152525426)
  • RectangleShapeandroidx.ui.foundation.shape.*에서 androidx.ui.graphics.*로 이동되었습니다. (Ia74d5, b/154507984)
  • TextField API 업데이트 - onFocusonBlur 콜백이 부울 매개변수가 있는 단일 onFocusChange(Boolean) 콜백으로 병합되었습니다. (I66cd3)
  • FontLoader를 삭제했습니다. 대신 fontResource를 사용합니다. (Id0308)
  • 사용하지 않는 MaskFilter API를 삭제했습니다. 사용이 제한되고 대부분의 사용 사례에서 하드웨어 가속에 최적화되어 있지 않기 때문입니다. (I54f76)
  • 색상 상자 없는 설정되지 않은 값을 나타내기 위해 설정되지 않은 Color를 추가했습니다. (If901a)
  • 변환을 위한 선택적 피벗 좌표를 사용하는 Canvas.rotateCanvas.scale 확장 메서드를 추가했습니다. 현재 캔버스 변환의 왼쪽 상단으로 기본 설정됩니다.
    • 또한 일관성을 위한 확장 메서드로 Canvas.rotateRad를 이동했습니다. (Ibaca6)
  • FAB 및 확장 FAB의 기본 색상을 MaterialTheme.colors.secondary로 변경했습니다. (I3b9b9, b/154118816)
  • ComposeTestRule.setContent {} 이후 onIdle()을 더 이상 명시적으로 호출할 필요가 없습니다. (Iafb2e, b/154079800)
  • 이제 맞춤 ActivityTestRuleAndroidComposeTestRule에 전달할 수 있습니다. (I38206, b/153623653)
  • TextLayoutResultgetLineStart, getLineEnd, getEllipsisOffset, getEllipsisCount를 추가했습니다. (Ibc801)
  • FontWeight.lerp가 더 이상 맞지 않습니다. 여전히 데이터 클래스입니다. (I521c2)
  • 이제 FontWeight 생성자가 공개되어 더 이상 데이터 클래스가 아닙니다. (Id6b1f)

버그 수정

  • 기본 ImageAsset의 하위 집합 그리기를 지원하기 위해 선택적 추가 rect 매개변수를 ImagePainter에 도입합니다. (I0ea9e)
  • 항목을 삭제할 때 AdapterList에서 발생하는 비정상 종료 문제를 수정했습니다. (Ic64b0, b/153195921)
  • Finder(예: findByTag)가 작동하려면 이제 ComposeTestRule을 사용해야 합니다. (I75bb9, b/153565271)

버전 0.1.0-dev09

2020년 4월 15일

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

API 변경사항

  • 정렬을 임의의 값으로 인스턴스화할 수 있게 만들었습니다. 1D 정렬을 추가했습니다. (Ia0c05)
  • alignToSiblings now accepts aMeasuredinstead ofPlaceable`.(I5788d)
  • (I45f09, b/152842521)
    • ScaleFit의 이름이 ContentScale로 변경되었습니다.
    • Alignment API와 동일한 모듈에 위치하도록 ContentScaleui-graphics에서 ui-core 모듈로 이동했습니다.
    • FillMaxDimension의 이름이 Crop으로 변경되었습니다.
    • FillMinDimension의 이름이 Fit으로 변경되었습니다.
    • ImageView.ScaleType에 상응하는 항목에 더 일치하도록 Fit의 이름이 Inside로 변경되었습니다.
    • CropAlignment.Center의 조합이 ImageView.ScaleType.CENTER_CROP과 동일한 결과를 얻으며 FitAlignment.Center와 함께 사용하면 ImageView.ScaleType.FIT_CENTER와 동일한 결과를 얻는다는 점을 나타내는 문서를 추가했습니다.
    • InsideAlignment.Center와 함께 사용하면 ImageView.ScaleType.CENTER_INSIDE와 동일한 결과를 얻습니다.
  • 그리기 수정자에 RTL 지원을 추가합니다. (I0aaf9)
  • XML에서 Android 뷰를 확장하는 API를 출시했습니다. 자세한 내용은 ViewInCompose 데모를 참조하세요. (I42916)
  • LayoutCoordinates용으로 positionInParentboundsInParent를 추가했습니다. (Icacdd, b/152735784)
  • 이제 DrawLayerModifierdrawLayer()clipToBoundsclipToOutlinefalse로 기본 설정합니다. (I0eb8b, b/152810850)
  • LayoutResult의 이름이 MeasureResult로 변경되었습니다. (Id8c68)
  • 레이아웃 수정자를 정의하는 새 API인 LayoutModifier2를 추가했으며, LayoutModifier를 지원 중단했습니다. (If32ac)
  • ProvideContentColor를 삭제합니다. 대신 ContentColorAmbientProviders에 직접 사용하면 됩니다. (Iee942)
  • 텍스트에 색상 매개변수를 추가하여 테마에 제공된 스타일과 수동으로 병합하지 않고도 텍스트 스타일의 색상을 재정의할 수 있습니다. (I41a66)
  • 도형 테마 설정 시스템이 머티리얼 디자인 사양에 따라 업데이트됩니다. 이제 대부분의 구성요소에 사용되는 소형, 중형, 대형 도형을 제공할 수 있습니다. (Ifb4d1)
  • LayoutDirectionAmbient가 지원 중단되었습니다. 언어로 정의된 레이아웃 방향을 읽으려면 ConfigurationAmbientlocaleLayoutDirection을 사용합니다. (I851b1)
  • LifecycleOwnerAmbient를 사용할 수 있습니다. 이제 Compose UI와 함께 사용 중인 활동이 androidx.activity.ComponentActivity(또는 AppCompatActivity)를 확장해야 합니다. android.app.ActivitysetContent가 이제 지원 중단되었습니다. (Idb25a, b/153141084)
  • 팝업에 RTL이 지원됩니다. (Ib6657)
  • ClipboardManager를 추가합니다. (I1dd2b)
  • ConstraintLayout의 하위 요소에 관한 맞춤 측정기준을 위한 지원을 추가했습니다. (Idb1a5)
  • OnChildPositioned를 삭제했습니다. 대신 개발자는 Modifier.onChildPositioned 수정자를 사용해야 합니다. (I5ade7, b/151141173, b/151641453, b/151818355)
  • Compose API와 Android 프레임워크 API 사이의 객체 변환을 위한 이름 지정 규칙과 일치시키기 위해 toFrameworkRect/toFrameworkRectF의 이름을 toAndroidRect/toAndroidRectF로 변경했습니다. 이 API의 문서도 업데이트했습니다. (I86337)
  • EdgeInsets의 이름이 InnerPadding으로 변경되었습니다. 머티리얼 버튼의 innerPadding 매개변수 이름이 padding으로 변경되었습니다. (I66165)
  • 내장된 측정에 크기 조정을 위한 수정자를 추가하고 이 목적으로 사용되는 구성요소를 지원 중단했습니다. (I8295d)
  • 지원 중단된 WrapCenter 컴포저블을 삭제했습니다. (I29e23)
  • 슬라이더가 이제 상태를 추적하지 않습니다. 사용자는 다른 컨트롤의 경우처럼 직접 상태를 전달하고 업데이트해야 합니다. (Ia00aa)
  • StaticDrawer가 삭제되었습니다. 필요한 경우 대신 Box를 머티리얼 사양의 너비로 하여 사용합니다. (I244a7)
  • ListItem에 수정자 매개변수를 추가하고 매개변수를 재정렬하여 후행 람다 본문의 순위를 올렸습니다. (I66e21)
  • TypographydefaultFontFamily 생성자 매개변수를 추가했습니다. 이제 글꼴 모음이 설정되지 않은 TextStyle이 제공된 경우 여기에 사용될 기본 글꼴 모음을 지정할 수 있습니다. (I89d07)
  • API 노출 영역에서 머티리얼 데이터 테이블을 일시적으로 삭제했습니다. (Iaea61)
  • Divider 컴포저블에서 매개변수의 이름을 변경했습니다. (Ic4373)
  • 다수의 머티리얼 구성요소를 고려하여 'children' 후행 매개변수의 이름이 변경되었습니다. 이름이 지정된 매개변수를 통해 이 매개변수를 사용(또는 후행 람다 구문을 사용)한 경우 새 이름을 사용하세요. (Ia6d19)
  • MaterialTheme.emphasisLevels를 삭제합니다. 강조 수준을 가져오려면 대신 EmphasisAmbient.current를 사용하세요. (Ib5e40)
  • 이제 null을 허용하는 유형과 함께 savedInstanceState()를 사용할 수 있습니다. (I6847f, b/153532190)
  • RxJava2용 어댑터가 있는 새 아티팩트인 ui-rxjava2를 추가했습니다. (Ifab4b, b/153369097)

    • 사용 예:
    val value by observable.subscribeAsState()
    
  • LiveData용 어댑터가 있는 새 아티팩트인 ui-livedata를 추가했습니다. (Ie9e8c, b/150465596)

    • 사용 예:
    val value by liveData.observeAsState()
    

버그 수정

  • verticalGravityhorizontalGravity 매개변수를 각각 RowColumn에 추가했습니다. (I7dc5a)
  • ui-text module was renamed asui-text-core` (I57dec)
  • 개선된 DrawModifier API((Ibaced, b/152919067)):
    • 수신기 범위를 draw() ContentDrawScope로 설정했습니다.
    • draw()의 모든 매개변수가 삭제되었습니다.
    • DrawScope의 인터페이스가 이전 CanvasScope와 동일합니다.
    • ContentDrawScopedrawContent() 메서드를 갖습니다.
  • runOnIdleComposerunOnUiThread는 이제 ComposeTestRule의 메서드가 아니라 전역 함수입니다. (Icbe8f)
  • [변경 가능] 상태 속성 위임 연산자가 Kotlin 1.4 속성 위임 최적화를 지원하기 위해 확장 프로그램으로 이동했습니다. by state { ... } 또는 by mutableStateOf(...)를 계속 사용하려면 호출자가 가져오기를 추가해야 합니다. (I5312c)
  • ColoredRect가 지원 중단되었습니다. 대신 Box(Modifier.preferredSize(width, height).drawBackground(color))를 사용하세요. (I499fa, b/152753731)
  • activity.setContent { } 블록에 배치하는 첫 번째 레이아웃을 측정하는 방법을 변경했습니다. 이전에는 전체 활동 화면을 채워야 했지만 이제는 스택에 레이아웃을 배치한 것처럼 동작합니다. 즉, 레이아웃이 화면보다 작을 수 있으며 화면 왼쪽 상단에 배치됩니다. 이전 동작을 사용하려면 레이아웃에 Modifier.fillMaxSize()를 적용하면 됩니다. (Ie88a7, b/153453714)
  • ui-text-compose 모듈의 이름이 ui-text로 변경되었습니다. 이제 ui-textCoreTextCoreTextField 컴포저블이 포함됩니다. (Ib7d47)
  • ui-framework/CoreText, CoreTextField 컴포저블을 ui-text-compose 아래로 이동했습니다. 프로젝트에 ui-text-compose를 포함해야 하는 경우도 있습니다. (I32042)
  • 임의의 Alignment가 아닌 세로 또는 가로 Alignment를 예상하도록 wrapContentWidthwrapContentHeight를 업데이트했습니다. 세로 또는 가로 Alignment를 허용하도록 중력 수식어가 업데이트되었습니다. 맞춤 연속 Alignment를 지원하기 위해 Row, Column, Stack이 업데이트되었습니다. (Ib0728)
  • ImageAsset에서 픽셀 정보를 쿼리하도록 지원하는 PixelMap API를 만들었습니다. (I69ad6)
  • 머티리얼 디자인의 채워진 텍스트 입력란 구현을 추가했습니다. (Ic75cd)
  • androidx 정책과 일치하도록 ui-android-text 패키지 이름(androidx.text)을 androidx.ui.text.platform으로 바꿨습니다. (I42711)

버전 0.1.0-dev08

2020년 4월 1일

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

API 변경사항

  • 특정 레이어의 그리기 명령어 표시 목록의 오프셋을 지원하는 translationX/Y 속성을 추가했습니다. 애니메이션 또는 터치 이벤트에 응답하여 콘텐츠를 이동하는 데 유용합니다. (I8641c)
  • 특정 지점을 기준으로 레이어의 회전 및 확장을 지원하도록 Layer API에 pivotX, pivotY 매개변수를 추가했습니다. (Icf7c3)
  • 드래그 가능 항목을 수정자로 이동했습니다. (Id9b16, b/151959544)
  • Textandroidx.ui.core에서 androidx.ui.foundation 패키지로 이동했습니다. (I87ce5)
  • 체크박스, 스위치, 전환 가능 항목에 enabled 매개변수를 추가했습니다. (I41c16)
  • 물결 효과는 이제 수정자입니다. Clickable이 아직 전환되지 않은 동안 권장되는 사용법은 Clickable(onClick = { ... }, modifier = ripple())입니다. (Ie5200, b/151331852, b/150060763)
  • 벡터 그래픽용 기존 하위 구성 API를 대체하는 VectorPainter API를 추가했습니다. 하위 구성의 결과는 DrawModifier가 아닌 VectorPainter 객체입니다.
    • 이전 DrawVector 컴포저블을 지원 중단하고 VectorPainter로 대체했습니다.
    • Image(Painter) API의 이름이 PaintBox(Painter)로 변경되었습니다.
    • Image 컴포저블처럼 작동하는 Vector 컴포저블을 만들었습니다(단, ImageAsset 대신 VectorAsset이 사용됨). (I9af9a) (b/149030271)
  • ParentData 컴포저블이 지원 중단되었습니다. ParentDataModifier 인터페이스를 구현하는 수정자를 만들거나, 측정 블록 내에서 인식되도록 레이아웃 하위 요소를 태그 지정하면 되는 경우 LayoutTag 수정자를 사용해야 합니다. (I51368, b/150953183)
  • OnPositioned를 삭제하고 onPositioned 수정자로 대체했습니다. (I2ea3c)
  • 이제 RowColumn 외부에서 RowScope 멤버와 ColumnScope 멤버에 액세스할 수 있습니다. (I3a641)
  • Container가 지원 중단되었습니다. 대신 Box를 사용하세요. (I675ce, b/151407926)
  • 프리미티브 대신 구성 가능한 람다를 허용하는 FloatingActionButton API를 리팩터링했습니다. 사용법 정보는 업데이트된 샘플을 참조하세요. (I00622)
  • 새 함수: savedInstanceState()rememberSavedInstanceState()입니다. 각각 state()remember()와 유사하지만 저장된 인스턴스 상태 지원이 내장되어 있습니다. (If1987, b/152025209)

버그 수정

  • 수정자 + 연산자를 팩토리 확장 함수로 대체했습니다. (I225e4)
  • Center 컴포저블을 지원 중단했습니다. LayoutSize.Fill + LayoutAlign.Center 수정자로 대체하거나 적절한 수정자가 적용된 Box 또는 Stack 컴포저블 중 하나로 대체합니다. (Idf5e0)
  • MaterialTheme API(예: MaterialTheme.colors(), MaterialTheme.typography())를 함수가 아닌 속성으로 변경했습니다. 기존 호출에서 괄호를 삭제했지만, 동작 변경은 필요하지 않습니다. (I3565a)

버전 0.1.0-dev07

2020년 3월 18일

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

API 변경사항

  • ManualAnimationClock에 API 추가: hasObservers: Boolean 및 생성자 매개변수 dispatchOnSubscribe: Boolean (Iaa134)
  • OnPositioned 및 OnChildPositioned 구성 가능 함수를 대체할 OnPositionedModifier 및 OnChildPositionedModifier를 추가합니다. (I2ec8f)
  • Layout의 RenderNode를 추가할 수 있는 수정자인 LayerModifier를 추가했습니다. 자르기, 불투명도, 회전, 확장, 그림자를 설정할 수 있습니다. RepaintBoundary를 대체합니다. (I7100d, b/150774014)
  • 레이아웃 방향을 상위 요소 레이아웃 노드에서 하위 요소로 전파되도록 만들었습니다. 레이아웃 방향 수정자를 추가했습니다. (I3d955)
  • 지정된 ImageAsset을 화면에 그리는 것 외에 크기 조정/레이아웃도 처리하는 Image 컴포저블을 만들었습니다. 이 컴포저블은 또한 고유의 크기를 고려하면서도 주어진 고정 크기나 최소 크기를 지원하며 임의의 Painter 인스턴스 그리기를 지원합니다. (Ibcc8f)
  • Image 데이터와 레이아웃에 참여하고 콘텐츠를 그리는 데 사용되는 예정된 Image 컴포저블 사이의 차이를 더 잘 구분하기 위해 Image 이름을 ImageAsset으로 변경했습니다. (Id5bbd)
  • 기존 Android 애플리케이션 개발을 작성 프레임워크와 결합하는 데 유용한 ImageAsset 인스턴스를 만들 수 있도록 android.graphics.Bitmap, Bitmap.asImageAsset()에서 확장 메서드를 만들었습니다. (Id5bbd)
  • androidx.compose.ViewComposerandroidx.ui.node.UiComposer로 이동하고 androidx.compose.Compose.subcomposeIntoandroidx.ui.core.subcomposeInto로 이동했습니다. (Idef00)
  • 하위 요소의 vararg를 허용하는 레이아웃 컴포저블 함수를 삭제했습니다. (I8f7f6)
  • WithConstraintsLayoutDirection 매개변수를 사용했습니다. (I6d6f7)
  • 레이아웃 위치 오프셋을 위한 LayoutOffset 수정자를 추가했습니다. (I0b8a3)
  • Surface 및 Card를 androidx.ui.material.surface에서 androidx.ui.material로 이동했습니다. (I88a6d) (b/150863888)

버그 수정

  • LayoutFlexible을 LayoutWeight로 이름을 변경했습니다. 채우기 위해 긴 매개변수의 이름을 변경했습니다. (If4738)
  • 불투명도 구성 가능 함수를 drawOpacity 수정자로 대체했습니다. (I5fb62)
  • AndroidComposeTestRule을 사용한 테스트가 이제 수동 일시중지, 계속, 진행을 허용하는 애니메이션 클록을 구성 루트에서 제공합니다. (Id54c5)
  • RepaintBoundary를 삭제하고 DrawLayerModifier로 대체했습니다. (I00aa4)
  • 이제 Button, FloatingActionButton, Clickable에 별도의 enabled 매개변수가 있습니다. Button의 일부 매개변수가 이름이 변경되거나 재정렬되었습니다. (I54b5a)
  • 일반적인 구성 가능 함수인 DrawVector를 레이아웃의 배경으로 벡터를 그리는 수정자 drawVector()를 반환하는 기능으로 변경했습니다. (I7b8e0)
  • 구성 가능 함수 Clip을 수정자 drawClip()으로 대체합니다. DrawClipToBounds는 사각형에서 레이어 경계에 맞춰 잘라내야 하는 경우에만 사용하기 편리한 수정자입니다. (If28eb)
  • DrawShadow 구성 가능 함수를 drawShadow() 수정자로 대체했습니다. 이제 그림자가 LayerModifier의 일부로 그려집니다. (I0317a)
  • Wrap 컴포저블을 지원 중단했습니다. LayoutAlign 수정자나 Stack 컴포저블로 대체할 수 있습니다. (Ib237f)
  • Painter.toModifier 이름을 Painter.asModifier로 변경했으며, 새로 만든 Modifier에는 여러 Modifier 인스턴스에서 공유할 수 있는 원래 Painter에 관한 참조가 있습니다. (I7195b)
  • 이제 LayoutPadding에서 음수 패딩이 허용되지 않습니다. 음수 위치 오프셋을 위해서는 대신 LayoutOffset을 사용해야 합니다. (Ifb5b1)

버전 0.1.0-dev06

2020년 3월 4일

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

API 변경사항

  • 스택 구성요소가 오른쪽에서 왼쪽 방향을 지원합니다. (Ic9e00)
  • 작성 레이아웃에서 RTL을 최초로 지원합니다. (Ia5519)
  • Icon, IconButton, IconToggleButton을 추가하고 AppBarIcon을 삭제했습니다. 기존의 AppBarIcon 사용을 IconButton으로 직접 대체할 수 있으며 이제 터치 타겟이 올바르게 지정됩니다. 사용법 정보는 샘플을 참조하고 이러한 구성요소와 함께 직접 사용할 수 있도록 제공되는 머티리얼 아이콘을 확인하려면 아이콘을 참조하세요. (I96849)
  • String 매개변수가 있는 Snackbar API를 삭제했으며 대신 구성 가능한 람다를 허용하는 오버로드를 사용합니다. 사용법 정보는 업데이트된 샘플을 참조하세요. (I55f80)
  • texticon 람다를 허용하도록 Tab API를 리팩터링했습니다. (Ia057e)
  • BottomNavigation 구성요소를 추가했습니다. 사용법 정보는 문서와 샘플을 참조하세요. (I731a0)
  • 맞춤형 의미론적 작업의 호출을 지원합니다. (I8c818)

버그 수정

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

버전 0.1.0-dev05

2020년 2월 19일

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

API 변경사항

  • Painter API를 추가했습니다. 콘텐츠 그리기를 지정 영역에 추출하는 API를 만들었습니다. Drawable API와 비슷하게 동작하지만 API 노출 영역이 더 간소화되었습니다. 또한 알파와 같은 다양한 효과를 적용하고 임의의 그리기 구현에 ColoFilter를 적용하도록 일반적으로 구현했으며 구현 자체에서 이러한 기능에 더 최적화된 지원을 제공할 수 있습니다. (aosp/1214802)
  • ambients API에 브레이킹 체인지가 있습니다. 자세한 내용은 로그와 Ambient<T> 문서를 참조하세요. (I4c7ee, b/143769776)
  • providedAlignmentLine이 지도가 아닌 세트가 되도록 그리고 LayoutCoordinate가 값을 검색하는 대신 get() 연산자를 구현하도록 LayoutCoordinate를 변경했습니다. 이에 따라 수정자별로 새 컬렉션을 만들지 않고도 수정자가 세트의 값 하나 이상을 더 쉽게 수정할 수 있습니다. (I0245a)
  • LayoutCoordinate에 더 이상 위치 속성이 없습니다. 위치 속성은 LayoutModifier, 회전 또는 크기 조정을 고려할 때 의미가 없습니다. 대신 개발자는 parentCoordinate 및 childToLocal()을 사용하여 LayoutCoordinate 간의 변환을 계산해야 합니다.
  • LayoutCoordinate는 크기 속성으로 PxSize가 아닌 IntPxSize를 사용합니다. Layout은 레이아웃에 정수 픽셀 크기를 사용하므로 모든 레이아웃 크기에 부동 소수점 값이 아닌 정수를 사용해야 합니다. (I9367b)
  • 표시되는 항목만 작성하고 배치하는 스크롤 목록 구성요소인 AdapterList를 추가했습니다. 현재 알려진 문제는 이 기능이 세로 모드에만 가능하고 하위 요소에서 발생하는 모든 변경 사례를 완전히 처리하지는 않는다는 점입니다. (Ib351b)
  • Compose 내부에 Android 뷰를 삽입하기 위한 초기 지원을 추가합니다. 자세한 내용은 ViewInCompose.kt 데모를 참조하세요. (I6d1ce)
  • 더 이상 사용 가능한 공간을 채우지 않도록 LayoutAlign을 업데이트했습니다. (I2b14f)
  • androidx.ui:ui-material-icons-coreandroidx.ui:ui-material-icons-extended 모듈을 추가했습니다. androidx.ui:ui-material-icons-extended를 이용하여 Compose 내에서 모든 머티리얼 아이콘(material.io/icons)을 직접 사용할 수 있습니다. 가장 일반적으로 사용되는 아이콘을 포함한 작은(현재는 3개이며 앞으로 확장 예정) 하위집합이 기본 ui-material 라이브러리의 일부로 직접 포함되므로, 개발자는 메뉴와 같은 아이콘을 사용하기 위해 이 큰 종속 항목을 추가할 필요가 없습니다. 자세한 내용 및 연결된 샘플을 보려면 androidx.ui.material.icons.Icons 문서를 참조하세요.
  • AspectRatio 컴포저블을 삭제하고 수정자로 대체했습니다. 더 이상 사용되지 않는 FlexColumn, FlexRow 컴포저블 및 Spacing 수정자를 삭제했습니다. (Iec8a7)
  • ButtonStyle을 고유 함수로 대체했으며 텍스트(문자열) 오버로드를 삭제했습니다. 사용법 정보는 업데이트된 버튼 샘플을 참조하세요. (If63ab, b/146478620, b/146482131)

버그 수정

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

알려진 문제

  • 구성요소의 의미론적 속성 변경으로 하위 요소의 모든 상태가 잘못 손실되어 애니메이션 및 재구성 시 상태 지속에 의존해야 하는 다른 항목에서 중단이 발생합니다. 현재는 람다를 비교할 수 없기 때문에 이 문제에는 스크롤러와 같이 비 remember 람다를 사용하는 의미론적 작업을 정의하는 모든 구성요소가 포함됩니다. 이 문제는 다음 버전에서 수정될 예정입니다. (b/148606417)

버전 0.1.0-dev04

2020년 1월 29일

androidx.ui:ui-*:0.1.0-dev04가 출시되었습니다. 이 버전에 포함된 커밋은 여기에서 확인할 수 있습니다.

API 변경사항

  • 포인터 ID를 범용적으로 고유하게 만듭니다. (I42cde)
  • 시맨틱 노드 병합 (aosp/1138236)
  • 제약 조건의 API 노출 영역 개선 (I0fd15)
  • PathParserPathNode/PathCommand를 리팩터링했습니다. (I715ae)
  • DpConstraints의 API 노출 영역 업데이트 (I712a0)
  • 여러 인터페이스를 구현하는 수정자에 대한 지원을 추가했습니다. (I22c16)
  • 동작 감지기의 나머지 부분 취소를 구현했습니다. (I349f4)
  • 색상에 Color.compositeOver()를 추가했습니다. (I5379d)
  • androidx.ui:ui-core의 불필요한 클래스 ImageByteFormat, ImageRepeat, Matrix2를 삭제합니다. (I45e6b)
  • Compose 프로젝트에서 증분 Kotlin 컴파일을 사용 설정했습니다. (b/144304390)
  • +로 수정자를 연결합니다. (Ic33d3)
  • LayoutTag 수정자를 추가했습니다. (I69fe4)
  • TextStyle에 ParagraphStyle 속성을 추가합니다. (If0d40)
  • 수정된 레이아웃의 노출 영역에 그릴 수 있는 수정자 유형인 DrawModifier를 추가했습니다. (I5fa56)
  • 수정자 저장소 위치를 상대적으로 변경합니다. (I5977f)
  • 요소에 스와이프를 수행하기 위한 테스트 API를 추가했습니다. (I9125a)
  • 레이아웃과 그리기 공통 기능을 결합하기 위한 Box 구성요소를 추가했습니다. (I6e2a7)
  • 이제 스크롤러가 네이티브 Android 플링 모션 동작을 표시합니다. (b/147493715)
  • DrawBorder를 테두리 수정자로 대체했습니다. (Id335a)
  • 스크롤러 동작 감지가 향상되었습니다. (I87d36)
  • 파운데이션에 contentColor 메타데이터를 추가합니다. (Icd074)
  • Scaffold 머티리얼 구성요소가 추가되었습니다. Scaffold는 기본 머티리얼 디자인의 시각적 레이아웃 구조를 구현합니다. (I7731b)
  • 버튼에 새 노출 영역의 매개변수 contentColor를 사용합니다. (b/146210556)
  • textStyle.withOpacity()를 삭제했습니다. (I8cc9a)
  • 강조 하위 시스템을 추가합니다. (Ife95c)
  • 이제 FloatingActionButtonKt FAB 속성이 비공개로 설정됩니다. (I9c121)
  • 스낵바의 첫 번째 반복을 구현했습니다. (If1c08)
  • 어두운 테마를 위한 초기 지원을 추가했습니다. (I6323a)
  • GestureScope에 size, center 및 localToGlobal을 추가했습니다. (I1ea37)
  • 더블클릭 동작을 삽입하기 위한 API를 추가했습니다. (I44902)
  • GestureScopesendLongClick methods를 추가했습니다. (Ic7db9)
  • 동작 삽입에서 (x, y)를 PxPosition으로 변환합니다. (Ifefa4)
  • 삽입된 동작에 원하는 속도를 추가했습니다. (I3b9df)
  • Compose 테스트 API(androidx.ui:ui-test)에 비트맵 캡처를 추가했습니다. (I4e36c)
  • doClickGestureScope로 이동했습니다. (I56211)
  • findBySubstring 및 상응하는 필터를 FindersKt에 추가했습니다. (Ief0b9)
  • 텍스트 선택 경계를 1 Char로 리팩터링했습니다. (Iff757)
  • TextSpan을 삭제했습니다. (Iebece)
  • 구성 클래스를 삭제하고 컴포저 기본 클래스로 대체합니다. (Ieadbf)
  • Dp를 사용하도록 벡터 defaultWidth/defaultHeight를 변경했습니다. (Iad267)
  • 인라인 구성 가능한 호출을 중심으로 그룹을 올바르게 생성합니다. (Ibf739)
  • 동작 감지기에서 플래그 프로토타입 생성을 사용 설정했습니다. (I4b7b0)
  • maxLines 및 ellipsis 인수를 null이 허용되는 값에서 null이 아닌 값으로 변경합니다. (I46dac)
  • 이제 AnnotatedString에서 SpanStyle을 사용합니다. (Ib6d3e)
  • WithConstraints의 수정자 지원을 추가했습니다. (b/145399789)
  • 단락 스타일을 TextDelegate에 전달합니다. (Id2d4a)
  • SpanStyle 클래스를 추가했습니다. (Ifdb4f)
  • TextGeometricTransform에서 null이 허용되는 부동 소수점 수 대신 기본값을 사용합니다. (I1bf00)
  • androidx.ui:ui-toolingPreviewActivity를 추가했습니다. (Ic8988)
  • 이제 ModelObserver는 단일 스레드입니다. (b/146144712)
  • ModelObserver의 벤치마크를 추가했습니다. (Ia176b)
  • PointerInputNode가 트리에서 삭제될 때 취소 콜백을 호출합니다. (I7112a)
  • 행 및 열의 LayoutInflexible 수정자를 삭제했습니다. (I0d820)
  • ParentDataModifier에서 레이아웃 수정자를 상속합니다. (I49b6a)
  • 래핑된 수정자를 추가했습니다. (I6f8df)
  • 정렬된 수정자를 추가했습니다. (Ifc581)
  • Compose에 제약 조건 레이아웃을 추가했습니다. (I175ad)

리팩터링

  • androidx.ui:ui-core에서 androidx.ui:ui-graphics로 그래픽을 이동했습니다. (Ic17b0)
  • Dp, IntPx 등의 모듈 및 패키지를 androidx.ui:ui-unitandroidx.ui:ui-util로 변경했습니다. (I45fe4)
  • 효과를 @Composable로 리팩터링했습니다. Ie2686)