UI
최근 업데이트 | 현재 안정화 버전 | 다음 버전 후보 | 베타 버전 | 알파 버전 |
---|---|---|---|---|
2020년 10월 1일 | - | - | - | 1.0.0-alpha04 |
구조
Compose는 androidx
내의 Maven 그룹 ID 7개의 조합입니다. 각 그룹에는 타겟팅된 일부 기능이 포함되고 각 기능에는 자체 출시 노트 세트가 있습니다.
다음 표에서는 각 출시 노트 세트에 관한 그룹과 링크를 설명합니다.
그룹 | 설명 |
---|---|
compose.animation | Jetpack Compose 애플리케이션에서 애니메이션을 빌드하여 사용자 환경에 풍부함을 더하세요. |
compose.compiler | Kotlin 컴파일러 플러그인으로 최적화를 사용 설정하고 @Composable 함수를 변환하세요. |
compose.foundation | 즉시 사용 가능한 기본 요소를 사용해 Jetpack Compose 애플리케이션을 작성하고 토대를 확장해 나만의 디자인 시스템을 구축하세요. |
compose.material | 즉시 사용 가능한 머티리얼 디자인 구성요소로 Jetpack Compose UI를 빌드하세요. 이는 Compose를 고급 수준에서 사용하는 첫 단계이며, www.material.io에 설명된 것과 동일한 구성요소를 제공합니다. |
compose.runtime | Compose의 프로그래밍 모델과 상태 관리용 기본 요소 및 타겟팅용 Compose 컴파일러 플러그인의 핵심 런타임입니다. |
compose.ui | 레이아웃, 그리기, 입력 등 기기와 상호작용할 때 필요한 Compose UI의 기본적인 구성요소입니다. |
ui | Jetpack Compose 라이브러리와 호환됩니다. |
종속 항목 선언
Compose UI의 종속 항목을 추가하려면 프로젝트에 Google Maven 저장소를 추가해야 합니다. 자세한 내용은 Google Maven 저장소를 읽어 보세요.
다음과 같이 앱 또는 모듈의 build.gradle
파일에 필요한 아티팩트의 종속 항목을 추가합니다.
dependencies { // New dependencies implementation "androidx.compose.ui:ui-tooling:1.0.0-alpha08" implementation "androidx.compose.ui:ui-test:1.0.0-alpha08" // Old dependencies implementation "androidx.ui:ui-tooling:1.0.0-alpha07" implementation "androidx.ui:ui-test:1.0.0-alpha07" } android { buildFeatures { compose true } composeOptions { kotlinCompilerVersion "1.4.0" kotlinCompilerExtensionVersion "1.0.0-alpha08" } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"] } }
종속 항목에 관한 자세한 내용은 빌드 종속 항목 추가를 참조하세요.
의견
제출하신 의견은 Jetpack을 개선하는 데 도움이 됩니다. 새로운 문제를 발견하거나 라이브러리 개선을 위한 아이디어가 있다면 Google에 알려 주세요. 새 문제를 만들기 전에 이 라이브러리의 기존 문제를 살펴보시기 바랍니다. 별표 버튼을 클릭하여 기존 문제에 투표할 수 있습니다.
자세한 내용은 Issue Tracker 문서를 참조하세요.
버전 1.0.0
버전 1.0.0-alpha04
2020년 10월 1일
androidx.ui:ui-test:1.0.0-alpha04
및 androidx.ui:ui-tooling:1.0.0-alpha04
가 출시되었습니다. 버전 1.0.0-alpha04에 포함된 커밋을 확인하세요.
API 변경사항
- 앱 유휴 상태를 기다리기 위해 ComposeTestRule에 정지 함수가 추가되었습니다. (I4242c, b/138226343, b/168227042)
- rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled, textInputServiceFactory에 @VisibleForTesting 주석을 달아 내부 API로 만들고 kdoc를 숨깁니다. (I554eb, b/168308412)
버그 수정
- 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)
- 문자열 입력이 있는 텍스트에서 inlineContent 매개변수를 삭제했습니다. inlineContent는 AnnotatedString과 함께 작동해야 하므로 사용되지 않습니다. (Ief403)
버전 1.0.0-alpha03
2020년 9월 16일
androidx.ui:ui-test:1.0.0-alpha03
및 androidx.ui:ui-tooling:1.0.0-alpha03
이 출시되었습니다. 버전 1.0.0-alpha03에 포함된 커밋을 확인하세요.
API 변경사항
- onNode 또는 waitForIdle과 같은 전역 테스트 함수는 이제 지원 중단되었습니다. ComposeTestRule에 정의된 새로운 함수로 이전하세요. (I7f45a)
createAndroidComposeRule
및AndroidInputDispatcher
가androidx.ui.test.android
에서androidx.ui.test
로 이동했습니다. (Idef08, b/164060572)- 현재 전역 메서드가 지원 중단될 예정이므로 onNode 및 다른 전역 메서드가 ComposeTestRule에 추가되었습니다. (Ieae36)
- 잘못된 스와이프 동작의 생성에 특히 발생하는 GestureScope의 크기 및 위치 계산을 수정했습니다. (Iaf358, b/166589947)
버그 수정
- 레이아웃 API에서 중력 사용에 관한 이름이 align 또는 alignment로 일관성 있게 바뀌었습니다. (I2421a, b/164077038)
- InnerPadding이 PaddingValues로 이름이 바뀌었습니다. (I195f1, b/167389171)
버전 1.0.0-alpha02
2020년 9월 2일
androidx.ui:ui-test:1.0.0-alpha02
및 androidx.ui:ui-tooling:1.0.0-alpha02
가 출시되었습니다. 버전 1.0.0-alpha02에 포함된 커밋을 확인하세요.
API 변경사항
- TestUiDispatcher가 실험용으로 표시됩니다. (Iae99d, b/161247083)
- 지속 시간이 이제 인라인 클래스입니다. (I565eb)
클록에서 프레임을 기다리는 것이 있는지 확인하기 위해
ManualFrameClock.hasAwaiters
가 추가되었습니다. ManualFrameClock이 필요한 테스트를 실행할 때runBlocking
이runWithManualClock
으로 대체됩니다.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") } }
버그 수정
구성 가능한 함수의 호출 규칙이 변경되었습니다. 바이너리 브레이킹 체인지입니다. 이 버전의 Compose 컴파일러 플러그인을 사용하려면 모든 라이브러리를 다시 컴파일해야 합니다.
이 변경사항은 소스 수준의 브레이킹 체인지를 만들지 않습니다. 명시적인 선택이 있는 컴파일러 API만 변경되었기 때문입니다. (I7afd2, b/158123185)
버전 1.0.0-alpha01
2020년 8월 26일
androidx.ui:ui-test:1.0.0-alpha01
및 androidx.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-dev17
및 androidx.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-dev16
및 androidx.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)
Row
및Column
은 이제 인라인 함수이며 이러한 함수를 사용하는 오버헤드가 상당히 감소합니다. (I75c10)
버전 0.1.0-dev15
2020년 7월 22일
androidx.ui:ui-test:0.1.0-dev15
및 androidx.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()
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
로 대체되었습니다.IntPxPosition
이IntOffset
으로 대체되었습니다.IntPxSize
가IntSize
로 대체되었습니다. (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)
GestureScope
및PartialGestureScope
에relativeOffset(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
라는 세 가지 새로운 메서드가 도입되었습니다.
movePointerTo
및 movePointerBy
메서드는 포인터의 현재 위치를 변경하지만 이를 반영하는 이벤트를 전송하지 않습니다. 따라서 동작의 현재 시간을 앞당기지 않습니다. 이렇게 하면 여러 포인터를 동시에 이동할 수 있습니다. 마지막 메서드 sendMove
는 매개변수를 허용하지 않고 단순히 이동 이벤트를 전송하여 모든 포인터 이동을 '플러시'할 수 있습니다. 포인터가 movePointerXx
로 업데이트되고 다운 또는 업 이벤트가 전송되면 이동 이벤트가 다운 또는 업 이벤트 직전에 전송됩니다.
모든 메서드의 타이밍도 약간 변경되었습니다. 현재 sendDown
과 sendUp
은 동작 시간을 더 이상 앞당기지 않으므로 여러 포인터를 동시에 위나 아래로 전송할 수 있습니다. 다른 모든 메서드는 동작 시간을 앞당깁니다. 현재 시간 델타는 아직 변경할 수 없습니다.
(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.TextFieldValue
및androidx.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)
DropdownMenuItem
에onClick
이 호출되지 않는 문제가 수정되었습니다. (I3998b, b/157673259)Locale
및LocaleList
의 패키지 이름이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-material
에DropdownMenu
구성요소가 추가되었습니다. (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)- 이제
isReversed
가ScrollerPosition
에 설정되어 있으면VerticalScroller
및HorizontalScroller
가 역 스크롤을 지원합니다. (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는 기본 인수를 구성 가능한 함수로도 변환합니다. 함수 자체의 추가 합성으로 인한 기본 오버로드 없이 기본 인수를 변환하므로 이러한 변경으로 인해 정의되는 함수의 수가 줄어듭니다.
이로 인해 알려진 의도된 동작 변경사항은 다음과 같습니다.
- 일부 호출이 이전에는 건너뛰지 않던 곳을 건너뜁니다.
- 이제 기본 인수 표현식의 구성 가능한 표현식이 올바르게 작성 및 처리됩니다.
이 작업에는 다음과 같은 최적화가 포함되어 있습니다.
- 매개변수 비교 결과는 호출 그래프를 통해 다른 구성 가능한 함수로 전파됩니다. 이렇게 하면 런타임 시 비교 작업이 적게 발생하고 슬롯 표 크기가 줄며 이전에는 건너뛰지 않던 구성 가능한 함수를 더 많이 건너뜁니다.
- 컴파일 시간에 '정적'으로 확인된 매개변수는 런타임 시 더 이상 비교되거나 저장되지 않습니다. 따라서 비교 횟수와 슬롯 표 크기가 줄어듭니다.
- 함수 본문의 제어 흐름 구조는 생성되는 그룹 수를 최소화하는 데 사용되므로 슬롯 표 크기가 줄고 런타임 동안 작업도 줄어듭니다.
- 함수의 사용되지 않은 전달 및 수신자 매개변수는 함수의 본문 안에서 사용되지 않으면 함수의 건너뛰기 가능성을 판단하는 데 포함되지 않습니다.
대부분의 브레이킹 체인지는 다음과 같이 컴파일러가 직접 타겟팅하는 API로 인해 발생하며 Compose의 일반적인 사용에는 영향을 미치지 않습니다.
Composer::startExpr
가 삭제되었습니다.Composer::endExpr
가 삭제되었습니다.Composer::call
이 지원 중단되었습니다.key
의 non-varargs 오버로드가 삭제되었습니다. 앞으로는vararg
버전을 사용하세요.- Pivotal 주석이 지원 중단되었습니다. 대신
key
를 사용하세요. - ScopeUpdateScope::updateScope가 함수 1이 아닌 함수 3을 예상하도록 변경되었습니다.
- restartableFunction 및 restartableFunctionN이 추가 컴파일 시간 매개변수를 포함하도록 업데이트되었습니다.
@Model
주석 지원 중단
이제
@Model
주석이 지원 중단됩니다. 대신state
및mutableStateOf
를 사용하세요. 이번 지원 중단은 여러 신중한 논의 끝에 결정되었습니다.근거
근거에는 다음이 포함되지만 이에 국한되지는 않습니다.
- 교육이 필요한 API 노출 영역 및 개념이 감소합니다.
- 다른 유사한 툴킷(Swift UI, React, Flutter)과 더욱 원활하게 호환됩니다.
- 되돌릴 수 있는 결정입니다. 나중에 언제든지
@Model
을 가져올 수 있습니다. - @Model을 처리해야 할 작업으로 구성하는 데 있어서 발생하는 특수한 사용 및 답변하기 어려운 질문을 삭제합니다.
@Model
데이터 클래스, 등호, 해시코드 등- 일부 속성은 '관찰'되고 나머지는 관찰되지 않게 하려면 어떻게 해야 하나요?
- 관찰에서 사용할 구조 동등성과 참조 동등성을 각각 지정하려면 어떻게 해야 하나요?
- 시스템의 '마법'을 줄입니다. 즉, 시스템이 실제보다 더 유용하다고(즉, 목록을 식별하는 방법을 알고 있다고) 가정할 가능성을 줄입니다.
- 관찰의 세부사항을 더 직관적으로 파악할 수 있습니다.
- 클래스의 변수에서 속성으로의 리팩터링 가능성을 개선합니다.
- State별로 직접 최적화할 가능성이 잠재적으로 생깁니다.
- 나머지 생태계와 더 원활하게 호환되고 불변 또는 '변경 가능한 상태를 허용'하는 데 모호성을 줄입니다.
이전 참고사항
@Model
의 거의 모든 기존 사용법은 두 가지 방법 중 하나로 상당히 쉽게 변환됩니다. 아래 예에서는 속성이 두 개인@Model
클래스가 호환 가능하게 사용됨을 보여줍니다.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
대안 1:
State<OriginalClass>
사용 및 사본 생성이 접근 방식은 Kotlin의 데이터 클래스를 사용하면 더 쉽습니다. 기본적으로 모든 이전
var
속성을 데이터 클래스의val
속성으로 만들고remember
대신state
를 사용한 다음 데이터 클래스copy(...)
편의 메서드를 사용하여 상태 값을 원본을 복제한 사본에 할당합니다.데이터 클래스의 유일한 변형이
State
인스턴스가 만들어진 동일한 범위에서 실행된 경우에만 이 접근 방식이 효과가 있다는 데 유의해야 합니다. 데이터 클래스가 내부적으로 자신을 변형하여 사용 범위 밖에서 사용되고 있으며 이를 관찰하는 데 의존하고 있다면 접근 방식을 사용하는 것이 좋습니다.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
대안 2:
mutableStateOf
및 속성 위임 사용이 접근 방식은 Kotlin의 속성 위임과 개발자가 MutableState 인스턴스를 구성 밖에서 만들도록 허용하는
mutableStateOf
API를 사용하면 더 쉽습니다. 기본적으로 원래 클래스의 모든var
속성을 속성 위임으로mutableStateOf
가 있는var
속성으로 교체합니다. 이렇게 하면 클래스 사용법이 전혀 변경되지 않고 클래스의 내부 구현만 변경되는 이점이 있습니다. 그러나 각 속성이 이제 개별적으로 관찰/작성되므로 동작은 원래 예와 완전히 동일하지는 않습니다. 따라서 리팩터링 후에 확인하는 재구성 범위가 더 좁아질 수 있는데 이는 좋은 현상입니다.class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
버그 수정
- 버그 수정됨: 글꼴 두께와 글꼴 스타일이 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) - 이제
HorizontalScroller
및VerticalScroller
가 저장된 인스턴스 상태를 사용하여 스크롤 위치를 복원합니다. (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-framework
및ui-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) - 이제
Layout
및LayoutModifier2
의 내장 측정 함수에IntrinsicMeasureScope
수신기가 있습니다. 이 수신기는 내장 기능 쿼리 API에 암시적으로 전파된 레이아웃 방향을 제공합니다. (Id9945) Layout
및LayoutModifier
하위 요소는 다른 레이아웃 방향으로 측정할 수 있습니다. (Ibd731)- 새
Modifier.zIndex()
가 추가되어 동일한 상위 요소 레이아웃 내에서 하위 요소의 그리기 순서를 제어합니다.DrawLayerModifier
의 고도 속성의 이름이shadowElevation
으로 바뀌고 더 이상 그리기 순서를 제어하지 않습니다.DrawShadow
의 매개변수 순서가 변경되었습니다. 이제 첫 번째 매개변수는elevation
이고 두 번째 매개변수는shape
이며 기본값은RectangleShape
입니다. (I20150, b/152417501) Owner
에서onSizeChange
및onPositionChange
를 삭제했습니다. (I5c718)IntPx
대신Int
제약 조건 값만 지원하는Constraints
의 복사본인Constraints2
를 추가했습니다.IntPx
는 삭제되고 모든 정수 제약 조건은 Android와 같은 픽셀로 간주됩니다.IntSize
도 추가했습니다. 최종적으로IntPxSize
를 대체할 예정입니다. (I4b43a)
InteractionState
및Interaction
을 추가했습니다. 따라서 UI 상태 변경(예: 누르기, 드래그)에 반응하는 구성요소를 더 쉽게 빌드할 수 있습니다. (Icfe25, b/152525426)RectangleShape
가androidx.ui.foundation.shape.*
에서androidx.ui.graphics.*
로 이동되었습니다. (Ia74d5, b/154507984)TextField
API 업데이트 -onFocus
및onBlur
콜백이 부울 매개변수가 있는 단일onFocusChange(Boolean)
콜백으로 병합되었습니다. (I66cd3)FontLoader
를 삭제했습니다. 대신fontResource
를 사용합니다. (Id0308)- 사용하지 않는
MaskFilter
API를 삭제했습니다. 사용이 제한되고 대부분의 사용 사례에서 하드웨어 가속에 최적화되어 있지 않기 때문입니다. (I54f76) - 색상 상자 없는 설정되지 않은 값을 나타내기 위해 설정되지 않은
Color
를 추가했습니다. (If901a) - 변환을 위한 선택적 피벗 좌표를 사용하는
Canvas.rotate
및Canvas.scale
확장 메서드를 추가했습니다. 현재 캔버스 변환의 왼쪽 상단으로 기본 설정됩니다.- 또한 일관성을 위한 확장 메서드로
Canvas.rotateRad
를 이동했습니다. (Ibaca6)
- 또한 일관성을 위한 확장 메서드로
- FAB 및 확장 FAB의 기본 색상을
MaterialTheme.colors.secondary
로 변경했습니다. (I3b9b9, b/154118816) ComposeTestRule.setContent {}
이후onIdle()
을 더 이상 명시적으로 호출할 필요가 없습니다. (Iafb2e, b/154079800)- 이제 맞춤
ActivityTestRule
을AndroidComposeTestRule
에 전달할 수 있습니다. (I38206, b/153623653) TextLayoutResult
에getLineStart
,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 a
Measuredinstead of
Placeable`.(I5788d)- (I45f09, b/152842521)
ScaleFit
의 이름이ContentScale
로 변경되었습니다.- Alignment API와 동일한 모듈에 위치하도록
ContentScale
을ui-graphics
에서ui-core
모듈로 이동했습니다. FillMaxDimension
의 이름이Crop
으로 변경되었습니다.FillMinDimension
의 이름이Fit
으로 변경되었습니다.ImageView.ScaleType
에 상응하는 항목에 더 일치하도록Fit
의 이름이Inside
로 변경되었습니다.Crop
과Alignment.Center
의 조합이ImageView.ScaleType.CENTER_CROP
과 동일한 결과를 얻으며Fit
을Alignment.Center
와 함께 사용하면ImageView.ScaleType.FIT_CENTER
와 동일한 결과를 얻는다는 점을 나타내는 문서를 추가했습니다.Inside
를Alignment.Center
와 함께 사용하면ImageView.ScaleType.CENTER_INSIDE
와 동일한 결과를 얻습니다.
- 그리기 수정자에 RTL 지원을 추가합니다. (I0aaf9)
- XML에서 Android 뷰를 확장하는 API를 출시했습니다. 자세한 내용은 ViewInCompose 데모를 참조하세요. (I42916)
LayoutCoordinates
용으로positionInParent
및boundsInParent
를 추가했습니다. (Icacdd, b/152735784)- 이제
DrawLayerModifier
및drawLayer()
가clipToBounds
및clipToOutline
을false
로 기본 설정합니다. (I0eb8b, b/152810850) LayoutResult
의 이름이MeasureResult
로 변경되었습니다. (Id8c68)- 레이아웃 수정자를 정의하는 새 API인
LayoutModifier2
를 추가했으며,LayoutModifier
를 지원 중단했습니다. (If32ac) ProvideContentColor
를 삭제합니다. 대신ContentColorAmbient
를Providers
에 직접 사용하면 됩니다. (Iee942)- 텍스트에 색상 매개변수를 추가하여 테마에 제공된 스타일과 수동으로 병합하지 않고도 텍스트 스타일의 색상을 재정의할 수 있습니다. (I41a66)
- 도형 테마 설정 시스템이 머티리얼 디자인 사양에 따라 업데이트됩니다. 이제 대부분의 구성요소에 사용되는 소형, 중형, 대형 도형을 제공할 수 있습니다. (Ifb4d1)
LayoutDirectionAmbient
가 지원 중단되었습니다. 언어로 정의된 레이아웃 방향을 읽으려면ConfigurationAmbient
에localeLayoutDirection
을 사용합니다. (I851b1)- 새
LifecycleOwnerAmbient
를 사용할 수 있습니다. 이제 Compose UI와 함께 사용 중인 활동이androidx.activity.ComponentActivity
(또는AppCompatActivity
)를 확장해야 합니다.android.app.Activity
의setContent
가 이제 지원 중단되었습니다. (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)
- 지원 중단된
Wrap
및Center
컴포저블을 삭제했습니다. (I29e23) - 슬라이더가 이제 상태를 추적하지 않습니다. 사용자는 다른 컨트롤의 경우처럼 직접 상태를 전달하고 업데이트해야 합니다. (Ia00aa)
StaticDrawer
가 삭제되었습니다. 필요한 경우 대신Box
를 머티리얼 사양의 너비로 하여 사용합니다. (I244a7)- ListItem에 수정자 매개변수를 추가하고 매개변수를 재정렬하여 후행 람다 본문의 순위를 올렸습니다. (I66e21)
Typography
에defaultFontFamily
생성자 매개변수를 추가했습니다. 이제 글꼴 모음이 설정되지 않은 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()
버그 수정
verticalGravity
및horizontalGravity
매개변수를 각각Row
와Column
에 추가했습니다. (I7dc5a)ui-text module was renamed as
ui-text-core` (I57dec)- 개선된
DrawModifier
API((Ibaced, b/152919067)):- 수신기 범위를
draw()
ContentDrawScope
로 설정했습니다. draw()
의 모든 매개변수가 삭제되었습니다.DrawScope
의 인터페이스가 이전CanvasScope
와 동일합니다.ContentDrawScope
가drawContent()
메서드를 갖습니다.
- 수신기 범위를
runOnIdleCompose
및runOnUiThread
는 이제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-text
에CoreText
및CoreTextField
컴포저블이 포함됩니다. (Ib7d47)ui-framework/CoreText
,CoreTextField
컴포저블을ui-text-compose
아래로 이동했습니다. 프로젝트에ui-text-compose
를 포함해야 하는 경우도 있습니다. (I32042)- 임의의
Alignment
가 아닌 세로 또는 가로Alignment
를 예상하도록wrapContentWidth
및wrapContentHeight
를 업데이트했습니다. 세로 또는 가로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)
Text
를androidx.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)- 이제
Row
및Column
외부에서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.ViewComposer
를androidx.ui.node.UiComposer
로 이동하고androidx.compose.Compose.subcomposeInto
를androidx.ui.core.subcomposeInto
로 이동했습니다. (Idef00)- 하위 요소의 vararg를 허용하는 레이아웃 컴포저블 함수를 삭제했습니다. (I8f7f6)
WithConstraints
에LayoutDirection
매개변수를 사용했습니다. (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)
text
및icon
람다를 허용하도록 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-core
및androidx.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)
PathParser
및PathNode
/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)
GestureScope
에sendLongClick methods
를 추가했습니다. (Ic7db9)- 동작 삽입에서 (x, y)를
PxPosition
으로 변환합니다. (Ifefa4) - 삽입된 동작에 원하는 속도를 추가했습니다. (I3b9df)
- Compose 테스트 API(
androidx.ui:ui-test
)에 비트맵 캡처를 추가했습니다. (I4e36c) doClick
을GestureScope
로 이동했습니다. (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-tooling
에PreviewActivity
를 추가했습니다. (Ic8988)- 이제
ModelObserver
는 단일 스레드입니다. (b/146144712) - ModelObserver의 벤치마크를 추가했습니다. (Ia176b)
- PointerInputNode가 트리에서 삭제될 때 취소 콜백을 호출합니다. (I7112a)
- 행 및 열의 LayoutInflexible 수정자를 삭제했습니다. (I0d820)
ParentDataModifier
에서 레이아웃 수정자를 상속합니다. (I49b6a)- 래핑된 수정자를 추가했습니다. (I6f8df)
- 정렬된 수정자를 추가했습니다. (Ifc581)
- Compose에 제약 조건 레이아웃을 추가했습니다. (I175ad)
리팩터링