Interfejs tworzenia
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(Zobacz dokumentację interfejsu API wszystkich pakietów Compose)
Najnowsza aktualizacja | Wersja stabilna | Wersja kandydująca do publikacji | Wersja Beta | Wersja alfa |
---|---|---|---|---|
2 lipca 2025 r. | 1.8.3 | - | 1.9.0-beta02 | - |
Struktura
Compose to połączenie 7 identyfikatorów grupy Maven w androidx
. Każda grupa zawiera ukierunkowany podzbiór funkcji, a każda z nich ma własny zestaw informacji o wersji.
W tej tabeli znajdziesz wyjaśnienie grup i linki do poszczególnych zestawów informacji o wersji.
Grupa | Opis |
---|---|
compose.animation | tworzyć animacje w aplikacjach Jetpack Compose, aby zwiększać komfort użytkowników; |
compose.compiler | Przekształcanie funkcji z adnotacją @Composable i włączanie optymalizacji za pomocą wtyczki kompilatora Kotlin. |
compose.foundation | Twórz aplikacje w Jetpack Compose za pomocą gotowych elementów składowych i rozszerzaj podstawy, aby tworzyć własne elementy systemu projektowania. |
compose.material | Twórz interfejsy Jetpack Compose za pomocą gotowych komponentów Material Design. Jest to punkt wejścia wyższego poziomu w Compose, który ma udostępniać komponenty zgodne z tymi opisanymi na stronie www.material.io. |
compose.material3 | Twórz interfejsy Jetpack Compose za pomocą komponentów Material Design 3, czyli kolejnej ewolucji Material Design. Material 3 zawiera zaktualizowane motywy i komponenty oraz funkcje personalizacji Material You, takie jak dynamiczny kolor. Jest on spójny z nowym stylem wizualnym Androida 12 i interfejsem systemu. |
compose.runtime | Podstawowe elementy modelu programowania i zarządzania stanem w Compose oraz podstawowe środowisko wykonawcze, do którego kierowany jest wtyczka kompilatora Compose. |
compose.ui | Podstawowe komponenty interfejsu Compose potrzebne do interakcji z urządzeniem, w tym układ, rysowanie i dane wejściowe. |
Deklarowanie zależności
Aby dodać zależność od Compose, musisz dodać do projektu repozytorium Google Maven. Więcej informacji znajdziesz w repozytorium Maven Google.
Dodaj zależności dotyczące potrzebnych artefaktów w pliku build.gradle
aplikacji lub modułu:
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.8.3" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.8.3") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Więcej informacji o zależnościach znajdziesz w artykule Dodawanie zależności kompilacji.
Opinia
Twoja opinia pomoże nam ulepszyć Jetpacka. Jeśli odkryjesz nowe problemy lub masz pomysły na ulepszenie tej biblioteki, daj nam znać. Zanim utworzysz nową kartę, zapoznaj się z dotychczasowymi problemami w tej bibliotece. Możesz dodać swój głos do istniejącego problemu, klikając przycisk gwiazdki.
Więcej informacji znajdziesz w dokumentacji narzędzia Issue Tracker.
Wersja 1.9
Wersja 1.9.0-beta02
2 lipca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-beta02
Wersja 1.9.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Zmienia obiekt towarzyszący na eksperymentalny, aby pasował do klasy. (I8452a)
- Usunięto flagę eksperymentalną
isTrackFocusEnabled
(I003fd)
Poprawki błędów
- Jeśli
WindowInsets
nie narusza treściComposeView
, wartościWindowInsetsRulers
nie są podawane. (I71221)
Wersja 1.9.0-beta01
18 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-beta01
Wersja 1.9.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniono
ShadowContext
na interfejs zamknięty (I3ce40) - Dodaje sposób tworzenia zdarzenia dotyku pośredniego w różnych modułach (na potrzeby testowania) (I22e4c).
- Ustawia
IndirectTouchEvent.nativeEvent
eksperymentalne. (I6fda5) - Wprowadza zmiany w interfejsie API na podstawie opinii rady ds. API. (Ibf378)
- Usuń stałą
FrameRateCategory.NoPreference
. Zmień nazwęModifier.requestedFrameRate
naModifier.preferredFrameRate
. (I2f976) WindowInsetsRulers
: zmieniono wartośćrulersIgnoringVisibility
na maksymalną. Zmieniono funkcjęgetDisplayCutoutBounds()
na funkcję rozszerzeniaPlacementScope
. WartośćWindowInsetsAnimationProperties
została zmieniona naWindowInsetsAnimation
, a wartośćgetAnimationProperties()
została zmieniona nagetAnimation()
. (I3816f)- Zmieniono klasę
ShadowParams
naShadow
(I11cca) - Zmiana pakietu interfejsu API liczby klatek z
androidx.compose.ui.ui
naandroidx.compose.ui
(I8994e) - Zmieniono
InsetsRulers
, aby był w kodzie wspólnym z nazwąWindowInsetsRulers
. Uprościliśmy interfejs API, aby wszystkie wstawki miały wartośćWindowInsetsRulers
. Wyodrębniono właściwości animacji inne niż linijki do klasyAnimationProperties
. Za pomocą funkcjiWindowInsetsRulers.innermostOf()
można łączyć wiele elementówWindowInsetsRulers
. (I2f0c6, b/415012444) - Dodaliśmy interfejs API narzędzi do analizowania informacji o źródle dodanych przez kompilator Compose. (Iceaf9, b/408492167)
Poprawki błędów
- Flaga dla
isGetFocusedRectReturnEmptyEnabled
została usunięta, ponieważ funkcja została w pełni zweryfikowana. (Ife722) - Naprawiono błąd w
performScrollToNode
, który w niektórych przypadkach nie docierał do węzła docelowego. Po wprowadzeniu tej poprawki w takich przypadkach zawsze powinien docierać do węzła docelowego. Skutkiem ubocznym tej zmiany jest to, że dokładna pozycja przewijania na końcu działania może być teraz inna, co wpływa na testy zrzutów ekranu i testy, które zakładają dokładną pozycję przewijania. (I2c8a1)
Wersja 1.9.0-alpha04
4 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-alpha04
Wersja 1.9.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejsy API modyfikatorów do dostosowywania cieni. (I2058d, b/160665122)
- Dodaj właściwość
SemanticsModifierNode.isImportantForBounds
, która określa, czy węzeł ma być uwzględniany podczas obliczania granic. Domyślnie właściwość ma wartość „prawda”. Można ją ustawić na „fałsz”, aby wskazać, że węzeł nie powinien być brany pod uwagę przy określaniu granic. (I7ebec) - Dodaj funkcję fabryczną
SemanticsPropertyKey
do deklarowania właściwości semantycznych specyficznych dla Androida, które są udostępniane jako dodatki ułatwień dostępu za pomocąAccessibilityNodeInfo.getExtras
. (I2ed51) - Usunięto użycie funkcji
ComposeUiFlags.isRemoveFocusedViewFixEnabled
i wycofano flagę. (I50328) - Wprowadzamy nowe konfigurowalne ramy cieni. Obejmuje to
DropShadowPainter
iInnerShadowPainter
, a także zależnościDropShadow/InnerShadow
. Infrastruktura cieni jest udostępniana w taki sposób, że te same wygenerowane cienie mogą być udostępniane w wielu centrach obsługi połączeń bez konieczności ponownego generowania ich n razy. (I24f7a, b/160665122) - Wprowadzamy funkcje
CompositeShader
iCompositeShaderBrush
, które tworzą złożony wynik z 2 cieni. Dodaj teżShaderBrush#transform
, aby ustawić macierz przekształcenia dla shadera. (I2621a, b/160665122)
Poprawki błędów
- Naprawiliśmy błąd w
NestedScrollInteropConnection
, który powodował, że metody przesuwania były w nieprawidłowej kolejności w stosunku do widoków. (I56ad4) - Wcześniej okna, które zajmowały cały ekran, nie były wyświetlane w obszarze wycięcia na wyświetlaczu. Ten błąd został naprawiony, dzięki czemu okna z
decorFitsSystemWindows = false
iusePlatformDefaultWidth = false
mogą zajmować obszar wycięcia w ekranie. (I9e975) - Usunęliśmy błąd, który powodował, że po włączeniu zielony wskaźnik ostrości
TalkBack
nie był rysowany, gdy aplikacja do pisania była w tle. (Ifd12a)
Wersja 1.9.0-alpha03
20 maja 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-alpha03
Wersja 1.9.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Flaga
ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled
powoduje, że jeśli wComposeView
nie ma elementów, na których można ustawić fokus, prostokąt przyjmuje wartość Empty. Zapobiega to wybraniu przez wyszukiwanie fokusu widoku, na którym ma się skupić. Jest to szczególnie ważne, gdy edytor IME ma opcję DALEJ, w przypadku której może próbować skupić się na błędachComposeView
irequestFocus()
. (Ibd0e2, b/369256395) - Wprowadź flagę
isNestedScrollDispatcherNodeFixEnabled
. (I0d24a) - Zmień nazwę
DialogProperties
'dialogContentTitle
nawindowTitle
(Ibd27b) - Wprowadzono modyfikatory
Modifier.onFirstVisible
iModifier.onVisibilityChanged
, które są modyfikatorami wysokiego poziomu opartymi na modyfikatorzeModifier.onLayoutRectChanged
. Te modyfikatory zostały opracowane specjalnie z myślą o obsłudze wielu typowych wymagań aplikacji, takich jak rejestrowanie wyświetleń czy automatyczne odtwarzanie filmów. Zostały one zaprojektowane z uwzględnieniem wydajności, dzięki czemu można ich używać w krytycznych scenariuszach opartych na listach bez ryzyka pogorszenia wydajności przewijania. Oprócz tych interfejsów API modyfikatorów dodaliśmy dodatkowe interfejsy API, aby obsługiwać te przypadki użycia i ułatwić programistom tworzenie podobnych modyfikatorów niestandardowych, które dokładnie odpowiadają ich potrzebom.RelativeLayoutBounds
(I759b8) - Zmień
setDiagnosticStackTraceEnabled
na eksperymentalne, aby uwzględnić przyszły rozwój tej funkcji. (I11db3) - Wprowadź interfejsy API
Modifier.scrollable2D
,Scrollable2DState
i towarzyszące im interfejsy API do tworzenia stanu. Wprowadziliśmy też wspólne funkcje rozszerzenia przewijania. (Ic61c8, b/214410040) - Wartości kolorów w przestrzeni Compose 64-bitowej nie są bezpośrednio porównywalne z wartościami w przestrzeni Android
ColorLongs
, ponieważ identyfikatory przestrzeni kolorów są w przypadku niektórych przestrzeni kolorów nieuporządkowane. Aby konwertować przestrzenie kolorów Androida, dodaliśmy 2 nowe interfejsy API:toColorLong()
ifromColorLong()
. (I36899) - Wprowadzono
ViewConfiguration.minimumFlingVelocity
, aby umożliwić kontrolę dolnej granicy prędkości przesunięcia. (I11aab)
Wersja 1.9.0-alpha02
7 maja 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-alpha02
Wersja 1.9.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj
dialogContentTitle
doDialogProperties
, co ustawia tytuł okna treści. bf9d670
Poprawki błędów
- Linijki wstawień okien zostały tymczasowo wyłączone na czas naprawy testów wewnętrznych. 8d1402
- Poprawiono sposób dodawania zmian danych wejściowych wskaźnika do elementu
VelocityTracker
wDragGestureNode
. Można to kontrolować za pomocą nowej flagiisAdjustPointerInputChangeOffsetForVelocityTrackerEnabled
.254ddb
Wersja 1.9.0-alpha01
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.9.0-alpha01
Wersja 1.9.0-alpha01 zawiera te zmiany.
Zmiany w zachowaniu
- Sprawdzanie Lint dostarczane z Compose wymaga teraz minimalnej wersji AGP 8.8.2. Jeśli nie możesz uaktualnić AGP, możesz zamiast tego uaktualnić Lint, używając w pliku
gradle.properties
wersjiandroid.experimental.lint.version=8.8.2
(lub nowszej). Aby uruchamiać sprawdzanie kodu za pomocą narzędzia Lint w IDE, musisz mieć Androida Studio Ladybug lub nowszego.
Zmiany w interfejsie API
- Usuwa flagę, aby włączyć instrukcje śledzenia w narzędziu do śledzenia ścieżki wizyty (debugowanie). (I1b2a1)
- Zmieniono
InnerRectRulers
iOuterRectRules
na metody. Usunięto parametr name z publicznego interfejsu APIRectRulers
.DerivedRulers
jest teraz opcją konstruktora linijek pionowych i poziomych.MergedHorizontalRulers
iMergedVerticalRulers
zostały zastąpione metodamiminOf
imaxOf
do generowania instancji. (Iee89f, b/408192133) - Wycofaj
androidx.compose.ui.LocalSavedStateRegistryOwner
na rzeczandroidx.savedstate.compose.LocalSavedStateRegistryOwner
. (I5439f, b/377946781) - Dodaj
Modifier.keepScreenOn
, aby ustawić wyświetlacz tak, aby nie przechodził w stan uśpienia, gdy jest obecny (Ib5af4, b/408284174). - Dodaj nową właściwość semantyczną
Shape
, którą można ustawić, gdy kształt elementu interfejsu różni się od jego prostokąta ograniczającego, np. prostokąta z zaokrąglonymi rogami. (I1376f) - Rozwiązanie problemu z wysyłaniem zdarzeń wskaźnika w szablonie
AndroidViews
i dodanie flagiisPointerInteropFilterDispatchingFixEnabled
w celu ochrony zmian. (I0e272, b/372055500, b/408002332) FocusRestorer
nie przypina już poprzednio zaznaczonego elementu. Użytkownicy powinni używać klucza, aby mieć pewność, że poprzednio zaznaczony element ma ten sam hash kompozycji, dzięki czemu fokus zostanie przywrócony. (I4203b, b/330696779)- Zezwól na wywoływanie
ViewTreeObserver.OnScrollChanged
przez funkcję Twórz. Ta funkcja jest wprowadzana pod flagąisOnScrollChangedCallbackEnabled
. Wprowadziliśmy też funkcję rozszerzenia właściwościDelegatableNode dispatchOnScrollChanged
. (I34b9d, b/238109286) currentCompositeKeyHash
zostało wycofane. Zamiast niej używaj zasadycurrentCompositeKeyHashCode
. Zastępczy interfejs API koduje ten sam ciąg za pomocą większej liczby bitów, co wykładniczo zmniejsza prawdopodobieństwo, że 2 losowe, niezwiązane ze sobą grupy w hierarchii kompozycji będą miały ten sam klucz ciągu. (I4cb6a, b/177562901)- Projekty wydane w Kotlinie 2.0 wymagają do użycia KGP w wersji 2.0.0 lub nowszej (Idb6b5).
- Dodano obsługę sprawdzania kodu w narzędziu lint dla elementu
FocusRequester
, aby mieć pewność, że jest on zapamiętany w kompozycji (I6bf91). - Dodaliśmy możliwość ustawienia preferowanej liczby klatek na sekundę lub kategorii liczby klatek na sekundę, w której ma być renderowany element Composable (Ie5201).
- Udostępnianie natywnych
MotionEvent
na Androidzie. (I17286) - Dodaj
getChecked() + setChecked(int)
, wycofajisChecked + setChecked(boolean)
(Iaac9d) - Modyfikator
graphicsLayer
akceptuje terazblendMode
icolorFilter
(Iab0e6). - Dodano
LocalResources
kompozycję lokalną do zapytania o zasoby. Wywołanie funkcjiLocalResources.current
spowoduje ponowne skomponowanie, gdy zmieni się konfiguracja, więc wywołania interfejsów API, takich jakstringResource()
, zwrócą zaktualizowane wartości. (I50c13, b/274786917) - Udostępnianie eksperymentalnego interfejsu API dla funkcji kompozycyjnych do obsługi pośrednich zdarzeń dotykowych (Icff57)
- Ta wersja ulepsza raportowanie nieobsłużonych wyjątków zgłaszanych podczas faz układu i rysowania treści kompozycyjnych. Wcześniej nieobsłużony wyjątek w tym miejscu powodował awarię narzędzia do uruchamiania testów i przedwczesne zakończenie pakietu testów. Te wyjątki można teraz zgłaszać w bardziej elegancki sposób, bez przerywania zestawu testów. (I9928b, b/314128080)
- Wycofaliśmy eksperymentalny interfejs API
GlobalAssertions
. Miała ona służyć do przeprowadzania testów dostępności. Zamiast niej używajenableAccessibilityChecks()
. (I50aa5) SemanticsNodeInteraction.performTextInputSelection
nie jest już eksperymentalne i obsługuje dodatkowy parametrrelativeToOriginal
, który umożliwia zastosowanie wyboru do oryginalnego, nieprzekształconego tekstu lub do tekstu przekształconego. (I3a905, b/261561038, b/277018945)- Wprowadzenie interfejsu API do tworzenia niestandardowych list punktowanych za pomocą
AnnotatedString
(I1d066, b/383269496, b/139326648) - Zastąpienie wartości
runWithTimingDisabled
wartościąrunWithMeasurementDisabled
, która lepiej opisuje zachowanie – wszystkie dane są wstrzymane. Dodatkowo udostępnij superklasęMicrobenchmarkScope
, ponieważ ponowne zadeklarowanie funkcjirunWithMeasurementDisabled
w celu otwarcia dostępu nie jest możliwe, ponieważ jest ona wstawiana w kodzie. (I9e23b, b/389149423, b/149979716) - Zaktualizowano interfejs ui-tooling Devices API, aby uwzględniał nowsze urządzenia. (Ia2ac1)
- Dodaj do kolekcji rozmiarów ekranu podglądu format pionowy tabletu, aby pomóc deweloperowi w uwzględnieniu większych okien (Ia1976).
- Wprowadzamy interfejs Trace Value API do oznaczania i rejestrowania śladów z wartościami w danym momencie. Wartości śledzenia są wyświetlane w Prefetto jako nowa ścieżka, którą można zobaczyć na osi czasu śledzenia. Na Androidzie są one wdrażane za pomocą
Trace.setCounter
. (Idcf48)
Poprawki błędów
- Naprawiono wysyłanie zapamiętanych obserwatorów w kompozycji z możliwością wstrzymania, aby uniknąć wysyłania zapamiętanych/zapomnianych w ramach tej samej aplikacji (I570b2, b/404645679, b/407931790).
- Teraz można ustawić parametr
android:dialogTheme
, aby kontrolować właściwości okna, gdy parametrdecorFitsSystemWindows
ma wartość false (I7922f, b/246909281). - Rozwiązaliśmy problem polegający na tym, że każde zdarzenie ruchu wykryte poza oknem mogło je zamknąć. (Ia78fd)
- Sprawdzanie kodu w Compose wymaga teraz minimalnej wersji AGP 8.8.2 w wierszu poleceń i co najmniej Androida Studio Ladybug w przypadku obsługi w IDE. Jeśli używasz starszej wersji AGP, możesz ustawić
android.experimental.lint.version=8.8.2
w pliku gradle.properties, aby uaktualnić wersję Lint bez wpływu na AGP. (I6f2a8) - Dodano nową właściwość semantyczną
InputText
, która rejestruje wartośćtextfield
przed zastosowaniem transformacji danych wyjściowych. (Iae46a, b/395911609, b/176949051) - Przeniesiono interfejs
enableAccessibilityChecks()
API, który włącza sprawdzanie dostępności na Androidzie, do osobnych pakietów, które sącompose:ui:ui-test-accessibility
, jeśli nie używaszTestRule
icompose:ui:ui-test-junit4-accessibility
podczas wywoływaniaTestRule
(I3c318, b/391560768). - Dodano obsługę tworzenia śladów stosu w przypadku funkcji Compose w
LaunchedEffect
irememberCoroutineScope
(I705c0, b/354163858).
Wkład zewnętrzny
- Zmiana eksperymentalnej funkcji
runComposeUiTest
, aby akceptowała blokadę zawieszenia. Dodano też wycofaną funkcjęrunComposeUiTest
na potrzeby zgodności binarnej (I3b88c, b/361577328).
Wersja 1.8
Wersja 1.8.3
18 czerwca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.3
Wersja 1.8.3 zawiera te zmiany.
Poprawki błędów
- Flaga dla
isGetFocusedRectReturnEmptyEnabled
została usunięta, ponieważ funkcja została w pełni zweryfikowana. (Ife722) - Flaga
ComposeUiFlags.isGetFocusedRectReturnEmptyEnabled
powoduje, że jeśli wComposeView
nie ma elementów, na których można ustawić fokus, prostokąt przyjmuje wartość Empty. Zapobiega to wybraniu przez wyszukiwanie fokusu widoku, na którym ma się skupić. Jest to szczególnie ważne, gdy edytor IME ma opcję DALEJ, która może próbować skupić się naComposeView
, arequestFocus()
się nie powiedzie. (Ibd0e2, b/369256395)
Wersja 1.8.2
20 maja 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.2
Wersja 1.8.2 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd NullPointerException, który występował, gdy okno było usuwane podczas aktywnego strumienia zdarzeń w oknie (6a7e7f).
- Naprawiono problem z nieaktualizowaniem się
onLayoutRectChange
zgodnie z ograniczoną osią czasu, gdy występują aktualizacje tylko do rysowania. (03b82d)
Wersja 1.8.1
7 maja 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.1
Wersja 1.8.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązywanie niektórych problemów z
onLayoutRectChanged
iLazyLayout
d791b11 - Pomiń prośby o ponowne pomiary w przypadku wstępnie skomponowanych produktów. Ten błąd wpływał na wydajność przewijania układów wczytywanych na żądanie, ponieważ w niektórych przypadkach pobieranie z wyprzedzeniem nie działało wydajnie, a pomiar odbywał się w ramce. 742087a
Wersja 1.8.0
23 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0
Wersja 1.8.0 zawiera te zmiany.
Ważne zmiany od wersji 1.7.0
- Compose 1.8 zawiera nową obsługę semantycznego autouzupełniania. Upewnij się, że używane wersje interfejsu i Foundation to 1.8 lub nowsze, ponieważ automatyczne wypełnianie komponentów tekstowych wymaga najnowszych wersji obu modułów. Więcej informacji o korzystaniu z interfejsu API i przykłady znajdziesz w dokumentacji autouzupełniania tutaj.
- Compose 1.8 obsługuje dodatkowe typy reakcji haptycznych:
Confirm
,ContextClick
,GestureEnd
,GestureThresholdActivate
,Reject
,SegmentFrequentTick
,SegmentTick
,ToggleOn
,ToggleOff
,VirtualKey
. Jest ona dostępna w sekcjiLocalHapticFeedback
. Na Androidzie jest domyślnie dostępna, gdy Vibrator API wskazuje, że haptyka jest obsługiwana. - Kilka interfejsów Focus API jest już stabilnych, w tym
Modifier.focusRestorer()
,onEnter
ionExit
FocusProperties
(I6e667). Teraz możesz podaćFocusDirection
, gdy dzwonisz pod numerrequestFocus
. Dodaliśmy interfejs APIrequestFocus(FocusDirection)
dofocusRequester
iFocusTargetModifierNode
, aby umożliwić ustawianie ostrości w określonym kierunku. (I5d9ec][https://android-review.googlesource.com/#/q/I5d9eca3a2cd283c1b84ad6b77d929ef9a49ce4cc], b/245755256)
Wersja 1.8.0-rc03
9 kwietnia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-rc03
Wersja 1.8.0-rc03 zawiera te zmiany.
Poprawki błędów
- Wyłącza niektóre poprawki dotyczące interakcji z fokusem, które powodowały regresję. (b9d998, b/369256395, b/378570682, b/376142752, b388590015/, b/389994198, b/391378895)
Wersja 1.8.0-rc02
26 marca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-rc02
Wersja 1.8.0-rc02 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że widoki z zaznaczeniem osadzone w hierarchii Compose powodowały ponowne wywołanie kompozycji, gdy widok z zaznaczeniem był usuwany z listy leniwej. (765562)
Wersja 1.8.0-rc01
12 marca 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-rc01
Wersja 1.8.0-rc01 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z awarią, która występowała, gdy aktywna była klawiatura ekranowa, a zaznaczony element
AndroidView
został usunięty. (Ic725a) - Rozwiązuje kilka problemów w nowej implementacji obsługi stanu zaznaczenia. (b/395895685)
- Rozwiązuje problem blokujący automatyczne wypełnianie podczas używania
LaunchedEffect
do żądania fokusu na polu tekstowym. (b/392539099)
Wersja 1.8.0-beta03
26 lutego 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-beta03
Wersja 1.8.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Przeniesiono
enableAccessibilityChecks()
interfejs API, który włącza sprawdzanie dostępności na Androidzie, do osobnych pakietów, które sącompose:ui:ui-test-accessibility
, jeśli nie używasz TestRule, icompose:ui:ui-test-junit4-accessibility
podczas wywoływaniaTestRule
(I547ef, b/391560768). - Dodano nową właściwość semantyczną
InputText
, która rejestruje wartość pola tekstowego przed zastosowaniem transformacji danych wyjściowych. (Iae46a)
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że usługi autouzupełniania zapisywały przekształcony tekst wyjściowy zamiast tekstu wejściowego. (Iae46a, b/395911609, b/176949051)
Wersja 1.8.0-beta02
12 lutego 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-beta02
Wersja 1.8.0-beta02 zawiera te zmiany.
Nowe funkcje
- Dodano sprawdzanie kodu, aby ostrzegać przed wywołaniami funkcji
Configuration#screenWidth
/heightDp
– zamiast niej można użyć funkcjiLocalWindowInfo.current.containerSize
, aby pobrać bieżący rozmiar okna.
Wersja 1.8.0-beta01
29 stycznia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-beta01
Wersja 1.8.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Funkcje
ContextualFlowRow
iContextualFlowColumn
zostały oznaczone jako wycofane. Ten eksperymentalny komponent został wprowadzony w wersji 1.7 i nie został jeszcze ustabilizowany, a jego wdrożenie uznano za niepożądane. W przyszłości może zostać udostępniony komponent rozwiązujący problemy, do których ten komponent był przeznaczony.FlowRow
iFlowColumn
mają eksperymentalne przeciążenia, które zostały wprowadzone w wersji 1.7 i zawierają parametroverflow
. Użycie tego parametru zostało wycofane. Zamiast niego można używać przeciążeń bez tego parametru. Domyślne działanie „overflow” w przypadku tych przeciążeń będzie miało wartość „Clip”, tak jak od momentu wprowadzenia.- Wiele przypadków użycia
ContextualFlowRow
można zrealizować za pomocą FlowRow, ale zdajemy sobie sprawę, że nie zawsze jest to możliwe.ContextualFlowRow
można w pełni wdrożyć w przestrzeni użytkownika. Możesz skopiować jego implementację i w razie potrzeby ją dostosować. W przyszłości chcemy rozwiązywać te problemy w inny sposób. (Ibafec)
SemanticsNodeInteraction.semanticsId()
został(a) usunięty(a). Zamiast niej używaj zasadySemanticsNodeInteraction.fetchSemanticsNode().id
. (Ie397a)- Stare interfejsy API autouzupełniania zostały wycofane. Zamiast tego używaj nowego interfejsu API opartego na semantyce. (I943ff)
- Przepisz interfejs
requestAutofill
API, aby istniał poza menedżerem autouzupełniania. (Id1929)
Poprawki błędów
- Rozwiązaliśmy problem z fokusem, który powodował, że element
requestFocus()
z bezsensownym parametrempreviouslyFocusedRect
(związanym z kierunkiem fokusu) pomijał elementComposeView
. (Ifdc2f, b/388590015) - Rozwiązaliśmy problem z sporadycznym błędem NullPointerException podczas używania
GraphicsLayer.record { this@ContentDrawScope.drawContent() }
. Jeśli nagrywaszdrawContent()
w ten sposób, użyj funkcji rozszerzeniaGraphicsLayer#record
w funkcjiDrawScope
, a nie funkcji składowej w funkcjiGraphicsLayer
. (I75fc0, b/389046242) - Poprawiono układ tekstu z wielokropkiem, który czasami był nieprawidłowo tłumaczony podczas animacji. Więcej informacji znajdziesz w b/389707025 (Ie55b1, b/389707025).
Wersja 1.8.0-alpha08
15 stycznia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha08
Wersja 1.8.0-alpha08 zawiera te commity.
Zmiany w interfejsie API
- Tworzenie klasy abstrakcyjnej
AutofillManager
. (I0a3b0) - Rozwiązaliśmy kilka problemów związanych z ogniskowaniem, w tym awarie, gdy edytor IME próbuje ustawić fokus na elemencie
ComposeView
bez elementów, na których można ustawić fokus, zmianę fokusu w elemencie podrzędnymAndroidViews
oraz prośbę o ustawienie fokusu, która pozostawia elementAndroidView
. (Ia03c3, b/369256395, b/378570682, b/376142752) - Zmień
FocusEnterExitScope.cancelFocus()
nacancelFocusChange()
(I89959) - Możesz teraz obliczać kompozycje okluzji za pomocą funkcji
RectInfo.calculateOcclusions()
. - Dodano funkcję rozszerzenia w
DelegatableNode
, która umożliwia zarejestrowanie odbiorcy zmian układu globalnego. (I68b59)
Poprawki błędów
- Aktywność używana jako host dla testowanego komponentu kompozycyjnego podczas korzystania z
ComposeContentTestRule.setContent
używa teraz motywuTheme.Material.Light.NoActionBar
, aby uniknąć nakładania sięActionBar
na treści testowe w przypadku pakietu SDK 35. Aby zrezygnować z tego działania, możesz usunąć zależność odui-test-manifest
i dodać wpis aktywności w pliku AndroidManifest.xml aplikacji testowej dlaComponentActivity
z wybranym motywem. (I7ae1b, b/383368165) - Czcionki zasobów o tych samych ustawieniach odmiany nie będą już nadmiernie buforowane, co powodowało stosowanie nieprawidłowych ustawień odmiany. (If3dff, b/372044241)
AnnotatedString.fromHtml
obsługuje teraz tagi<ul>/<li>
. (I7c2fe, b/299662276, b/139326648)
Wkład zewnętrzny
- Dodano nowy interfejs Schowka i lokalizację kompozycji. (I80809)
Wersja 1.8.0-alpha07
11 grudnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha07
Wersja 1.8.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Udostępniono właściciela z domeny
LayoutNode
na potrzeby narzędzi. (I26f7f) - W przypadku
LocalAutofillHighlightColor
kompozycji lokalnej użyj typu Kolor. (I0e05b) - Zachowaj wycofaną funkcję
UrlAnnotation
i jej metody oznaczone jako eksperymentalne. (Ic0021)
Poprawki błędów
- Naprawiono awarię
IndexOutOfBoundsException
podczas używaniaLinkAnnotation
w komponencieBasicText
lub komponencie tekstowym (be7605, b/374115892). - Rozwiązaliśmy problem polegający na tym, że wypełnione pola tekstowe z niestandardowym kształtem nie przycinały linii wskaźnika. (I4f87f, b/380704151)
- Rozwiązaliśmy problem z brakującym tłem w przypadku długich zrzutów ekranu. (I4d57a)
- Ta biblioteka używa teraz adnotacji o wartości null JSpecify, które są używane w typach. Deweloperzy korzystający z języka Kotlin powinni używać tego argumentu kompilatora, aby wymusić prawidłowe użycie:
-Xjspecify-annotations=strict
(jest to domyślne ustawienie od wersji 2.1.0 kompilatora Kotlin). (Idfef8, b/326456246) - Zaktualizowano obsługę Compose w przypadku szerokiej gamy kolorów i kolorów HDR na Androidzie Q+. (Icd8be, b/379135036)
- Czcionki zasobów, których nie udało się wczytać, będą teraz cicho zastępowane czcionką domyślną, zamiast powodować wyjątek w funkcji measure. (Ib6a49)
- Rozwiązaliśmy problem z utratą zaznaczenia po odłączeniu i ponownym podłączeniu
AndroidView
. (I53446) - Akceptuj
requestFocus()
z działań poza układem. (Ia8461)
Wkład zewnętrzny
- Dodaj
BringIntoViewResponderModifierNode
do interfejsu, co zapewnia nowy sposób implementacji funkcji Bring Into View, a także umożliwia implementację na poziomie platformy. (Ia6dd8)
Wersja 1.8.0-alpha06
13 listopada 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha06
Wersja 1.8.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaje modyfikator
stylusHoverIcon
. (Iff20a, b/331289114) - Zmienia menedżera autouzupełniania w interfejs. (I84914, b/376080755)
- Dodaje
requestFocus(FocusDirection)
dofocusRequester
iFocusTargetModifierNode
, aby umożliwić ustawianie ostrości w określonym kierunku. (I5d9ec, b/245755256) FocusProperties.enter
iFocusProperties.exit
zostały zastąpione przezonEnter
ionExit
, które używają zakresu odbiorcy zamiast parametruFocusDirection
. (I6e667)- Dodanie obsługi autouzupełniania na pasku narzędzi tekstowych. (Ie6a4c)
- Zmiany w interfejsie API w elemencie
Modifier.focusRestorer()
(I99c03):- nazwa parametru została zmieniona na „fallback”
- parametr jest teraz
FocusRequester
, a nie funkcją LAMBDA. - parametr nie może już mieć wartości NULL, a wartością domyślną jest Default.
- Usuwanie adnotacji
@Experimental
z interfejsu menedżera autouzupełniania. Ta funkcja jest nadal w trakcie prac nad tą wersją, ale nie chcemy wprowadzać eksperymentalnego interfejsu API (Id8398). LocalHapticFeedback
udostępnia teraz domyślną implementacjęHapticFeedback
, gdy interfejs Vibrator API wskazuje, że haptyka jest obsługiwana. DoHapticFeedbackType
–Confirm
,ContextClick
,GestureEnd
,GestureThresholdActivate
,Reject
,SegmentFrequentTick
,SegmentTick
,ToggleOn
,ToggleOff
,VirtualKey
dodano: Komponenty Wear Compose, które można długo klikać, takie jakButton
,IconButton
,TextButton
iCard
, generują terazLONG_PRESS
wibracje, gdy podano procedurę obsługi długiego kliknięcia. (I5083d)- Usuwa
OverscrollConfiguration
iLocalOverscrollConfiguration
oraz dodajerememberPlatformOverscrollFactory
, aby utworzyć instancję domyślnej implementacji przewijania poza krawędź lub dostosować jej parametry. Aby wyłączyć przewijanie poza krawędź, zamiastLocalOverscrollConfiguration provides null
użyjLocalOverscrollFactory provides null
. Aby zmienić kolor lub wypełnienie efektu poświaty, zamiastLocalOverscrollConfiguration provides OverscrollConfiguration(myColor, myPadding)
użyjLocalOverscrollFactory provides rememberPlatformOverscrollFactory(myColor, myPadding)
. (Ie71f9, b/255554340, b/234451516) - Usunięto eksperymentalny interfejs
GlobalAssertions
API. Został on zaprojektowany do przeprowadzania testów ułatwień dostępu. Zamiast tego użyjenableAccessibilityChecks()
. (I59322)
Wersja 1.8.0-alpha05
30 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha05
Wersja 1.8.0-alpha05 zawiera te zmiany.
Nowe funkcje
W tej wersji autouzupełnianie jest dostępne za flagą funkcji. Pracujemy nad poprawą wydajności i chętnie poznamy Twoją opinię o interfejsach API. Na podstawie opinii interfejsy API mogą ulec zmianie przed osiągnięciem stabilnej wersji.
- Aby włączyć autouzupełnianie, ustaw wartość
ComposeUiFlags.isSemanticAutofillEnabled
na „true” wonCreate
i użyj najnowszej wersji Compose Snapshot. - Ta wersja autouzupełniania obsługuje ręczne zapisywanie danych logowania, zapisywanie za pomocą funkcji Sugeruj silne hasło i zapisywanie podczas nawigacji. Obsługuje też wypełnianie, gdy pole z możliwością automatycznego wypełniania jest aktywne lub gdy automatyczne wypełnianie jest wywoływane za pomocą paska narzędzi tekstowych w komponentach tekstowych. Komponent zostanie wyróżniony, aby wskazać, kiedy automatyczne wypełnianie zostało zakończone.
Zmiany w interfejsie API
- Zmodyfikuj interfejs autouzupełniania, aby był zgodny ze strukturą
expect
/actual
. (I22dce) - Wprowadzamy
CompositionLocal
, którego można używać do modyfikowania odcienia podświetlenia udanego wypełnienia w funkcji autouzupełniania. (I32092) - Dodano interfejs
Modifier.onRectChanged
API, który umożliwia subskrybowanie pozycji i rozmiaru elementuLayoutNode
względem elementu głównego, okna lub ekranu. Interfejs API rozwiązuje wiele przypadków użycia, które obsługuje istniejący modyfikatoronGloballyPositioned
, ale robi to przy znacznie mniejszym obciążeniu. Interfejs API ma też funkcje ograniczania liczby wywołań zwrotnych i opóźniania ich w zależności od potrzeb. (Id28c7, b/372765423, b/372757007, b/372994338) - Rozszerza Menedżera autouzupełniania o interfejsy API
commit()
icancel()
, które pomagają użytkownikom zapisywać nowo wpisane dane logowania. (I2da00) - Wprowadza nowy interfejs
AutofillManager
, który umożliwia precyzyjne dostosowywanie procesu autouzupełniania, oraz flagęisSemanticAutofillEnabled
, która włącza nową wersję autouzupełniania. (I9d484) - Dodano interfejs
Modifier.onRectChanged
API, który umożliwia subskrybowanie pozycji i rozmiaru elementuLayoutNode
względem elementu głównego, okna lub ekranu. Interfejs API rozwiązuje wiele przypadków użycia, które obsługuje istniejący modyfikatoronGloballyPositioned
, ale robi to przy znacznie mniejszym obciążeniu. Interfejs API ma też funkcje ograniczania liczby wywołań zwrotnych i opóźniania ich w zależności od potrzeb. (I3c8fa) - Dodaj właściwości semantyczne i typy danych, aby rozszerzyć obsługę autouzupełniania. (I52c7d)
- Wszystkie metody w narzędziu do tworzenia
AnnotatedString
nie są już eksperymentalne (Ia89c8, b/261561823)
Poprawki błędów
- Widoki umieszczone w kompozycji mogą teraz odbierać zdarzenia obrotowe, jeśli są aktywne (I4d53a, b/320510084).
- Rozwiązano problem polegający na tym, że różne typy zasobów nie były aktualizowane po zmianach konfiguracji (Ia9b99, b/352336694).
- Rozwiązaliśmy problem, który uniemożliwiał prawidłowe działanie
TextField
podczas korzystania z japońskiej klawiatury POBox na niektórych starszych urządzeniach Sony. (Ia9b99, b/373743376) - Rozwiązano problem z wyświetlaniem okien dialogowych u dołu ekranu zamiast na środku (Ia2ec, b/373093006).
- Kierowanie na interfejs API w wersji 35 lub nowszej nie wymusza już ustawienia wartości
decorFitsSystemWindows
na false w przypadku okien. (Ibc94, b/364492593) - Naprawiono awarię podczas przenoszenia warstw między oknami (np. oknem dialogowym a główną treścią) (I675ba, b/330955281)
Wersja 1.8.0-alpha04
16 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha04
Wersja 1.8.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaje wywołania zwrotne
DelegatableNode#onDensityChange
iDelegatableNode#onLayoutDirectionChange
, aby umożliwić aktualizowanie stanu węzła, gdy się on zmieni (I04f3e, b/340662451). - Dodaje parametr
WindowInfo#containerSize
, aby podać rozmiar kontenera treści bieżącego okna. Można je pobrać za pomocąLocalWindowInfo
. (Idc38c, b/369334429, b/360343819) - Wprowadziliśmy poprawkę dotyczącą zagnieżdżonych elementów z możliwością przewijania, które są usuwane z drzewa węzłów podczas trwającego przewijania. Teraz te węzły anulują gest szybkiego przesunięcia i prawidłowo wysyłają zdarzenie
onPostFling
z pozostałą prędkością. Wprowadzamy też flagęNewNestedScrollFlingDispatchingEnabled
, która pozwala kontrolować działanie w przypadku regresji. Przed wersją beta flaga zostanie usunięta. (I05c37, b/371168883) - Wprowadzono
PointerInputModifierNode#touchBoundsExpansion
, którego można używać do powiększania obszaru dotyku pojedynczego modyfikatora danych wejściowych wskaźnika. (Iccf02, b/335339283) - Dodaje parametr
WindowInfo#containerSize
, aby podać rozmiar kontenera treści bieżącego okna. Można je pobrać za pomocąLocalWindowInfo
. (I27767, b/369334429, b/360343819) - Usuń
readOnly
zTextFields
', aby przypiąć do stabilnej wersji podstawowej. (I3aaba) Paragraph
iParagraphIntrinsics
przyjmują teraz listę wszystkich adnotacji zastosowanych doAnnotatedString
. Wcześniej zawierały tylko listęSpanStyles
(I12f80).
Poprawki błędów
- Zaktualizowano sposób traktowania akapitów w
AnnotatedString
. Wcześniej można było tworzyć tylko niepokrywające się akapity. TerazAnnotatedString
umożliwia w pełni nakładające się akapity, które zostaną połączone, oraz akapity zagnieżdżone, w których przypadku akapit zewnętrzny zostanie podzielony na granice akapitu wewnętrznego, a styl akapitu wewnętrznego zostanie połączony ze stylem akapitu zewnętrznego (Ic9554). - Naprawiono błąd w
AnnotatedString
zLinkAnnotation
o zerowej długości. (89aac6)
Wersja 1.8.0-alpha03
2 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha03
Wersja 1.8.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Aktualizacja wersji Kotlina do 1.9 (I1a14c)
- Wprowadziliśmy nową rolę semantyczną o nazwie Karuzela, która emuluje zachowanie listy w pagerach na potrzeby usług ułatwień dostępu. (Id354b, b/354109776, b/239672673)
- Zmień nazwę
invisibleToUser()
nahideFromAccessibility
. Jego funkcja pozostaje bez zmian. Więcej informacji znajdziesz w dokumentacji. (Ib43a3)
Poprawki błędów
- Aktualizacja dokumentacji modyfikatora
SensitiveContent
(Ib0442) - Rozwiązanie problemu polegającego na tym, że niektóre ogólne klipy konturowe były ignorowane w połączeniu z cieniami wysokości na niektórych wersjach Androida.
- Rozwiązanie problemu polegającego na tym, że w przypadku niektórych wersji Androida po określeniu ogólnych klipów konturu stosowane były puste klipy.
- Naprawiono wyjątek zgłaszany, gdy edytor IME jest aktywny w zewnętrznym widoku, a działanie Dalej jest używane do ustawienia fokusu na
ComposeView
. DziałanieclearFocus()
jest zgodne z działaniem widoku w przypadku interfejsu API w wersji starszej niż 28, w którymclearFocus()
może spowodować, że domyślny widok zostanie ustawiony jako aktywny. - Rozwiązaliśmy problem z umieszczaniem na odłączonych węzłach w
LazyList
, rozdzielając zarządzanie podkompozycją dla różnych przebiegów układu. - Rozwiązaliśmy problem polegający na tym, że klawiatura ekranowa migała, gdy zaznaczenie przełączało się z
TextField
naEditText
lub dowolny inny edytor oparty na widoku. - Węzły Nested Scroll będą teraz prawidłowo wysyłać zdarzenia
onPostFling
po odłączeniu. - Ogólne zwiększenie wydajności
Wersja 1.8.0-alpha02
18 września 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha02
Wersja 1.8.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dostępne są teraz symbole
TextOverflow.StartEllipsis
iTextOverflow.MiddleEllipsis
, które umożliwiają umieszczenie wielokropka na początku lub w środku wiersza tekstu jednowierszowego. (I38913, b/185418980)
Poprawki błędów
- Rozwiąż problem z dialogiem
dismissOnClickoutside
(39a3d, b/364508685) - Nie przycinaj cieni treści dialogu (e8e2f, b/363027803)
- Naprawiono nieprawidłowe działanie, gdy wyszukiwanie przenosiło fokus między aplikacją do pisania a widokiem (58377, b/350534714)
Wkład zewnętrzny
AlignmentLines
Map
akceptuje teraz beton typuVerticalAlignmentLine
lubHorizontalAlignmentLine
. (I02912)- Nowa wspólna metoda
ByteArray.decodeToImageBitmap(): ImageBitmap
. (I83c21)
Wersja 1.8.0-alpha01
4 września 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.8.0-alpha01
Wersja 1.8.0-alpha01 zawiera te zmiany.
Wersja 1.7
Wersja 1.7.8
12 lutego 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.8
Wersja 1.7.8 zawiera te zmiany.
Wersja 1.7.7
29 stycznia 2025 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.7
Wersja 1.7.7 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z
IndexOutOfBoundsException
, który występował podczas przekazywaniaAnnotatedString
zLinkAnnotation
do elementu kompozycyjnego Text. (Ic96d2) - Rozwiązaliśmy problem z przekroczeniem limitu czasu w testach w rzadkich przypadkach, gdy w
AnnotatedString
użyto znakuLinkAnnotation
. (I04a03)
Wersja 1.7.6
11 grudnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.6
Wersja 1.7.6 zawiera te zmiany.
Poprawki błędów
- Wcześniej zgłaszaliśmy błąd za każdym razem, gdy napotykaliśmy kluczowe zdarzenie, gdy system ostrości miał oczekujące unieważnienia. Zamiast tego rejestrujemy teraz błąd (I7ea0, b/346370327).
- Usunięto eksperymentalną adnotację z
SemanticsPropertyReceiver.invisibleToUser()
. W wersji 1.8 ta opcja zostanie wycofana i zastąpiona przezSemanticsPropertyReceiver.hideFromAccessibility()
. (I448f0, b/376479686) - Rozwiązaliśmy problem, który uniemożliwiał prawidłowe działanie
TextField
podczas korzystania z japońskiej klawiatury POBox na niektórych starszych urządzeniach Sony. (I94e0e, b/373743376) - Rozwiązaliśmy problem z ułatwieniami dostępu, który powodował, że element
BasicText
’s inlineContent nie był odczytywany przezTalkBack
. (I67bcb, b/376479686)
Wersja 1.7.5
30 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.5
Wersja 1.7.5 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problemy, które powodowały nieprawidłowe renderowanie wysokości i przycinania w przypadku niestandardowych konturów.
- Rozwiązuje problem z awarią tekstu, która występuje w przypadku znaku o zerowej szerokości
LinkAnnotation
. (Ic1e2e) - Poprawia komunikat w
Talkback
przycisku, gdy jest on zbudowany jako klikalny komponent tekstowy. (I1f588)
Wersja 1.7.4
16 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.4
Wersja 1.7.4 zawiera te zmiany.
Wersja 1.7.3
2 października 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.3
Wersja 1.7.3 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem polegający na tym, że określenie ogólnego klipu konturowego powodowało wyświetlanie pustej granicy klipu w niektórych wersjach Androida.
- Naprawiono wyjątek zgłaszany, gdy edytor IME jest aktywny w zewnętrznym widoku, a działanie Dalej jest używane do ustawienia fokusu na
ComposeView
. DziałanieclearFocus()
jest zgodne z działaniem widoku w przypadku interfejsu API w wersji starszej niż 28, w którymclearFocus()
może spowodować, że domyślny widok zostanie ustawiony jako aktywny. - Rozwiązaliśmy problem, który powodował, że do unieważniania wyprzedzającego używano nieprawidłowego znaku
placeOrder
, co w skrajnych przypadkach powodowało pomijanie umieszczania wyprzedzającego.
Wersja 1.7.2
18 września 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.2
Wersja 1.7.2 zawiera te zmiany.
Poprawki błędów
- Zwiększono wydajność informacji o węzłach ułatwień dostępu i zdarzeń semantycznych przez usunięcie szczegółowego śledzenia. (I89156, b/362530618)
ComposeView
nie będzie już ulegać awarii w przypadku przekazania wyjątkowo dużego rozmiaru pomiaru (da5db, b/347036173).- Rozwiązaliśmy problem z czytnikiem ekranu, który powodował, że
LiveRegion
komunikaty na przyciskach nie były odczytywane. (f66fa7, b/348590026)
Wersja 1.7.1
10 września 2024 r.
- Brak zmian w artefaktach Androida. Usunięto
-desktop
artefaktów, a dodano-jvmStubs
i-linuxx64Stubs
artefakty. Żaden z tych celów nie jest przeznaczony do użytku. Są to symbole zastępcze, które mają pomóc w pracach nad Jetbrains Compose.
Wersja 1.7.0
4 września 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0
Ważne zmiany od wersji 1.6.0
Ważne zmiany w wersji 1.7.0 zostały opisane w tym poście na blogu.
Wersja 1.7.0-rc01
21 sierpnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-rc01
Wersja 1.7.0-rc01 zawiera te zmiany.
Ważne zmiany
- Moduł ui:ui wymusza teraz wymaganie minimalnej wersji foundation:foundation, która musi być co najmniej 1.7.0-rc01 lub nowsza. Jest to wymuszane w celu wyeliminowania niezgodności w działaniu interfejsu i biblioteki Foundation w odniesieniu do zmian
NestedScrollSource
, które nastąpiły na początku wersji 1.7.0-alpha01.
Wersja 1.7.0-beta07
7 sierpnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta07
Wersja 1.7.0-beta07 zawiera te zmiany.
Poprawki błędów
- Funkcje związane z wprowadzaniem tekstu
SemanticsNodeInteraction
,performTextReplacement
,performTextInput
iperformTextClearance
będą teraz zgłaszać błędy asercji, gdy zostaną wywołane w przypadkuTextFields
tylko do odczytu. (I4ae8f)
Wersja 1.7.0-beta06
24 lipca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta06
Wersja 1.7.0-beta06 zawiera te zmiany.
Wersja 1.7.0-beta05
10 lipca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta05
Wersja 1.7.0-beta05 zawiera te zmiany.
Poprawki błędów
- Usunęliśmy błąd, który powodował, że po zmianie klawiatury ekranowej
TextField
nie akceptował danych wejściowych z nowej klawiatury, dopóki nie stracił i nie odzyskał fokusu. - Rozwiązaliśmy problem, który powodował, że próby zachowania zawartości warstwy wywoływały niepożądane efekty uboczne podczas renderowania z zawartością
SurfaceView
.
Wersja 1.7.0-beta04
26 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta04
Wersja 1.7.0-beta04 zawiera te zmiany.
Poprawki błędów
- Unikanie awarii podczas pomiaru bardzo długich wierszy tekstu (np.10 tys. znaków) (8157ab)
- Wyłącz obsługę renderowania oprogramowania dla interfejsu
GraphicsLayer
API. (35ddd8) - Poprawka awarii w logice utrwalania warstw. (70b13e)
- Optymalizacja ponownego używania obiektów warstwy została wycofana, ponieważ powodowała problemy z renderowaniem. (70b13e)
Wersja 1.7.0-beta03
12 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta03
Wersja 1.7.0-beta03 zawiera te zmiany.
Wersja 1.7.0-beta02
29 maja 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta02
Wersja 1.7.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Zmieniono nazwę
SemanticsProperties.Editable
naIsEditable
, a wartośćSemanticsPropertyReceiver.editable
naisEditable
. Właściwość jest teraz wartością logiczną i jest zawsze określana przez pola tekstowe. (I8acd8) - Zmień nazwę parametru testu porównawczego ułatwień dostępu. (I3d440)
- Zaktualizowany interfejs API do stylizowania linków:
TextLinkStyles
jest teraz częścią konstruktoraLinkAnnotation
i metodyAnnotatedString.fromHtml
(I90b2b). Usunięto teżTextDefaults
z materiału (I5477b).
Poprawki błędów
- Nazwa
LayoutCoordinates.introducesFrameOfReference
została zmieniona naLayoutCoordinates.introducesMotionFrameOfReference
, aby lepiej odzwierciedlała jej przeznaczenie. Zmieniono nazwę powiązanej funkcji, aby obliczać współrzędne na podstawie tego flagi. (I3a330)
Wersja 1.7.0-beta01
14 maja 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-beta01
Wersja 1.7.0-beta01 zawiera te commity.
Zmiany w interfejsie API
- Zmieniono nazwę
performCustomAccessibilityActionLabelled
naperformCustomAccessibilityActionWithLabel
iperformCustomAccessibilityActionWhere
naperformCustomAccessibilityActionWithLabelMatching
. (I5387f) AnnotatedString.hasEqualsAnnotations
to terazhasEqualAnnotations
(I685c0)- Zaktualizowano interfejs API do pobierania linków w tekście w motywie Material. W szczególności usunęliśmy metody z
TextDefaults
do tworzenia tematycznychLinkAnnotations
i parsowania kodu HTML z tematycznymi linkami. Zamiast tego dodaliśmy do funkcji kompozycyjnej Text parametrTextLinkStyles
, który umożliwia stylowanie linków. (I31b93)
Poprawki błędów
- Rozwiązuje dodatkowe przypadki użycia dynamicznego dodawania modyfikatorów danych wejściowych wskaźnika podczas zdarzeń 63e1504
Wersja 1.7.0-alpha08
1 maja 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha08
Wersja 1.7.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaje obsługę implementacji kształtów, które można zmieniać.
Shape#createOutline
jest teraz obserwowany w warstwach graficznych, więc odczytywanie wartości stanu w nich spowoduje unieważnienie, gdy stan się zmieni, co pozwoli na bardziej wydajne animacje kształtów. (Id1629, b/326070216) - Zmieniono nazwę
isPositionedByParentWithDirectManipulation
naintroducesFrameOfReference
. Pamiętaj, że teraz ma odwrotny efekt, co oznacza, że domyślnie większośćLayoutCoordinates
wprowadza ramkę odniesienia, a właściwość ma wartość fałsz tylko wtedy, gdy jest poddawana bezpośredniej manipulacji. Aby wysłać zapytanie o pozycję tylko w przypadku tych, które wprowadzają ramę odniesienia, użyj znakupositionInLocalFrameOfReference(...)
. lubpositionInLocalLookaheadFrameOfReference
zLookaheadScope
. (Ifc5f7) LookaheadScope
Interfejsy API zostały ustabilizowane (I21507)- Zmień funkcję lambda działania dla
getScrollViewportLength
zgodnie z opinią rady ds. API. (Ibc74a) - Zaktualizowano interfejsy API
GraphicsLayer
, aby używały parametrów zmiennoprzecinkowych zamiast liczb całkowitych. Usunięto wartości wartowniczeUnsetOffset/UnsetSize IntSize
na rzecz istniejących już stałych Unspecified w klasach wbudowanych Offset i Size opartych na liczbach zmiennoprzecinkowych (I2fb03, b/333863462). - Podczas wstrzykiwania danych wejściowych myszy w trakcie testów funkcje
MouseInjectionScope.click()
,MouseInjectionScope.doubleClick()
,MouseInjectionScope.tripleClick()
iMouseInjectionScope.longClick()
akceptują teraz parametrbutton: MouseButton
, dzięki czemu są bardziej uniwersalne. Wartością domyślną wszystkich metod jestMouseButton.Primary
. (I31a23, b/190493367, b/261439695) - Zmieniono nazwę
onClicked
naonClick
wLinkInteractionListener
. (Iaa35c) - Zmień nazwę
TextInclusionStrategy.isInside
naisIncluded
. Ustaw typ zwracanyParagraph/MultiParagraph#getRangeForRect()
jako niepusty. (I51f26)
Poprawki błędów
- Rozwiązanie problemu z robieniem długich zrzutów ekranu w przypadku przewijanych kontenerów z
reverseScrolling=true
. (I7c59c)
Wkład zewnętrzny
- Dodano obsługę wstępnego pobierania elementów w zagnieżdżonych komponentach
LazyLists
(np. w komponencieLazyColumn
, który renderuje zagnieżdżone komponentyLazyRows
). Oczekuje się, że ta zmiana zmniejszy liczbę pominiętych klatek podczas przewijania tych komponentówLazyLists
. Domyślnie w przypadku implementacji wstępnie pobierane są pierwsze 2 elementy zagnieżdżone, ale to działanie można kontrolować za pomocą nowych interfejsów APILazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
iLazyListPrefetchStrategy#onNestedPrefetch
. (I51952)
Wersja 1.7.0-alpha07
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha07
Wersja 1.7.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
ClickableText
jest oznaczony jako wycofany. Aby dodać linki do tekstu, utwórzAnnotatedString
zLinkAnnotation
odpowiadającym linkowi i przekaż tenAnnotatedString
do funkcji kompozycyjnej Text. (I34d4b, b/323346994)- Wprowadź
ViewConfiguration.HandwritingGestureLineMargin
dla gestów pisma odręcznego. Obsługa gestuJoinOrSplit
w przypadkuBasicTextField
(Ie6e13, b/325660505) - Atrybuty
FocusProperties.enter
iFocusProperties.exit
nie są już eksperymentalne. AtrybutyFocusDirection.Enter
iFocusDirection.Exit
nie są już eksperymentalne.FocusRequester.Cancel
nie jest już funkcją eksperymentalną (I461a1, b/261564106) - Podczas wysyłania zapytań o współrzędne układu możesz teraz używać argumentu
excludeDirectManipulationOffset
, aby wykluczyć przesunięcie ustawione przez układy nadrzędne, które umieściły elementy podrzędne za pomocą argumentuPlaceable.PlacementScope.withDirectManipulationPlacement
. Podobnie układ, który często zmienia pozycję elementów podrzędnych, może teraz umieszczać je za pomocąwithDirectManipulationPlacement
(np. przewijania, które jest domyślnie zaimplementowane). Dzięki temu animacje oparte naapproachLayout
są bardziej intuicyjne, ponieważ twórcy mają możliwość rozróżnienia, które przesunięcie animować, a które zastosować bezpośrednio podczas animowania swojego podejścia. (I60ec7) - Flaga funkcji długich zrzutów ekranu została usunięta. (I28648, b/329128246)
LazyColumn
będzie teraz prawidłowo renderować przyklejone nagłówki na długich zrzutach ekranu. (I8d239, b/329296635)- Źródła Drag i Fling zostaną zastąpione źródłami
UserInput
iSideEffect
, aby uwzględnić rozszerzoną definicję tych źródeł, która obejmuje teraz animacje (Side Effect) oraz kółko myszy i klawiaturę (UserInput
). (I40579)NestedScroll
ApproachLayoutModifierNode
iModifier.approachLayout
są teraz stabilne, a noweisMeasurementApproachInProgress()
iisPlacementApproachInProgress()
zastępują odpowiednio stareisMeasurementApproachComplete()
iisPlacementApproachComplete()
.- Usunięto nieużywany modyfikator
intermediateLayout
. (I3e91c) - Zmień nazwę
GraphicsLayer#buildLayer
na record, aby odzwierciedlić metody begin/endRecording interfejsów API opartych na liście wyświetlania, takich jakRenderNode
i Picture. - Zaktualizowano
rememberGraphicsLayer
, aby korzystać zrememberObserver
. (I312c1, b/288494724, b/330758155) - Typ pliku „
UrlAnnotation
” został wycofany. Zamiast niego używaj typu „LinkAnnotation.Url
”. Jeśli używasz motywów Material Design, użyj obiektuTextDefaults
, aby utworzyć adnotację z zastosowanym motywem Material Design (I8d180, b/323346545). - Linki tekstowe mają teraz opcję stylu stanu naciśnięcia oprócz normalnego stylu, stylu po najechaniu kursorem i stylu po zaznaczeniu (I5f864, b/139312671).
- Nazwa elementu została zmieniona z
String.parseAsHtml
naAnnotatedString.Companion.fromHtml
. (I43dcd) - Dodano argumenty stylu (
linkStyle
,focusedLinkStyle
,hoveredLinkStyle
) i detektor interakcji z linkiem do metodyparseAsHtml
. Podczas analizowania ciągu znaków z tagami HTML z tagami<a>
metoda utworzy obiektLinkAnnotation.Url
dla każdego takiego tagu i przekaże obiekty stylu oraz odbiornik interakcji z linkiem do każdej adnotacji. (I7c977) LinkAnnotation
przyjmuje teraz argumenty dotyczące stylu opartego na stanie i wartośćLinkInteractionListener
. Dodaj tę adnotację doAnnotatedString
, aby uzyskać hiperlink. Przekazując wartościfocusedState
lubhoveredState
, możesz określić wizualnyconfiguration
linków, gdy są one zaznaczone lub nad nimi najedzie się kursorem. (I81ce4, b/139312671)- Pole
ImeOptions.hintLocales
nie może już mieć wartości null. Jeśli chcesz przekazać pustą listę ustawień regionalnych, użyjLocaleList.Empty
. (Ic5bc4)
Poprawki błędów
- Prawidłowo obsługuje nieprawidłowe lub uszkodzone dane zdarzeń historycznych (ignoruje nieprawidłowe dane przesunięcia).
- Rozwiązuje problem z nieoczekiwanymi zdarzeniami wskaźnika, gdy modyfikator wejścia wskaźnika jest dodawany dynamicznie przed innym modyfikatorem wejścia wskaźnika podczas aktywnego strumienia zdarzeń wejścia wskaźnika (np. między zdarzeniami hover enter i hover exit [mysz/rysik]).
Wersja 1.7.0-alpha06
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha06
Wersja 1.7.0-alpha06 zawiera te zmiany.
Nowe funkcje
- Dodaliśmy metodę
parseAsHtml
dla ciągów ze stylami: umożliwia ona przekształcenie ciągu oznaczonego tagami HTML wAnnotatedString
. Pamiętaj, że nie wszystkie tagi są obsługiwane. Na przykład nie możesz jeszcze wyświetlać list punktowanych. (I84d3d, I30626, b/139326648) - Wprowadziliśmy eksperymentalną obsługę długich zrzutów ekranu w kontenerach przewijania Compose za pomocą oficjalnego interfejsu Android API (
ScrollCaptureCallback
). Ta funkcja jest eksperymentalna i może obecnie nie obsługiwać wszystkich przypadków prawidłowo. Dlatego jest ona obecnie domyślnie wyłączona. Aby włączyć tę funkcję, ustaw flagęComposeFeatureFlag_LongScreenshotsEnabled
na wartość true. (I2b055, b/329296471)
Zmiany w interfejsie API
- Wartość
fun ClipEntry.getMetadata()
została zmieniona naval ClipEntry.clipMetadata
. (I50155) - Usunięto funkcje
ClipboardManager.getClipMetadata
iClipboardManager.hasClip
. Aby odczytać metadane bieżącego wpisu klipu, użyjclipEntry.getMetadata()
. Sprawdź też wynikClipboardManager.getClip
, aby dowiedzieć się, czy schowek zawiera bieżący klip. (I50498) - Teraz możesz przekazywać obiekty
GraphicsLayer
do funkcjiplaceable.placeWithLayer()
(I1b22f) ClipboardManager.setClip
akceptuje teraz wartość null, aby można było wyczyścić schowek. (I7d2e9)- Dodano identyfikatory zasobów, aby ułatwić ukrywanie widoków używanych jako szczegóły implementacji w narzędziach do kompilacji (I99531).
- Dodaliśmy metodę zawieszania
GraphicsLayer#toImageBitmap
, aby obsługiwać renderowanie zawartości mapy bitowej w obiekcieGraphicsLayer
. Jest to operacja renderowania z akceleracją sprzętową na poziomie interfejsu API 22 lub nowszym (włącznie), która jest obsługiwana przez ponad 99% wszystkich urządzeń z Androidem. Na Androidzie w wersji API 21 jest używane renderowanie programowe. (I9e114) - Metoda pomocnicza do konwertowania Androida
RectF
naComposeRect
(I39925, b/325660505) - Wszystkie parametry
KeyboardOptions
mają teraz domyślnie nieokreśloną wartość. Dodano metodęKeyboardOptions.merge
. - Zmieniono nazwę
KeyboardOptions.autoCorrect
naautoCorrectEnabled
i umożliwiono przypisywanie wartości null, która oznacza, że nie podano żadnej wartości. (Ia8ba0, b/295951492) BasicTextField(state)
iBasicSecureTextField
używają terazKeyboardActionHandler
zamiastKeyboardActions
do przetwarzania działań wykonywanych przez klawiaturę ekranową. (I58dda)
Wersja 1.7.0-alpha05
20 marca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha05
Wersja 1.7.0-alpha05 zawiera te zmiany.
Nowe funkcje
- Wprowadzamy nowy interfejs
GraphicsLayer
API do rejestrowania poleceń rysowania na liście wyświetlania oraz dodatkowe właściwości, które wpływają na renderowanie listy wyświetlania. Zapewnia to granicę izolacji, która dzieli złożoną scenę na mniejsze części, które można aktualizować niezależnie od siebie bez odtwarzania całej sceny. Przekształcenia wykonane naGraphicsLayer
można wprowadzać bez ponownego nagrywania listy wyświetlania. W przeciwieństwie doModifier.graphicsLayer
funkcjaGraphicsLayer
umożliwia renderowanie treści Composable w innych miejscach i jest przydatna w przypadkach użycia animacji, w których treści mają być renderowane w różnych scenach.
Zmiany w interfejsie API
GraphicsLayer.draw(Canvas)
nie jest już publicznym interfejsem API. Zamiast niej użyj funkcji rozszerzeniaDrawScope.drawLayer(GraphicsLayer)
, aby narysować warstwę. (I7a7c0)- Podzielenie
restrictedConstraints()
na 2 metody:fitPrioritizingWidth()
ifitPrioritizingHeight()
(I6d7fd) - Wprowadzono
HardwareCanvas
stub do użytku w Androidzie L (I1c3b5, b/288494724) - Zaktualizuj platformę Compose, aby udostępniać lokalną kompozycję
GraphicsContext
wraz z aktualizacją implementacji elementów OwnerDelegateableNode
idrawWithCache
Modifier, aby udostępniać dostęp do elementuGraphicsContext
w celu uzyskania dostępu w określonym zakresie, który automatycznie czyści instancjeGraphicsLayer
po usunięciu elementów Modifier. (I64a2f, b/288494724) - Wprowadziliśmy
InterceptPlatformTextInput
, aby ułatwić pisanie testów związanych z IME niskiego poziomu i innych przypadków użycia IME niskiego poziomu.PlatformTextInputTestOverride
zostało wycofane. (I862ed, b/322680547) - Dodano funkcję rozszerzenia
GraphicsLayer.setOutline(Outline)
. (Ib81f4) - Wprowadzenie konstruktora funkcji
GraphicsContext
do tworzenia fabryki instancjiGraphicsLayer
(Ib98d6, b/288494724) - Udostępniliśmy interfejs
GraphicsLayer
API, aby zapewnić programistom elastyczność w zakresie przechwytywania poleceń rysowania, których można używać do rysowania w innych miejscach, a także do stosowania różnych efektów wizualnych do wyniku końcowego. (I80245, b/288494724) - Wprowadzamy funkcję
Paragraph#getRangeForRect
, która zwraca zakres tekstu objęty danym obszarem prostokątnym. (Iee516, b/325660505) - Usunięto eksperymentalne zastąpienie
BasicText
argumentemonLinkClicked
. W przyszłości udostępnimy API zastępujące obsługę hiperlinków. (I107d5)
Poprawki błędów
- Dodano definicję interfejsu API
GraphicsLayer
expect/actual, aby umożliwić rejestrowanie i odtwarzanie poleceń rysowania z opcjonalnymi efektami wizualnymi i transformacjami kompozycji. Wprowadzenie interfejsuGraphicsContext
do obsługi zależności graficznych, w tym tworzenia instancjiGraphicsLayer
i zarządzania nimi. (I4a8d6, b/288494724) - Rozwiązaliśmy problem z współdziałaniem z wyszukiwaniem zaznaczenia 1D, który powodował, że zaznaczenie blokowało się w
ComposeView
zagnieżdżonym w innych widokach. (I08fd4)
Wkład zewnętrzny
LocalLifecycleOwner
został przeniesiony z interfejsu Compose dolifecycle-runtime-compose
, aby jego interfejsy API pomocnicze oparte na Compose można było używać poza interfejsem Compose. Dziękujemy Jake’owi Whartonowi za pomoc. (I6c41b, b/328263448)- Konsekwentne udostępnianie właściwości zmiennoprzecinkowych odchylenia we wszystkich podtypach wyrównania opartych na odchyleniu. (I69f0f, b/328088992)
Wersja 1.7.0-alpha04
6 marca 2024 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha04
Wersja 1.7.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Obsługa funkcji pisma odręcznego rysikiem w przypadku komponentu BasicTextField2 na urządzeniach z Androidem U i nowszym. (I002e4)
- W tym CL dodajemy
GetScrollViewportLength
semantic action, aby przekazywać do systemu ułatwień dostępu informacje o komponentach przewijanych w Compose. Ta zmiana dotyczy też użycia tej właściwości w listach przewijanych Foundation. (Ic5fa2) FocusRequester.createRefs
jest już stabilna (I4d92c, b/261436820)- Wprowadzono
DelegatableNode.requireView()
, aby umożliwić węzłom modyfikatorów uzyskiwanie bieżącegoView
Androida bez odczytywania lokalnej kompozycji. (I40768) - Nowy interfejs API
Path.reverse()
do odwracania kierunku ścieżki (I36348) - Dodano
hintLocales
doKeyboardOptions
, aby umożliwićTextFields
podpowiadanie edytorom IME określonych ustawień regionalnych w celu wstępnego ustawienia preferowanego języka. - Udostępnij właściwość
platformLocale
zLocale
, która zwraca obiekt platformy bazowej, np.java.util.Locale
. (I921c6)
Wersja 1.7.0-alpha03
21 lutego 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha03
Wersja 1.7.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Przedstawiamy
ContextualFlowRow
i ulepszoneFlowRow
/Column
z funkcjami MaxLines i Overflow. Z przyjemnością informujemy o ulepszeniach eksperymentalnych komponentówFlowRow
iFlowColumn
, które teraz obsługują maxLines i overflow, oraz o wprowadzeniu komponentówContextualFlowRow
iContextualFlowColumn
. Ta aktualizacja ma na celu zapewnienie komponentów o optymalnej wydajności. KomponentContextualFlow*
doskonale sprawdza się w przypadku dużej liczby elementów korzystających z małej konfiguracjimaxLines
oraz dynamicznych przycisków „+N więcej”, a komponentyFlowRow
iFlowColumn
są idealne w przypadku małej liczby elementów, czyli mniej niż 100. Ważne: aby zachować dotychczasowe działanie wFlowRow
lubFlowColumn
, gdzie wszystkie elementy są komponowane niezależnie od tego, czy mieszczą się w maksymalnej wartości osi poprzecznej, podczas inicjowania ustaw wartośćoverflow
naFlowRowOverflow.Visible
lubFlowColumnOverflow.Visible
. Przykłady działania tych nowych funkcji znajdziesz w sekcjachContextualFlowRowSample
iFlowRowSample
. (Ib9135, b/293577082) - Dodaj właściwość semantyczną
maxTextLength
, która powinna być ustawiona w polach tekstowych filtrujących maksymalną dozwoloną liczbę znaków. (I24d9f, b/170648072) - Element
Modifier.inspectable
został wycofany. Ten interfejs API będzie tworzyć więcej unieważnień modyfikatora niż jest to konieczne, dlatego jego używanie jest obecnie odradzane. Deweloperzy, którzy chcą udostępniać narzędziom właściwości modyfikatora, powinni zaimplementować metodęinspectableProperties()
wModifierNodeElement
. (Ib3236) - Nowy konstruktor dla
PopupProperties
, który umożliwia pełną kontrolę nad flagamiWindowManager.LayoutParams
. (Ibb33e, b/312485503) - Wprowadziliśmy
DelegatableNode.requireLayoutCoordinates()
jako sposób na uzyskanie bieżącegoModifier.Node
LayoutCoordinates
bez konieczności zastępowaniaonPlaced
i samodzielnego przechowywania współrzędnych we właściwości. (Ia8657) - Wprowadziliśmy
DelegatableNode.currentLayoutCoordinates
jako sposób na uzyskanie bieżącegoModifier.Node
LayoutCoordinates
bez konieczności zastępowaniaonPlaced
i samodzielnego przechowywania współrzędnych we właściwości. (Iaebaa) BasicTextField2
i powiązane interfejsy API w pakiecieandroidx.compose.foundation.text2
zostały przeniesione doandroidx.compose.foundation.text
. (I9f635)- Dodano nowy interfejs
ApproachLayoutModifierNode
API, który umożliwia tworzenie niestandardowej logiki podejścia w węźle modyfikatora. Dodaliśmy też nowy eksperymentalny interfejs APIDeferredTargetAnimation
do animacji, których cel jest nieznany w momencie tworzenia instancji. (I60745) - Nowe interfejsy API
Path
do wysyłania zapytań o kierunek ścieżki i wyodrębniania konturów zPath
. (I63d04) - Dodano funkcje
PathHitTest
iPath.contains(Offset)
, aby sprawdzić, czyPath
zawiera określony punkt. (I3b218) - Interfejs
TextLayoutResult
udostępnia teraz metodęgetLineBaseline(lineIndex)
. Umożliwia to odczytanie linii bazowej dowolnego wiersza tekstu oprócz istniejących właściwościfirstBaseline
ilastBaseline
. (Ide4e8, b/237428541) - Dodano metodę porównywania tylko adnotacji dwóch
AnnotatedStrings
. (I32659)
Poprawki błędów
- Rozwiązaliśmy problem ze zgodnością wsteczną z
SemanticsPropertyReceiver.performImeAction
iSemanticsActions.PerformImeAction
. (Id0528, b/322269946)
Wersja 1.7.0-alpha02
7 lutego 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha02
Wersja 1.7.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Rozwiązaliśmy problem ze zgodnością binarną z
SemanticsPropertyReceiver.performImeAction
. (I65865, b/322269946) - Konstruktor
PopupProperties
, który przyjmuje parametrusePlatformDefaultWidth
, nie jest już eksperymentalny. (I8f8d2) - Dodano przeciążenie funkcji
ComposeTestRule.waitUntil
, które przyjmuje opis warunku w postaci ciągu znaków do uwzględnienia w komunikacie o przekroczeniu limitu czasu. (I9413e) - Nowy interfejs API semantyki
unset()
do usuwania właściwości semantycznych dodanych w tym samym łańcuchu modyfikatorów. Nowa właściwość semantycznaisOpaque
. (I8c583, b/317966058, b/246056649) - Usunięto
originalEventPosition
z metody kopiowania w publicznym interfejsie API usługiPointerInputChange
. (I7bead)
Poprawki błędów
- Rozwiązaliśmy problem z ułatwieniami dostępu, który umożliwiał klikanie elementów innych niż karty i przyciski opcji po ich wybraniu. (I2181c)
VelocityTracker
będzie teraz domyślnie zawierać poprawkę umożliwiającą dodawanie punktów. Jeśli wystąpią jakiekolwiek problemy, poprawkę można wyłączyć, ustawiając wartośćVelocityTrackerAddPointsFix
na false. (Ib3877, b/269487059)- Usunięto brak zgodności wstecznej w
TextStyle
iParagraphStyle
. (I179f0, b/320819734)
Wkład zewnętrzny
- Dodano nowy konstruktor
DialogProperties
bez parametrów specyficznych dla platformy. (I45829) - Dodano nowy konstruktor
PopupProperties
bez parametrów specyficznych dla platformy. (I9a038)
Wersja 1.7.0-alpha01
24 stycznia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.7.0-alpha01
Wersja 1.7.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Rozszerzono atrybut
ClipboardManager
, dodając atrybutyClipEntry
iClipMetadata
, aby obsługiwać dowolne treści, takie jak obrazy. - Dodaje interfejs
DeviceConfigurationOverride
API doui-test
, aby umożliwić lokalne zastępowanie działania testowanych treści, np. określanie dostępnego rozmiaru, regionu, kierunku układu, skali czcionki lub motywu.
Wersja 1.6
Wersja 1.6.8
12 czerwca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.8
Wersja 1.6.8 zawiera te zmiany.
Poprawki błędów
- Rozwiązanie problemu z niezgodnościami w skalowaniu czcionki, gdy skala czcionki jest mniejsza niż najniższa zdefiniowana tabela. W tym przypadku interpolujemy teraz między liniową skalą 1x a najniższą zdefiniowaną tabelą, dzięki czemu rozmiar czcionki rośnie monotonicznie wraz ze wzrostem skali. (Icbae3)
Wersja 1.6.7
1 maja 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.7
Wersja 1.6.7 zawiera te zmiany.
Wersja 1.6.6
17 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.6
Wersja 1.6.6 zawiera te zmiany.
Poprawki błędów
- Naprawia rzadki błąd
BasicTextField
.
Wersja 1.6.5
3 kwietnia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.5
Wersja 1.6.5 zawiera te zmiany.
Wersja 1.6.4
20 marca 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.4
Wersja 1.6.4 zawiera te zmiany.
Wersja 1.6.3
6 marca 2024 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.3
Wersja 1.6.3 zawiera te zmiany.
Wersja 1.6.2
21 lutego 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.2
Wersja 1.6.2 zawiera te zmiany.
Wersja 1.6.1
7 lutego 2024 r.androidx.compose.ui:ui-*:1.6.1
Wersja 1.6.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem ze zgodnością wsteczną z
SemanticsPropertyReceiver.performImeAction
iSemanticsActions.PerformImeAction
. (Ie0bb2, b/322269946) - Układy zgłaszają teraz błąd podczas pomiaru, gdy jeden z nich zwraca nienormalnie duży rozmiar. Ten rodzaj błędu występuje zwykle wtedy, gdy pomiar bezpośrednio wykorzystuje maksymalne ograniczenia bez sprawdzania
Constraints.Infinity
. Sprawdzanie pomoże deweloperom znaleźć problemy z nieprawidłowym rozmiarem układu, a nie z układem, który go zawiera. (I339a9)
Wersja 1.6.0
24 stycznia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0
Wersja 1.6.0 zawiera te zmiany.
Wersja 1.6.0-rc01
10 stycznia 2024 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-rc01
Wersja 1.6.0-rc01 zawiera te zmiany.
Poprawki błędów
- Zoptymalizowana implementacja grafiki wektorowej, która poprawia wydajność przez minimalizowanie dodatkowych ponownych kompozycji.
Wersja 1.6.0-beta03
13 grudnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-beta03
Wersja 1.6.0-beta03 zawiera te zmiany.
Nowe funkcje
- Teraz można odłączyć
LayoutCoordinates
bez odłączania węzła. Zapobieganie temu w narzędziu Layout Inspector w Compose (If693)
Poprawki błędów
PlatformImeOptions
jest teraz klasą konkretną, a nie interfejsem. (If40a4)- Naprawiono dodatkowe ponowne komponowanie w dół spowodowane przez
LocalSoftwareKeyboardController
iLocalTextInputService
, które za każdym razem, gdy ponownie komponowano element główny, otrzymywały nowe wartości. (I42190, b/310510985)
Wersja 1.6.0-beta02
29 listopada 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-beta02
Wersja 1.6.0-beta02 zawiera te zmiany.
Wersja 1.6.0-beta01
15 listopada 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-beta01
Wersja 1.6.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Modyfikator
DragAndDropTarget
przyjmuje teraz jawnie odbierającyDragAndDropTarget
i ma funkcję lambda, która umożliwia rozpoczęcie sesji przeciągania i upuszczania. Obecnie dostępne są 2 funkcje fabryczne dla elementuDragAndDropModifierNode
. Jeden do odbierania przelewów i jeden do przesyłania danych (I69481). - Zaktualizowano wartość
maximumFlingVelocity
, aby była reprezentowana jako liczba zmiennoprzecinkowa. Zaktualizowana dokumentacja, aby dokładniej wyjaśnić pojęciemaximumFlingVelocity
. (I8adc7) onDragAndDropStart
w fabryceDragAndDropModifierNode
nosi teraz nazwęacceptDragAndDropTransfer
.acceptsDragAndDropTransfer
został dodany do modyfikatoradragAndDropTarget
, aby akceptować elementy z sesji przeciągania i upuszczania. Ta funkcja lambda zwraca wartośćDragAndDropTarget
, jeśli użytkownik jest zainteresowany sesją przeciągania i upuszczania. Inne funkcje lambda do przetwarzania zdarzeń przeciągania zostały zastąpione przez tę funkcję. Dodano funkcję fabrycznąDragAndDropTarget
do odbierania danych z sesji przeciągania i upuszczania (Iebf3a).Usunięto
DragAndDropInfo
jako typ.DragAndDropModifierNode.drag
przyjmuje teraz parametry dla lambdytransferData
, rozmiaru dekoracji i przeciągania dekoracjiDrawScope
.DragAndDropTarget
ma metody dla poszczególnych zdarzeń przeciągania i upuszczania zamiast jednej metody abstrakcyjnej.onDragAndDropEvent
w funkcji fabrycznej dlaDragAndDropModifierNode
została zmieniona naonDragAndDropStart
, aby lepiej informować, że podanyDragAndDropTarget
jest ważny tylko w przypadku danej sesji przeciągania i upuszczania.Usunięto element
DragAndDropEventType
(I645b1)Zmieniono nazwę
PlatformTextInputModifierNode.runTextInputSession
naestablishTextInputSession
. (I03cd0)Ulepsza nazwy interfejsu API węzłów, po których można się poruszać, aby były bardziej zrozumiałe. (Ia4474)
Zastąp
OriginalText
tekstemTextSubstitution
. (Ifa5a8)Zmieniono nazwę
PlatformTextInputModifierNode.textInputSession
narunTextInputSession
. (Ie9c6b)Elementy podrzędne elementu
SubcomposeLayout
(i układy takie jakLazyColumn
, które są na nim oparte), które są zachowywane do ponownego użycia w przyszłości, są uznawane za wyłączone. Wprowadziliśmy nowy interfejs APIassertIsDeactivated()
do testowania takich węzłów. Pozostałe interfejsy API testu będą domyślnie odfiltrowywać dezaktywowane węzły. (I2ef84, b/187188981)Usunięto polecenia
FocusDirection.In
iFocusDirection.Out
. Zamiast nich używaj poleceńFocusDirection.Enter
iFocusDirection.Exit
(I2f660)Interfejsy API Material
SwipeToReveal
(w przypadku kart i elementów) korzystają teraz z interfejsu API opartego na slotach (zgodnie z zaleceniami Compose) zamiast z instancji opartych na klasach danych do tworzenia tych slotów. Jest to zmiana powodująca niezgodność wsteczną. Przykłady użycia nowego interfejsu API znajdziesz w wersji demonstracyjnej i przykładowym kodzie. (Ia8943)Konstruktor
FontStyle(int)
został wycofany. Zamiast niego użyjFontStyle.Normal
lubFontStyle.Italic
. (I66610)Zmieniono nazwę interfejsu
FontScalable
naFontScaling
(Ie804a)
Poprawki błędów
SoftwareKeyboardController.show()
nie będzie już wyświetlać klawiatury ekranowej, jeśli nie jest aktywny żaden edytor tekstu. (I2165a, b/301477279)- Zdarzenia naciśnięcia klawisza sprzętowego, które nie otrzymały zdarzenia naciśnięcia w tym samym widoku kompozycji, będą teraz ignorowane. (Ib37b4, b/305518328)
- Dodaliśmy obsługę renderowania gradientu kołowego w
ArcLine
. (I4d5bb) - Zaimplementuj metody equals i hashcode dla klasy
PageSize.Fixed
. (Ie3ede, b/300134276) - Rozwiązanie problemu ze zgodnością binarną ze zmianą wstawki okna (Iee695)
- Usuń podstawową warstwę materiału w przypadku komponentu lub przycisku Material3, ponieważ testy porównawcze pokazują, że bez niej wydajność jest lepsza. (I55555)
TestDispatcher
s przekazywane jakoeffectContext
do testów Compose będą teraz używane do tworzenia testów i zegarów klatek. (Ia7178)
Wersja 1.6.0-alpha08
18 października 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha08
Wersja 1.6.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- W funkcji
Modifier.dragAndDrawSource
zmieniliśmy nazwę lambdyonDrawDragShadow
nadrawDragDecoration
, a w funkcjiDragAndDropInfo
zmieniliśmy nazwę parametru rozmiaru nadragDecorationSize
. (Id0e30, b/303904810) - Wprowadzamy funkcje
SemanticsNodeInteraction.isDisplayed()
iSemanticsNodeInteraction.isNotDisplayed()
, które pozwalają sprawdzić, czy pasujący węzeł jest widoczny, bez konieczności potwierdzania tego. (I2c196, b/302100809) - Wprowadziliśmy specjalną wartość
Unspecified
dla pólTextAlign
,TextDirection
,Hyphens
iLineBreak
wParagraphTextStyle
, aby zastąpićnull
. Ponieważ są to klasy wbudowane, zastąpienie wartości dopuszczających wartość null wartością Unspecified pozwala uniknąć pakowania typów prostych. Konstruktory, metody pobierające i inne metody w klasachTextStyle
i Paragraph style zostały zaktualizowane, aby akceptować wymienione parametry jako typy inne niż null. (I4197e, b/299490814) - Dodaj przeciążenie
GoogleFont
do odczytywaniaGoogleFont
z XML. (If8f59) - Zmieniono
LoremIpsum
PreviewParameterProvider
na zajęcia otwarte. (I41bf5, b/266918816, b/300116360)
Poprawki błędów
FontFamilyResolver
używa terazDispatchers.Main
do procedur współbieżnych zarządzania pamięcią podręczną. (Ie8dd9)AndroidViewBinding
synchronicznie usuwa teraz instancjeFragment
utworzone przez uwzględnienie elementuFragmentContainerView
w układzie w ramach funkcjionRelease
za pomocą funkcjicommitNow
(zamiast używanej wcześniej funkcjicommit
), co rozwiązuje problemy z metodą Live Edit polegającą na zastępowaniu kompozycji po wprowadzeniu zmian. (I58fbf)
Wersja 1.6.0-alpha07
4 października 2023 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha07
Wersja 1.6.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadziliśmy
PlatformTextInputMethodTestOverride
do pisania testów niestandardowych edytorów tekstu. (Id159b) - Dodaje
dragAndDropSource
Modyfikator do rozpoczynania sesji przeciągania i upuszczania orazdragAndDropTarget
Modyfikator do odbierania danych z sesji przeciągania i upuszczania. (Ib7828, b/286038936) - Dodano kolekcje
ColorList
iColorSet
, które nie wymagają przydzielania. (I744bd) - Dodano
DisableNonLinearFontScalingInCompose
tymczasową flagę, która wyłącza nieliniowe skalowanie czcionki. Jeśli potrzebujesz czasu na ich wyczyszczenie, ustaw w testach wartośćDisableNonLinearFontScalingInCompose = true
. Ten atrybut zostanie usunięty w Compose 1.6.0-beta01. (Ic9486)
Poprawki błędów
- Zoptymalizowana analiza obiektów rysowalnych wektorowo w formacie XML. (Ibb015)
Wersja 1.6.0-alpha06
20 września 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha06
Wersja 1.6.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Dodatkowe optymalizacje ikon Material Design. (I3e08d)
- Dodaje możliwość poruszania się w górę i w dół drzewa modyfikatorów w celu znalezienia podobnych węzłów. (I2d234)
- Dodano wywołanie zwrotne
onRestoreFailed()
do modyfikatorafocusRestorer()
(Ie1d43) - Dodano adnotacje androidx do różnych interfejsów API grafiki, aby określić
ColorInt
,FloatRange
,IntRange
,Size
i inne. (Id65c8, b/290950582) - Dodano definicję
showSystemUi=true
doPreviewScreenSizes
(Ib61d3)
Zmiany w zachowaniu
- Compose używa teraz nieliniowego skalowania czcionek, co zwiększa czytelność i ułatwia korzystanie z aplikacji. Gdy skala czcionki w ustawieniach systemu jest większa niż 100%, mały tekst zwiększa się normalnie, ale już duży tekst zwiększa się tylko nieznacznie. Wysokość wiersza zdefiniowana w SP będzie się też automatycznie dostosowywać, aby zachować proporcje do wysokości przy skali 100%. Więcej informacji znajdziesz w sprawdzonych metodach dotyczących skalowania czcionek. (I11518)
Wersja 1.6.0-alpha05
6 września 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha05
Wersja 1.6.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Włącz przechwytywanie treści w
AndroidComposeViewAccessibilityDelegateCompat
. (Ib2969) - Prędkości przesunięcia w komponentach View, takich jak
ScrollView
iRecyclerView
, są ograniczone doViewConfiguration.ScaledMaximumFlingVelocity
. Komponowanie ma teraz własną wersjęmaximumFlingVelocity
, która dotyczyDraggable
. (Ibf974) - Dodaje początkową strukturę obsługi interfejsów API platformy do przeciągania i upuszczania. (If84ce)
- Dodaj
deviceId
doRotaryScrollEvent
(Iba3bf) - Zaktualizowano interfejs
ui-tooling
Devices API, aby uwzględniał nowsze urządzenia (Ib25b4).
Wersja 1.6.0-alpha04
23 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha04
Wersja 1.6.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano metodę dezaktywacji
ReusableComposition
, która usuwa obserwacje, ale zachowuje węzły. Dezaktywowaną kompozycję można ponownie aktywować, dzwoniąc pod numersetContent
. (Ib7f31) - Dodanie interfejsu
ReusableComposition
do zarządzania cyklem życia i ponownym wykorzystywaniem podkompozycji. (I812d1, b/252846775) Modifier.focusGroup
został przeniesiony do stabilnych interfejsów API. (I7ffa3)- Dodano adnotacje androidx do różnych interfejsów API grafiki, aby określić
ColorInt
,FloatRange
,IntRange
,Size
i inne. (I70487, b/290950582) - Zaktualizowano interfejs
ColorFilter
API, aby zawierał konkretne typy podklas, co ułatwia sprawdzanie parametrów. (I5fe29) - Wprowadzenie biblioteki wear-tooling-preview, która zawiera listę prawidłowych urządzeń z Wear OS, na których można wyświetlać podgląd interfejsu (Ib036e).
- Utworzono interfejs
FontScalable
do obsługi skalowania czcionek w interfejsie gęstości. (I2cf3f)
Wersja 1.6.0-alpha03
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha03
Wersja 1.6.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Nowy typ przejścia wejścia/wyjścia, który skaluje treść na podstawie rozmiaru animowanego kontenera podczas animacji wejścia i wyjścia.
LookaheadScope
Funkcje i interfejs kompozycyjny są teraz stabilne. (Ifb2ce) - Dodano obsługę konfigurowania
privateImeOptions
(Idb772)
Poprawki błędów
PopupPositionProvider.calculatePosition
będzie teraz automatycznie aktualizować pozycję wyskakującego okienka, gdy zmieni się stan odczytany w obliczeniach. (I676a1, b/292257547)- Rozwiązaliśmy problem z wyświetlaniem klawiatury i możliwością edytowania pól tekstowych, gdy wartość
readOnly
wynosiła „true”. Naprawiliśmy też problem polegający na tym, że klawiatura nie wyświetlała się, gdy wartośćreadOnly
zmieniała się z prawda na fałsz, gdy element był aktywny. (I34a19, b/246909589) - Rozszerzone zastosowanie globalnych asercji w testach interfejsu. (I1f90d)
Wersja 1.6.0-alpha02
26 lipca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha02
Wersja 1.6.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs lokalizatora usług, który może być implementowany przez osoby implementujące kompozycję. Umożliwia on implementację kompozycji, która przekazuje wyszukiwania usług delegowanych do innej kompozycji do oryginalnej kompozycji. Nie należy wywoływać tej funkcji bezpośrednio. Służy ona do tworzenia eksperymentalnych interfejsów API w środowisku wykonawczym, które można znaleźć w wersjach kompozytora, takich jak moduł interfejsu. (I296b9)
- Całkowicie przeprojektowany
PlatformTextInput*
interfejs API. (I6c93a, b/274661182, b/267235947, b/277380808) - Atrybuty
SoftwareKeyboardController
iLocalSoftwareKeyboardController
nie są już eksperymentalne.LocalSoftwareKeyboardController
jest teraz też prawidłowymCompositionLocal
. (I4c364) - Interfejsy
LookaheadLayout
iLookaheadLayoutScope
zostały wycofane w kilku wersjach i zostały już usunięte. Zastępujące interfejsy API toLookaheadScope
, które mogą współpracować z dowolnym układem. (I12ac3) - Dodano
SemanticsNodeInteraction.requestFocus
jako wygodniejszy i łatwiejszy do znalezienia sposób na żądanie ostrości w testach. (Ie8722) - Dodano eksperymentalne interfejsy API do rejestrowania globalnych asercji, które będą w przyszłości używane przez platformy testowe. (I12d77)
Poprawki błędów
- Pierwsze wywołanie zwrotne
AndroidView
update
będzie teraz odraczane do momentu dołączenia widoku, zamiast uruchamiać się po zastosowaniu kompozycji, która wprowadzaAndroidView
. Rozwiązuje to błąd, w którym wywołanie zwrotneupdate
nie było unieważniane, jeśli stan, z którego odczytywało dane, został natychmiast zmieniony przez efekt. (Ie9438, b/291094055)
Wersja 1.6.0-alpha01
21 czerwca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.6.0-alpha01
Wersja 1.6.0-alpha01 zawiera te zmiany.
Nowe funkcje
- Obsługa wyprzedzenia w przypadku ścieżki
LazyList
. Dzięki temuLazyList
w przepustce wyprzedzającej może pominąć dowolną animację (np.animację umieszczania elementu,AnimatedVisibility
itp.) i obliczyć rozmiar i pozycję wyprzedzającą dla wszystkich elementów podrzędnych. Po wykonaniu ruchu wyprzedzającego dzieci w wiekuLazyList
mogły animować niezależnie od rzeczywistości widocznej w ruchu wyprzedzającym.
Zmiana działania: w Compose wartość domyślna parametru includeFontPadding to teraz false
W funkcji tworzenia wiadomości wartość domyślna parametru includeFontPadding
to teraz false (21d806).
includeFontPadding
to starszy atrybut, który określa, czy dodać dodatkowe dopełnienie nad pierwszym i pod ostatnim wierszem tekstu, aby uwzględnić znaki, które mogą wystawać ponad lub poniżej linii bazowych tekstu.
Zaktualizowanie tej wersji Compose zmieni sposób renderowania wszystkich tekstów w interfejsie, ponieważ usunie dodatkowe dopełnienie nad pierwszym i pod ostatnim wierszem każdego wyświetlanego tekstu.
W zależności od wymagań interfejsu i używanych danych o czcionce zmiany powinny być minimalne. Możesz jednak napotkać przeszkody, takie jak: - nieudane testy zrzutów ekranu; W razie potrzeby popraw interfejs i wygeneruj ponownie wzorcowe obrazy. – Tekst jest lekko przesunięty. Usuń niestandardowe ujemne dopełnienie lub w razie potrzeby dodaj dopełnienie.
Możesz włączyć includeFontPadding
, używając PlatformTextStyle
dla każdego tekstu:
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = true/false
)
/* … */
)
)
Możesz włączyć includeFontPadding
dla wszystkich tekstów, konfigurując style Material. Pamiętaj, że nazwy parametrów będą się różnić w przypadku M2 i M3.
val Typography = Typography(
body1 = TextStyle(
fontFamily = /* … */,
fontSize = /* … */,
platformStyle = PlatformTextStyle(
includeFontPadding = false
)
/* … */
)
)
MaterialTheme(
typography = Typography,
/* … */
)
Więcej informacji o Compose znajdziesz includeFontPadding
w dokumentacji dla deweloperów i tym poście na blogu.
Jeśli napotkasz problemy lub błędy związane z tą zmianą, zgłoś je za pomocą narzędzia do śledzenia problemów.
Zmiany w interfejsie API
- Wesprzyj kanał
InputConnection#requestCursorUpdates
(I0c69b) - Dodano
FocusRequester.saveFocusedChild
iFocusRequester.restoreFocusedChild
(Ic557e, b/272302679, b/275157318) - Dodaj typ
ResourceResolutionException
, aby opakować obiekty throwable zgłaszane podczas próby wczytania zasobów bitmapowych z opisem ścieżki zasobu, którego nie udało się wczytać. (I19f44, b/230166331, b/278424788) - Zoptymalizowany dostęp pod kątem wydajności i alokacji pamięci. (Iede48)
- Dodano właściwości i działania semantyczne, aby obsługiwać tłumaczenie tekstu. (I4a6bc)
- Nowa właściwość w
IntrinsincMeasureScope
i jej implementacje (np.MeasureScope
) wskazujące, czy bieżące przejście pomiaru jest przejściem wyprzedzającym. (I7a812) - Zaktualizowaliśmy interfejs
DrawScope
API, aby umożliwić ponowne kierowanie renderowania na inne obszary robocze o innej gęstości, kierunku układu i rozmiarze. - Zaktualizowano
DrawContext
, aby obsługiwać konfigurację gęstości i kierunku układu, a także możliwość konfigurowania obszaru roboczego. (Ie1f9b, b/225408150) - Dodano
Paragraph#fillBoundingBoxes
do obliczania ramek ograniczających znaki. (If30ee) - Dodano zestaw typowych
MultiPreviews
(Ia5a27)
Poprawki błędów
- Dodano
FocusTargetModifierNode
interfejs, za pomocą którego można tworzyć niestandardoweFocusTarget
. (I9790e) - Zmieniono nazwy parametrów
fallback*
w konstruktorzeTextMeasurer
nadefault*
. (I940a5) - Zmieniono nazwę
SemanticsPropertyReceiver.performImeAction
naonImeAction
iSemanticsActions.PerformImeAction
naOnImeAction
. (I8e841) - Dodaje Wheel, aby odróżnić przewijanie myszą od przeciągania w przewijaniu zagnieżdżonym (w szczególności w
NestedScrollConnection
). (Ie57e4) - Dodano interfejs API
asComposePaint
, który zastępuje interfejstoComposePaint
, ponieważ zwracany obiekt otacza oryginalny obiektandroid.graphics.Paint
(I22b4c). - Wycofaj parametr
SemanticsProperties.imeAction
i zastąp go nowym parametremSemanticsActions.performImeAction
. (I4a587) - Dodaliśmy obsługę zaznaczania za pomocą myszy. Zaznaczanie dotykowe będzie rozszerzane o wyrazy i zmniejszane o znaki. (Ic0c6c, b/180639271)
- Metody
Paragraph
, które wcześniej zgłaszały wyjątekAssertionError
w przypadku przesunięć poza zakres, zgłaszają teraz wyjątekIllegalArgumentException
, tak jak robi toMultiParagraph
. (I549d3, b/243338896)
Wersja 1.5
Wersja 1.5.4
18 października 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.4
Wersja 1.5.4 zawiera te zmiany.
Wersja 1.5.3
4 października 2023 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.3
Wersja 1.5.3 zawiera te zmiany.
Poprawki błędów
- (b/301209788)
TextField
czasami nieprawidłowo stosował poprzednie polecenia podczas ustawiania ostrości i wpisywania tekstu w języku koreańskim, co powodowało utratę znaków.
Wersja 1.5.2
27 września 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.2
Wersja 1.5.2 zawiera te zmiany.
Poprawki błędów
- Dodano obejście problemu z awariami, które występowały, gdy interfejs API przewijania ułatwień dostępu był wywoływany z wątku w tle.
- Naprawiono dodawanie nieprzyłączonych węzłów do drzewa semantycznego.
Wersja 1.5.1
6 września 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.1
Wersja 1.5.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem z wyświetlaniem klawiatury i możliwością edytowania pól tekstowych, gdy wartość
readOnly
wynosiła „true”. Naprawiliśmy też problem polegający na tym, że klawiatura nie wyświetlała się, gdy wartośćreadOnly
zmieniała się z prawda na fałsz, gdy element był aktywny. (I34a19, b/246909589)
Wersja 1.5.0
9 sierpnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0
Wersja 1.5.0 zawiera te zmiany.
Wersja 1.5.0-rc01
26 lipca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-rc01
Wersja 1.5.0-rc01 zawiera te zmiany.
Poprawki błędów
- Usunięto awarię występującą, gdy element
SubcomposeLayout
jest używany w elemenciemovableContentOf()
.
Wersja 1.5.0-beta03
28 czerwca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-beta03
Wersja 1.5.0-beta03 zawiera te zmiany.
Poprawki błędów
- Dodano interfejs FocusTargetModifierNode, którego można używać do tworzenia niestandardowego elementu FocusTarget. (Ifb1d6)
- Rozwiązaliśmy problem z komponentami Dialog i Popup, który mógł powodować, że okno podrzędne nie zmieniało rozmiaru zgodnie z oczekiwaniami po użyciu
usePlatformDefaultWidth=true
. (I112ee)
Wersja 1.5.0-beta02
7 czerwca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-beta02
Wersja 1.5.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs
asComposePaint
API, który umożliwia korzystanie z instancjiandroid.graphics.Paint
w Compose.
Poprawki błędów
- Dodano interfejs API
asComposePaint
, który zastępuje interfejstoComposePaint
, ponieważ zwracany obiekt otacza oryginalny obiektandroid.graphics.Paint
(I22b4c).
Wersja 1.5.0-beta01
24 maja 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-beta01
Wersja 1.5.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto alokacje w przypadku ponownego komponowania, animacji kolorów i
AndroidComposeView
(Ib2bfa) - Dodaje funkcję pomocniczą
CacheDrawModifierNode()
, która umożliwia przekazywanie uwierzytelniania (Icf8f9). - Wprowadziliśmy właściwość
isLookingAhead
, dostępną zMeasureScope
, która umożliwia obserwowanie wyników wyprzedzających i w razie potrzeby wpływanie na główny przebieg. (Ibf4c3) - Nowa właściwość semantyczna
traversalIndex
, liczba zmiennoprzecinkowa używana do zmiany kolejności węzłów podczas przechodzenia po drzewieTalkBack
(niższe wartości są przed wyższymi). (I9a81b, b/186443263) - Zmiana nazwy usługi Semantics
isContainer
naisTraversalGroup
(I121f6) ColorProducer
ma terazoperator fun invoke
zamiastproduce
(I4a9a2)- Dodano interfejs API przekształceń
Path
, który umożliwia stosowanie przekształceń polegających na przesuwaniu, skalowaniu i obracaniu obiektów ścieżki. (I23434, b/233772232) - Metoda
ColorProducer
jest wywoływana jakoproduce
. (I78bde) - Zmień nazwę
toFrameworkColorSpace
natoAndroidColorSpace
(I4f547) - Zmień nazwę
ColorLambda
naColorProducer
. (I73b1a) - Wprowadzenie interfejsów API do konwertowania typów przestrzeni kolorów Androida i Compose. (Ie7db4, b/279979665)
- Dodano parametr koloru do
BasicText
, aby umożliwić efektywne animowanie lub ustawianie koloru tekstu. (Iffd88, b/246961787) - Zmieniono nazwę
TextRange.constrain
naTextRange.coerceIn
. (I31be2) - Dodano zoptymalizowany element
TextStyle.merge(...)
z pełną listą parametrów. (Iad234, b/246961787) - Stabilizacja wielu interfejsów API do obsługi tekstu, w tym
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
,MultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
nie jest już wycofane. Pierwotnie zamierzaliśmy usunąć to pole, ale opinie deweloperów pokazują, że potrzebują oni tej opcji konfiguracji. Dlatego wycofujemy wycofanie tego pola (I98e96, b/277703184).- Dodano publiczną metodę
TextRange.constrain
. (I97912) UrlAnnotation
wAnnotatedString
można teraz otwierać za pomocą usług ułatwień dostępu, takich jakTalkBack
. (If4d82, b/253292081)- Dodano działanie semantyczne
InsertTextAtCursor
dla pól tekstowych. (I11ed5) - Konstruktor
LineHeightStyle.Alignment(topRatio)
został przeniesiony do stabilnego interfejsu API. (I79c32, b/261565383) - Interfejs
TextMeasurer
i powiązane z nim interfejsy API nie są już eksperymentalne. (I74647, b/261581753) - Dodano działanie semantyczne
PerformImeAction
, aby wywoływać działanie IME w węzłach edytora tekstu. (Ic606f, b/269633506) - Interfejsy
PlatformTextInput
API nie są już eksperymentalne w przypadku Androida. (I668eb) - zmieniono nazwę parametru wartości dla
Enum.valueOf
(Ia9b89) - więcej wyjątków zgłaszanych przez enum valueOf (I818fe)
- Wprowadziliśmy nowy interfejs API niskiego poziomu
PlatformTextInputAdapter
do tworzenia niestandardowych implementacji wprowadzania tekstu, które komunikują się bezpośrednio z interfejsami API platformy. (I58df4) - Dodano parametr
BlendMode
do metodDrawScope.drawText
,Paragraph.paint
iMultiParagraph.paint
, aby obsługiwać różne algorytmy mieszania podczas rysowania tekstu na elemencie Canvas. (I57508) - Zmień nazwę
Font.MaximumAsyncTimeout
naFont.MaximumAsyncTimeoutMillis
. Zmień tylko nazwę. (I07af5) - Zaktualizowane wartości DPI urządzeń referencyjnych
@Preview
(Id6151, b/254528382) - Dodaj parametry
brush
ialpha
doBasicText
, aby umożliwić efektywne animowanie lub ustawianie pędzla tekstowego. - Zdefiniuj typy lambda bez opakowania dla typów Float, Double, Long, Int i Short w :ui:ui-unit (I6f18d, b/246961787)
Poprawki błędów
- Usunięto wiele alokacji w śledzeniu prędkości wskaźnika (I26bae)
- Zmniejszenie alokacji w zarządzaniu układem i dane wejściowe wskaźnika (I5333a)
- Optymalizacja wykorzystania pamięci przez Vector i renderowania pierwszych klatek (I2f3c6)
- Usunięto przydziały podczas rysowania linii i punktów za pomocą Canvas (I9f535)
- Dodaj dokumenty dla
AndroidFont.fontVariationSettings
(I7d9e2)
Wkład zewnętrzny
- Poprawa wydajności i zmniejszenie przydziałów w interfejsach Vector API (I906cb)
Wersja 1.5.0-alpha04
10 maja 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-alpha04
Wersja 1.5.0-alpha04 zawiera te zmiany.
Nowe funkcje
Modifier.Node
Ulepszenia delegowania Dodano ulepszoną możliwość delegowania do innych instancjiModifier.Node
z instancjiDelegatingNode
. Możesz to zrobić za pomocą interfejsów APIdelegate
iundelegate
. Przed tą zmianą każdy interfejs API z węzła delegującego musiał być jawnie delegowany do węzła delegowanego. Po tej zmianie interfejsy węzłów będą delegowane niejawnie, chyba żeDelegatingNode
wyraźnie je zastąpi. (67352bc)
Zmiany w interfejsie API
- Wprowadź
NestedScrollModifierNode
, czyliNestedScroll Modifier.Node
, któremu można przekazywać dane logowania. (I69513) - Dodaliśmy parametry
onReset
ionRelease
do funkcjiAndroidViewBinding
, które odzwierciedlają funkcjęAndroidView
i umożliwiają ponowne użycie widoku za pomocą funkcjiViewBinding
. (I00b1e, b/276802519) - Zaktualizowaliśmy interfejs Compose Path API, aby obsługiwał operacje przewijania, co ułatwia częste manipulowanie ścieżką i szybsze ponowne wykorzystywanie. (I7b797)
- Dodano zoptymalizowany element
TextStyle.merge(...)
z pełną listą parametrów. (Iad234, b/246961787) - Stabilizacja wielu interfejsów API do obsługi tekstu, w tym
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
,MultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245) PlatformTextStyle.includeFontPadding
nie jest już wycofane. Pierwotnie zamierzaliśmy usunąć to pole, ale opinie deweloperów pokazują, że potrzebują oni tej opcji konfiguracji. Dlatego wycofujemy wycofanie tego pola (I98e96, b/277703184).
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że klawiatura nie wyświetlała się w polach tekstowych w oknach dialogowych, które nie zostały utworzone za pomocą funkcji kompozycyjnej
Dialog
. (I82551, b/262140644)
Wersja 1.5.0-alpha03
19 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-alpha03
Wersja 1.5.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Nowe domyślne działanie w przypadku
SubcomposeLayout
wLookaheadScope
:SubcomposeLayouts
, które nie mają warunkowych slotów (np.TabRow
,Scaffold
,BoxWithConstraints
itp.), działają teraz prawidłowo z animacjami wyprzedzającymi.
Zmiany w interfejsie API
- Nowa wartość domyślna
intermediateMeasurePolicy
, która ponownie wykorzystuje zasady pomiaru z wyprzedzającego przebiegu, umożliwia działanie podtypówSubcomposeLayout
bez warunkowych miejsc docelowych, takich jakScaffold
,TabRow
iBoxWithConstraints
, z wyprzedzającym przebiegiem. (Id84c8) - Kompozytor utworzony dla okna Androida będzie teraz blokować tylko wywołania
withFrameNanos
, a nie całą kompozycję, gdy otrzyma powiadomienieON_STOP
. Oznacza to, że okna powiązane z zatrzymanymi aktywnościami będą nadal ponownie komponowane w przypadku zmian danych, ale animacje lub inne wywołania funkcjiwithFrameNanos
będą blokowane. (Id9e7f, b/240975572) - Zmienia
motionEventSpy
na wersję stabilną. (Ic5ec4, b/261560988) - Dodano publiczną metodę
TextRange.constrain
. (I97912) PlatformTextStyle.includeFontPadding
nie jest już wycofany, aby zachęcić deweloperów do korzystania z tego interfejsu API zgodności w celu przełączania i testowania ustawieniaincludeFontPadding
na wartość false. (I98e96, b/277703184)
Wersja 1.5.0-alpha02
5 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-alpha02
Wersja 1.5.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Nowy interfejs API
SubcomposeLayout
, który przyjmuje dodatkowe zasady dotyczące pomiarów pośrednich do obsługi logiki pomiarów/układu podczas animacji opartych na wyprzedzeniu. (I017d3) - Funkcja PointerInput jest teraz leniwa i korzysta z Modifier.Node, co zapewnia lepszą wydajność (więcej informacji o niewielkiej zmianie w działaniu). (15dab9)
- Zmienia eksperymentalne interfejsy API na stabilne z kluczowymi zdarzeniami. (I9c7d8, b/261566839, b/261567368)
- Zmiana eksperymentalnych interfejsów API na stabilne w
PointerInputChange
. (I1b543, b/261560988, b/261565762, b/261565749) - Umożliwia tworzenie instancji
SuspendingPointerInputModifierNode
w przypadku bardziej złożonych wdrożeńModifier.Node
. (Ic4933) UrlAnnotation
wAnnotatedString
można teraz otwierać za pomocą usług ułatwień dostępu, takich jakTalkBack
. (If4d82, b/253292081)- Dodano interfejs API do przechwytywania klawiszy sprzętowych przed wysłaniem ich do klawiatury ekranowej (I4f4c6, b/186800395).
- Dodano działanie semantyczne
InsertTextAtCursor
dla pól tekstowych. (I11ed5) - Działania testowe związane z tekstem (np.
performTextInput
) będą teraz bezpośrednio żądać fokusu za pomocą działania semantycznego zamiast klikania pola. (I6ed05)
Poprawki błędów
- Działania testowe dotyczące tekstu wymagają teraz włączenia pól tekstowych. (Iab328)
Wersja 1.5.0-alpha01
22 marca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.5.0-alpha01
Wersja 1.5.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Modifier.intermediateLayout nie wymaga już jawnego LookaheadScope. Blok pomiarowy w elemencie intermediateLayout ma jako odbiorcę element IntermediateMeasureScope, który zapewnia wygodne elementy CoroutineScope, LookaheadScope i MeasureScope.(Ibe2e5)
- LookaheadLayout został zastąpiony przez LookaheadScope, który nie jest już układem. Dzięki temu treści podrzędne w obszarze LookaheadScope mogą być bezpośrednio kontrolowane przez element MeasurePolicy elementu nadrzędnego. (Ibe2e5)
- Dodaje
Modifier.Node#coroutineScope
, aby umożliwić węzłom modyfikatora uruchamianie korutyn. (I76ef9) - Zezwól węzłom modyfikatora na odczytywanie lokalnych kompozycji, implementując interfejs CompositionLocalConsumerModifierNode. (Ib44df)
- Przenoszenie adnotacji @Deprecated z klasy na właściwość. (I882d1)
Wersja 1.4
Wersja 1.4.3
3 maja 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.3
Wersja 1.4.3 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że znak
AndroidView
mógł być nieprawidłowo rozmieszczony w przypadku użycia z niektórymi modyfikatorami. (I4dc77, b/274797771) - Naprawiono błąd w wyszukiwaniu 2D, który dotyczył
DropDown
menu (b/276811828). - Naprawiliśmy błąd we właściwościach niestandardowego fokusu wejścia/wyjścia, który powodował, że blok wejścia/wyjścia był uruchamiany tylko przy pierwszym wywołaniu funkcji lambda (b/277234245).
- Naprawiliśmy regresję w systemie ostrości, która powodowała awarię podczas odczytywania
focusProperties
. (b/271324781, b/274897776)
Wersja 1.4.2
19 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.2
Wersja 1.4.2 zawiera te zmiany.
Poprawki błędów
- Rozwiązaliśmy problem, który powodował, że funkcja
AndroidView
nieprawidłowo ponownie wykorzystywała modyfikatory, co mogło prowadzić do nieoczekiwanego zachowania i awarii. (Ib67ee, b/275919849) - Usunięto regresję, która powodowała, że klawiatura nie wyświetlała się w polach tekstowych w oknach, które nie zostały utworzone przez funkcję
Dialog
(I82551, b/262140644).
Wersja 1.4.1
5 kwietnia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.1
Wersja 1.4.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązuje problem z
ParentDataModifier
, który nie wpływał naAndroidView
(b/274797771)
Wersja 1.4.0
22 marca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0
Wersja 1.4.0 zawiera te zmiany.
Ważne zmiany od wersji 1.3.0
- Dodano nowy interfejs API
PinnableContainer
, który umożliwia przypinanie elementów leniwej listy, dzięki czemu nie są one usuwane, gdy zostaną przewinięte poza granice. Na przykładModifier.focusable()
używa tego mechanizmu do przypinania aktualnie zaznaczonego elementu. (Ib8881, b/259274257, b/195049010) - System ostrości został przepisany przy użyciu nowych eksperymentalnych
Modifier.Node
interfejsów API. (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589) - Dodano właściwość semantyczną
IsContainer
w przestrzeniach. Ta właściwość zostanie użyta w późniejszej zmianie, która określa kolejność przechodzenia na podstawie znaczenia semantycznego elementów, takich jak powierzchnie. (I63379) - Dodaliśmy nową rolę ułatwień dostępu
DropdownList
. Można go użyć do odtworzenia zachowaniaTalkBack
podczas ustawiania ostrości naandroid.widget.Spinner
. (I177e5, b/236159001) - Możesz teraz użyć
PlatformTextStyle(emojiSupportMatch)
, aby opcjonalnie wyłączyć przetwarzanie obsługi emoji w przypadku pojedynczego akapitu. (Ia7100, b/139326806) - Testy interfejsu Androida Compose będą teraz uruchamiać przebiegi układu dla każdej klatki podczas wykonywania klatek, aby przejść do stanu bezczynności (np. za pomocą
waitForIdle
). Może to mieć wpływ na testy, które sprawdzają poszczególne klatki animacji układu. (I8ea08, b/222093277) - Dodano eksperymentalny parametr
TextMotion
do parametruTextStyle
, aby określić, czy tekst ma byćStatic(default)
czy animowany. UżyjTextMotion.Animated
, jeśli tekst ma być skalowany, tłumaczony lub obracany za pomocą animacji. (I24dd7)
Wersja 1.4.0-rc01
8 marca 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-rc01
Wersja 1.4.0-rc01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano przeciążenie funkcji z adnotacją
AndroidView
, które akceptuje parametronReset
. Umożliwia ponowne użycie instancji View, gdy ich węzeł w kompozycji zostanie odrzucony i ponownie użyty w zgodny sposób. Jest to szczególnie przydatne w przypadkuLazyRows
iLazyColumns
wyświetleń. (I3f10d, b/230099236) - Wprowadziliśmy nowy interfejs API niskiego poziomu
PlatformTextInputAdapter
do tworzenia niestandardowych implementacji wprowadzania tekstu, które komunikują się bezpośrednio z interfejsami API platformy. (I58df4)
Poprawki błędów
- Działanie semantyczne
BasicTextField
'sSetText
będzie teraz aktualizować bufor tekstu przy użyciu tej samej ścieżki kodu co aktualizacje IME i funkcje testowe (np.performTextReplacement
). - Funkcje testowania tekstu
performTextClearance
,performTextReplacement
iperformTextSelection
używają terazSemanticsActions
. (I0807d, b/269633168, b/269624358)
Wersja 1.4.0-beta02
22 lutego 2023 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-beta02
Wersja 1.4.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Usunęliśmy interfejs API
modifierElementOf()
. Zamiast tego rozszerzaj bezpośrednio zModifierNodeElement
. (I2256b) - Dodano nowe wywołanie zwrotne
Modifier.Node.onReset()
, które umożliwia zresetowanie stanu lokalnego, aby prawidłowo obsługiwać sytuację, w której komponentLayout
jest ponownie używany (np. jako element komponentuLazyColumn
). Poprawiono komponentFocusTargetModifierNode
, aby prawidłowo resetować stan zaznaczenia. (I65495, b/265201972) - Dodano parametr
BlendMode
do metodDrawScope.drawText
,Paragraph.paint
iMultiParagraph.paint
, aby obsługiwać różne algorytmy mieszania podczas rysowania tekstu na elemencie Canvas. (I57508)
Poprawki błędów
- Ulepszono algorytm kolejności elementów, na których skupia się ułatwienie dostępu. Na przykład paski u góry i u dołu są częściej odczytywane odpowiednio jako pierwsze i ostatnie (74e9c5).
Wersja 1.4.0-beta01
8 lutego 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-beta01
Wersja 1.4.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Nazwa elementu
PinnableContainer.PinnedHandle.unpin()
została zmieniona narelease()
(I4667a) - Dodano
waitUntilNodeCount
,waitUntilAtLeastOneExists
,waitUntilExactlyOneExists
iwaitUntilDoesNotExist
jako eksperymentalne interfejsy API doComposeTestRule
, rozszerzając interfejs APIwaitUntil
, aby akceptował dowolny rodzaj dopasowania i dowolną liczbę węzłów. Więcej informacji znajdziesz wComposeTestRule
. (Ifa1b9, b/226934294) - Zmień nazwę
Font.MaximumAsyncTimeout
naFont.MaximumAsyncTimeoutMillis
. (I07af5) - Usunięto
GoogleFont.Provider.AllFontsListUri
i dodano do niego link w ktdoc. (I16f29)
Poprawki błędów
- Dodaj dokumenty dla
AndroidFont.fontVariationSettings
(I7d9e2)
Wersja 1.4.0-alpha05
25 stycznia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-alpha05
Wersja 1.4.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadziliśmy nowe eksperymentalne przeciążenia funkcji
runComposeUiTest
icreate*ComposeRule
, które akceptują parametryCoroutineContext
. Kontekst będzie używany do tworzenia testu oraz wszystkich wywołańLaunchedEffect
irememberCoroutineScope()
w teście. (I10614, b/265177763) - Dodanie nowego interfejsu API do śledzenia prędkości 1-wymiarowej (If5a82)
- Urządzenie
FocusRequester
zostało oznaczone jako@Stable
. (I580ee) - Usuń eksperymentalną adnotację z konstruktora
DialogProperties
, który przyjmuje parametrusePlatformDefaultWidth
. (Ic4048) - Dodano funkcję obliczania pozycji i stycznej w określonej odległości na ścieżce – z
PathMeasure.getPosition()
iPathMeasure.getTangent()
(I3b47c) - Usunięto przypadkowo udostępniony publiczny setter w
PlatformParagraphStyle
. (I07f47) - Więcej informacji o typach i możliwościach przyjmowania wartości null w przypadku funkcji wbudowanych i ukrytych (I24f91)
- Dodaj
AnnotatedString.hasStringAnnotations
, aby wyszukać adnotacje z zerową liczbą przydzielonych zasobów. (I94dfe, b/246960758) - Dodaliśmy nowy przeciążony wariant funkcji
TextMeasurer.measure
, który przyjmuje wartośćString
jako tekst. (I47b2d, b/242705342) - Interfejsy API
LineBreak
iHyphens
w TextStyle zostały przeniesione do wersji stabilnej. (Ic1e1d)
Wkład zewnętrzny
- Metody
notifyFocusedRect
w przestrzeniach nazwTextInputSession
iTextInputService
nie są już wycofane. (I23a04, b/262648050)
Wersja 1.4.0-alpha04
11 stycznia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-alpha04
Wersja 1.4.0-alpha04 zawiera te zmiany.
Nowe funkcje
- Dodano nowy interfejs API
PinnableContainer
, który umożliwia przypinanie elementów leniwej listy, dzięki czemu nie są one usuwane, gdy zostaną przewinięte poza granice. Na przykładModifier.focusable()
używa tego mechanizmu do przypinania aktualnie zaznaczonego elementu. (Ib8881, b/259274257, b/195049010) - System ostrości został przepisany przy użyciu nowych eksperymentalnych
Modifier.Node
interfejsów API. (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589) - Dodano właściwość semantyczną
IsContainer
w przestrzeniach. Ta właściwość zostanie użyta w późniejszej zmianie, która określa kolejność przechodzenia na podstawie znaczenia semantycznego elementów, takich jak powierzchnie. (I63379) - Dodano nową rolę ułatwień dostępu
DropdownList
. Można go użyć do odtworzenia działaniaTalkBack's
podczas ustawiania ostrościandroid.widget.Spinner
. (I177e5, b/236159001) - Możesz teraz użyć
PlatformTextStyle(emojiSupportMatch)
, aby opcjonalnie wyłączyć przetwarzanie obsługi emoji w przypadku pojedynczego akapitu. (Ia7100, b/139326806) - Testy interfejsu Androida Compose będą teraz uruchamiać przebiegi układu dla każdej klatki podczas wykonywania klatek, aby przejść do stanu bezczynności (np. za pomocą
waitForIdle
). Może to mieć wpływ na testy, które sprawdzają poszczególne klatki animacji układu. (I8ea08, b/222093277) - Dodano eksperymentalny parametr
TextMotion
do parametruTextStyle
, aby określić, czy tekst ma byćStatic(default)
czy animowany. UżyjTextMotion.Animated
, jeśli tekst ma być skalowany, tłumaczony lub obracany za pomocą animacji. (I24dd7)
Zmiany w interfejsie API
- Zastąpiliśmy argument
maxSize: IntSize
w funkcjidrawText
argumentemsize: Size
, aby był zgodny z innymi funkcjamiDrawScope
. Domyślnie parametrsize
jest ustawiony naSize.Unspecified
, co nie powinno zmieniać poprzedniego domyślnego działania. (Icd27d) - Usunięto wycofany eksperymentalny konstruktor czcionek. (I8a724, b/261435386)
- Klasa danych narzędzi interfejsu
Group
ma teraz poleisInline
, które wskazuje, czy grupa jest przeznaczona do wywołania funkcji kompozycyjnej wbudowanej. JeśliisInline
ma wartośćtrue
, wywołanie dotyczy funkcji kompozycyjnej wbudowanej. Wartość może być jednak fałszywa w przypadku wywołań wbudowanych funkcji kompozycyjnych pochodzących z modułów skompilowanych za pomocą wersji wtyczki kompilatora Compose, która nie generuje informacji o funkcji wbudowanej. (Idb846) - Przekształcenie kilku eksperymentalnych interfejsów API w stabilne
- Interfejs Rotary Scroll Event API jest już stabilny (I42ad3, b/261561229).
FontVariation
Interfejs API jest już stabilny (I8779f, b/241016309)- Wszystkie konstruktory
Font()
są teraz stabilnym interfejsem API (I5948b, b/261435386). DeviceFontFamilyName
jest teraz stabilny (I8b640, b/261435386)- Konstruktor
AndroidFont
z parametremvariationSettings
jest teraz stabilnym interfejsem API i może służyć do tworzenia nowych typów deskryptorów czcionek. (I5adcc, b/261565807) - Interfejs
createFontFamilyResolver
API jest już stabilny. Może to służyć do przechwytywania nieobsłużonych wyjątków podczas asynchronicznego wczytywania czcionek. (Ibb481, b/261435386) - Interfejs
Font.loadingStrategy
API jest już stabilny. (I5937c, b/261435386) - Interfejs
GoogleFont
API jest już stabilny. (Ic90b0, b/261435386) - Interfejs
TextUnit(float, TextUnitType)
jest teraz stabilnym interfejsem API. (I90c84, b/261561612) - Interfejs
pluralStringResource
jest teraz stabilnym interfejsem API. (I09849, b/261439703)
Wersja 1.4.0-alpha03
7 grudnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-alpha03
Wersja 1.4.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Usuwam instancję
ExperimentalComposeUiApi
z instancjiPointerIcon
(I23af8) - Wprowadzenie działań związanych z ułatwieniami dostępu na stronie:
PageUp
,PageDown
,PageLeft
,PageRight
. Pamiętaj, że są one dostępne tylko w interfejsie API w wersji 29. (Ida4ab) - Zaktualizowano widok parametru
rememberNestedScrollConnection
z widoku głównego na widok hosta. (Ia5200) - Dodaliśmy interfejs Modifier API do wysyłania zapytań o informacje o przewijaniu elementów nadrzędnych. (I2ba9d, b/203141462)
- Używany w
Clickable
do prawidłowego opóźniania interakcji z naciśnięciem, gdy gesty mogą stać się zdarzeniami przewijania. - Rozwiązaliśmy problem z nieprawidłowym opóźnianiem efektów falowania przez element
Clickables
, gdy jest używany w elemencieScrollable ViewGroup
. - Zaktualizowano panele i arkusze, aby prawidłowo opóźniać naciśnięcia w przypadku, gdy gesty mogą stać się zdarzeniami przewijania.
- Zmiana nazwy
CompositingStrategy.Always
naOffscreen
, aby wskazać, że elementgraphicsLayer
będzie zawsze renderowany do bufora pośredniego (I47dc1). - Przepełnienie układu wieloma miejscami na treści jest już stabilne (I10566, b/248294649)
- Dodaliśmy eksperymentalne nowe interfejsy API
PerfettoTrace.record {}
iPerfettoTraceRule
, które umożliwiają rejestrowanie śladów Perfetto (znanych też jako ślady systemowe) w ramach testu, aby sprawdzać zachowanie i wydajność testu. (I3ba16) - W testach interfejsu przeprowadzanych za pomocą reguły Compose wznowienia w wywołaniach zwrotnych
withFrameNanos
nie będą wysyłane, dopóki nie zostaną wykonane wszystkie wywołania zwrotne klatek. Odpowiada to działaniu funkcji tworzenia wiadomości w normalnych warunkach. Testy, które opierają się na starym działaniu, mogą jednak zakończyć się niepowodzeniem. Powinno to mieć wpływ tylko na kod, który bezpośrednio wywołuje funkcjewithFrameNanos
lubwithFrameMillis
, oraz na logikę poza wywołaniem zwrotnym przekazywaną do tych funkcji, która może wymagać przeniesienia do wywołań zwrotnych. Przykłady zmian w teście animacji znajdziesz w tym CL. - Dodano opcjonalny parametr
onPerformTraversals: (Long) -> Unit
do konstruktoraTestMonotonicFrameClock
i funkcji fabrycznej, aby uruchamiać kod po wywołaniach zwrotnychwithFrameNanos
, ale przed wznowieniem korutyn rozmówców. (Idb413, b/254115946, b/222093277, b/255802670) - Dodano EmojiCompat do Compose (Ibf6f9, b/139326806)
- Dodano nowy parametr tapety do
@Preview
na potrzeby obsługi dynamicznych kolorów (I9f512)
Poprawki błędów
- Powiadomienia o zastosowaniu migawki są teraz wysyłane po zakończeniu wprowadzania zmian przez
Recomposer
. (Iad6c0, b/222093277) - Wprowadzono zmiany w
captureToImage
, aby umożliwić przechwytywanie zrzutów ekranu w trybie wielu okien. Jest to przydatne w przypadku testów zrzutów ekranu, które korzystają z komponentów PopUp. (I169c5)
Aktualizacje zależności
- Biblioteki Compose UI i Compose Material zależą teraz od biblioteki Lifecycle w wersji 2.5.1. (I05ab0, b/258038814)
Wersja 1.4.0-alpha02
9 listopada 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-alpha02
Wersja 1.4.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Zaktualizowano
GraphicsLayerScope
, aby wyświetlać bieżący rozmiargraphicsLayer
. Jest to przydatne do obliczania przekształceńgraphicsLayer
w funkcji rozmiaru elementu kompozycyjnego. (If8c43,b/181387080) - Wprowadziliśmy atrybut
CompositingStrategy
, który określa, kiedy należy użyć warstwy kompozycji poza ekranem do renderowania treścigraphicsLayer
. Automatycznie zachowuje domyślne działanie, które wewnętrznie wykorzystuje warstwę, jeśli zastosowano przezroczystość, lubRenderEffect/Overscroll
. Zawsze będzie wprowadzać bufor poza ekranem, w którymModulateAlpha
nie będzie używać bufora poza ekranem, ale zamiast tego będzie modyfikować każdą z zarejestrowanych instrukcji rysowania w ramachgraphicsLayer
.ModulateAlpha
nadal będzie korzystać z bufora poza ekranem w przypadku użyciaRenderEffect/Overscroll
(I25e82, b/256382834). - Do
Modifier.Node
dodanoinvalidateSubtree()
, aby umożliwić unieważnianie całych hierarchii na potrzeby układu i rysowania. (I4bd90) - Promuj
rememberNestedScrollInteropConnection
do wersji stabilnej. Wprowadziliśmy możliwość przekazywania widoku głównego dorememberNestedScrollInteropConnection
. Dzięki temu widok niestandardowy może lepiej reagować na ograniczenia przewijania, zwłaszcza w przypadku widoków niestandardowych (np.ModalBottomSheetDialog
). (I9e107) - Dodano interfejs
ObserverNode
, który może być używany przez implementacjeModifier.Node
wymagające powiadomienia o zmianie wartości, którą wcześniej odczytały (I5728b, b/247716483). - Dodaliśmy nowy konstruktor do
Paint
, który akceptuje natywnyandroid.graphics.Paint
. Dodaliśmy też funkcję rozszerzeniatoComposePaint()
, która przekształca istniejący natywny obiekt Paint w obiekt Paint Compose. (Ica91b) - Dodaj nowe
FontFamily.Resolver.resolveAsTypeface
do użycia na Androidzie. (I8950b) - Dodaj
ToolingState
, aby umożliwić narzędziom zmianę wewnętrznych stanów funkcji kompozycyjnej (Ie6614). - Przebudowa narzędzi w celu lepszej obsługi nowych dodanych animacji (I8677b)
- Dodano parametr
minLines
do komponentów tekstowych material i material3,TextField
iOutlinedTextField
, który umożliwia ustawienie minimalnej wysokości komponentu w wierszach (I4af1d).
Wersja 1.4.0-alpha01
24 października 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.4.0-alpha01
Wersja 1.4.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy nową metodę
awaitEachGesture()
dla detektorów gestów. Działa podobnie doforEachGesture()
, ale pętla gestów działa w całości w ramachAwaitPointerEventScope
, więc zdarzenia nie mogą zostać utracone między iteracjami. - Element
forEachGesture()
został wycofany na rzecz elementuawaitEachGesture()
, ponieważ umożliwiał utratę zdarzeń między gestami. (Iffc3f, b/251260206) - Wycofywanie odświeżania obiektów ułatwień dostępu w androidx. Nawet w przypadku najstarszych obsługiwanych wersji zmiany wydajności są znikome. (I0a961)
- Dodano
DrawStyle
jako atrybut eksperymentalny doTextStyle
iSpanStyle
, aby umożliwić rysowanie tekstu z obrysem. (If24b8, b/155421273) AnnotatedString.Builder
korzysta teraz zkotlin.text.Appendable
. (I1a061, b/231030444)AnnotatedString.Builder
ma teraz metodęappend(AnnotatedString, start: Int, end: Int)
dołączania podciąguAnnotatedString
i przecinających się stylów.- Dodano parametr
DrawStyle
do funkcji rysowaniaParagraph
iMultiParagraph
, który umożliwia rysowanie tekstu z obrysem. (Ic8102, b/155421273)
Wkład zewnętrzny
- Dziękujemy za
vighnesh
dodanie urządzeń telewizyjnych do wersji przedpremierowych (Ie15cd)
Wersja 1.3
Wersja 1.3.3
11 stycznia 2023 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.3
Wersja 1.3.3 zawiera te zmiany.
Poprawki błędów
- Naprawiono problem z zawieszaniem się aplikacji na Androidzie 9 podczas zapisywania stanu widoku Compose przez aktywność. (I0b755, b/260322832)
Wersja 1.3.2
7 grudnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.2
Wersja 1.3.2 zawiera te zmiany.
Poprawki błędów
- Zaktualizowano do wersji Profobuf 3.21.8, która zapobiega alertowi dotyczącemu bezpieczeństwa w
protobuf-javalite:3.19.4
(CVE-2022-3171) (b/255545055).
Wersja 1.3.1
9 listopada 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.1
Wersja 1.3.1 zawiera te zmiany.
Wersja 1.3.0
24 października 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0
Wersja 1.3.0 zawiera te zmiany.
Ważne zmiany od wersji 1.2.0
- Nowy eksperymentalny pakiet interfejsów API
LookaheadLayout
(umożliwiający zachowania animacji, które wcześniej były niemożliwe) - Nowy eksperymentalny pakiet interfejsów API
Modifier.Node
(wydajniejsza alternatywa dlaModifier.composed
) - Ulepszona obsługa wcięć okna.
- Obsługa zaznaczania w przypadku padów kierunkowych i klawiatur sprzętowych w LazyList.
- Maksymalna obsługiwana wysokość w oknach i wyskakujących okienkach została zmniejszona do 8 dp (zmiana powodująca niezgodność w przypadku niektórych dostosowanych systemów projektowania – uzasadnienie w informacjach o wersji beta01).
- Wiele drobnych, niepowodujących przerw w działaniu ulepszeń interfejsu API
- Wiele poprawek błędów i lepsze działanie
Wersja 1.3.0-rc01
5 października 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-rc01
Wersja 1.3.0-rc01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano nowy eksperymentalny interfejs API Hyphens, który obsługuje automatyczne dzielenie wyrazów w tekście (Iaa869).
Poprawki błędów
- Czcionki
DeviceFontFamilyName
nie będą domyślnie konfigurować ustawień wariantówwght
iital
, ale będą używać ustawień platformy dla załadowanych czcionekTypeface
. (Ia7a6d, b/246989332) - Naprawiono
LazyColumn
wyciek pamięcionModifierLocalsUpdated
– funkcja nie była wywoływana z wartością domyślną, gdy modyfikatory były używane ponownie (b/230168389).
Wersja 1.3.0-beta03
21 września 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-beta03
Wersja 1.3.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj opcje dostosowywania podziału wierszy w tekście. (I86907)
- Zmieniono argument
size:IntSize
naconstraints: Constraints
w metodzieTextMeasurer.measure
, aby obsługiwać ograniczenia minimalnej szerokości. (I37530, b/242707525)
Poprawki błędów
- Interfejs API
BackHandler
w bibliotece AndroidX Activity działa teraz w funkcji kompozycyjnejDialog
. (I35342)
Wersja 1.3.0-beta02
7 września 2022 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-beta02
Wersja 1.3.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano eksperymentalne przeciążenie funkcji Layout, które akceptuje listę wielu funkcji lambda treści, co umożliwia różne traktowanie elementów mierzalnych umieszczonych w różnych funkcjach lambda treści (Ic1b4e).
Zmiany w eksperymentalnych interfejsach API Focus:
FocusDirection.In
iFocusDirection.Out
zostały wycofane i zastąpione przezFocusDirection.Enter
iFocusDirection.Exit
. (Ia4262, b/183746982)- Dodaliśmy 2 nowe właściwości focus: enter i exit, aby określić niestandardowe działanie dla
FocusManager.moveFocus(Enter)
iFocusManager.moveFocus(Exit)
. (I5f3f9, b/183746982) - Aby anulować ruch ostrości, możesz teraz użyć
FocusRequester.Cancel
.FocusRequester.Cancel
można używać w dowolnej z tych właściwości fokusu: up, down, left, right, next, previous, start, end, enter i exit. (Ib300f)
Wersja 1.3.0-beta01
24 sierpnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-beta01
Wersja 1.3.0-beta01 zawiera te zmiany.
Zmiana struktury węzła modyfikatora
Warstwa, która obsługuje instancje Modifier/Modifier.Element
i koordynuje ich działanie na LayoutNodes
, została w znacznym stopniu zmodyfikowana. Była to zmiana w kodzie, która nie wpłynęła na publiczny interfejs API żadnego z wielu modyfikatorów w Compose i może być traktowana jako zmiana dotycząca tylko implementacji. Mimo to jest to ważna zmiana z różnych powodów. (Ie4313)
Podsumowanie zmian
Dodane eksperymentalne interfejsy API Modifier.Node
zapewniają abstrakcję, która umożliwia utrzymywanie stanu w instancji, która będzie zachowywana przez cały cykl życia węzła układu i będzie przydzielana na węzeł układu i na użycie odpowiedniego interfejsu Modifier.Element
, który go wygenerował.
Ogólnie rzecz biorąc, ta abstrakcja zapewnia alternatywny mechanizm tworzenia modyfikatorów stanu bez polegania na mechanizmach interfejsu Modifier.composed
API.
Ryzyko
Ta zmiana jest ściśle zgodna binarnie z poprzednimi wersjami i ma być w możliwie największym stopniu zgodna wstecznie pod względem obserwowalnego działania. W ramach tej zmiany nie zmodyfikowaliśmy jednak kilku podsystemów Compose i jest prawdopodobne, że zachowanie tych podsystemów uległo zmianie w sposób, który nie został uwzględniony w naszych testach i nie został jeszcze wykryty ani naprawiony.
Zachowaj ostrożność podczas aktualizowania do tej wersji. Jeśli uważasz, że coś przez to przestało działać, daj nam znać.
Eksperymentalne interfejsy API
Dodaliśmy różne eksperymentalne interfejsy API, które są związane z nową koncepcją „węzła modyfikatora”. Węzły Modifier.Node są tworzone w wyniku
fun modifierElementOf(…): Modifier
abstract class ModifierNodeElement
abstract class Modifier.Node
abstract class DelegatingNode
interface LayoutModifierNode
interface DrawModifierNode
interface SemanticsNode
interface PointerInputNode
interface ModifierLocalNode
interface ParentDataModifierNode
interface LayoutAwareModifierNode
interface GlobalPositionAwareModifierNode
interface IntermediateLayoutModifierNode
Zmiana powodująca niezgodność
Maksymalna obsługiwana wysokość w oknach i wyskakujących okienkach została zmniejszona do 8 dp.
Maksymalna obsługiwana wysokość dla okien dialogowych i wyskakujących w Compose została zmniejszona z 30 dp do 8 dp. Ta zmiana dotyczy zarówno niestandardowych okien dialogowych, jak i wyskakujących okien interfejsu. Ta zmiana ma na celu wyeliminowanie błędu ułatwień dostępu w wersjach Androida starszych niż S oraz zapewnienie, że usługi ułatwień dostępu w tych oknach będą mogły wchodzić w interakcje z zawartością w oknie dialogowym lub wyskakującym.
Ta zmiana będzie miała wpływ tylko na użytkowników, którzy tworzą niestandardowe okno lub wyskakujące okienko z ustawionym poziomem wyższym niż 8 dp. Rozważ zmniejszenie wysokości okna dialogowego lub wyskakującego. Jeśli chcesz zrezygnować z tego nowego zachowania, rozważ utworzenie własnego okna lub wyskakującego okienka z ustawionym odpowiednim poziomem. Nie jest to zalecane, ponieważ może negatywnie wpłynąć na ułatwienia dostępu. Deweloper musi zadbać o to, aby dolna część okna lub wyskakującego okienka była interaktywna i czytelna dla usług ułatwień dostępu.
Zmiany w interfejsie API
- Rozwiązaliśmy problem, który powodował, że
painterResource
nie aktualizował się po zmianach konfiguracji (I58e73, b/228862715). rememberTextMeasurer
nie przyjmuje już parametrówFontFamily.Resolver
,Density
aniLayoutDirection
. Aby podać niestandardowe wartości tych parametrów, użyj konstruktoraTextMeasurer
. (Ia1da3)- Dodaliśmy właściwość
DialogProperties.decorFitsSystemWindows
, aby okna dialogowe obsługiwałyWindowInsets
. (I57742, b/229378542) - Przywrócono konstruktory czcionek do oryginalnego pliku Kotlin, aby zachować zgodność binarną. Brak zmian w porównaniu z ostatnią wersją stabilną. (Ieb2f3)
- Usunięto niepotrzebny operator z kilku definicji równości – nie ma to żadnego wpływu. (I6c309)
FontVariation.Setting
to zamknięty interfejs, który umożliwia korzystanie z przyszłych interfejsów API do ograniczania zakresu. (I11021, b/143703328)- Dodano
CompositionGroup.findParameters
doSlotTree.kt
. Dzięki temu narzędzia mogą pobierać parametry dlaCompositionGroup
bez konieczności analizowania całej tabeli slotów. (I124fe)
Wersja 1.3.0-alpha03
10 sierpnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-alpha03
Wersja 1.3.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
LayoutCoordinates.findRootCoordinates()
jest teraz publiczny (I7fa37, b/204723384)- Dodano eksperymentalny interfejs API, który umożliwia uzyskanie
LayoutCoordinates
wPlacementScope
. Dzięki temu deweloperzy wiedzą, gdzie znajduje się bieżący układ, aby umieścić elementy podrzędne względem jego pozycji. (I5482b, b/238632578) - Dodano
LayoutCoordinates.transformFrom
, aby uzyskać przekształcenie macierzy z jednegoLayoutCoordinates
na drugi. (Ic5ab1, b/238632578) - Wycofano
SemanticsModifier.id
i przeniesiono identyfikator semantyki doLayoutInfo.semanticsId
. (Iac808, b/203559524) - Czcionki zasobów obsługują teraz ustawianie ustawień wariacji czcionki (API w wersji 26 lub nowszej). (I900dd, b/143703328)
- Obsługa czcionek zmiennych w
DeviceFontFamilyNameFont
(Ic1279, b/143703328) - Konstruktory czcionek akceptują teraz listę
FontVariation.Setting
do konfigurowania czcionek zmiennych na urządzeniach z Androidem O i nowszym. (I11a9d, b/143703328) - Dodano interfejs
FontVariation
API do definiowania i używania czcionek zmiennych. (I3c40c, b/143703328) - Konstruktor
LineHeightStyle.Alignment
jest teraz publiczny (eksperymentalny) (I4bbbe, b/235876330) - W przypadku Androida i komputerów zdefiniowano teraz element Paragraph jako expect|actual. (Id387e, b/239962983)
- Interfejs Paragraph jest teraz interfejsem sealed interface Paragarph. Nie ma zastosowania w przypadku podklas paragrafu, więc jeśli ta zmiana ma na Ciebie wpływ, skontaktuj się z nami. (If5247, b/239962983)
- Usunięto eksperymentalną adnotację z funkcji
PlatformTextStyle
iLineHeightStyle
. (I64bef) - Wycofaj:
TextInputService.show|hideSoftwareKeyboard
. Zamiast niego użyj w kodzie aplikacji interfejsuSoftwareKeyboardController
, a w kodzie zarządzania IME – interfejsuTextInputSession
. (I14e4c, b/183448615) - Dodanie nowego interfejsu API dla istniejących typów animacji (I26179)
Poprawki błędów
- Dodaliśmy
@RequiresPermission
do interfejsów API, które wymagają przyznania uprawnieniaPOST_NOTIFICATIONS
w przypadku pakietu SDK w wersji 33 lub nowszej. (Ie542e, b/238790278)
Wersja 1.3.0-alpha02
27 lipca 2022 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-alpha02
Wersja 1.3.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy nową właściwość
PointerInputChange#pressure
, która umożliwia pobieranie ciśnienia. (I45a5e, b/205164819) - Dodano
rememberTextMeasurer
, aby ułatwić tworzenie i zapamiętywanie instancjiTextMeasurer
w kompozycji. (I8d66e) - Usługi
Rect
,RoundRect
iMutableRect
obsługują teraz składnię Kotlinin
do wywoływania funkcjicontains
. (Ie42b0, b/238642990) - Usuń z
KeyInjectionScope
niepotrzebne funkcje, ponieważ można je łatwo zaimplementować za pomocą prostszych części interfejsu API. Usunięte funkcje to m.in.pressKeys
,keysDown
ikeysUp
. (I81d77) - Zmieniliśmy nazwy stałych i parametrów w
KeyInjectionScope
, aby zawierały przyrostek „Millis”, jeśli jednostką tych stałych i parametrów są milisekundy. (Iabef5) - Dodano metodę
toStringForLog()
doEditCommand
, aby ułatwić rozwiązywanie problemów z edytowaniem tekstu. (I53354, b/228862731) - Dodano funkcję rozszerzenia
drawText
wDrawScope
, która umożliwia rysowanie tekstu z wieloma stylami w komponentach i modyfikatorach działających naDrawScope
, takich jakCanvas
idrawBehind
. (I16a62, b/190787898) - Wprowadzamy nowy eksperymentalny interfejs API o nazwie
TextMeasurer
, który umożliwia obliczanie dowolnego układu tekstu i daje identyczne wyniki jakBasicText
, niezależnie od środowiska wykonawczego Compose. (I17101) - Dodano
mapTree
doSlotTree.kt
. Dzięki temu narzędzia mogą sprawdzaćSlotTree
bez tworzenia kopii w pamięci, jak to robi funkcja asTree. W przypadku Inspektora układu daje to wzrost wydajności o około 10-krotny. (I5e113) - Zmieniliśmy sposób przechowywania podglądu kompozycji, aby był zapisywany w binarnych plikach wyjściowych. Dzięki temu deweloperzy mogą pisać i ponownie wykorzystywać adnotacje
MultiPreview
z bibliotek. (I85699, b/233511976)
Poprawki błędów
- Podczas dodawania zdarzeń
InputEventChange
do modułu śledzącegoVelocity
będziemy teraz uwzględniać różnice zamiast pozycji. Dzięki temu prędkość będzie prawidłowo obliczana we wszystkich przypadkach, nawet jeśli element docelowy się porusza (Icea9d, b/216582726, b/223440806, b/227709803). - Naprawiono błąd NPE spowodowany przez
AnnotatedString.toUpperCase
, gdy występują adnotacje. (I0aca2, b/210899140)
Wersja 1.3.0-alpha01
29 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.3.0-alpha01
Wersja 1.3.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Nowy
LookaheadLayout
, który obsługuje przekazywanie z wyprzedzeniem przed rzeczywistym pomiarem lub układem. Umożliwia to wstępne obliczenie układu, gdy się on zmienia, a także pozwala na użycie obliczonych z wyprzedzeniem rozmiarów i pozycji do animowania rozmiarów i pozycji w kierunku wartości docelowych.SubcomposeLayouts
nie są jeszcze obsługiwane, ale będzie można z nich korzystać w przyszłej wersji. (I477f5) - Dodano opcjonalny parametr alfa do typu pędzla w przypadku
TextStyle
iSpanStyle
, aby modyfikować krycie całego elementuText
. (Ic2fac, b/234117635) - Wprowadziliśmy typ adnotacji
UrlAnnotation
i powiązane z nim metody, aby obsługiwać linkiTalkBack
wAnnotatedString
. (I1c754, b/231495122) - Przeniesienie funkcji narzędziowych do środowiska wykonawczego (I4f729)
Poprawki błędów
TextLayoutResult.getLineForOffset
nie rzuca. (Idc5d6, b/235876324)
Wkład zewnętrzny
- Dodano nowy interfejs API
WindowInfo.keyboardModifiers
, który umożliwia obserwowanie jego stanu w funkcjach kompozycyjnych lub za pomocą snapshotFlow (Icdb8a).
Wersja 1.2
Wersja 1.2.1
10 sierpnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.1
Wersja 1.2.1 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd wskaźnika null w inspektorze (b/237987764)
- Rozwiązanie problemu z wyjątkiem rzutowania klasy podczas zapamiętywania w inspektorze (b/235526153).
Wersja 1.2.0
27 lipca 2022 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0
Wersja 1.2.0 zawiera te zmiany.
Ważne zmiany od wersji 1.1.0
Ulepszenia dotyczące przechodzenia między elementami:
- Przewijanie list leniwych za pomocą fokusu działa teraz przy użyciu nowego
BeyondBoundsLayout
interfejsu API - Nowe interfejsy API do dostosowywania zachowań w
FocusOrder
iFocusProperties
- Ulepszone działanie klawiatury fizycznej lub pilota do telewizora
- Przewijanie list leniwych za pomocą fokusu działa teraz przy użyciu nowego
Nowe interfejsy API:
- Wstawki okienne
- Podstawowe elementy pierwotne animacji opartych na gestach, nieskończonych i układu
GraphicsLayer
, w tymRenderEffect
Wiele poprawek błędów i lepsze działanie
Wersja 1.2.0-rc03
29 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-rc03
Wersja 1.2.0-rc03 zawiera te zmiany.
- Brak zmian od wersji 1.2.0-rc02.
Wersja 1.2.0-rc02
22 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-rc02
Wersja 1.2.0-rc02 zawiera te zmiany.
Wersja 1.2.0-rc01
15 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-rc01
Wersja 1.2.0-rc01 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejsy w bibliotekach Compose są teraz tworzone przy użyciu domyślnych metod interfejsu jdk8 (I5bcf1).
- Dodano funkcje wyższego rzędu do
KeyInjectionScope
, aby wstrzykiwać naciśnięcia klawiszy, gdy inne klawisze są przytrzymywane lub włączone. Do tych funkcji należąwithKeysDown
,withKeysToggled
itp. Dodano też właściwości sprawdzające, czy określony klawisz meta jest wciśnięty, np.isCtrlDown
, aby sprawdzić, czy któryś z klawiszy Control jest wciśnięty. Dokumentację każdej funkcji znajdziesz na stronieKeyInjectionScope
. (I9f6cd, b/229831515) - Wprowadzono eksperymentalny interfejs
OverscrollEffect
, który umożliwia stosowanie niestandardowych efektów przewijania poza krawędź, a także przeciążeniaModifier.scrollable
, które go akceptują. - Eksperymentalny interfejs
LocalOverScrollConfiguration
został przeniesiony zfoundation.gesture
do pakietu podstawowego i zmieniono jego nazwę naLocalOverscrollConfiguration
(If19fb, b/204650733). - Zmień nazwę
runComposeUiTestWithoutActivity {}
narunEmptyComposeUiTest {}
, aby była zgodna zcreateEmptyComposeRule()
(I6fed7)
Wersja 1.2.0-beta03
1 czerwca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-beta03
Wersja 1.2.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano użytkownika
pressKeyTimes
orazisCapsLockOn
i znajomych doKeyInjectionScope
. Dodatkowo interfejs API obsługuje teraz wzorce wstrzykiwania łączące mysz i klawiaturę, takie jak kliknięcie przycisku myszy z przytrzymanym klawiszem meta. (I4c8da, b/229831515) - Dodaliśmy eksperymentalną obsługę wstrzykiwania kluczowych zdarzeń. Użyj
performKeyInput
, aby wysyłać kluczowe zdarzenia, lub wysyłaj je za pomocą właściwościkey
obiektuMultiModalInjectionScope
podczas gestu wprowadzania multimodalnego z użyciemperformMultiModalInput
. Dokumentację interfejsu API znajdziesz wKeyInjectionScope
. (Ic5000, b/229831515) - Dodaj nowy element
GoogleFont.Provider.AllFontsListUri
, aby pobrać kanoniczne źródło internetowe czcionek Google obsługiwanych przez Androida. - Ulepszyliśmy komunikaty o błędach, które są ponownie zgłaszane, gdy nie można wczytać czcionek Google w komponowaniu. (I0416c)
Poprawki błędów
- Podczas dodawania zdarzeń
InputEventChange
do narzędzia Velocity Tracker będziemy teraz uwzględniać różnice zamiast pozycji. Dzięki temu prędkość będzie prawidłowo obliczana we wszystkich przypadkach, nawet jeśli element docelowy się porusza (I51ec3, b/216582726, b/223440806, b/227709803). - Ustawienie
Show Layout Bounds
będzie teraz stosowane w przypadku komponentów natychmiast po przełączeniu go w szybkich ustawieniach, bez konieczności opuszczania i ponownego wchodzenia do aktywności. (I843d5, b/225937688) - Wyszukiwanie ciągów znaków ułatwień dostępu nie powoduje wczytywania czcionki. Wcześniej próbowano wczytać czcionki dla
StyleSpans
, co powodowało awarie, jeśliFontFamily.Resolver
zostało zastąpione. (I4609d) - Naciśnięcie klawisza usuwania do przodu, gdy kursor znajduje się na końcu pola tekstowego, nie spowoduje już awarii.
DeleteSurroundingTextCommand
iDeleteSurroundingTextInCodePointsCommand
wymagają teraz, aby argumenty konstruktora były nieujemne. (Ica8e6, b/199919707)
Wersja 1.2.0-beta02
18 maja 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-beta02
Wersja 1.2.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Ponowne wykorzystanie funkcji w innych typach podglądu (I19f39)
Poprawki błędów
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
zmieniono naDisposeOnDetachedFromWindowOrReleasedFromPool
, aby lepiej odzwierciedlać, że dotyczy to sytuacji, w których następuje utylizacja, a nie tylko tych, w których nie następuje. (If15ca)
Wersja 1.2.0-beta01
11 maja 2022 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-beta01
Wersja 1.2.0-beta01 zawiera te zmiany.
Nowe funkcje
- To pierwsza wersja beta 1.2.
Zmiany w interfejsie API
- Dodano eksperymentalny interfejs
BeyondBoundsInterval
, który może być używany przez niestandardowe implementacje interfejsuLazyList
podczas rozmieszczania elementów poza widocznymi granicami (Ifabfb, b/184670295). - Wersje
Modifier.composed
z kluczem są teraz stabilnym interfejsem API (Ie65e4, b/229988420). - Uproszczono interfejs
rememberNestedScrollConnection
API, aby używać lokalnych kompozycji do uzyskiwania informacji o bieżącym widoku (I67ca7). - Adnotacji
@ComposableTarget
i adnotacji oznaczonych symbolem@ComposableTargetMarker
można teraz używać w zakresie pliku za pomocą prefiksu@file
. Użycie adnotacji docelowej w zakresie pliku spowoduje, że kompilator założy, że wszystkie funkcje z możliwością komponowania w pliku są przeznaczone do powiązanego aplikatora. Na przykład użycie@file:UiComposable
deklaruje, że wszystkie funkcje@Composable
są przeznaczone dla aplikacji Compose UI. Funkcja, która ma kierować reklamy na innego aplikatora, musi wyraźnie podać adnotację znacznika docelowego dla wybranego aplikatora. (I40804) Wprowadziliśmy nowy eksperymentalny interfejs API do testowania niezależny od platformy:
interface ComposeUiTest
ifun runComposeUiTest(block: ComposeUiTest.() -> Unit)
, których można używać do przeprowadzania testów interfejsu Compose bez konieczności korzystania zTestRule
. Aby uruchomić test bezComposeTestRule
, przekaż go jako funkcję lambda dorunComposeUiTest
i użyj metod oraz elementów w zakresie odbiornikaComposeUiTest
, które są takie same jak wComposeContentTestRule
.Do pakietu dodano specyficzne dla Androida adnotacje
interface AndroidComposeUiTest
ifun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)
, aby zapewnić dostęp do bazowej aktywności, podobnie jak w przypadku adnotacjiAndroidComposeTestRule
. Aby mieć jeszcze większą kontrolę, możesz samodzielnie utworzyć instancjęclass AndroidComposeUiTestEnvironment
.Implementacja na komputery to
class DesktopComposeUiTest
, ale obecnie nie ma funkcji uruchamiania przeznaczonych specjalnie na komputery.Test można przenieść z
ComposeTestRule
naComposeUiTest
w ten sposób (przykład na Androidzie): Od:@RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }
Do:
@RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
Obecnie
ComposeContentTestRule
iComposeTestRule
nie są rozszerzeniamiComposeUiTest
, co oznacza, że funkcji rozszerzeń wComposeUiTest
nie można jeszcze wywoływać w interfejsieTestRule
. Gdy interfejsComposeUiTest
stanie się stabilny, interfejsyComposeContentTestRule
iComposeTestRule
zostaną zmienione tak, aby rozszerzały interfejsComposeUiTest
. (Ib4e90)Nazwa
LineHeightBehavior
została zmieniona naLineHeightStyle
Nazwa
LineVerticalAlignment
została zmieniona naLineHeightStyle.Alignment
Zmieniono nazwę
LineHeightTrim
naLineHeightStyle.Trim
Usunięto wartości domyślnego konstruktora z
LineHeightStyle
(I582bf, b/181155707)Dodano
Brush
doTextStyle
iSpanStyle
, aby umożliwić rysowanie tekstu z kolorowaniem gradientowym. (I53869, b/187839528)Atrybuty
trimFirstLineTop
itrimLastLineBottom
elementuLineHeightBehavior
zostały zmienione w jedno wyliczenie:LineHeightTrim
.LineHeightTrim
mają 4 stany zdefiniowane przez 2 wartości logiczne:FirstLineTop
,LastLineBottom
, Both i None (Ifc6a5, b/181155707).Dodano użytkownika
LineHeightBehavior
do listyTextStyle
iParagraphStyle
.LineHeightBehavior
określa, czy wysokość wiersza jest stosowana do góry pierwszego wiersza i do dołu ostatniego wiersza. Określa też wyrównanie wiersza w przestrzeni podanej przezTextStyle(lineHeight)
.Na przykład zachowanie podobne do tego, które definiuje usługa porównywania cen, można uzyskać za pomocą parametru
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
.Konfiguracje
trimFirstLineTop
itrimLastLineBottom
działają prawidłowo tylko wtedy, gdyincludeFontPadding
ma wartość false. (I97332, b/181155707)Funkcje
PlatformParagraphStyle.lerp
iPlatformSpanStyle.lerp
zostały zmienione na funkcje najwyższego poziomu (I9a268).
Poprawki błędów
- Dokumentacja
PointerInputChange::copy
zawiera teraz prawidłową informację, że jest to kopia płytka. (I182f5) - Obsługa wielokropka, gdy wysokość jest ograniczona i nie mieści wszystkich wierszy tekstu (Ie528c, b/168720622)
- Domyślnie włączone
includeFontPadding
. Możesz wyłączyćincludeFontPadding
za pomocą atrybutuTextStyle.platformTextStyle
. W najbliższej przyszłości zmienimy domyślne działanie, ale do tego czasu pozwoli nam to lepiej zintegrować ulepszenia wysokości wiersza (aosp/2058653) i rozwiązać problemy zTextField
przycinaniem. (I01423, b/171394808)
Wkład zewnętrzny
MouseInjectionScope.scroll(delta = someDelta)
jest teraz odwrócony na Androidzie, jeśli przewijamy w pionie (jeśli someDelta jest dodatni, przewijanie będzie w dół) (Ifb697, b/224992993)
Wersja 1.2.0-alpha08
20 kwietnia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha08
Wersja 1.2.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Funkcje
pluralStringResource
zostały oznaczone jako eksperymentalne, aby umożliwić ich rozwój i lepsze wsparcie internacjonalizacji w przyszłości. (If24e4) - Elementy Paragraph i MultiParagraph akceptują teraz parametr Constraints. Przekazywanie wartości
Constraints.maxHeight
nie ma obecnie żadnego wpływu, ale w przyszłości umożliwi wykonywanie obliczeń, np. skracanie tekstu na podstawie wysokości. (I6afee, b/168720622) SubcomposeSlotReusePolicy.getSlotsToRetain()
akceptuje teraz niestandardową klasę podobną do MutableSet, która nie zezwala na dodawanie do niej nowych elementów. (Icd314)- PointerIcon jest teraz interfejsem
@Stable
(I9dafe) - Częściowe wykorzystanie (obniżenie lub pozycja) zostało wycofane w
PointerInputChange
. Aby w pełni wykorzystać zmianę, możesz użyćconsume()
. Możesz użyćisConsumed
, aby sprawdzić, czy ktoś inny wcześniej wykorzystał tę zmianę. PointerInputChange::copy()
zawsze tworzy teraz płytką kopię. Oznacza to, że po wykorzystaniu jednej kopiiPointerInputChange
zostaną wykorzystane kolejne kopie. Jeśli chcesz utworzyć niepowiązany elementPointerInputChange
, użyj konstruktora. (Ie6be4, b/225669674)- Włączanie współdziałania zagnieżdżonego przewijania między Compose i View w kierunku Compose > View. Oznacza to, że element kompozycyjny nadrzędny będzie mógł otrzymywać zagnieżdżone delty przewijania z zagnieżdżonego widoku przewijania. (If7949, b/174348612)
- Nowy
SemanticsProperty testTagsAsResourceId
, który można wykorzystać, aby dostosować Compose do testów UIAutomator zaprojektowanych dla systemu View. (I39c20) - Wyświetlaj wszystkie dostępne grubości czcionek systemowych na Androidzie, gdy używasz
FontFamily.SansSerif
. W przypadku interfejsów API w wersjach 21–28 wewnętrznie będą używane nazwy czcionek zastępczych, np. sans-serif-medium. Jest to zmiana w działaniu, ponieważ wcześniej w interfejsach API w wersjach 21–28 obsługiwane były tylko wagi 400 i 700. (I380fe, b/156048036, b/226441992) - W przypadku instrukcji Paragraph i Multiparagraph zmieniliśmy kolejność argumentów pozycyjnych, aby były one umieszczone przed argumentami opcjonalnymi. (Idafaa)
AndroidFont
przyjmuje teraz typefaceLoader jako parametr konstruktora. (I2c971)
Wersja 1.2.0-alpha07
6 kwietnia 2022 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha07
Wersja 1.2.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano nową funkcję
Snapshot.withoutReadObservation { ... }
. Umożliwia użytkownikom uruchamianie przekazanej funkcji lambda bez subskrybowania zmian wartości stanu odczytanych w tym bloku. Może się to przydać w przypadkach, gdy chcesz korzystać z bezpiecznych dla wątków odczytów i zapisów opartych na zrzutach, ale chcesz mieć możliwość odczytania wartości bez powodowania niepotrzebnego ponownego komponowania lub ponownego pomiaru. (I9f365, b/214054486) - Właściwość rozszerzenia
consumeWindowInsets
elementuComposeView
umożliwia deweloperom wyłączenie wykorzystaniaWindowInsets
na Androidzie. Dzięki temu poszczególneComposeViews
w hierarchii mogą stosowaćWindowInsets
bez wzajemnego zakłócania działania. (I0ef08, b/220943142) - Dodano
KeyboardType.Decimal
jako alternatywę dlaKeyboard.Number
, aby uwzględnić separator dziesiętny w edytorze IME. (Iec4c8, b/209835363) - Interfejsy
PointerEventType.Scroll
iPointerEvent.scrollDelta
są teraz stabilne (I574c5, b/225669674). - Włącz zagnieżdżone przewijanie między widokiem a Compose w przypadku współpracujących klas widoków. Oznacza to, że funkcja Compose może teraz wysyłać delty przewijania do współpracującego elementu nadrzędnego View. (I5d1ac, b/174348612)
- Zaktualizowano
FontFamily.Resolver
, aby zintegrować ustawienie ułatwień dostępu „Pogrubienie tekstu w całym systemie” (I6c1e7) - Środowisko wykonawcze
Font(AssetManager, String, ...)
zostało wycofane i zastąpione środowiskiemFont(String, AssetManager, ...)
. To eksperymentalny interfejs API. (I1c7a4) - Dodaj nowy deskryptor czcionki
Font(DeviceFontFamilyName)
, aby opcjonalnie wyszukiwać czcionki zainstalowane w systemie w łańcuchach zastępczych czcionek. (I30468, b/219754572) - Dodano tymczasową konfigurację zgodności dla
includeFontPadding
w TextStyle/ParagraphStyle.includeFontPadding
można zmienić na stronieTextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
. Jest to tymczasowa opcja konfiguracji umożliwiająca migrację, która zostanie usunięta. (If47be, b/171394808) - Dodaj rozszerzenie
GoogleFont.Provider.isAvailableOnDevice
, aby uzyskać pomoc w debugowaniu. (I64e31) - Dodaj konstruktor
GoogleFont.Provider
do użycia z@ArrayRes
(Ic5ee1, b/225984280) Compose GoogleFont
nazywa się terazFont(GoogleFont)
, a interfejs API pozostaje stabilny. (I125f2)
Poprawki błędów
- Dodano sprawdzanie w narzędziu lint w przypadku komponentu material/Scaffold, aby upewnić się, że używane jest wewnętrzne dopełnienie (Ifb111).
Wersja 1.2.0-alpha06
23 marca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha06
Wersja 1.2.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano działanie semantyczne
RequestFocus
, aby poprosić o skupienie się na elemencie, na którym można ustawić fokus. (I17b71) - Zaktualizowano analizowanie rysunków wektorowych, aby obsługiwać automatyczne dublowanie, które odwraca zawartość elementu
VectorPainter
, jeśli bieżący kierunek układu to RTL. (I79cd9, b/185760237) Zaktualizowano kolory cienia/otoczenia, aby były parametrami końcowymi
Modifier.graphicsLayer
w celu zapewnienia zgodności z interfejsem API (I3f864, b/160665122).Dodano domyślne implementacje koloru cienia/otoczenia w
GraphicsLayerScope
, aby zapewnić brak zmian powodujących błędy w interfejsie API.Dodano godzinę wydarzenia do zdarzeń RSB (Ief8ae)
Usługa
FocusOrder
została połączona z usługąFocusProperties
, a usługafocusProperties()
ma teraz wszystkie funkcje usługifocusOrder()
. FunkcjeFocusOrder
ifocusOrder()
zostały wycofane.focusOrder()
, który akceptujefocusRequester
, należy zastąpić modyfikatoremfocusRequester()
w połączeniu zfocusProperties()
. Dzięki temu modyfikatory mogą być bardziej od siebie odseparowane. (I601b7)Uaktualnienie obu tych elementów
RecyclerView
iCompose
znacznie poprawi wydajność przewijania w przypadku widoków RecyclerView z widokami Compose jako elementami podrzędnymi.Dodaj
ViewCompositionStrategy.Default
jako sposób pobierania wbudowanej strategii domyślnej.Dodaj
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
, która jest nową strategią domyślną i prawidłowo obsługuje kontenery puli, takie jak RecyclerView. (If7282)Dodaliśmy obsługę adnotacji do klas adnotacji za pomocą adnotacji @Preview jako pierwszy krok do dodania funkcji Multipreview. Takie adnotacje mogą służyć do dodawania adnotacji do metod Composable lub innych klas adnotacji, które można wtedy uznać za pośrednio oznaczone daną adnotacją @Preview. (I12eff)
Urządzenia referencyjne dodane do listy urządzeń w przypadku wersji @Preview (I071c9)
Poprawki błędów
- Zaktualizowano interfejsy API grafiki wektorowej, aby używały odpowiedniej adnotacji @VectorComposable zamiast @UiComposable (I942bc).
- Usuń crossinline z
AnnotatedString.Builder.withStyle
(If84d5)
Wkład zewnętrzny
- compose-ui: dodanie właściwości
ambientShadowColor
ispotShadowColor
doGraphicsLayerScope
(I1ba1a, b/160665122) - Zasoby w liczbie mnogiej są teraz obsługiwane przez funkcje
pluralStringResource
. (Ib2f23, b/191375123)
Wersja 1.2.0-alpha05
9 marca 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha05
Wersja 1.2.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Funkcja
TextToolbar
przyjmuje teraz argumenty lambda zamiastActionCallback
. (Ib2eb9, b/197950089) - Zaktualizowano możliwość przyjmowania wartości null w bibliotekach core i appcompat, aby była zgodna z wersją Tiramisu DP2 (I0cbb7).
- Interfejs pomiarowy udostępnia teraz właściwość parentData (I3313f)
Modifier.onPlaced
i interfejsOnPlacedModifier
działają teraz stabilnie. (Ib5482)- Hurra! Animacja kompozycji obsługuje teraz ustawienie „Skala czasu trwania animatora” z opcji programisty. (I5a4fc, b/161675988)
- Dodano modyfikator
BeyondBoundsLayout
lokalny (If8b51, b/184670295) - Tekst: opcja includeFontPadding jest teraz domyślnie wyłączona. Problemy z obcinaniem wynikające z
includeFontPadding=false
zostały rozwiązane i nie powinno już dochodzić do obcinania w przypadku wysokich skryptów. (I31c84, b/171394808)
Poprawki błędów
ComposeContentTestRule.setContent
będzie teraz zgłaszać wyjątekIllegalStateException
, jeśli spróbujesz ustawić treść, gdy już istnieje. (I888a5, b/199631334)- Naprawiliśmy awarię spowodowaną zawartością schowka podczas odczytywania danych ze schowka na urządzeniu z Androidem. (I06020, b/197769306)
- Ulepszanie przykładowych przewijanych reklam w wyszukiwarce. (I6a596)
Wkład zewnętrzny
- Zaktualizowano do korzystania z rutyn Kotlinx w wersji 1.6.0 (I3366d).
Wersja 1.2.0-alpha04
23 lutego 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha04
Wersja 1.2.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
Dodano adnotacje
ComposableTarget
,ComposableTargetMarker
iComposableOpenTarget
, które umożliwiają zgłaszanie w czasie kompilacji sytuacji, w których funkcja typu „composable” jest wywoływana w odniesieniu do narzędzia, do którego nie została zaprojektowana.W większości przypadków adnotacje te mogą być wywnioskowane przez wtyczkę kompilatora Compose, więc bezpośrednie używanie tych adnotacji powinno być rzadkie . Nie można wywnioskować przypadków, w których tworzony jest i używany niestandardowy aplikator, abstrakcyjne funkcje kompozycyjne (np. metody interfejsu), pola lub zmienne globalne, które są kompozycyjnymi wyrażeniami lambda (zmienne lokalne i parametry są wywnioskowane), lub gdy używana jest funkcja
ComposeNode
lub powiązane funkcje kompozycyjne.W przypadku niestandardowych funkcji stosujących funkcje kompozycyjne, które wywołują
ComposeNode
lubReusableComposeNode
, należy dodać adnotacjęComposableTarget
do funkcji i wszystkich typów parametrów lambda kompozycyjnych. Zalecamy jednak utworzenie adnotacji, która jest oznaczona symbolemComposableTargetMarker
, a następnie użycie tej adnotacji zamiast symboluComposableTarget
. Adnotacja kompozycyjna oznaczona symbolemComposableTargetMarker
jest równoważna adnotacjiComposbleTarget
z pełną i jednoznaczną nazwą klasy atrybutu jako parametrem stosującym. Przykład użycia elementuComposableTargetMarker
znajdziesz w sekcjianroidx.compose.ui.UiComposable
. (I38f11)Font(resId, ...)
obsługuje teraz loadingStrategy w stabilnym interfejsie API. (Ief3d2)Interfejs
FontLoadingStrategy
jest teraz stabilnym interfejsem API. (I1ee35, b/174162090)Obsługa asynchronicznego wczytywania czcionek w komponencie Tekst (I77057, b/214587005)
Dodaj interfejs Bridge API do konwertowania niestandardowego parametru
Font.ResourceLoader
naFontFamily.Resolver
. (Ia0060)
Poprawki błędów
- Przekazane
FontFamily.Resolver
są przekazywane do podkompozycji, takich jak Popup. - Przekazane
Font.ResourceLoader
są przekazywane do podkompozycji, takich jak Popup. (I48fa5)
Wersja 1.2.0-alpha03
9 lutego 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha03
Wersja 1.2.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Metody
notifyFocusedRect
wTextInputSession
iTextInputService
zostały wycofane i nie będą wywoływane. Zamiast niej używaj właściwościBringIntoViewRequester
. (Ia4302, b/192043120, b/216842427, b/178211874) - Wprowadzono metodę
destroyDisplayListData
w klasie zastępczejRenderNode
(I1e659, b/216660268) - Dodaliśmy nowe API, które umożliwia wstępne pomiary elementów podrzędnych
SubcomposeLayout
, które zostały wcześniej skomponowane. (I857ea) Dodano funkcję
movableContentOf
, która przekształca funkcję lambda z elementem kompozycyjnym w funkcję lambda przenoszącą stan i odpowiednie węzły do dowolnej nowej lokalizacji, w której jest wywoływana. Gdy poprzednie połączenie opuści kompozycję, stan jest tymczasowo zachowywany. Jeśli do kompozycji wejdzie nowe połączenie z funkcją Lambda, stan i powiązane węzły zostaną przeniesione do lokalizacji nowego połączenia. Jeśli nie zostanie dodane nowe połączenie, stan zostanie trwale usunięty, a obserwatorzy zostaną powiadomieni.Jeśli funkcja lambda
movableContentOf
jest wywoływana wielokrotnie w tej samej kompozycji, dla każdego wywołania tworzone są nowe stany i węzły. Gdy wywołania opuszczają kompozycję, a nowe wywołania do niej wchodzą, stan jest przenoszony z pierwszych wywołań do wywołań wchodzących w kolejności, w jakiej są wywoływane. Wszystkie stany, które nie zostały wykorzystane przez nowe połączenia, są trwale usuwane. (Ib4850)FontFamilyResolver
jest teraz dostępna wLocalFontFamilyResolver.current
Dodano
createFontFamilyResolver(context)
icreateFontFamilyResolver(context, coroutineScope)
, aby tworzyć nowe moduły rozpoznawania FontFamily poza użyciem funkcji Compose.Elementy Paragraph i MultiParagraph przyjmują teraz wartość
FontFamily.Resolver
TextLayoutResult.layoutInput.fontFamilyResolver
zawiera teraz resolver używany w tym układzie. WycofaliśmyTextLayoutResult.layoutInput.resourceLoader
, ponieważ nie jest już używany. (Id5a45, b/174162090)Obsługa asynchronicznego i opcjonalnego wczytywania czcionek z zachowaniem rezerwowym. Ta ścieżka jest używana przez komponenty Text i TextField oraz udostępniana przez interfejs FontFamilyResolver.
Obsługa wstępnego wczytywania czcionek za pomocą
FontFamilyResolver.preload
FontFamilyResolver.setAsyncLoadContext
umożliwia ustawienie globalnego kontekstu współprogramu używanego do wczytywania czcionek asynchronicznych. (I87fe8, b/174162090)Dodano
AndroidFont
, nowy interfejs API niskiego poziomu do udostępniania nowych typów deskryptorów zasobów czcionek na Androidzie. Może to być np. wczytywanie czcionek z backendu aplikacji, opcjonalne lokalizowanie wstępnie zainstalowanych czcionek na urządzeniu lub wczytywanie czcionki z zasobu, który nie jest udostępniany przez bieżące fabryki czcionek.Rozszerzyliśmy interfejs
Font.ResourceLoaded
API, aby obsługiwał opcjonalne i asynchroniczne wczytywanie czcionek. Nie zalecamy programistom aplikacji bezpośredniego korzystania z tego interfejsu API. Aby dodać nowe rodzaje czcionek, zapoznaj się z sekcjąAndroidFont
.Funkcja rozszerzenia
Font.AndroidResourceLoader
umożliwia tworzenieFont.ResourceLoader
poza kompozycją.Dodano parametr
loadingStrategy
do czcionek opartych na zasobach, aby umożliwić asynchroniczne wczytywanie, gdy czcionka zasobu odwołuje się do pliku XML czcionek do pobrania. (Ie5aea, b/174162090)Konstruktor
Typeface(FontFamily)
został wycofany. Wcześniej służyło to do wstępnego wczytywania czcionek, co w przypadku czcionek do pobrania może potrwać do 10 sekund. W przypadku czcionek do pobrania to wywołanie może blokować działanie przez 10 sekund. Zamiast niego używaj interfejsuFontFamilyResolver.preload
.Środowisko wykonawcze
fontResource(FontFamily): Typeface
zostało wycofane. Wcześniej służyło to do wstępnego wczytywania czcionek, co w przypadku czcionek do pobrania może potrwać do 10 sekund. Zamiast tego użyjFontFamilyResolver.preload
(If8e7c, b/174162090).Konstruktor
SubcomposeLayoutState
akceptującymaxSlotsToRetainForReuse
został wycofany. Zamiast tego jest nowy konstruktor akceptującySubcomposeSlotReusePolicy
– nowy interfejs umożliwiający bardziej szczegółową kontrolę nad tym, które sloty powinny być zachowane do ponownego użycia w przyszłości. (I52c4d)Udostępnia funkcje HSV i HSL w
Color
jako nieeksperymentalne interfejsy API. Przestrzeń kolorów Oklab jest teraz publicznym interfejsem API. (I08fb6, b/180731008)Wycofany interfejs
AndroidComposeTestRule.AndroidComposeStatement
, który nie miał być częścią publicznego interfejsu API i tak nie był przydatny. (Ibc46b)Zmiana nazwy wewnętrznie wygenerowanej klasy kt (Ia0b9e, b/174162090)
Usunięto
FontLoadingStrategy.values
(I42a9d, b/174162090)Globalny moduł wczytywania czcionek to teraz
FontFamilyResolver
. (I4f773, b/174162090)Użyj nowego systemu wczytywania czcionek na komputerze. (I9ce5c, b/174162090)
FontFamily.Resolver.resolve
zwracaState<Any>
(I4406c, b/174162090)
Poprawki błędów
- Pola tekstowe będą teraz wyświetlane nad klawiaturą, gdy są aktywne i klawiatura jest widoczna, a tryb wprowadzania programowego to
ADJUST_PAN
. (I8eaeb, b/190539358, b/192043120) - Komputer stacjonarny używa lokalnego komponentu
FontFamily.Resolver
- Wycofanie platformy
FontLoader
na komputery - Nowa fabryka
createFontFamilyResolver
na komputerze (I6bbbb, b/174162090) - Klawiatura ekranowa nie migocze już podczas przełączania fokusu między polami tekstowymi. (I1bf50, b/187746439)
Wersja 1.2.0-alpha02
26 stycznia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha02
Wersja 1.2.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano
Modifier.onRotaryScrollEvent()
iModifier.onPreRotaryScrollEvent()
w przypadku urządzeń do noszenia z obrotowym przyciskiem bocznym (I18bf5, b/210748686) - Dodaj eksperymentalne rozszerzenie
View.createLifecycleAwareRecomposer
(I0cde6)
Wkład zewnętrzny
PointerEvent.scrollDelta.y
jest teraz odwrócony na Androidzie (zwraca 1 zamiast –1, jeśli przechylimy kółko myszy w prawo) (Ia9811).
Wersja 1.2.0-alpha01
12 stycznia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.2.0-alpha01
Wersja 1.2.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
- Wycofano
FontFamily.canLoadSynchronously
. Ta właściwość nie ma znaczenia semantycznego. (Ica5ef) - Dodano pole tożsamości do
CompositionData
, aby generować niezmienne identyfikatory w Inspektorze układu. (Ic116e) - Dodano identyfikatory urządzeń z Wear OS do listy urządzeń w wersji przedpremierowej (I93232)
Aktualizacje zależności
- Teraz zależy od Kotlin
1.6.10
.
Wersja 1.1
Wersja 1.1.1
23 lutego 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.1
Wersja 1.1.1 zawiera te zmiany.
Poprawki błędów
- Rozwiązanie problemu
NullPointerException
na stronieandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462) - Naprawiliśmy awarię spowodowaną zawartością schowka podczas odczytywania danych ze schowka na urządzeniu z Androidem. (I06020, b/197769306)
- Poprawiono układ od prawej do lewej w
LazyVerticalGrid
(aosp/1931080, b/207510535)
Wersja 1.1.0
9 lutego 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0
Wersja 1.1.0 zawiera te zmiany.
Ważne zmiany od wersji 1.0.0
- Stabilna obsługa efektu przewijania w Androidzie 12
- Ulepszenia rozmiaru docelowego elementu dotykowego
- Pamiętaj, że w przypadku Compose 1.0 komponenty Material rozszerzą swój obszar układu, aby spełnić wytyczne dotyczące ułatwień dostępu w interfejsie Material w zakresie rozmiaru docelowego elementu dotykowego. Na przykład docelowy element dotykowy przycisku zostanie powiększony do minimalnego rozmiaru 48x48 dp, nawet jeśli ustawisz mniejszy rozmiar przycisku. Dzięki temu biblioteka Compose Material zachowuje się tak samo jak komponenty Material Design, co zapewnia spójność, jeśli używasz widoków i biblioteki Compose. Ta zmiana zapewnia też, że podczas tworzenia interfejsu za pomocą komponentów Compose Material spełnione zostaną minimalne wymagania dotyczące dostępności docelowych elementów dotykowych.
- Stabilna obsługa kolumny nawigacji
- Przenosi kilka wcześniej eksperymentalnych interfejsów API do wersji stabilnej.
- Obsługa nowszych wersji języka Kotlin
Wersja 1.1.0-rc03
26 stycznia 2022 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-rc03
Wersja 1.1.0-rc03 zawiera te zmiany.
Poprawki błędów
- Zaktualizowano, aby obsługiwać Compose Material w wersji 1.1.0-rc03
Wersja 1.1.0-rc01
15 grudnia 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-rc01
Wersja 1.1.0-rc01 zawiera te zmiany.
Poprawki błędów
- Naprawiono błąd, który powodował brak działań przewijania ułatwień dostępu (I7cbfb).
SemanticsNodeInteraction.captureToImage()
będzie teraz działać również wtedy, gdyHardwareRenderer.isDrawingEnabled()
ma wartośćfalse
, poprzez włączenie go na czas trwania połączenia (Idf3d0).
Wersja 1.1.0-beta04
1 grudnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-beta04
Wersja 1.1.0-beta04 zawiera te zmiany.
Nowe funkcje
- Zaktualizowano, aby była zgodna z Kotlinem
1.6.0
Zmiany w interfejsie API
- Usunięto możliwość wartości null w
androidx.core.view
(I7078a, b/204917439) - Dodaliśmy eksperymentalne interfejsy API, które umożliwiają użytkownikom korzystanie z interfejsu PointerInputchange jako całości lub sprawdzanie, czy został on użyty. (I2e59d)
- Dodano obsługę zdarzeń przewijania kółkiem myszy w warstwie interfejsu. (Ia14eb, b/198214718)
- Dodaj eksperymentalne przeciążenia
Modifier.composed
, które akceptują klucze do porównania pod kątem równości i kwalifikują się do pomijania optymalizacji. (Ice799, b/205851704) ComposeNotIdleException
rozciąga się teraz odException
zamiast bezpośrednio odThrowable
. Pamiętaj, że oznacza to, że klauzule wyłapujące, które wyłapywałyException
, mogą teraz wyłapywaćComposeNotIdleException
, czego wcześniej nie robiły. (I9c217)
Poprawki błędów
- Rozwiązanie problemu polegającego na tym, że uchwyty tekstu nie przesuwały się, gdy zmieniała się widoczność edytora IME. (I25f2e)
Wersja 1.1.0-beta03
17 listopada 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-beta03
Wersja 1.1.0-beta03 zawiera te commity.
Zmiany w interfejsie API
- Dodano nowy modyfikator Modifier.onPlaced, który umożliwia obserwowanie zmiany miejsca docelowego. Dodatkowe zmiany przesunięcia modyfikatora podrzędnego można więc wprowadzać na podstawie zaobserwowanej zmiany miejsca docelowego. (I558fd)
- Usunięto
InjectionScope.flush()
iInjectionScope.dispose()
. Opróżnianie wszystkich zdarzeń i usuwanie zakresu odbywa się teraz na końcu wywołanej metody perform*Input(), tak jak wcześniej. (I2bed8) - Usunięto
MultiModalInjectionScope.Touch
iMultiModalInjectionScope.Mouse
. Aby wstrzykiwać zdarzenia dotyku i myszy w przypadku gestów wielomodowych, możesz teraz używać funkcjiMultiModalInjectionScope.touch()
iMultiModalInjectionScope.mouse()
. Obie przyjmują lambdę, która ma zakres odbiorcy danego trybu. (Idde18)
Poprawki błędów
- Wartość domyślna parametru
durationMillis
wTouchInjectionScope.swipeWithVelocity
jest teraz obliczana tak, aby przesunięcie było możliwe. (I19deb)
Wersja 1.1.0-beta02
3 listopada 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-beta02
Wersja 1.1.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano eksperymentalny interfejs BringIntoView API, który umożliwia wysyłanie do elementów nadrzędnych żądań przewinięcia, aby wyświetlić element (Ib918d, b/195353459).
- Nowe interfejsy API animacji do obsługi narzędzi. Umożliwiają one narzędziom sprawdzanie animacji i ich konfiguracji w przejściach. (I4116e)
Wkład zewnętrzny
- Dodano Modifier.pointerHoverIcon (I95f01)
Wersja 1.1.0-beta01
27 października 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-beta01
Wersja 1.1.0-beta01 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaliśmy eksperymentalny interfejs API
BringIntoView
, który umożliwia wysyłanie do rodziców prośby o przewinięcie ekranu, aby wyświetlić dany element (Ib918d, b/195353459). - Nowe interfejsy API animacji do obsługi narzędzi. Umożliwiają one narzędziom sprawdzanie animacji i ich konfiguracji w przejściach. (I4116e)
Wersja 1.1.0-alpha06
13 października 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha06
Wersja 1.1.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Usuń
ExperimentalComposeUiApi
z kontaViewRootForInspector
iLayoutInfo.ownerViewId
(I5c2e3) - Dodano przeciążenie bez elementów podrzędnych dla układu, co zwiększa wydajność (Ib0d9a).
- Usunięto
InternalCompilerApi
z metod narzędzia Composer, które muszą być wywoływane w różnych modułach (I1aa0b) SemanticsNodeInteraction.performSemanticsAction
zwraca terazSemanticsNodeInteraction
, na którym wywołano funkcję. (I9e5db)- Dodano LocalInputModeManager CompositionLocal, aby wykrywać tryb dotykowy i niedotykowy. (I6a83c, b/175899786)
- Dodano
viewConfiguration: ViewConfiguration
doLayoutInfo
aby umożliwić konsumentom uzyskanie prawidłowej wartości w przypadku takich elementów jak czas oczekiwania na długie naciśnięcie. (I76ca6)- Dodano
viewConfiguration: ViewConfiguration
doInjectionScope
, aby umożliwić testom dostosowywanie wstrzykiwania danych wejściowych na podstawie takich czynników jak czas oczekiwania na długie naciśnięcie czy tolerancja dotyku. - Zmieniono domyślny czas trwania długiego naciśnięcia i dwukrotnego kliknięcia w przypadku dotyku i myszy, aby był oparty na wartościach w
InjectionScope.viewConfiguration
.
- Dodano
- Implementacja komponentu ExposedDropdownMenu na podstawie komponentu ExposedDropdownMenuBox z komponentami TextField i DropdownMenu wewnątrz (If60b2)
- Do klasy PopupProperties dodano właściwość dismissOnOutsideClick, która zastąpiła wycofaną właściwość dismissOnClickOutside. Nowa właściwość otrzymuje pozycję kliknięcia i granice elementu zakotwiczonego, co zapewnia większą kontrolę nad tym, czy należy wywołać funkcję onDismissRequest. Może to być przydatne np. w zapobieganiu zamykaniu kotwicy w wyniku dotknięcia jej.
- Do klasy PopupProperties dodano funkcję updateAndroidWindowManagerFlags, która umożliwia niskopoziomową kontrolę nad flagami przekazywanymi przez wyskakujące okienko do menedżera okien Androida. Parametrem funkcji lambda będą flagi obliczone na podstawie wartości PopupProperties, które powodują powstanie flag WindowManager, np. focusable. Wynikiem działania funkcji lambda będą końcowe flagi, które zostaną przekazane do menedżera okien Androida. Domyślnie funkcja updateAndroidWindowManagerFlags pozostawia flagi obliczone na podstawie parametrów bez zmian. Tego interfejsu API należy używać ostrożnie, tylko w przypadkach, gdy wyskakujące okienko ma bardzo specyficzne wymagania dotyczące działania. (I6e9f9)
Recomposer.state
zostało wycofane i zastąpione przezRecomposer.currentState
, aby zmienić jego typ na StateFlow (Ic2ab3, b/197773820).- Dodano użytkowników
flush()
idispose()
do listyInjectionScope
. Używaj ich, gdy chcesz natychmiast wyczyścić wszystkie zdarzenia w kolejce i gdy chcesz usunąć zakres. (Ifb73a) - Dodano
performScrollToNode(matcher: SemanticsMatcher)
, które przewija kontener z możliwością przewijania do treści pasujących do danego dopasowania. (Ic1cb8) InjectionScope
implementuje terazDensity
, co umożliwia łatwe konwertowanie jednostek px i dp wperformTouchInput
i podobnych narzędziach. (I8fe1f)
Poprawki błędów
- Element AndroidView przekazuje teraz LocalLifecycleOwner i LocalSavedStateRegistryOwner do swojego widoku za pomocą ViewTreeLifecycleOwner i ViewTreeSavedStateRegistryOwner. (I38f96, b/179708470)
- Naprawiono problem z tym, że komponent SwipeToDismissBox w WearOS czasami nie obsługiwał gestów przesuwania. (I9387e)
- Domyślny czas między wstrzykiwanymi zdarzeniami wejściowymi został zmieniony z 10 ms na 16 ms. Może to zmienić wynik testów, które wykonują gesty wejściowe, np. określone przesunięcie. (I829fd)
Wersja 1.1.0-alpha05
29 września 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha05
Wersja 1.1.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano obsługę komunikacji między modyfikatorami (Id5467, b/198826874)
- Dodano eksperymentalne wskaźniki historyczne do PointerEventChange. (Ic1fd8, b/197553056, b/199921305)
- Dodano użytkowników
density: Density
ilayoutDirection: LayoutDirection
do listyLayoutInfo
. Dzięki temu użytkownicyLayoutInfo
będą mogli prawidłowo interpretować wymiary i pozycję ujawnione wLayoutInfo
. (I002f1) - Dodaliśmy eksperymentalną obsługę wstrzykiwania zdarzeń myszy. Użyj
performMouseInput
, aby zacząć wysyłać zdarzenia myszy, lub wysyłaj zdarzenia myszy za pomocą właściwościMouse
obiektuMultiModalInjectionScope
podczas gestu wprowadzania multimodalnego z użyciemperformMultiModalInput
. Dokumentację dostępnego interfejsu API znajdziesz wMouseInjectionScope
. (Iaa4a8, b/190493367)
Poprawki błędów
- Poprawiono obsługę ułatwień dostępu w przypadku elementów z możliwością przewijania (zarówno ładowanych leniwie, jak i nie) w odniesieniu do przewijania (I6cdb0).
- Ulepszono
TouchInjectionScope.swipeWithVelocity
. Obecnie akceptuje szerszy zakres zmiennych wejściowych i sugeruje zmiany w danych wejściowych, jeśli nie można utworzyć przesunięcia (I40fbe, b/182477143).
Wersja 1.1.0-alpha04
15 września 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha04
Wersja 1.1.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
PointerEvent
ma terazPointerEventType
do obsługi zdarzeń najechania kursorem. (I091fa)- Zezwalaj dzieciom na akceptowanie danych wejściowych wskaźnika poza granicami danych wejściowych wskaźnika rodzica. Rodzice mogą przechwytywać te wywołania za pomocą właściwości PointerInputScope.alwaysInterceptChildEvents (I9eae3, b/192479655).
- Wycofano funkcje
performGesture
iGestureScope
, które zostały zastąpione przezperformTouchInput
iTouchInjectionScope
. (Ia5f3f, b/190493367) - Dodano
touchBoundsInRoot
doSemanticsNode
, które zawiera minimalny rozmiar docelowego elementu dotykowego, aby deweloperzy mogli mieć pewność, że docelowe elementy dotykowe spełniają minimalne wymagania dotyczące ułatwień dostępu. (I2e14b, b/197751214) - Ponowne wdrożenie funkcji inspectable (I927bc, b/191017532)
- Zmiana nazwy parametru inspectable, aby pasowała do nazwy parametru złożonego (I3a482, b/191017532)
Wprowadziliśmy
performTouchInput
iTouchInjectionScope
jako zamiennikiperformTouchInput
iTouchInjectionScope
, co otwiera drogę do innych metod (np. myszy).TouchInjectionScope
ma te same metody coGestureScope
, z wyjątkiemmovePointerTo
imovePointerBy
, które zostały zmienione naupdatePointerTo
iupdatePointerBy
. Wszystkie inne metody są takie same.Działanie funkcji
TouchInjectionScope
jest niemal identyczne z działaniem funkcjiGestureScope
, z dwoma drobnymi różnicami:- Gdy wysyłane jest zdarzenie down, a wskaźniki zostały przesunięte bez wysłania zdarzenia move (czyli użyto
updatePointerTo()
, ale niemove()
, a potem wywołanodown()
), poprzednia implementacja przesuwała czas zdarzenia i wysyłała zdarzenie move przed wysłaniem zdarzenia down. Nowa implementacja nadal wysyła zdarzenie move, ale w tym konkretnym scenariuszu nie przesuwa czasu zdarzenia. - Gdy wysyłano zdarzenie „up” po przesunięciu wskaźników bez wysłania zdarzenia „move” (podobnie jak powyżej), poprzednia implementacja przesuwała czas zdarzenia i wysyłała zdarzenie „move” przed wysłaniem zdarzenia „up”. Nowa implementacja nie robi tego: nowe pozycje wskaźników będą odzwierciedlane tylko w zdarzeniu up.
Na koniec
TouchInjectionScope
wprowadza nową metodęcurrentPosition(pointerId: Int)
uzyskiwania bieżącej pozycji danego wskaźnika. (If1191, b/190493367)- Gdy wysyłane jest zdarzenie down, a wskaźniki zostały przesunięte bez wysłania zdarzenia move (czyli użyto
Poprawki błędów
- Zezwalaj na rozszerzanie granic docelowego obszaru kliknięcia poza region przycinania na potrzeby minimalnego docelowego obszaru kliknięcia. (I43e10, b/171509422)
- Na urządzeniach z Androidem 12 dodano obsługę rozciągania przewijania. (Iccf3c, b/171682480)
Wersja 1.1.0-alpha03
1 września 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha03
Wersja 1.1.0-alpha03 zawiera te zmiany.
Nowe funkcje
- Zaktualizowano Compose
1.1.0-alpha03
, aby zależał od Kotlin1.5.30
. (I74545)
Zmiany w interfejsie API
- Dodano
Modifier.inspectable
do opakowywania innych modyfikatorów. (I1909b, b/191017532) - Dodano
BlurredEdgeTreatment
API, aby uprościć przypadki użycia rozmycia do bardziej powszechnych kombinacji flag klipu i trybów kafelków. Większość przypadków użycia polega na renderowaniu rozmytych treści poza pierwotnymi granicami treści i rozmywaniu obszarów poza tymi granicami za pomocą przezroczystej czerni lub przycinaniu treści do granic treści z próbkowaniem najbliższej krawędzi w przypadku jąder rozmycia, które wykraczają poza granice treści. (I6b4b7, b/166927547) - Dodaliśmy obsługę RenderEffect w Compose Desktop. Wprowadzono OffsetEffect oraz modyfikator rozmycia jako prosty sposób na dodanie efektów wizualnych rozmycia do części hierarchii kompozycji. (I0f6aa, b/166927547)
- Wprowadziliśmy interfejs RenderEffect API, który można opcjonalnie skonfigurować w
Modifier.graphicsLayer
, aby zmienić zawartość samej warstwy. Można go używać do rozmywania treści funkcji kompozycyjnej i jej funkcji kompozycyjnych podrzędnych w hierarchii kompozycji. (I47c4d, b/166927547) - AwaitPointerEventScope ma teraz funkcje withTimeout() i withTimeoutOrNull() (I507f0, b/179239764, b/182397793).
- Dodano minimalny rozmiar docelowego elementu dotykowego do ViewConfiguration do użycia w semantyce i danych wejściowych wskaźnika, aby zapewnić dostępność. (Ie861c)
- Dodano obsługę TileMode.Decal, która jest przydatna do definiowania zachowania krawędzi w przypadku efektów renderowania opartych na rozmyciu. (I7e8ed, b/166927547)
performScrollToIndex
,performScrollToKey
,hasScrollToIndexAction
ihasScrollToKeyAction
to teraz stabilne interfejsy API (I142ae, b/178483889).- Dodano metodę testową, aby uzyskać przycięte granice. (I6b28e)
Poprawki błędów
- Usunięto metodę isBounded z klasy BlurredEdgeTreatment i zastąpiono ją jawnym sprawdzaniem, czy parametr kształtu ma wartość null. (I85d68)
Wersja 1.1.0-alpha02
18 sierpnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha02
Wersja 1.1.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- Interfejs PointerEvent obsługuje teraz odczytywanie stanu przycisku myszy i stanu modyfikatora klawiatury. (I6310c, b/180075467)
- Wstrzykiwane gesty używają teraz czasu MainTestClock jako źródła informacji o czasie. Bieżący czas wstrzykiwanych zdarzeń w
performGesture
zostanie zainicjowany bieżącym czasem MainTestClock. (Ifb364, b/192064452) - Dodano konstruktor
DpRect(DpOffset, DpSize)
(I2cf16, b/194219828) - Dodano klasę DpSize (I7abb1, b/194219828)
Poprawki błędów
- Zaktualizowano analizowanie plików XML grafiki wektorowej, aby obsługiwać listy stanów kolorów jako właściwości odcienia koloru głównego w przypadku obiektów rysowalnych wektorowo. (I86915, b/195668138)
Wersja 1.1.0-alpha01
4 sierpnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.1.0-alpha01
Wersja 1.1.0-alpha01 zawiera te zmiany.
Zmiany w interfejsie API
RelocationRequester.bringIntoView
akceptuje teraz prostokąt jako parametr, co umożliwia wyświetlanie części komponentu (Ice2c5, b/194330245).AnimatedImageVector
i powiązane interfejsy API znajdują się teraz w nowym moduleandroidx.compose.animation:animation-graphics
. (I60873)- Dodano eksperymentalny modyfikator do obsługi próśb o przeniesienie. (I65a97, b/178211874)
Wprowadziliśmy interfejs BrushPainter API, który umożliwia rysowanie dowolnego pędzla w obiekcie Painter, podobnie jak w przypadku interfejsu ColorPainter.
Zaktualizowano interfejs Brush API, aby zawierał parametr rozmiaru wewnętrznego, który jest sprawdzany w klasie BrushPainter (Ia2752, b/189466433).
Zaktualizowana metoda DrawScope#drawImage, która pobiera źródłowe i docelowe prostokąty, aby pobierać opcjonalny parametr FilterQuality. Jest to przydatne w przypadku grafiki pikselowej, która ma być pikselowana po powiększeniu. Zaktualizowano funkcję kompozycyjną BitmapPainter + Image, aby przyjmowała też opcjonalny parametr FilterQuality (Ie4fb0, b/180311607)
Dodano metodę
GestureScope.advanceEventTime
, aby zapewnić większą kontrolę nad czasem trwania zdarzeń w geście (Ibf3e2).
Poprawki błędów
- Aby lepiej obsługiwać łączenie modyfikatorów rysowania, upewnij się, że implementacja Modifier.paint wywołuje drawsContent.
Wcześniej Modifier.paint miał być węzłem liścia w łańcuchu modyfikatorów, ale w ten sposób uniemożliwiał konfigurację w kontenerze kompozycyjnym (np. w ramce) lub dodawanie dodatkowych dekoracji, takich jak
Modifier.paint().border()
. Wywołując funkcję Modifier.paint drawContent po narysowaniu zawartości danego obiektu painter, uzyskujemy większą spójność zachowania z wzorcem modyfikatora. (Ibb2a7, b/178201337, b/186213275) - Okna dialogowe są teraz dopasowywane do rozmiaru platformy. Aby zastąpić to działanie, ustaw wartość
usePlatformDefaultWidth
na false. (Iffaed, b/192682388) - Przeniesiono
InfiniteAnimationPolicy
do :compose:ui (I5eb09, b/160602714) - Przewijanie za pomocą działań semantycznych w przypadku list leniwych i zwykłych komponentów przewijania jest teraz animowane (Id9066, b/190742024).
Wersja 1.0
Wersja 1.0.5
3 listopada 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.5
Wersja 1.0.5 zawiera te zmiany.
Poprawki błędów
- Naprawiliśmy awarię śledzenia instancji derivedStateOf. (aosp/1792247)
Wersja 1.0.4
13 października 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.4
Wersja 1.0.4 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlin
1.5.31
Wersja 1.0.3
29 września 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.3
Wersja 1.0.3 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlin
1.5.30
Wersja 1.0.2
1 września 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.2
Wersja 1.0.2 zawiera te zmiany.
Zaktualizowano, aby obsługiwać wersję 1.0.2
Compose. Compose 1.0.2
jest nadal zgodny z Kotlinem 1.5.21
.
Wersja 1.0.1
4 sierpnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.1
Wersja 1.0.1 zawiera te zmiany.
Aktualizacje zależności
- Zaktualizowano, aby zależał od Kotlina w wersji
1.5.21
.
Wersja 1.0.0
28 lipca 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0
Wersja 1.0.0 zawiera te zmiany.
Główne funkcje wersji 1.0.0
To pierwsza stabilna wersja Compose. Więcej informacji znajdziesz na oficjalnym blogu o wersji Compose.
Znane problemy
Jeśli używasz Androida Studio Bumblebee Canary 4 lub AGP
7.1.0-alpha04
/7.1.0-alpha05
, może wystąpić ten błąd:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Aby to naprawić, tymczasowo zwiększ wartość minSdkVersion do 24 lub więcej w pliku
build.gradle
. Ten problem zostanie rozwiązany w kolejnej wersji Androida Studio Bumblebee i AGP7.1
. (b/194289155)
Wersja 1.0.0-rc02
14 lipca 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-rc02
Wersja 1.0.0-rc02 zawiera te zmiany.
Poprawki błędów
- Okna dialogowe są teraz dopasowywane do rozmiaru platformy. Aby zastąpić to działanie, ustaw wartość
usePlatformDefaultWidth
na false. (Iffaed, b/192682388)
Wersja 1.0.0-rc01
1 lipca 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-rc01
Wersja 1.0.0-rc01 zawiera te zmiany.
Nowe funkcje
- Podziel moduł ui-tooling na
ui-tooling
iui-tooling-preview
(Iefa28, b/190649014)
Zmiany w interfejsie API
- Usunięto wycofane eksperymentalne funkcje
FocusManager#moveFocusIn
iFocusManager#moveFocusOut
(I227d7, b/170154986, b/186567354, b/168510304) - Canvas obsługuje teraz parametr contentDescription na potrzeby ułatwień dostępu. (Ib547c)
- Nazwa elementu
useDefaultMaxWidth
wPopupProperties
została zmieniona nausePlatformDefaultWidth
. (I05710) - Okna dialogowe mogą teraz korzystać z całej szerokości ekranu. (I83929, b/190810877)
- Dodaliśmy eksperymentalną obsługę reprezentacji kolorów HSV i HSL. (Id7cf8, b/180731008)
Zmiany w zachowaniu
- Compose
@Preview
udostępnia terazLocalActivityResultRegistryOwner
, które umożliwia wyświetlanie podglądu funkcji kompozycyjnych korzystających z interfejsów API, takich jakrememberLauncherForActivityResult()
, które zależą od istnienia tego właściciela. (Ib13d1, b/185693006) - Funkcja
@Preview
ComposeLocalOnBackPressedDispatcherOwner
udostępnia terazLocalOnBackPressedDispatcherOwner
, który umożliwia wyświetlanie podglądu funkcji kompozycyjnych korzystających z interfejsów API, takich jakBackHandler
, które wymagają istnienia tego właściciela. (Ia1c05, b/185693006)
Poprawki błędów
- Przeniesiono
InfiniteAnimationPolicy
doandroidx.compose.ui:ui
(I5eb09, b/160602714) - Klasa AnimatedImageVector została tymczasowo usunięta w celu zmiany struktury modułu. (I41906, b/160602714)
Wersja 1.0.0-beta09
16 czerwca 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta09
Wersja 1.0.0-beta09 zawiera te zmiany.
Zmiany w interfejsie API
- Zmień typy wyliczeniowe Role i LiveRegionMode na klasy wbudowane z prywatnym konstruktorem (Id1890).
- KeyboardCapitalization jest przekształcana w klasę wbudowaną. (Id5a1c)
- Zmiana HapticFeedbackType na klasę wbudowaną. (I255ec)
- Modifier.pointerInteropFilter jest oznaczony jako @ExperimentalComposeUiApi. (Iede6c)
- Klasy TextAlign, FontSynthesis i TextDirection są teraz klasami wbudowanymi. (I212fe)
- TextOverflow jest zmieniany na klasę wbudowaną. (I433af)
- FontStyle jest teraz klasą wbudowaną. (I9e48b)
Poprawki błędów
- Obecnie kluczową stałą jest @ExperimentalComposeUiApi. Kod korzystający z interfejsu API może deklarować stałe prywatne przed jego ustabilizowaniem. (Ia5d48)
- Testy Compose można teraz przeprowadzać w Robolectric. Do tej pory zidentyfikowano te ograniczenia:
- Nie ma natywnej mapy bitowej, więc
ImageBitmap()
powoduje wyjątek NullPointerException. - Nie ma rysowania, więc
captureToImage()
będzie w nieskończoność czekać na następny etap rysowania (czyli nastąpi zakleszczenie). - Nie ma załadowanej czcionki, więc każdy tekst będzie mierzony nieprawidłowo. Wszystkie znaki mają stałą wysokość około 20 pikseli i szerokość 1 piksela.
ComposeTestRule.waitUntil {}
nie uruchamia wątku głównego podczas oczekiwania, co sprawia, że jest on w zasadzie taki sam jakComposeTestRule.mainClock.advanceTimeUntil {}
W przyszłości prawdopodobnie zostaną zidentyfikowane kolejne ograniczenia. (I284fa)
- Nie ma natywnej mapy bitowej, więc
Dodano reguły profilu
W tej wersji dodaliśmy reguły profilu do tych modułów kompozycji (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
Czym są reguły profilu?
Reguły profilu dla biblioteki są określone w pliku tekstowym
baseline-prof.txt
znajdującym się w katalogusrc/main
lub w odpowiednim katalogu. Plik zawiera regułę w każdym wierszu. Reguła jest w tym przypadku wzorcem dopasowywanym do metod lub klas w bibliotece. Składnia tych reguł jest nadzbiorem formatu profilu ART czytelnego dla człowieka, który jest używany podczas korzystania zadb shell profman --dump-classes-and-methods ...
. Reguły te przyjmują jedną z 2 form, aby kierować reklamy na metody lub klasy.Reguła metody będzie mieć ten wzorzec:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Reguła klasy będzie miała następujący wzorzec:
<CLASS_DESCRIPTOR>
W tym przypadku
<FLAGS>
to co najmniej jeden z tych znaków:H
,S
iP
. Wskazuje on, czy ta metoda powinna być oznaczona jako „Hot”, „Startup” lub „Post Startup”.<CLASS_DESCRIPTOR>
to deskryptor klasy, do której należy kierowana metoda. Na przykład klasaandroidx.compose.runtime.SlotTable
będzie miała deskryptorLandroidx/compose/runtime/SlotTable;
.Symbol
<METHOD_SIGNATURE>
to sygnatura metody, która zawiera jej nazwę, typy parametrów i typy zwracanych wartości. Na przykład metodafun isPlaced(): Boolean
wLayoutNode
ma sygnaturęisPlaced()Z
.Wzorce mogą zawierać symbole wieloznaczne (
**
,*
i?
), dzięki czemu jedna reguła może obejmować wiele metod lub klas.
Do czego służą reguły?
Metoda oznaczona flagą
H
jest metodą „gorącą” i powinna być skompilowana z wyprzedzeniem.Metoda z flagą
S
wskazuje, że jest to metoda wywoływana podczas uruchamiania i powinna być skompilowana z wyprzedzeniem, aby uniknąć kosztów kompilacji i interpretacji metody podczas uruchamiania.Metoda oznaczona flagą
P
jest wywoływana po uruchomieniu.Klasa obecna w tym pliku wskazuje, że jest używana podczas uruchamiania i powinna być wstępnie przydzielona w stercie, aby uniknąć kosztów ładowania klasy.
Jak to działa?
- Biblioteki mogą definiować te reguły, które będą pakowane w artefakty AAR. Gdy aplikacja zawierająca te artefakty zostanie skompilowana, reguły zostaną połączone, a następnie użyte do utworzenia kompaktowego binarnego profilu ART, który jest specyficzny dla aplikacji. ART może następnie wykorzystać ten profil podczas instalowania aplikacji na urządzeniach, aby skompilować z wyprzedzeniem określony podzbiór aplikacji i zwiększyć jej wydajność, zwłaszcza podczas pierwszego uruchomienia. Nie będzie to miało wpływu na aplikacje, które można debugować.
Wersja 1.0.0-beta08
2 czerwca 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta08
Wersja 1.0.0-beta08 zawiera te zmiany.
Zmiany w interfejsie API
- Wyliczenie
NestedScrollSource
zostało zastąpione klasą wbudowaną. (Ie321b, b/187055290) - Nazwa
FocusManager.clearFocus(forcedClear = true)
została zmieniona naFocusManager.clearFocus(force = true)
(Ia0c41) - Zmieniliśmy sposób używania wyliczeń na klasy wbudowane, aby uniknąć problemów z wyczerpującymi instrukcjami „when” po dodaniu nowych wartości wyliczenia. (I2b5eb)
- Usuń urządzenie
@ExperimentalComposeUiApi
z kontaPopupProperties
. (I01fa6) - Wartość pola „
PointerType
” została zmieniona z wyliczenia na klasę wbudowaną (If5058) - Właściwości semantyczne ContentDescription i Text nie są już pojedynczymi wartościami, ale listami. Dzięki temu można je scalić w takiej postaci, w jakiej są, zamiast je łączyć. Udostępniliśmy też lepsze interfejsy API do testowania, które pozwalają korzystać z tych zmian (Ica6bf, b/184825850).
- Środowisko wykonawcze
Modifier.focusModifier()
zostało wycofane i zastąpione środowiskiemModifier.focusTarget()
(I6c860). - Funkcje
Modifier.onSizeChanged()
iModifier.onGloballyPositioned()
nie są już funkcjami wstawianymi (I727f6, b/186109675). - Wyliczenie
KeyboardType
zostało zastąpione klasą wbudowaną. (I73045, b/187055290) - Zastąpiono wyliczenie
FocusState
interfejsemFocusState
(Iccc1a, b/187055290). - Wyliczenie ImeAction zostało zastąpione klasą wbudowaną. (I18be5, b/187055290)
PlaceholderVerticalAlign
jest przekształcana w klasę w tekście. (If6290)- TextUnitType to teraz klasa wbudowana. (I4cba9)
AnnotatedString.withAnnotation
są teraz częścią ExperimentalTextApi zamiast ExperimentalComposeApi. (I0cd0a)- Konstruktor TextUnit z TextUnitType jest teraz ExperimentalTextApi zamiast ExperimentalComposeApi.
Poprawki błędów
- Usunęliśmy błąd wprowadzony w wersji beta07, który powodował, że elementy LazyColumn/Row były wyświetlane częściowo po przewinięciu (I8c9ac, b/188566058).
- Teraz
detectDragGesures
,detectVerticalGestures
idetectHorizontalGestures
będą automatycznie wykorzystywać zmianę pozycji, więc nie musisz wywoływać funkcji change.consumePositionChange w wywołaniach zwrotnych onDrag (I42fc4, b/185096350, b/187320697). - Poprawiono LayoutModifiers, które udostępniały linie wyrównania. Usunęliśmy błąd, który powodował, że wymiary elementu nadrzędnego nie były ponownie mierzone, gdy zmieniały się linie wyrównania elementów podrzędnych. (I4401f, b/174315652)
Modifier.onGloballyPositioned()
została zmieniona tak, aby raportować współrzędne tego modyfikatora w łańcuchu modyfikatorów, a nie współrzędne układu po zastosowaniu wszystkich modyfikatorów. Oznacza to, że kolejność modyfikatorów wpływa teraz na to, jakie współrzędne będą raportowane. (Ieb67d, b/177926591)
Wersja 1.0.0-beta07
18 maja 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta07
Wersja 1.0.0-beta07 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano interfejs
ViewRootForInspector
do użycia w inspektorze (Ib70df) SubcomposeLayoutState
obsługuje teraz ustawianie liczby gniazd wielokrotnego użytku. Układ będzie utrzymywać aktywność maksymalnie tylu slotów, zamiast je usuwać, aby można było ich użyć ponownie, gdy będziemy potrzebować nowego (Ieb981).- Enum KeyEventType został zastąpiony klasą wbudowaną. (Id670a, b/187055290)
- Wyliczenie
FocusDirection
zostało zastąpione klasą wbudowaną. (Ib6d03, b/187055290, b/184086802) - Wprowadza możliwość przeniesienia stanu SubcomposeLayout, co pozwala wstępnie komponować treści w wymaganym elemencie slotId, co przyspiesza następny etap pomiaru, ponieważ gdy następnym razem spróbujemy skomponować element slotId, nie będzie już potrzebna kompozycja. (I42580, b/184940225)
- Dodano uchwyt zaznaczenia klipu (Iff80d, b/183408447)
- Usunięto nieużywane interfejsy API związane z obsługą narzędzia LayoutInspector. (I2ac78)
Poprawki błędów
- Komponenty LazyColumn i LazyRow będą teraz utrzymywać do 2 wcześniej widocznych elementów w stanie aktywnym (nieusuniętym), nawet jeśli zostały już przewinięte. Dzięki temu komponent może ponownie wykorzystywać aktywne podkompozycje, gdy będziemy musieli utworzyć nowy element, co poprawia wydajność przewijania. (Ie5555)
- Ustawienia
TextGeomerticTransform
iTextDecoration
naAnnotatedString
zostaną zastosowane w podany sposób. (I61900, b/184760917)
Wersja 1.0.0-beta06
5 maja 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta06
Wersja 1.0.0-beta06 zawiera te zmiany.
Zmiany w interfejsie API
- Rozwiązywanie konfliktów z gestami nawigacyjnymi (I1145e)
@ComposeCompilerApi
nie jest już@RequiresOptIn
(Iab690)- Dodano interfejsy API ułatwień dostępu CollectionInfo i CollectionItemInfo, które umożliwiają oznaczanie kolekcji i jej elementów dla usług ułatwień dostępu (Id54ef, b/180479017).
- Dodano
SemanticsActions.ScrollToIndex
, aby przewijać listę z elementami indeksowanymi do elementu o określonym indeksie, orazSemanticsProperties.IndexForKey
, aby uzyskać indeks elementu na liście z elementami kluczowymi. Oba działania są realizowane przez LazyList.- Dodano funkcję
SemanticsNodeInteraction.performScrollToIndex
, która przewija listę do podanego indeksu, oraz funkcjęSemanticsNodeInteraction.performScrollToKey
, która przewija listę do elementu o podanym kluczu. (I4fe63, b/178483889, b/161584524)
- Dodano funkcję
- Dodano element ownerViewId do elementu GraphicLayerInfo (I19f62)
- Dodano przeciążenia Font() do wczytywania czcionek z zasobów, plików i deskryptorów plików (I5d382).
- Dodano interfejs API ułatwień dostępu
error
, który umożliwia oznaczanie węzła zawierającego nieprawidłowe dane wejściowe (I12997, b/180584804, b/182142737). - Dodano
Font()
przeciążeń do wczytywania czcionek z zasobów, plików i deskryptorów plików (I43007). - Dodaliśmy obsługę zapisywania elementu AnnotatedString w
TextFieldValue.Saver
. Dodano funkcje narzędzioweaddTtsAnnotation
i withAnnotation doAnnotatedString.Builder
(I8cbdc, b/178446304) - Dodano funkcję konstruktora TextUnit
TextUnit(value: Float, type: TextUnitType)
(I7ecce, b/178446304)
Wersja 1.0.0-beta05
21 kwietnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta05
Wersja 1.0.0-beta05 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano eksperymentalne funkcje
FocusManager.moveFocus(In)
iFocusManager.moveFocus(Out)
(Ic5534, b/183746743) - Dodano eksperymentalny interfejs
performTextInputSelection
API (I2dcbb, b/178510628) - Interfejs
InputEventCallback
został wycofany. Nie można było używać interfejsu w żadnym publicznym interfejsie API, a w kodzie nie było żadnego jego użycia. (I34a02, b/184003208) - Wycofana funkcja
TextLayoutResult/createTextLayoutResult
. Jest to nieużywana funkcja publiczna, która została dodana na potrzeby testowania. Funkcja nie wykonuje żadnych działań, które można by wykorzystać w przypadku interfejsów API do tworzenia tekstu. Ta funkcja została wycofana i zostanie później usunięta. (I80413)
Poprawki błędów
- Naprawiono działania przewijania w
ACTION_SCROLL_FORWARD
,ACTION_SCROLL_BACKWARD
,accessibilityActionScrollLeft
,accessibilityActionScrollUp
,accessibilityActionScrollRight
iaccessibilityActionScrollDown
. Zamiast przewijać do końca obszaru przewijania, będzie teraz przewijać o jeden ekran w danym kierunku. (Ieccb0) - Pliki AndroidManifest z ui-test-manifest i ui-tooling-data są teraz zgodne z Androidem 12 (I6f9de, b/184718994).
Wersja 1.0.0-beta04
7 kwietnia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta04
Wersja 1.0.0-beta04 zawiera te zmiany.
Zmiany w interfejsie API
- Zmień nazwy
hideSoftwareKeyboard
ishowSoftwareKeyboard
nahide()
ishow()
odpowiednio.SoftwareKeyboardController
- Udostępnia pełny interfejs CompositionLocal dla LocalSoftwareKeyboardController, co umożliwia jego ustawienie (szczególnie przydatne w testach) (I579a6).
- Dodano interfejs API ułatwień dostępu LiveRegion. Jeśli węzeł jest oznaczony jako aktywny region, usługi ułatwień dostępu automatycznie powiadomią użytkownika o jego zmianach (Idcf6f, b/172590946).
- Wprowadzono TextOverflow.Visible. (Ic8f89)
Poprawki błędów
- Rozwiązaliśmy problem z nieprawidłowym pozycjonowaniem elementów
LazyColumn
/LazyRow
znajdujących się na krawędziach po szybkim przesunięciu (Ie4d13, b/183877420). AndroidViewBinding
prawidłowo usuwa fragmenty rozszerzone za pomocąFragmentContainerView
, gdyAndroidViewBinding
jest usuwany z hierarchii kompozycji. (Ib0248, b/179915946)AndroidViewBinding
prawidłowo zagnieżdża teraz fragmenty rozszerzone za pomocąFragmentContainerView
, gdyComposeView
znajduje się wFragment
. Rozwiązuje to problemy z zapisywaniem i przywracaniem stanu tych fragmentów. (I70eb0, b/179915946)- Compose ViewBinding zależy teraz od Fragment
1.3.2
i po zmianach konfiguracji konsekwentnie wyświetla fragmenty utworzone za pomocąFragmentContainerView
. (I0743d, b/179915946)
Wersja 1.0.0-beta03
24 marca 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta03
Wersja 1.0.0-beta03 zawiera te zmiany.
Zmiany w interfejsie API
- Odroczone sprawdzanie zależności ViewTree w przypadku ComposeView (I8dbbf, b/182466548)
- Dodaliśmy opcjonalne parametry
startX
/endX
istartY
/endY
do funkcjiswipeUp
/swipeDown
/swipeLeft
/swipeRight
wGestureScope
. (I49e2d, b/182063305)
Wersja 1.0.0-beta02
10 marca 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta02
Wersja 1.0.0-beta02 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano nowy interfejs API
LocalSoftwareKeyboardController
composition local API, który zastępuje poprzedni interfejs SoftwareKeyboardController w polu TextField. (I5951e, b/168778053) - Dodano nowy interfejs API
LocalSoftwareKeyboardController
composition local API, który zastępuje poprzedni interfejs SoftwareKeyboardController w polu TextField. (I84472, b/168778053) - Usunięto te
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(If16bd)
- Oznaczono
SemanticsMatchers
jako @ExperimentalTestApi:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(Ia600c)
- Dodaliśmy te
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(I2f502)
Poprawki błędów
- Wymuszanie ograniczeń dotyczących publicznego korzystania z eksperymentalnych interfejsów API (I6aa29, b/174531520)
androidx.compose.ui:ui
nie zależy już od AppCompat ani Fragment. Jeśli w aplikacji używasz elementu ComposeView oraz komponentów Fragment lub AppCompat, upewnij się, że korzystasz z wersji AppCompat 1.3 lub nowszej albo Fragment 1.3 lub nowszej. Te wersje są potrzebne do prawidłowego ustawienia właścicieli cyklu życia i zapisanego stanu wymaganych w przypadku elementu ComposeView. (I1d6fa, b/161814404)- Poprawka uszkodzonego elementu
rememberSaveable { mutableStateOf(0) }
, gdy jest używany w miejscu docelowym nawigacji w Compose. (I1312b, b/180042685, b/180701630) - Dodano nowy interfejs API
LocalSoftwareKeyboardController
composition local API, który zastępuje poprzedni interfejs SoftwareKeyboardController w polu TextField. (I658b6, b/168778053) - Rozwiązano rzadki problem NoSuchElementException w
ComposeRootRegistry
tearDownRegistry()
(Iddce1).
Wersja 1.0.0-beta01
24 lutego 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-beta01
Wersja 1.0.0-beta01 zawiera te zmiany.
To pierwsza wersja Compose 1.0.0 w wersji beta.
Zmiany w interfejsie API
- Dodano wywołanie zwrotne onStart do
detectDragGestures
(I67269, b/179995594) - Modyfikatory rozmiaru do wartości wewnętrznych nie są już eksperymentalne. (I15744)
- Usługa MeasureBlocks została przekształcona w MeasurePolicy, która zyskała zabawny interfejs. Interfejsy API układu zostały zaktualizowane i uproszczone, aby korzystać z funkcji MeasurePolicy. (Icab48, b/167662468, b/156751158)
InteractionState
zostało zastąpione przez[Mutable]InteractionSource
- Interfejsy odpowiadają za emitowanie i zbieranie zdarzeń interakcji.
- Zamiast przekazywać wartość
interactionState = remember { InteractionState() }
do komponentów takich jakButton
iModifier.clickable()
, użyj wartościinteractionSource = remember { MutableInteractionSource() }
. - Zamiast:
Interaction.Pressed in interactionState
używaj funkcji rozszerzających w klasie InteractionSource, np. InteractionSource.collectIsPressedAsState(). - W przypadku złożonych przypadków użycia możesz użyć InteractionSource.interactions, aby obserwować strumień interakcji. Więcej informacji znajdziesz w dokumentacji i przykładach dotyczących InteractionSource.
- (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
- Dodanie interfejsu AccessibilityManager i LocalAccessibilityManager do CompositionLocals (I53520)
- Usunięto wycofane metody LayoutCoordinates. Zamiast właściwości positionInParent i boundsInParent używaj funkcji (I580ed, b/169874631, b/175142755)
- Aliasy typów zastąpione typami bazowymi:
ColorStop
to terazPair<Float, Color>
SpanStyleRange
to teraz `AnnotatedString.RangeParagraphStyleRange
to terazAnnotatedString.Range<ParagraphStyle>
StringAnnotation
to terazAnnotatedString.Range<String>
- (I8dd1a)
- Utworzono nową klasę TextInputSession dla sesji wprowadzania danych z komponentów tekstowych niskiego poziomu, takich jak CoreTextField. (I8817f, b/177662148)
- Komponent Placeable udostępnia teraz właściwość measuredSize, która reprezentuje rozmiar, do którego został zmierzony układ podrzędny. Ten rozmiar może nie spełniać ograniczeń pomiarowych. (Ib2729, b/172560206, b/172338608)
- Dodaj modyfikator selectionGroup, który umożliwia oznaczanie kolekcji kart lub przycisków opcji na potrzeby ułatwień dostępu (Ie5c29).
Pole
defaultFactory
dlacompositionLocalOf
istaticCompositionLocalOf
jest teraz wymagane zamiast opcjonalnego.Ta zmiana usuwa potencjalny błąd typu w przypadku typów, które nie mogą mieć wartości null, a dla których nie podano domyślnej funkcji fabrycznej. Wcześniej w przypadku typu, który nie dopuszcza wartości null, zwracana była referencja null.
W przypadku typów dopuszczających wartość null rozważ podanie wartości
{ null }
jako domyślnej funkcji fabrycznej.Nie zalecamy używania zmiennych lokalnych z typami, które nie dopuszczają wartości null, chyba że można podać rozsądną wartość domyślną. Jeśli nie ma sensownej wartości domyślnej, funkcja lambda
defaultFactory
powinna zgłosić wyjątek. Wyjątek oznacza jednak, że konsumenci lokalnego będą mieli niejawną zależność od jego dostarczenia, która nie jest wymuszana przez system typów. (Ifbd2a)Usunęliśmy wycofane metody z modułów interfejsu (I646f6).
Zmieniliśmy nazwy modyfikatorów rozmiaru. Zmieniono nazwy modyfikatorów Modifier.width/height/size na requiredWidth/requiredHeight/requiredSize. Zmieniono nazwy modyfikatorów Modifier.preferredWidth/preferredHeight/preferredSize na width/height/size. (I5b414)
Modifier.tapGestureFilter
został(a) usunięty(a). Zamiast niej używaj zasadyModifier.pointerInput { detectTapGestures(...) }
. (I266ed, b/175294473)częściowe wykorzystanie zostało usunięte z systemu wprowadzania za pomocą wskaźnika. Zalecanym sposobem koordynowania częściowego zużycia jest Modifier.nestedScroll. (Ie9c9b)
Orientacja została przeniesiona do pakietu podstawowego. VelocityTracker został przeniesiony z ui.gesture do ui.input.pointer. (Iff4a8, b/175294473)
imageResource i vectorResource są teraz funkcjami rozszerzającymi odpowiednio elementy towarzyszące ImageBitmap i ImageVector. Usunięto
load{Image,Vector,Font}Resource
funkcji. (I89130)Klasy AnimationClockObservable i ich podklasy zostały usunięte. Klasa AnimatedFloat została usunięta. (Icde52, b/177457083)
Element Providers został zmieniony na CompositionLocalProvider
- Konstruktor Composition nie akceptuje już parametru key i został wycofany.
- currentCompositeKeyHash został przekształcony w właściwość najwyższego poziomu typu „composable”, a nie w funkcję najwyższego poziomu typu „composable”.
- Klasy CompositionData i CompositionGroup zostały przeniesione do przestrzeni nazw androidx.compose.runtime.tooling.
- Typ ComposableLambda został zmieniony z klasy konkretnej na interfejs i nie ma już parametrów typu.
- ComposableLambdaN stał się interfejsem zamiast konkretnej klasy i nie ma już parametrów typu.
- Funkcja snapshotFlow została przeniesiona do przestrzeni nazw androidx.compose.runtime
- metoda scalania SnapshotMutationPolicy nie jest już eksperymentalna;
- Usunięto funkcję clearRoots najwyższego poziomu @TestOnly. Nie jest już potrzebny.
- Funkcje keySourceInfoOf i resetSourceInfo zostały usunięte. Nie są już potrzebne.
- Funkcja Composer.collectKeySourceInformation została usunięta. Nie jest już potrzebny.
- Usunęliśmy metody isJoinedKey, joinedKeyLeft i joinedKeyRight. Nie są już potrzebne.
- Różne interfejsy API najwyższego poziomu zostały przeniesione i zreorganizowane w różnych plikach. Ze względu na semantykę klasy plików w języku Kotlin spowoduje to przerwanie zgodności binarnej, ale nie zgodności kodu źródłowego, więc nie powinno stanowić problemu dla większości użytkowników.
- (I99b7d, b/177245490)
ComponentActivity.setContent()
został usunięty z biblioteki compose:ui. Użyj tego zandroidx.activity:activity-compose:1.3.0-alpha01
. Z biblioteki compose:ui usunięto funkcjeviewModel()
iLocalViewModelStoreOwner
. Użyj tych zandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
(I6f36b)Zmodyfikowano element Modifier.scrollable. Zamiast klasy ScrollableController używa teraz interfejsu Scrollable (I4f5a5, b/174485541, b/175294473).
Usunięto obsługę zdarzeń niestandardowych z PointerInputModifier (I02707, b/175294473)
SnapshotStateObserver nie jest już eksperymentalny (Id2e6a)
Usunięto niektóre wcześniej wycofane interfejsy API (Ice5da, b/178633932).
Usunięto funkcje longPressGestureFilter i doubleClickGestureFilter. Używaj Modifier.pointerInput z funkcjami pomocniczymi, np. detectTapGestures (I2fedf, b/175294473).
Usunięto interfejs API String.format. Zmieniono sposób użycia w różnych metodach toString, aby wewnętrznie nie korzystać z interfejsu String.format. (Id1290)
Usunięto asercje dp (I798d2)
Usunięto androidx.compose.runtime:runtime-dispatch (I55feb)
Działania związane z tekstem automatycznie sprawdzają teraz ostrość (I13777, b/179648629)
Usunięto
runBlockingWithManualClock
(I15cdc, b/179664814)Pozycja przewijania w funkcjach Modifier.verticalScroll()/horizontalScroll() jest teraz reprezentowana przez liczby całkowite (I81298).
Klasa FlingConfig została zmieniona na FlingBehavior i umożliwia teraz dostosowywanie animacji zawieszenia zamiast wstępnie zdefiniowanych zanikań. (I02b86, b/175294473)
Dodano funkcję pomocniczą, która ułatwia ustawianie tego samego działania dla wszystkich wywołań zwrotnych ImeAction (I63447, b/179226323).
Usunięto wywołanie zwrotne SoftwareKeyboardController ze wszystkich pól tekstowych. Wkrótce zostanie ono zastąpione nowym interfejsem API. (Iae869, b/168778053)
Klasy FontSpan i FontWeigthStyleSpan nie są już używane i zostały usunięte. (Ie5b56, b/177423444)
Wprowadziliśmy te zmiany w interfejsie Material API:
- Dodano parametr contentPadding do komponentów TopAppBar i BottomAppBar, aby umożliwić dostosowywanie domyślnego dopełnienia.
- Zmieniono kolejność parametrów w komponencie BackdropScaffold, aby była zgodna z wytycznymi interfejsu API, zgodnie z którymi parametry wymagane powinny występować przed parametrami opcjonalnymi.
- Parametr
icon
w elemencie BottomNavigationItem został przeniesiony i jest teraz po parametrachselected
ionClick
. - Zmieniono nazwę parametru
alwaysShowLabels
w elemencie BottomNavigationItem naalwaysShowLabel
. - W kilku komponentach zmieniliśmy nazwy parametrów
bodyContent
nacontent
. - Zmieniono kolejność parametrów w zdarzeniu
ButtonDefaults.buttonColors()
. Pamiętaj, że typ parametrów nie uległ zmianie, więc nie spowoduje to błędu w kodzie. Upewnij się, że używasz nazwanych parametrów lub ręcznie zaktualizuj kolejność, w przeciwnym razie kod nie będzie działać tak jak wcześniej. - Dodano parametr
secondaryVariant
dodarkColors()
. Ten kolor jest zwykle taki sam jaksecondary
w ciemnym motywie, ale dodajemy go, aby zapewnić spójność i umożliwić dalsze dostosowywanie. - Usunęliśmy z publicznego interfejsu API funkcje ElevationDefaults i animateElevation(), ponieważ nie były one powszechnie używane ani przydatne.
- Zmieniono nazwę
onValueChangeEnd
wSlider
naonValueChangeFinished
i ustawiono możliwość przyjmowania wartości null. - Zmieniono nazwę parametru
text
wSnackbar
nacontent
, aby zachować spójność. - Dodano parametr
contentPadding
doDropdownMenuItem
, aby umożliwić dostosowywanie domyślnego dopełnienia, i sprawiono, żecontent
jest rozszerzeniemRowScope
. - Zmieniono nazwę
ModalDrawerLayout
naModalDrawer
. - Zmieniono nazwę
BottomDrawerLayout
naBottomDrawer
. - (I1cc66)
Poprawki błędów
- Dodano interfejs API do używania zasobów AnimatedVectorDrawable w Compose. Użyj
animatedVectorResource, aby wczytać
<animated-vector>
XML jako AnimatedImageVector i animować go za pomocą painterFor (I8ea91). - Dodano nowy lokalny interfejs API LocalSoftwareKeyboardController, który zastępuje poprzedni interfejs SoftwareKeyboardController w polu TextField. (I658b6, b/168778053)
Wersja 1.0.0-alpha12
10 lutego 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha12
Wersja 1.0.0-alpha12 zawiera te zmiany.
Zmiany w interfejsie API
- Usunięto obsługę grup widoków z klasy UiApplier. Usunięto wycofane funkcje emitView. (Ifb214)
- Funkcja Modifier.pointerInput wymaga teraz kluczy pamięci, aby wskazywać, kiedy korutyna wykrywania danych wejściowych wskaźnika powinna zostać ponownie uruchomiona w przypadku nowych zależności. (I849cd)
- Zmiana nazwy CompositionReference na CompositionContext (I53fcb)
- Bounds zmieniono na DpRect (I4b32a)
- Aktualizacja testowania: funkcja hasText() będzie sprawdzać zarówno tekst wprowadzony, jak i tekst etykiety, podpowiedzi lub symbolu zastępczego w polu tekstowym (Iab803)
- Funkcja kompozycyjna viewModel() i LocalViewModelStoreOwner zostały przeniesione do androidx.lifecycle.viewmodel.compose. Aby z niej korzystać, musisz teraz dodać osobną zależność androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. (I7a374)
- Zezwolenie na działanie z wartością null w AccessibilityAction, zmiana etykiety działania w AccessibilityAction i CustomAccessibilityAction z CharSequence na String (I0dc82)
- Aby lepiej dopasować konwencje nazewnictwa do ImageBitmap i ImageVector, zmieniliśmy nazwę ImagePainter na BitmapPainter, aby była podobna do VectorPainter. (Iba381, b/174565889)
- Ulepszone interfejsy API testów podłańcuchów z podłańcuchem jako argumentem (Icbe78)
- Dodano
Modifier.focusOrder()
, który akceptuje FocusRequester bez określania niestandardowej kolejności fokusu w lambdzie. Jest to przydatne, gdy musimy tylko określić odniesienie, ale nie niestandardową kolejność fokusu dla komponentu (I4f52a, b/179180978). - Funkcja ComponentActivity.setContent została przeniesiona do androidx.activity.compose.setContent w module androidx.activity:activity-compose. (Icf416)
- Metody destrukcji i copy() zostały usunięte z kilku klas, w których były rzadko używane. (I26702, b/178659281)
- Przeniesiono wyskakujące okienko, aby było specyficzne dla platformy. Nazwa klasy AndroidPopupProperties została zmieniona na PopupProperties, a
isFocusable
zostało przeniesione do parametrufocusable
wPopupProperties
(Ieeea5). - Przeniesiono okno dialogowe, aby było specyficzne dla platformy. Nazwa AndroidDialogProperties została zmieniona na DialogProperties. (I4ef69, b/179138130)
- Udostępniono wewnętrznie klasę LayoutNode (I8a7b1, b/175103944)
- Funkcja Constraints.enforce została zastąpiona funkcją Constraints.constrain. (I8b8ea)
- Funkcja loadFontResource została wycofana. Zamiast nich używaj fontResource. imageResource, loadImageResource, vectorResource i loadVectorResource zostały wycofane. Zamiast tego użyj painterResource. (I6b809)
- Ze względu na wydajność semantyka ScrollAxisRange przyjmuje teraz lambdy zwracające wartości zmiennoprzecinkowe zamiast bezpośrednich wartości zmiennoprzecinkowych. (If4a35, b/178657186)
- Dodano semantykę EditableText, aby oznaczyć edytowalny tekst wejściowy pola tekstowego na potrzeby ułatwień dostępu, oraz odpowiednie metody testowania, aby sprawdzić semantykę (I8e07a).
- Udostępniono wewnętrznie klasy OwnerLayer, OwnerScope i OwnerSnapshotObserver (I4ffaf, b/175103944)
- Nazwa funkcji toIntPx() została zmieniona na roundToPx(). (I9b7e4, b/173502290)
- Zmieniliśmy nazwę IntBounds na IntRect i ulepszyliśmy interfejs API. (I1f6ff)
- Interfejs Snapshot API został zaktualizowany, aby był bardziej zgodny z wytycznymi dotyczącymi interfejsów API, a także aby ukryć klasy implementacji wewnętrznej przed publicznym interfejsem API. (Id9e32)
- Dodano działania semantyczne rozwijania i zwijania. Dodano funkcje expand i halfExpand w ModalBottomSheetState (Ib5064)
- Modyfikator Modifier.dragGestureFilter został wycofany. Zamiast niej używaj zasady
Modifier.pointerInput { detectDragGestures (...)}
. Możesz też użyć modyfikatora Modifier.draggable do przeciągania w jednej osi (I0ba93, b/175294473). - Zmieniliśmy nazwę Ambients, aby pasowała do zmiany nazwy Ambient -> CompositionLocal. Komponenty Ambients miały wcześniej nazwy AmbientFoo, a teraz komponenty CompositionLocals mają nazwy LocalFoo. (I2d55d)
- Wycofane pole BaseTextField zostało usunięte. Zamiast tego użyj BasicTextField. (I71368)
- Zaznaczenie zostało przeniesione do warstwy podstawowej. (I7892b)
- Podobnie jak wcześniej usunęliśmy funkcję
state { 0 }
i teraz promujemy używanie funkcjiremember { mutableStateOf(0) }
, usuniemy funkcjęsavedInstanceState { 0 }
. Zamiast tego użyjrememberSaveable { mutableStateOf(0) }
. Będzie on automatycznie zapisywać i przywracać stan, jeśli typ użyty w MutableState można zapisać w obiekcie Bundle. Jeśli wcześniej przekazywano niestandardowy obiekt zapisujący, teraz trzeba użyć nowego przeciążenia funkcji rememberSaveable, które ma parametrstateSaver
. Użycie będzie wyglądać tak:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
(Ib4c26, b/177338004) - Dodano semantykę haseł na potrzeby ułatwień dostępu (I231ce)
- Dodano ProgressBarRangeInfo.Indeterminate, aby oznaczać nieokreślone paski postępu na potrzeby ułatwień dostępu (I6fe05)
- Narzędzia
emptyContent()
i(@Composable () -> Unit).orEmpty()
zostały wycofane, ponieważ nie mają już pozytywnego wpływu na skuteczność ani wartość (I0484d). snapshotFlow
iwithMutableSnapshot
nie są już eksperymentalne (I6a45f)- Recomposery można teraz zamknąć. Zamknięte kompozytory będą kontynuować rekompozycję, dopóki nie zostaną ukończone podrzędne korutyny kompozycji. Funkcja Recomposer.shutDown została zmieniona na cancel, aby odróżnić ją od funkcji close. (Ib6d76)
- Interfejs UiSavedStateRegistry został zmieniony na SaveableStateRegistry, a interfejs AmbientUiSavedStateRegistry na AmbientSaveableStateRegistry. Oba zostały przeniesione do pakietu androidx.compose.runtime.saveable. (I30224)
- Artefakt androidx:compose:runtime:runtime-saved-instance-state został zmieniony na androidx:compose:runtime:runtime-saveable (I6dcac)
- Wiele wycofanych interfejsów API z pakietu ui zostało usuniętych. (I2f2dc)
- Artefakt compose:runtime-dispatch został wycofany. Klasa MonotonicFrameClock znajduje się teraz w pakiecie compose:runtime, a klasa AndroidUiDispatcher – w pakiecie compose:ui. (Ib5c36)
- Klasy Outline.* nie są już klasami danych (I4879e, b/178001427)
- Usunięto element
view.captureToImage()
bez zastąpienia go innym. (I7fcd2) - Wprowadzono interfejs ColorMatrix API, który służy do modyfikowania wartości RGB treści źródłowych. Przebudowano interfejs ColorFilter API, aby był interfejsem i pasował do implementacji interfejsu PathEffect. (Ica1e8)
- Dodaj parametr layoutDirection do metody createOutline klasy Shape. Umożliwia to tworzenie kształtów uwzględniających kierunek układu. (I57c20, b/152756983)
- onImeActionPerformed jest wycofana. Zamiast niej używaj KeyboardActions (If0bbd, b/179071523)
- Wprowadzono element
InfiniteAnimationPolicy
kontekstu współprogramu, który będzie stosowany w animacjach nieskończonych. Domyślnie nie jest instalowana żadna zasada, z wyjątkiem testów przeprowadzanych w projekcieComposeTestRule
. (I50ec4, b/151940543) - Właściwość canDrag została usunięta z modyfikatora scrollable. (Id66e7, b/175294473)
- Zmieniliśmy nazwę LayoutCoordinates.parentCoordinates na LayoutCoordinates.parentLayoutCoordinates, aby umożliwić dodanie nowej właściwości parentCoordinates. Właściwość parentCoordinates oferuje teraz LayoutCoordintes modyfikatora nadrzędnego. Umożliwi to pełniejsze wykorzystanie funkcji onSizeChanged() i onGloballyPositioned() (Idfbfd, b/177926591).
- Funkcje tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter i pressIndicaitonGestureFilter zostały wycofane. Zamiast tego użyj funkcji Modifier.clickable lub Modifier.pointerInput z funkcją detectTapGestures. (I6baf9, b/175294473)
- Usunęliśmy metodę unregisterProvider z klasy SaveableStateRegistry. Zamiast tego funkcja registerProvider() zwraca teraz obiekt SaveableStateRegistry.Entry, którego możesz użyć do wyrejestrowania (Ic4274, b/178583739).
- Funkcja rememberSavedInstanceState() została zmieniona na rememberSaveable() i przeniesiona do pakietu androidx.compose.runtime.saveable. (I1366e, b/177338004)
- Usunięto CoreText i CoreTextField z publicznego interfejsu API.
- Usunięto nieużywane przeciążenie SelectionContainer
- (I99c19)
- Testy, w których komponenty Compose są używane w hierarchiach dodawanych/usuwanych bezpośrednio w WindowManager, są teraz bardziej stabilne. (Ie81ed, b/175765614)
- Usunięto Recomposer.current(). [Abstract]ComposeView domyślnie tworzy teraz leniwie Recomposery o zakresie okna, które są sterowane przez ViewTreeLifecycleOwner dla okna. Ponowne komponowanie i tyknięcia animacji oparte na withFrameNanos są wstrzymywane, gdy cykl życia hosta jest zatrzymany. (I38e11)
- Właściwość Recomposer.runningRecomposers udostępnia teraz globalny obiekt StateFlow tylko do odczytu RecomposerInfo, który umożliwia obserwowanie stanu bieżącej kompozycji w procesie. Zalecamy używanie tego interfejsu API zamiast Recomposer.current(), który jest obecnie wycofany. (If8ebe)
- Funkcje Saver, listSaver(), mapSaver() i autoSaver zostały przeniesione z pakietu androidx.compose.runtime.savedinstancestate do pakietu androidx.compose.runtime.saveable (I77fe6).
- EditCommands akceptuje AnnotatedString. Jest to jednak zmiana tylko w interfejsie API, a edycja tekstu w wielu stylach nie została jeszcze wdrożona. (I4c3ea)
- Usunięto czas działania i czas trwania. (Ib9bf4, b/177420019)
- Funkcje CompositionData.asTree() i powiązane interfejsy API zostały przeniesione do osobnego modułu ui-tooling-data i oznaczone jako eksperymentalne (Ic95b8).
- Parametry w klasach RounderCornerShape, CutCornerShape i CornerBasedShape zostały zmienione z left/right na start/end, aby obsługiwać automatyczne odbijanie kształtu w kierunku od prawej do lewej. Kształty AbsoluteRounderCornerShape i AbsoluteCutCornerShape zostały wprowadzone w przypadkach, gdy automatyczne dublowanie nie jest pożądane. (I61040, b/152756983)
Interfejs API, na który jest kierowana wtyczka kompilatora Compose, został przekształcony tak, aby używać interfejsu zamiast klasy konkretnej. Interfejs nie używa już też parametru typu.
Jest to zmiana wewnętrzna, która nie powinna wpływać na zgodność kodu źródłowego, ale jest zmianą binarną. (I3b922, b/169406779)
Usunięcie przypadkowo publicznej funkcji StringBuilder.deleteAt (Id6ed9)
Poprawki błędów
- Elementy ComposeView umieszczone w hierarchiach widoków, które są elementami podrzędnymi innej kompozycji, zawierają teraz kompozycje podrzędne swoich elementów nadrzędnych (I92883).
- Zaktualizowano interfejs API compose's imageFromResource, aby podczas wczytywania obiektów ImageBitmap ponownie wykorzystywać pamięć podręczną zasobu rysowalnego. (If3627, b/178751994)
Wersja 1.0.0-alpha11
28 stycznia 2021 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha11
Wersja 1.0.0-alpha11 zawiera te zmiany.
Zmiany w interfejsie API
- Funkcja WithConstraints została przekształcona w BoxWithConstraints i przeniesiona do pakietu foundation.layout. (I9420b, b/173387208)
- Key.DPadUp został wycofany. Zamiast niego użyj Key.DirectionUp. (Iab335, b/177954892)
- Interfejs właściciela będzie od teraz wewnętrzny. (If8e35)
- Dodano interfejs API FocusManager.moveFocus(), który umożliwia programowe przenoszenie fokusu. (I045cb, b/177681839)
- Zmiana PopupPositionProvider na używanie współrzędnych względnych okna, a nie współrzędnych globalnych. Zmienia nazwę parentGlobalBounds na anchorBounds, a windowGlobalBounds na windowSize: IntSize (I2994a).
- Wartości Duration i Uptime zostaną zastąpione wartościami Long milliseconds, a ten krok usuwa zależność danych wejściowych wskaźnika od tych klas. (Ia33b2, b/175142755, b/177420019)
- Dodano AmbientSavedStateRegistryOwner podobnie jak istniejące już AmbientLifecycleOwner i AmbientViewModelStoreOwner (I9a3e8, b/176756365).
- Zaktualizowano interfejs API grafiki wektorowej, aby obsługiwał analizowanie odcieni zastosowanych do głównego elementu grafiki wektorowej. (Id9d53, b/177210509)
- Dodano toolType do PointerInputChange, aby odróżniać urządzenia (Iac787, b/175142755)
- Zmiana nazwy AmbientWindowManager na AmbientWindowInfo (I2686a, b/177084714, b/177084983)
- Wycofaliśmy metody globalnych współrzędnych i wprowadziliśmy nowe metody współrzędnych oparte na oknach. (Iee284)
- Dodano Modifier.toolingGraphicsLayer, który dodaje modyfikator warstwy graficznej, gdy włączone jest sprawdzanie. (I315df)
- Funkcja FocusRequester.createRefs została oznaczona jako eksperymentalna, ponieważ może ulec zmianie. (I2d898, b/177000821)
- Właściwość SemanticsPropertyReceiver.hidden została zmieniona na invisibleToUser i oznaczona jako @ExperimentalComposeUiApi. Zmieniliśmy nazwę AccessibilityRangeInfo na ProgressBarRangeInfo. Zmieniliśmy nazwę stateDescriptionRange na progressBarRangeInfo. Zmieniliśmy nazwę AccessibilityScrollState na ScrollAxisRange. Zmieniliśmy nazwę horizontalAccessibilityScrollState na horizontalScrollAxisRange. Zmieniliśmy nazwę verticalAccessibilityScrollState na verticalScrollAxisRange. (Id3148)
- Usunięto PointerInputData i zmodyfikowano PointerInputChange, aby zawierał wszystkie pola PointerInputData. Uczyniono klasy PointerInputEvent i PointerInputEventData wewnętrznymi, ponieważ nie są używane w żadnym publicznym interfejsie API. (Ifff97, b/175142755)
- Zaktualizowano implementację GraphicsLayerScope density, aby obsługiwała konwersje jednostek dp na piksele. (Ied528, b/176819695)
- Zaktualizowano interfejs API macierzy, aby stosować kolejność wierszową i udostępniać stałe indeksu, które ułatwiają konwersję między różnymi reprezentacjami macierzy w celu dopasowania logiki konwersji platformy między SkMatrix a Matrix4 wewnętrznie. (I432e6)
- Usunięto eksperymentalne metody monotonicFrameAnimationClockOf (Ib753f, b/170708374)
- Przeniesienie String.fintPrecedingBreak i String.fingFollowingBreak do InternalTextApi. (I657c4)
- Funkcja androidx.compose.ui.util.isSurrogatePair została usunięta z publicznego interfejsu API. (Ia9494)
- Zmiana nazwy TransformedText.transformedText na TransformedText.text
- TransformedText nie jest już klasą danych (Ie672a)
- Usunięto
data class
z tych zajęć:- InlineTextContent
- LocaleList (I605c7)
- Te klasy nie są już klasami danych:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- Grubość czcionki
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
- Zmiana interfejsu VisualTransformation na interfejs funkcyjny (I3bba4)
- Dodano typ parametru odwołania do funkcji (I5e1bd).
- Dodawanie przekształconych granic do InspectorNode (Ice42f)
Poprawki błędów
- Funkcje onCommit, onDispose i onActive zostały wycofane na rzecz interfejsów SideEffect i DisposableEffect API (If760e).
Zmiany w funkcjach fabrycznych dla Font/FontFamily/Typeface
- Dodano funkcje fabryczne rozpoczynające się wielką literą
- Wycofanie poprzednich funkcji fabrycznych z małymi literami na początku
- Nowe funkcje fabryczne zwracają FontFamily zamiast podklas
- Ukryte konstruktory podklas, dzięki czemu można je tworzyć tylko za pomocą funkcji fabrycznych.
- Zmiana nazwy Font.asFontFamily na Font.toFontFamily (I42aa7)
Wprowadzono
ComposeContentTestRule
, która rozszerzaComposeTestRule
i definiujesetContent
, która została usunięta zComposeTestRule
. Dodano metodę fabrycznącreateEmptyComposeRule()
, która zwraca obiektComposeTestRule
i nie uruchamia aktywności. Użyj tej opcji, gdy chcesz uruchomić aktywność podczas testu, np.za pomocąActivityScenario.launch
(I9d782, b/174472899).Funkcja animateAsState została zmieniona na animateFooAsState, gdzie Foo to typ animowanej zmiennej, np. Float, Dp, Offset itp. (Ie7e25)
Do komponentów Obraz i Ikona dodaliśmy parametr opis treści. Służy do przekazywania opisu usługom ułatwień dostępu (I2ac4c).
Usuń displaySize, ponieważ należy go unikać. Zwykle lepiej jest używać rozmiaru onRoot() lub co najmniej rozmiaru okna. (I62db4)
OnSizeChanged zgłaszał rozmiar zawartości układu. Teraz raportuje rozmiar w pozycji w łańcuchu modyfikatorów. (I36b78, b/177562900)
Interfejs API emit() i wszystkie jego przeciążenia zostały wycofane i zmieniono ich nazwę na ComposeNode. Interfejsy API są identyczne, tylko mają inną nazwę, aby zachować zgodność z konwencjami nazewnictwa Compose (I4137b).
TextFieldValue akceptuje AnnotatedString. Jest to jednak zmiana tylko w interfejsie API, a edycja tekstu w wielu stylach nie została jeszcze wdrożona.
- Usunięto parametr
initial
z parametrów konstruktora EditingBuffer. (I326d5)
- Usunięto parametr
Funkcje invalidate i compositionReference() zostały wycofane na rzecz funkcji currentRecomposeScope i rememberCompositionReference. (I583a8)
Klasa AnnotatedString została zmieniona tak, aby rozszerzać klasę kotlin.CharSequence. Dlatego length i subSequence są teraz funkcjami instancji, a funkcje rozszerzające zostały usunięte. (Iaf429)
RememberObserver zastępuje CompositionLifecycleObserver, który jest teraz wycofany.
RememberObserver
zastępujeCompositionLifecycleObserver
, ale ma zmodyfikowaną semantykę i zmienione nazwy metod. Przejście na nowy interfejs API można przeprowadzić mechanicznie w przypadku obiektów, które są zapamiętywane tylko raz. Jest to zalecana praktyka i nadal nią pozostanie. Jeśli jednak odwołanie zostało zapamiętane w kompozycji więcej niż raz, funkcjaonRemembered
jest wywoływana dla każdego odwołania, a funkcjaonEnter
jest wywoływana tylko raz.onEnter
było wywoływane wielokrotnie, jeśli obiekt był używany w podkompozycjach, np.WithConstraints
iScaffold
, co sprawiało, że pojedyncze wywołanieonEnter
było niewiarygodne i zostało usunięte w przypadkuRememberObserver
.RememberObserver
dodajeonAbandoned
, które jest wywoływane, jeśli instancjaRememberObserver
jest zwracana z wywołania zwrotnego przekazanego doremember
, ale nie została zapamiętana w stanie kompozycji, a więc nigdy nie zostanie wywołana funkcjaonRemembered
. Może to nastąpić, jeśli wyjątek zakończy kompozycję przed jej ukończeniem lub kompozycja zostanie odrzucona, ponieważ stan, dla którego była tworzona, nie jest już aktualny lub nie jest już potrzebny. Jeśli instancjaRememberObserver
po rekomendacji pojedynczego odwołania powyżej śledzi zasób zewnętrzny, zarównoonForgotten
, jak ionAbandoned
wskazują, że zasób nie jest już potrzebny. Jeśli obiekt śledzi pracę rozpoczętą lub zasoby przydzielone wonRemembered
,onAbandoned
można zignorować, ponieważ nie zostanie wywołany, jeśli zostanie wywołanyonRemembered
. (I02c36)Wycofane operacje arytmetyczne na co najmniej 2 obiektach TextUnit. Funkcje TextUnit.Sp i TextUnit.Em zostały wycofane na rzecz funkcji rozszerzeń, takich jak Int.sp i Int.em. (I48369)
Zasoby w bibliotekach, które nie mają jawnie zadeklarowanych zasobów publicznych (np. za pomocą pliku public.xml), są teraz domyślnie prywatne. (Ia1dcc, b/170882230)
Komponenty ScrollableColumn i ScrollableRow zostały wycofane. Używanie komponentu ScrollableColumn jest mniej wydajne niż LazyColumn w przypadku długich treści przewijanych, ponieważ w przypadku komponentu LazyColumn możemy tylko tworzyć, mierzyć i rysować widoczne elementy. Aby zapobiec nieefektywnemu korzystaniu z tej funkcji, postanowiliśmy wycofać ScrollableColumn i ScrollableRow oraz promować używanie LazyColumn i LazyRow. Użytkownicy mogą nadal decydować, że nie potrzebują leniwego zachowania, i używać modyfikatorów bezpośrednio, np. Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083).
Nowa metoda fabryczna
items(count: Int)
dla zakresu LazyColumn/LazyRow/LazyVerticalGrid.items(items: List)
iitemsIndexed(items: List)
są teraz funkcjami rozszerzającymi, więc musisz je importować ręcznie, gdy są używane. Nowe przeciążenia rozszerzeń dla tablic:items(items: Array)
iitemsIndexed(Array)
(I803fc, b/175562574)Zamiast ImeAction.NoAction użyj ImeAction.None.
- Zamiast ImeAction.Unspecified (Ie1bcc) używaj ImeAction.Default.
Używanie TestCoroutineDispatcher w testach (I532b6)
Zmiana nazwy TextInputService.onStateUpdated na updateState (Id4853)
Wycofano przejście oparte na TransitionDefinition (I0ac57)
Usunięto TextUnitType.Inherit. Zamiast tego użyj TextUnitType.Unspecified. (I9ff64)
Wersja 1.0.0-alpha10
13 stycznia 2021 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha10
Wersja 1.0.0-alpha10 zawiera te zmiany.
Zmiana powodująca niezgodność
Restrukturyzacja wewnętrznego interfejsu API kompilatora umożliwia grupowanie zmian w węzłach wygenerowanych w wyniku kompozycji w fazie „zastosuj zmiany” kompozycji po zakończeniu wszystkich funkcji
@Composable
.Jest to zmiana powodująca niezgodność wsteczną, która może wpłynąć na kod aplikacji, ponieważ węzły nie są już dostępne w wewnętrznych i eksperymentalnych interfejsach API, dopóki zmiany nie zostaną zastosowane. Zwykle można to obejść, otaczając kod z takimi zależnościami funkcją kompozycyjną
SideEffect
, aby odłożyć wykonanie kodu do momentu utworzenia i zainicjowania węzłów. (I018da)
Zmiany w interfejsie API
- Dodano Modifier.focusOrder(), którego można użyć do określenia niestandardowej kolejności przechodzenia fokusu (I90cf5, b/175899543, b/170155556, b/170155429).
- Usunięto przestarzałe użycie focusObserver. Zamiast tego użyj onFocusChanged lub onFocusEvent (I3ecb9, b/175156387)
- Zmiany w interfejsie EditOperations API
- Zmiana nazwy EditOperation na EditCommand
- Dodano sufiks Command do konkretnych implementacji EditOperation
- EditCommand nie są już klasami danych
- Zmiana nazwy funkcji EditOperation.process na applyTo
- Zmiana nazwy InputEventListener na InputEventCallback
- (I0a366)
- Usunięto nieużywane funkcje PxSquared, PxCubed i PxInverse. Zmiana Size.center() na właściwość. (I973f7)
- Moduł ui-test będzie teraz mógł konfigurować tworzenie funkcji Recomposer dla testowanych interfejsów (Ibebd8).
- Zmodyfikowano Velocity, aby zawierał części składowe i operacje matematyczne. (Ib0447)
- Zmieniono nazwę
@ExperimentalTesting
na@ExperimentalTestApi
, aby była zgodna z podobnymi adnotacjami interfejsu API w wersji eksperymentalnej (Ia4502, b/171464963). - Zmiana nazwy funkcji Color.useOrElse() na Color.takeOrElse() (Ifdcf5)
- Usunięto nieużywane klasy DpInverse, DpSquared i DpCubed. (I4d62b)
- Właściwość Constraints#satisfiedBy została zmieniona na isSatisfiedBy. (I9cf5c)
- Dodaj wywołanie zwrotne, aby powiadamiać właściciela o zmianach granic węzła układu. (I72fd1)
- Dodano funkcje isSpecified, isUnspecified i useOrElse dla klas wbudowanych ze stałą Unspecified. (I93f7b, b/174310811)
Rozszerzenie interfejsów API [Abstract]ComposeView, aby umożliwić ponowne wykorzystanie widoków opartych na Compose, usuwanie ich kompozycji i ponowne tworzenie w późniejszym czasie. Dodano interfejsy API do instalowania i wykrywania Recomposers i CompositionReferences w zakresie okna na potrzeby tworzenia kompozycji podrzędnych.
Dodaj ViewCompositionStrategy, aby skonfigurować strategię usuwania kompozycji w przypadku [Abstract]ComposeView. Domyślne działanie to usuwanie po odłączeniu od okna. (I860ab)
Usunięto publiczny interfejs Any.identityHashCode() (I025d7)
Usunięto interfejs API toStringAsFixed na rzecz bezpośredniego używania String.format. (Iaba6b)
Dodaj przełącznik do pliku foundation Strings.kt (I4a5b7, b/172366489)
Przeniesiono klasę nativeClass do modułu ui i ustawiono ją jako wewnętrzną. Zaktualizowano użycie nativeClass w implementacjach equals, aby zamiast niego używać „is MyClass”. (I4f734)
Funkcje Modifier.focus() i Modifier.focusRequester() zostały wycofane. Zamiast tego użyj funkcji Modifier.focusModifier() i Modifier.focusReference(). (I75a48, b/175160751, b/175160532, b/175077829)
Wprowadzono SelectionRegistrar.notifySelectableChange, aby powiadamiać SelectionManager o aktualizacjach Selectable. (I6ff30, b/173215242)
Wprowadzono właściwość Outline.bounds, aby uzyskać prostokąt ograniczający dla różnych implementacji konturu. (I16e74, b/175093504)
Wycofano TestUiDispatcher. Zamiast tego użyj Dispatchers.Main (Ic171f, b/175385255)
ImeOptions i KeyboardOptions nie są już klasą danych (I3c898, b/168684531)
Zmiany w interfejsie VisualTransformation API
- Zmiana nazwy OffsetMap na OffsetMapping
- Zmiana nazwy OffsetMapping.identityOffsetMap na OffsetMapping.Identity
- PasswordTransformation nie jest już klasą danych
- Przeniesiono OffsetMapping do osobnego pliku
- (I0bdf3)
Zmiana nazwy pozycji na DpOffset i usunięcie funkcji getDistance() (Ib2dfd)
Zmieniono funkcję Dp.isFinite() na wartość Dp.isFinite (I50e00)
Poprawki błędów
- Recomposer udostępnia teraz Flow z bieżącym stanem, co umożliwia monitorowanie jego aktywności i aktywności powiązanych efektów. (Ifb2b9)
- Do natywnego zdarzenia keyEvent można teraz uzyskać dostęp za pomocą keyEvent.nativeKeyEvent (I87c57, b/173086397).
animate()
zastępuje terazanimateAsState()
, która zwracaState<T>
zamiastT
. Zapewnia to lepszą wydajność, ponieważ zakres unieważnienia można zawęzić do miejsca, w którym odczytywana jest wartość State. (Ib179e)- Dodaj interfejs API roli Semantics i dodaj rolę jako parametr do klikalnego, wybieralnego i przełączalnego elementu SemanticsModifier. Zmiana parametru Modifier.progressSemantics, aby można było go używać także w przypadku suwaka. (I216cd)
- Nowy interfejs API oparty na korutynach
Animatable
, który zapewnia wzajemną wyłączność animacji.- Nowy interfejs DecayAnimationSpec do obsługi wielowymiarowej animacji zanikania
- (I820f2, b/168014930)
Wersja 1.0.0-alpha09
16 grudnia 2020 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha09
Wersja 1.0.0-alpha09 zawiera te zmiany.
Zmiany w interfejsie API
- Wycofany element KeyEvent.Alt został usunięty. Zamiast tego użyj KeyEvent.isAltPressed. (Idd695)
- Interfejsy Modifier.keyInputFilter i Modifier.previewKeyInputFilter zostały wycofane. Zamiast nich używaj interfejsów Modifier.onKeyEvent i Modifier.onPreviewKeyEvent (Idbf1b, b/175156384).
- Pole Modifier.focusObserver zostało wycofane. Zamiast tego użyj Modifier.onFocusChanged lub Modifier.onFocusEvent (I30f17, b/168511863, b/168511484)
- W przypadku interfejsów API zawieszających dane wejściowe wskaźnika zmieniono nazwy funkcji HandlePointerInputScope na AwaitPointerEventScope i handlePointerInput() na awaitPointerEventScope(). (Idf0a1, b/175142755)
- Interfejs Autofill API jest teraz interfejsem eksperymentalnym i wymaga zgody użytkownika (I0a1ec).
- Dodawanie deklaracji destrukcyjnych w celu tworzenia instancji FocuSRequester (I35d84, b/174817008)
- accessibilityLabel zmieniono na contentDescription. accessibilityValue zmieniono na stateDescription. (I250f2)
- Usunięto zdarzenia niestandardowe z interfejsu API zawieszania danych wejściowych wskaźnika (Ia54d5, b/175142755)
- Wprowadziliśmy kilka nowych funkcji w klasie SelectionRegistrar, a także zmieniliśmy nazwę funkcji onPositionChange na notifyPositionChange. (Ifbaf7)
- Więcej elementów LayoutNode oznaczonych jako wewnętrzne (I443c6)
- Informacje o układzie zostały wprowadzone do użytku w narzędziach i testach (I9b190).
- AndroidOwner made internal (Ibcad0, b/170296980)
- Usunięto adnotację ExperimentalPointerInput (Ia7a24)
- Dodano zagnieżdżony system przewijania. Więcej informacji znajdziesz w dokumentacji Modifier.nestedScroll (I36e15, b/162408885).
- Funkcja subcomposeInto(LayoutNode) została oznaczona jako wewnętrzna (Id724a)
Interfejs
Applier
został zmieniony, aby uprościć tworzenie drzew od dołu do góry, a nie od góry do dołu.Nazwa metody
insert()
została zmieniona nainsertTopDown()
.Dodano nową metodę:
insertBottomUp()
.Aplikacja wstawia węzły do edytowanego drzewa za pomocą funkcji
insertTopDown()
lubinsertBottomUp()
w zależności od tego, która z nich jest bardziej skuteczna.Niektóre drzewa, np.
LayoutNode
iView
, znacznie łatwiej jest budować od dołu niż od góry. Przed wprowadzeniem tej zmiany do wdrożenia metody od dołu do góry wymagany był stos wstawek, który należało skopiować do każdego narzędzia, które potrzebowało konstrukcji od dołu do góry ze względu na wydajność. Po tej zmianieApplier
zastępujeinsertBottomUp()
budowanie drzewa od dołu do góry, ainsertTopDown()
– od góry do dołu. (Icbdc2)Dodano właściwości dismissOnBackPress i dismissOnClickOutside do AndroidDialogProperties. Umożliwiają one skonfigurowanie momentu wywołania lambdy onDismissRequest okna. (If5e17)
Dodano interfejs API painterResource, który umożliwia nieprzezroczyste wczytywanie obiektów Painter z formatów zasobów rastrowych (np. PNG) lub obiektów VectorDrawable. Konsumenci nie muszą już z wyprzedzeniem określać typu komponentu i mogą wywołać tę metodę, aby uzyskać obiekt Painter do użycia w komponentach kompozycyjnych Image lub modyfikatorach malowania. (I2c703, b/173818471)
Dodano Modifier.clearAndSetSemantics, aby wyczyścić semantykę elementów podrzędnych i ustawić nową. (I277ca)
Przeniesiono klasę ContentDrawScope do modułu ui-graphics, aby była razem z klasą DrawScope. (Iee043, b/173832789)
Wprowadzono interfejs API grafiki PathEffect, który umożliwia stosowanie różnych wzorów do kształtów z obrysem. Wykorzystanie NativePathEffect zostało wycofane na rzecz implementacji PathEffect w modelu expect/actual. (I5e976, b/171072166)
Dodano interfejsy IdlingResource do Compose jako wariant zasobów bezczynności Espresso obsługiwany przez Compose. Można je rejestrować i wyrejestrowywać za pomocą ComposeTestRule (I433f3).
Usunięto globalną (nie)rejestrację ComposeIdlingResource i globalną (nie)rejestrację zegarów w ComposeIdlingResource (I32660)
Poprawki błędów
- Funkcje lambda w modyfikatorach przesunięcia zwracają teraz IntOffset zamiast Float. (Ic9ee5, b/174137212, b/174146755)
Usunęliśmy z publicznego interfejsu API klasy SlotTable, SlotReader i SlotWriter. Wcześniej były one oznaczone jako InternalComposeAPI. Teraz są one wewnętrzne w module kompozycji.
Dodano CompositionData i CompositionGroup jako zamienniki interfejsu API ui-tooling, które służą do wyodrębniania informacji o kompozycji. Są one publiczne, ale nie są przeznaczone do użytku poza interfejsem ui-tooling API, ponieważ dostarczają surowe informacje, które interpretuje ten interfejs (I31a9c).
Zrefaktoryzowano klasę ShaderBrush, aby leniwie tworzyć instancję shadera, gdy dostępne są informacje o rozmiarze środowiska rysowania. Przydaje się to do definiowania gradientów, które w momencie tworzenia kompozycji zajmują pełne granice rysowania elementu kompozycyjnego, bez konieczności implementowania niestandardowych implementacji DrawModifier.
Wycofano interfejsy API konstruktora funkcji gradientu na rzecz metod fabrykujących w obiekcie Gradient. (I511fc, b/173066799)
Wycofanie funkcji LazyColumnFor, LazyRowFor, LazyColumnForIndexed i LazyRowForIndexed. Zamiast tego używaj komponentów LazyColumn i LazyRow (I5b48c).
Wycofana funkcja BuildCompat.isAtLeastR (Idb37e)
Dodano funkcję fabryczną buildAnnotatedString, która służy do tworzenia obiektu AnnotatedString. Wycofana funkcja konstruktora annotatedString. (Idfe0b)
Usunięto metody rozszerzające w przypadku typów Float i Double, które służyły do przeliczania wartości na radiany. Przeniesiono do funkcji prywatnej w ramach implementacji PathParser, która była jedynym miejscem, w którym była używana (I25f52).
Wersja 1.0.0-alpha08
2 grudnia 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha08
Wersja 1.0.0-alpha08 zawiera te zmiany.
Zmiany w interfejsie API
- Dodaj działanie semantyczne Odrzuć (I2b706)
- Przeniesiono interfejsy API DrawModifier z pakietu androidx.compose.ui do pakietu androidx.compose.ui.draw. Utworzono plik DrawModifierDeprecated.kt, który zawiera aliasy typów i metody pomocnicze ułatwiające migrację z przestarzałych interfejsów API na obecne. (Id6044, b/173834241)
- Zmiana nazwy Modifier.drawLayer na Modifier.graphicsLayer. Zaktualizowano też powiązane klasy do GraphicsLayer zgodnie z opiniami o interfejsie API. (I0bd29, b/173834241)
- Dodaliśmy nowe metody placeable.placeWithLayer() i placeable.placeRelativeWithLayer(), które umożliwiają niestandardowym układom i modyfikatorom układu umieszczanie elementu podrzędnego z wprowadzeniem warstwy graficznej do rysowania. Dzięki temu możemy najpierw zoptymalizować ponowne rysowanie, aby w przypadku przeniesienia elementu podrzędnego nie trzeba było ponownie rysować jego zawartości. Po drugie, możemy zastosować do elementu podrzędnego przekształcenia rysowania (Ibd8f6, b/170296989, b/171493718, b/173030831).
- Element
<T>
został usunięty z deklaracji SubcomposeLayout. Możesz teraz używać tego atrybutu bez określania typu. (Ib60c8) - Dodano interfejsy API Modifier.scale/rotate jako ułatwienia dla drawLayer.
- Zmieniono nazwę
Modifier.drawOpacity
naModifier.alpha
- Nazwa
Modifier.drawShadow
została zmieniona naModifier.shadow
(I264ca, b/173208140)
- Zmieniono nazwę
- Pola uptime i position w klasie PointerInputData nie mogą mieć wartości null. (Id468a)
- Motyw MaterialTheme ustawia teraz prawidłowe kolory uchwytów zaznaczenia i tła zaznaczenia. Aplikacje inne niż Material mogą ręcznie używać AmbientTextSelectionColors, aby dostosować kolory używane do zaznaczania. (I1e6f4, b/139320372, b/139320907)
- Dodano WindowManager.isWindowFocused, aby sprawdzać, czy okno hosta jest aktywne, oraz WindowFocusObserver, który udostępnia wywołanie zwrotne onWindowFocusChanged. (I53b2a, b/170932874)
- Zaktualizowano interfejs TransformOrigin API, aby miał składnię destrukcyjną zwracającą
pivotFractionX
ipivotFractionY
jakocomponent1
icomponent2
(If43c4, b/173586560). - Dodano sprawdzanie składni nazw i pozycji parametrów funkcji lambda, aby zapewnić zgodność ze wskazówkami dotyczącymi Compose.
Zgodnie z kontrolą składni i wskazówkami zmieniliśmy też nazwy niektórych interfejsów API, które używały
children
jako nazwy funkcji lambda na końcu, nacontent
. (Iec48e) - Dodano interfejs API, który sprawdza, czy podczas wysyłania zdarzenia klawisza naciśnięto klawisze modyfikujące Alt, Ctrl, Meta lub Shift. (I50ed9)
- Dodano nowe przeciążenie
Modifier.drawLayer()
. Przyjmuje blok lambda w nowym zakresie GraphicsLayerScope, w którym definiujesz parametry warstwy w sposób umożliwiający pominięcie ponownego komponowania i ponownego układu w przypadku zmiany stanu. DrawLayerModifier jest teraz wewnętrzny w ramach przygotowań do przeniesienia jego logiki do metody placeable.placeWithLayer() interfejsu LayoutModifier (I15e9f, b/173030831). - Wycofaliśmy właściwości Ambients, których nazwy miały sufiks
Ambient
, i zastąpiliśmy je nowymi właściwościami z prefiksem Ambient, zgodnie z innymi właściwościami Ambients i wytycznymi interfejsu Compose API. (I33440) - Przeniesiono
androidx.compose.ui.text.Typeface
doandroidx.compose.ui.text.font.Typeface
(Ic2b81) - Argument semantyki mergeAllDescendants został zmieniony na mergeDescendants. (Ib6250)
- Nowy detektor gestów przeciągania zawieszający wskaźnik interfejs API danych wejściowych, w tym blokowanie orientacji. (Icef25)
- Zmiana nazwy VectorAsset na ImageVector. Przeniesienie i zmiana nazwy VectorAsset na Builder, aby była klasą wewnętrzną ImageVector zgodnie z wytycznymi API. Dodano alias typu VectorAssetBuilder, aby zapewnić zgodność z ImageVector.Builder. (Icfdc8)
- Zmieniliśmy nazwy ImageAsset i powiązanych metod na ImageBitmap. (Ia2d99)
- Dodanie parametru zIndex do funkcji place() w PlacementScope, dzięki czemu Modifier.zIndex() działa teraz jako LayoutModifier, a każdy układ niestandardowy może ustawiać indeksy z dla elementów podrzędnych bezpośrednio w bloku umieszczania (I711f7, b/171493718).
- Przeniesiono właściwości semantyczne podstaw do interfejsu (I6f05c)
- Wycofanie funkcji place(Offset) i placeRelative(Offset). Zamiast tego używaj przeciążeń z przesunięciami int (I4c5e7)
- Usunięto wcześniej wycofane interfejsy API: usunięto Modifier.onPositioned, użyj Modifier.onGloballyPositioned. Usunięto Modifier.onDraw. Użyj Modifier.onDrawBehind. Usunięto Modifier.plus. Użyj Modifier.then. Usunięto Color.Unset. Używaj Color.Unspecified. Klasa PxBounds została usunięta. Zamiast niej używaj klasy Rect. (Ie9d02, b/172562222)
- Interfejs wyrównania został zaktualizowany i jest już funkcjonalny. (I46a07, b/172311734)
- Dodano detektor gestów do wykrywania kliknięć, dwukrotnych kliknięć, długich naciśnięć i naciśnięć za pomocą nowego wskaźnika zawieszającego. Dodaliśmy też kilka narzędzi, które ułatwiają deweloperom pisanie własnych detektorów gestów. (I00807)
- Nazwa
id
została zmieniona nalayoutId
w przypadkuLayoutIdParentData
. NazwaMeasurable.id
została zmieniona naMeasurable.layoutId
. (Iadbcb, b/172449643) - Nowy detektor gestów wielodotykowych, w tym funkcje pomocnicze do wykrywania obracania, powiększania i przesuwania. (Ic459d)
- Wprowadzono interfejsy SweepGradientShader i SweepGradientBrush API. (Ia22c1)
- Kontrola czasu w testach (TestAnimationClock i jego zastosowania) jest obecnie eksperymentalna (I6ef86, b/171378521).
Dodaj interfejsy API przewijania oparte na korutynach:
Dodaje funkcje LazyListState.snapToItem i LazyListState.smoothScrollBy, a także interfejsy API niższego poziomu do sterowania przewijaniem. Te interfejsy API udostępniają interfejs zawieszania do sterowania przewijaniem, który czeka na zakończenie przewijania przed zwróceniem wyniku. (Ie5642)
W bibliotece podstawowej dodano właściwość Modifier.focusable. Użyj tego komponentu, aby dodać do komponentu możliwość uzyskania fokusu z prawidłową semantyką i dostępnością. (I41eb9, b/152525426, b/162865824)
Zapewnij domyślne implementacje metod i właściwości w klasie AnimationClockTestRule, które można przekazać do jej
clock
(I7ea3d, b/173399709).AndroidComposeTestRule może teraz akceptować niestandardowe programy uruchamiające aktywność (Ib8288, b/153623653, b/154135019).
Metoda TextLayoutResult.getLineVisibleEnd została wycofana. W zamian za to TextLayoutResult.getLineEnd ma teraz nowy parametr visibleEnd. (I73282)
Zaktualizowany interfejs TextFieldValue API
- pole TextFieldValue.composition zostało ustawione jako tylko do odczytu.
- usunięto wyjątek zgłaszany w przypadku nieprawidłowego zakresu wyboru (I4a675, b/172239032);
Obsługa TtsAnnotation w mechanizmie zamiany tekstu na mowę. (I54cc6)
Nowe interfejsy API do uruchamiania animacji w korutynach (Ied662)
Poprawki błędów
- Parametr wyrównania komponentu Box został zmieniony na contentAlignment. (I2c957)
- Modyfikatory offsetPx zostały zmienione na offset. Przyjmują teraz parametry lambda zamiast stanu. (Ic3021, b/173594846)
- Dodano parametr resetInput do TextInputService#onStateUpdated (I3e8f5, b/172239032, b/171860947)
- Dodaliśmy sprawdzanie parametrów modyfikatora w funkcjach kompozycyjnych. Ta kontrola lint sprawdza nazewnictwo, typ zwracany, wartość domyślną i kolejność parametru pod kątem zgodności z wytycznymi Compose. (If493b)
- Tymczasowo dodano opcję, która umożliwia sterowanie zegarem TestAnimationClock za pomocą zegara MonotonicFrameClock (I1403b, b/173402197)
- Dodano otoczkę Android Typeface. Czcionkę Androida możesz wczytać za pomocą funkcji
typeface
, np.typeface(Typeface.DEFAULT)
. Zmieniono też nazwętypefaceFromFontFamily()
natypeface()
(I52ab7) - Dodano sprawdzanie lint, aby upewnić się, że funkcje fabryczne modyfikatora są zdefiniowane jako rozszerzenia modyfikatora, dzięki czemu można je płynnie łączyć w łańcuchy. (I07981)
- Usuwanie starego modułu ui-test i jego stubów (I3a7cb)
- Recomposer nie akceptuje już parametru EmbeddingContext; wymagane zależności harmonogramowania są uzyskiwane z parametru effectCoroutineContext. Interfejs FrameManager został wycofany. Integracje platform powinny inicjować własną globalną obsługę zrzutów. (I02369)
- Przekazywanie informacji o stylu do węzła ułatwień dostępu. (If5e8d)
- W celu zachowania spójności z innymi jednostkami nazwa TextUnit.Inherit została zmieniona na TextUnit.Unspecified. (Ifce19)
Compose UI w wersji 1.0.0-alpha07
11 listopada 2020 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha07
Wersja 1.0.0-alpha07 zawiera te zmiany.
Zmiany w interfejsie API
- Wprowadzono klasę wbudowaną ScaleFactor, która reprezentuje współczynniki skali dla osi poziomej i pionowej niezależnie od siebie, aby obsługiwać przypadki użycia skalowania nierównomiernego.
- Dodano metodę computeScaleFactor do ContentScale
- Dodano ContentScale.FillBounds, aby wykonać skalowanie nierównomierne i rozciągnąć granice źródła, tak aby w pełni zajmowały miejsce docelowe.
- Dodano metody operatorów do obliczania parametrów ScaleFactor za pomocą parametrów Size.
- (Ic96a6, b/172291582)
- Dodano fabryki BiasAlignment i BiasAbsoluteAlignment do tworzenia obiektów Alignment. (Iac836, b/169406772)
- Umożliwia deweloperowi wymuszenie usunięcia zaznaczenia. (I90372)
- Naprawiono błąd, który powodował, że w przypadku widoków w Compose nie była rysowana wysokość. (If7782)
- Utworzono interfejs API onDrawBehind w ContentDrawScope , aby dopasować konwencję nazewnictwa do Modifier.drawBehind. (I4fc3a, b/171955269)
- Dodano obsługę odległości kamery, aby uzupełnić przekształcenia 3D i obroty w osiach X i Y w interfejsach API warstw. (I40213, b/171492100)
- Dodano SelectionContainer bez wywołania zwrotnego (Ibfadb)
- Usunięto adnotację ExperimentalSubcomposeLayoutApi. Funkcja SubcomposeLayout może być teraz używana bez dodawania adnotacji @OptIn (I708ad)
- FirstBaseline i LastBaseline zostały przeniesione do pakietu androidx.compose.ui.layout (Ied2e7).
- Usunięto nieprzezroczystość z modyfikatora drawShadow(), ponieważ była myląca. (I82c62, b/171624638)
- Element MeasureResult został przeniesiony poza element MeasureScope. (Ibf96d, b/171184002)
- Kilka symboli związanych z układem zostało przeniesionych z pakietu androidx.compose.ui do pakietu androidx.compose.layout.ui. (I0fa98, b/170475424)
- Usunięto wycofany element FocusState2 (I686cb, b/168686446)
- Modyfikator ZIndexModifier jest teraz wewnętrzny (I1808b, b/171493718)
- Zaktualizowano typ zwracany metody lerp w przypadku parametrów Size, aby zwracała niepusty obiekt Size, co pozwala uniknąć niepotrzebnego pakowania. (Ib0044)
- Dodano TestMonotonicFrameClock do testowania kodu, który korzysta z funkcji MonotonicFrameClock w Compose do oczekiwania na zdarzenia klatek kompozycji za pomocą funkcji runBlockingTest z biblioteki kotlinx-coroutines-test (I4402f).
- Usunięto GestureScope.localToGlobal (I15299, b/171462785)
- Dodano wyszukiwarkę
onAllNodesWithSubstring
(I81dd7, b/171462889) - Moduł androidx.ui.test został wycofany. Przejdź na androidx.compose.ui.test i androidx.compose.ui.test.junit4 (I452e8).
Poprawki błędów
- Funkcja captureToBitmap została przeniesiona do funkcji captureToImage. (I86385)
- foundation.Text został wycofany i zastąpiony przez material.Text. Podstawowy interfejs API tekstu, który nie korzysta z wartości z motywu, znajdziesz w artykule androidx.compose.foundation.BasicText. (If64cb)
- Aktualizacja pól tekstowych, aby akceptowały KeyboardOptions (Ida7f3)
- Zmiana nazwy KeyboardOptions na ImeOptions (I82f36)
- Przeniesienie KeyboardType i ImeAction do KeyboardOptions (I910ce)
- Funkcja provideDefault została dodana jako alternatywa dla podawania wartości otoczenia. Można jej używać do określania wartości otoczenia, które będą ustawiane tylko wtedy, gdy nie podano jeszcze żadnej wartości otoczenia. (Id6635, b/171024925)
- Komponent BaseTextField został wycofany. Zamiast tego użyj BasicTextField. (I896eb)
- Wprowadzenie modułu ui-test-junit4 (Ib91f8)
- Nazwa
relativePaddingFrom
została zmieniona napaddingFrom
. Dodano modyfikatorpaddingFromBaseline
, aby ułatwić określanie odległości od granic układu do linii bazowych tekstu. (I0440a, b/170633813) - Aby zachować spójność z interfejsami SideEffect i DisposableEffect API, nazwa LaunchedTask została zmieniona na LaunchedEffect. Aby zachęcać do stosowania sprawdzonych metod, nie zezwalamy na używanie funkcji LaunchedEffect bez parametrów subject. (Ifd3d4)
- Wprowadzono komponent resources, który ponownie się komponuje po aktualizacji konfiguracji. (I6387c, b/167352819)
- Recomposer wymaga teraz parametru CoroutineContext podczas tworzenia (Ic4610)
- Sumuj wartości
zIndex
, gdy zastosowano wieleModifier.zIndex()
. Wcześniej wygrywał pierwszy z nich. (Ic514c, b/170623936) - Zmiany w wewnętrznej implementacji SlotTable, które nie powinny mieć wpływu na publiczny interfejs API. (If9828)
- Dodano opcję autokorekty klawiatury IME (I57b8d)
- Pakiet androidx.ui.test został przeniesiony do androidx.compose.ui.test (I9ffdb).
- Usunięto KeyboardOptions.toImeOptions z publicznego interfejsu API. (Ic2e45)
Wkład zewnętrzny
- Wyłączono publikowanie wewnętrznego artefaktu androidx.compose.ui:ui-text-android (Ib93fa)
Wersja 1.0.0-alpha06
28 października 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha06
Wersja 1.0.0-alpha06 zawiera te zmiany.
Zmiany w interfejsie API
- Recomposer jest teraz elementem CompositionReference i prawidłowym elementem nadrzędnym kompozycji. Jawny Recomposer jest teraz wymagany w mniejszej liczbie miejsc. (I4036f)
- Wycofanie funkcji VectorPainter na rzecz funkcji rememberVectorPainter, aby lepiej wskazywać, że interfejs API funkcji kompozycyjnych wewnętrznie wykorzystuje funkcję „remember” do utrwalania danych w różnych kompozycjach. (Ifda43)
- Zaktualizowano interfejs Modifier.drawWithCache API, aby udostępniać ContentDrawScope jako zakres odbiorcy zamiast DrawScope, co umożliwia implementacjom zmianę kolejności poleceń rysowania. Jest to przydatne w przypadku mieszania lub cieniowania, w których piksele treści muszą być najpierw renderowane, aby można było prawidłowo zastosować odpowiedni algorytm trybu mieszania. (Ie7ec8)
- Przeniesienie SimpleContainer do PopupTestUtils.kt (I78c57)
- ConsumedData nie jest już klasą danych. Szczegóły znajdziesz na stronie https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219 (I1737f).
- Ustal pozycję uchwytu od prawej do lewej. (I6e1e0)
- Zmiana typu DrawScope i ContentDrawScope z klas abstrakcyjnych na interfejsy.
- Utworzono implementację CanvasDrawScope interfejsu DrawScope
- Zmiana implementacji interfejsu DrawScope na CanvasScope
- Utworzono DrawContext do opakowywania zależności dla DrawScope
- Usunięto wycofane metody w klasie DrawScope (I56f5e)
- Zmiana powodująca niezgodność: usunięto wartość zwracaną z
PointerInputFilter.onPointerEvent(...)
, ponieważ jedyną wartością, którą można zmienić w przypadku zdarzeń wskaźnika, są dane o użyciu. Zamiast zwracać dane zPointerInputFilter.onPointerEvent(...)
, możesz teraz po prostu zmieniać dane o użyciu przekazywanych zdarzeń PointerEvents. (I6acd0) - Interfejsami stały się MeasureScope i IntrinsicMeasureScope. (I1a087, b/170461665)
- Funkcja scalania w przypadku elementu AlignmentLine została ukryta. (I9da1a, b/170612900, b/170611568)
- Dodanie możliwości określania informacji o inspektorze w zmodyfikowanym komponencie (Idee08, b/163494569)
- Dodano opcję Zaznacz wszystko w menu wyboru (Ief02b)
- Zaktualizowano funkcję DrawTransform.rotate, aby przyjmowała domyślny parametr punktu obrotu center zgodnie z dokumentacją.
- Zaktualizowano funkcję DrawScope.rotateRad, aby używała przesunięcia dla punktu obrotu, co pozwoliło dopasować ją do innych metod przekształcania.
- Wycofana funkcja DrawScope.rotateRad, która wykorzystywała zmiennoprzecinkowe wartości współrzędnych x i y punktu obrotu.
- (Iffcbb, b/170434992)
Poprawki błędów
- Sprawdzanie API pod kątem brakującego elementu MissingGetterMatchingBuilder jest włączone w przypadku androidx (I4bbea, b/138602561).
- Dodaj test. (I6b8ae)
- Włącz przejścia w ComposeTestRule; usuń opcję włączania migającego kursora z ComposeTestRule. (If0de3)
- Dodano opcję IME KeyboardCapitalization (I8ac38)
- Dodano opcję klawiatury z jednym wierszem w komponencie CoreTextField (I72e6d)
- Przeniesienie klasy SimpleContainer do pliku PopupTestUtils.kt (I65c3e)
- Zmiana nazwy interfejsu API Radius na CornerRadius, aby lepiej odzwierciedlała sposób jego użycia w Compose. Zaktualizowano dokumentację, aby wskazać, że ujemne promienie zaokrąglenia są przycinane do zera. (I130c7, b/168762961)
- Ulepszona interoperacyjność z Androidem dzięki dalszemu wysyłaniu zdarzeń MotionEvent do podrzędnych widoków Androida, które zwracają wartość false w przypadku metody onTouchEvent dla wszystkich działań z wyjątkiem
ACTION_DOWN
(I94c5a, b/170320973). - Funkcja Box została przekształcona w funkcję wbudowaną. (Ibce0c, b/155056091)
Wkład zewnętrzny
- Obsługa różnych regionów dla
AnnotatedString.capitalize
iAnnotatedString.decapitalize
(I4aa7f)
Wersja 1.0.0-alpha05
14 października 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha05
Wersja 1.0.0-alpha05 zawiera te zmiany.
Zmiany w interfejsie API
- Dodanie języka DSL do określania informacji o inspektorze (Ic9a22)
- Przenieś LongPress do Text. (Iff2bc)
- Experimental Modifier.pointerInput suspending input modifier (Ia77d2)
- Dodano działania związane z ułatwieniami dostępu Kopiuj/Wklej/Wytnij (I6db4f)
- Usunięto publiczny konstruktor klasy AndroidOwner (Iacaef)
- Wyskakujące okienka i okna dialogowe dziedziczą teraz FLAG_SECURE z okna nadrzędnego. Dodaliśmy też opcję wyraźnej konfiguracji (I64966, b/143778148, b/143778149).
Dane o zużyciu można teraz zmieniać. Poza tym wywołania funkcji rozszerzeń, które powodują zużycie, nie zwracają już nowego obiektu PointerInputChange, ale modyfikują podany obiekt PointerInputChange.
Jest to pierwszy krok w 2-etapowym procesie, który ma na celu umożliwienie modyfikowania danych PointerEvent w taki sposób, aby inne dane wskaźnika nie mogły być edytowane przez kod użytkownika. Drugim krokiem będzie usunięcie typu zwracanego
List<PointerInputChange>
zPointerInputFilter.onPointerEvent(...)
. (Id067e)Wyłącz zaznaczanie tekstu i obejrzyj wersję demonstracyjną. (Ie7e97)
Funkcja Made onGloballyPositioned została przekształcona w funkcję wbudowaną (I15830)
Interfejs OnPositionedModifier został zmieniony na OnGloballyPositionedModifier, a funkcja onPositioned() na onGloballyPositioned(). (I587e8, b/169083903)
Do klasy Owner dodano właściwość hasPendingMeasureOrLayout, która informuje, czy w przypadku danego obiektu Owner jest wykonywana jakaś praca związana z układem. (I3d9f8, b/169038599)
Dodano interfejs API do programowego czyszczenia fokusu (Ie1dc2, b/161487952)
Użytkownik
PointerInputFilter.onPointerInput(...)
został usunięty. Zamiast niego należy użyć atrybutuPointerInputFilter.onPointerEvent(...)
. (I6f04a)Zmiany rozmiaru
- Usunięto Size.getFlipped
- Usunięto Size.rem
- Usunięto Size.truncDiv (Ief44d, b/169790720)
W ramach standaryzacji wartości wartowniczych w przypadku klas wbudowanych zmień nazwę Color.Unset na Color.Unspecified, aby zachować spójność z innymi klasami wbudowanymi (I97611, b/169797763).
Wprowadzono TextOverflow.None. Gdy wartość parametru overflow to None, komponent Text nie będzie już obsługiwać przepełnienia i będzie zgłaszać do komponentu LayoutNode swój rzeczywisty rozmiar. (I175c9, b/158830170)
Parametr scope w metodzie AnnotatedString.Builder.addStringAnnotation został zmieniony na tag w celu zachowania spójności interfejsu API. (I7c8cb)
Poprawki błędów
- Wydajność przewijania elementów LazyColumn/Row jest większa, ponieważ podczas każdego przewijania wykonuje się mniej pracy w kompozycji podrzędnej. Do klasy Composition dodano nową metodę hasInvalidations(). Metoda hasPendingChanges() z klasy Recomposer została zmieniona na hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Zaktualizowano parametry Size.Unspecified tak, aby zamiast Float.POSITIVE_INFINITY miały wartość Float.NaN. Zaktualizowano implementacje Painter, aby sprawdzały zarówno Size.Unspecified, jak i rozmiary nieograniczone. (I95a7e)
- Kolejność wywołań funkcji place() w niestandardowych układach określa teraz kolejność rysowania elementów podrzędnych (Ibc9f6).
- Obsługa konwersji AnnotatedString na SpannableString na potrzeby ułatwień dostępu. (Ief907)
- Dodaliśmy klasy zastępcze dla klas Androida, które są dostępne na starszych platformach, aby w miarę możliwości uniknąć używania odbicia. (Ia1790)
- Naprawiony błąd: jeśli wyświetlenie klawiatury ekranowej powodowało tłumaczenie w aplikacji, współrzędne wejścia wskaźnika stawały się nieprawidłowe. (Ic4cec, b/163077821)
Wersja 1.0.0-alpha04
1 października 2020 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha04
Wersja 1.0.0-alpha04 zawiera te zmiany.
Zmiany w interfejsie API
- Dodano OwnerScope, aby umożliwić zbieranie zakresów obserwacji układu i rysowania, gdy nie są już one ważne. (Ic4cf8)
- Dodano OnRemeasuredModifier i onSizeChanged(), aby otrzymywać wywołanie zwrotne, gdy układ treści zostanie ponownie zmierzony i gdy zmieni się rozmiar. (I657cf, b/154108792)
- Dodaj działanie semantyczne długiego kliknięcia (I6281b, b/156468846)
- Ustawiono FocusManager jako prywatny. (I7872f)
Zaktualizowano implementację, aby tworzyć dedykowaną implementację DrawCacheModifier zamiast dodawać opcjonalne właściwości do DrawModifier.
Zaktualizowana dokumentacja różnych metod (Ibd166)
Ustaw TextRange jako inline, aby uniknąć tworzenia obiektu. (Id034b)
Wartości PlacementScope#parentWidth i PlacementScope#parentLayoutDirection nie można już odczytywać z bloku miejsca docelowego w układzie niestandardowym. (Icc1ae, b/168295623)
dodaj AccessibilityScrollState do właściwości semantycznych; (Ifeda9)
Wprowadzono funkcję Modifier.drawWithCache, która umożliwia tworzenie obiektu rysowania, który warunkowo odtwarza zależności zależne od informacji o rozmiarze lub stanie (I376dc).
Usunięto ParagraphConstraints. Szerokość jest teraz przekazywana bezpośrednio do akapitu. (Ica712)
Poprawki błędów
- Zaktualizowano wiele interfejsów API grafiki
- Zaktualizowano interfejsy API przekształceń skali i rotacji, aby używały jednego parametru Offset do reprezentowania współrzędnych punktu obrotu zamiast oddzielnych parametrów zmiennoprzecinkowych dla współrzędnych x/y w DrawScope i DrawTransform.
- Usunięto metody Rect.expandToInclude i Rect.join
- Zaktualizowano dokumentację dotyczącą promienia, aby uwzględnić kształt owalny oprócz eliptycznego.
- Dodano dokumentację, aby wskazać, że publiczny konstruktor wbudowanej klasy Radius nie powinien być wywoływany bezpośrednio, ale obiekty Radius powinny być tworzone za pomocą konstruktorów funkcji.
- Usunięto interfejsy API RoundRect do wysyłania zapytań o wartości topRight, bottomRight, bottomCenter itp.
- Wycofanie Rect.shift na rzecz Rect.translate
- Usunięto interfejsy API RoundRect.grow i Rect.shrink
- Zmiana nazwy RoundRect.outerRect na Rect.boundingRect
- Usunięto metody RoundRect.middleRect/tallMiddleRect/wideMiddleRect i Rect.isStadium
- Zmiana nazwy RoundRect.longestSide na RoundRect.maxDimension
- Zmiana nazwy RoundRect.shortestSide na RoundRect.minDimension
- Zmiana RoundRect.center na właściwość zamiast funkcji
- Zaktualizowano konstruktor RoundRect, aby korzystał z właściwości Radius zamiast z poszczególnych parametrów wartości promienia x/y.
- Usunięto interfejsy API rozmiaru, które zakładały, że jest to prostokąt o początku w punkcie 0,0
- Dodano do Radius interfejs API niszczenia
- Przeniesiono różne funkcje rozszerzenia RoundRect, aby były właściwościami.
- (I8f5c7, b/168762961)
- Komponent foundation.Box został wycofany. Zamiast tego użyj foundation.layout.Box. (Ie5950, b/167680279)
- Grupa została zmieniona na Box. Dotychczasowy komponent Box zostanie wycofany na rzecz nowego komponentu Box w pakiecie compose.foundation.layout. Nowy komponent Box układa elementy podrzędne jeden na drugim, gdy ma ich kilka. Różni się to od poprzedniego komponentu Box, który działał podobnie do komponentu Column. (I94893, b/167680279)
- Parametry dekoracji pola zostały wycofane. Jeśli chcesz dodać dekoracje lub dopełnienie do elementu Box, użyj zamiast tego modyfikatorów (Modifier.background, Modifier.border, Modifier.padding) (Ibae92, b/167680279).
- Zaktualizowano wiele interfejsów API grafiki
- Zaktualizowano interfejsy DrawScope API o metody przekształcania w określonym zakresie, aby wskazać, że przekształcenie jest stosowane tylko w wywołaniu zwrotnym i usuwane po jego wywołaniu.
- Zaktualizowano dokumentację clipPath, aby odwoływała się do ścieżki zamiast do zaokrąglonego prostokąta
- Poprawiono odstępy w dokumentacji parametru right w elemencie clipPath
- Zmieniono nazwę DrawScope.drawCanvas na drawIntoCanvas i usunięto parametr rozmiaru
- Zmieniono nazwy parametrów dx/dy w metodzie inset na horizontal i vertical
- Dodano przeciążenie wstawki, które zapewnia tę samą wartość wstawki dla wszystkich 4 obszarów.
- Usunięto dokumentację dotyczącą metody wstawiania, która wskazywała, że wstawianie będzie stosowane do wszystkich 4 stron.
- Zaktualizowana dokumentacja klasy Rect
- Zaktualizowano komentarze do parametrów Rect, aby były zgodne ze stylem kdoc.
- Usunięto Rect.join i Rect.expandToInclude
- Utworzono przeciążenie dla Rect.translate(offset) i wycofano Rect.shift
- (If086a, b/167737376)
- Oznaczanie adnotacjami rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled i textInputServiceFactory za pomocą @VisibleForTesting, przekształcanie ich w wewnętrzne interfejsy API i ukrywanie ich dokumentacji w formacie KDoc (I554eb, b/168308412)
- Usuń element SelectionContainer z góry, aby wyłączyć domyślne zaznaczenie i uniknąć nieoczekiwanego działania. Zamiast tego można użyć elementu SelectionContainer, aby opakować treści, które mają być możliwe do zaznaczenia. (I8dfe0, b/158459594)
Wersja 1.0.0-alpha03
16 września 2020 roku
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha03
Wersja 1.0.0-alpha03 zawiera te zmiany.
Zmiany w interfejsie API
- Usuń działania semantyczne przewijania do przodu i do tyłu. Dodano kroki w AccessibilityRangeInfo. (Ia47b0)
- Usunięto element
onInvalidate()
z listyOwner
–OwnedLayer
obsługuje unieważnienie. (Ica72b, b/162061312) Usunięto metody operatora w interfejsie Size API, które wykorzystują parametry Offset. Wynik tych operacji jest niejasny, a typ wyniku jest nieoczekiwany. Przykład: czy rozmiar – przesunięcie powinno zwrócić przesunięcie czy rozmiar z różnicą?
Usunięto też przestarzałe metody w klasie Size. (Iec902, b/166514214)
Poprawki błędów
- Poprawka dotycząca nieprawidłowego rysowania elementów LazyColumn w niektórych przypadkach. W określonych warunkach powodowało to też awarie. (Ibcf17, b/163066980, b/165921895)
- Interfejs DpConstraints i interfejsy API, które go używają, zostały wycofane. (I90cdb, b/167389835)
- Przeniesiono
createAndroidComposeRule
iAndroidInputDispatcher
zandroidx.ui.test.android
doandroidx.ui.test
(Idef08, b/164060572) - W interfejsach API układu nazwy związane z grawitacją zostały zmienione na align lub alignment. (I2421a, b/164077038)
- Dodano onNode i inne metody globalne w ComposeTestRule, ponieważ obecne metody globalne zostaną wycofane. (Ieae36)
Wersja 1.0.0-alpha02
2 września 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha02
Wersja 1.0.0-alpha02 zawiera te zmiany.
Zmiany w interfejsie API
- usuń wywołanie zwrotne, aby powiadomić właściciela o zmianie granic węzła układu. (If654e, b/166106882)
- Dodaliśmy obsługę parametrów filltype na ścieżkach grafiki wektorowej w celu obsługi wycinania kształtów zgodnie z regułami wypełniania ścieżek evenOdd lub NonZero. (I43dd2)
- Dostępność i szybkość to teraz klasy wbudowane (I48f4a).
- Czas trwania jest teraz klasą wbudowaną (I565eb)
- Dodaj wywołanie zwrotne, aby powiadamiać właściciela o zmianach granic węzła układu. (Ic40b3)
Rozwiązaliśmy problem polegający na tym, że konstruktor funkcji Rect z parametrami Offset i radius tworzył obiekt Rect w kolejności left, right, top, bottom zamiast left, top, right, bottom.
Usunięto wycofane metody towarzyszące w przypadku klasy Rect na rzecz konstruktorów funkcji.
Dodano testy weryfikujące metody w pliku Rect.kt (I08460, b/165822356)
Poprawki błędów
- Dodano MutableRect, czyli prostokąt, który można modyfikować. (I71bd2, b/160140398)
- Matrix4 został zastąpiony przez Matrix. Wszystkie pozostałe części pakietu vectormath zostały usunięte. (Ibd665, b/160140398)
Konwencja wywoływania funkcji kompozycyjnych uległa zmianie. Jest to zmiana powodująca niezgodność binarną. Aby biblioteki działały z tą wersją wtyczki kompilatora Compose, należy je ponownie skompilować.
Ta zmiana nie powoduje zmiany na poziomie źródła, ponieważ jedyne interfejsy API, które uległy zmianie, to interfejsy API kompilatora, które wymagają wyraźnej zgody użytkownika. (I7afd2, b/158123185)
Naprawiliśmy awarię, która mogła wystąpić, gdy wysłanie do elementu PointerInputFilter mogło spowodować jego synchroniczne usunięcie. (I58f25)
Wersja 1.0.0-alpha01
26 sierpnia 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:1.0.0-alpha01
Wersja 1.0.0-alpha01 zawiera te zmiany.
Wersja 0.1.0-dev
Wersja 0.1.0-dev17
19 sierpnia 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:0.1.0-dev17
Wersja 0.1.0-dev17 zawiera te zmiany.
Zmiany w interfejsie API
- Środowisko wykonawcze
emitView
zostało wycofane. Jeśli to możliwe, używajAndroidView
do emitowania widoków w Compose. Pamiętaj, że bezpośrednie tworzenie widoków i grup widoków nie będzie w przyszłości obsługiwane, chyba że będą one elementami końcowymi w drzewie kompozycji. W takim przypadku można to osiągnąć za pomocą elementu AndroidView. (I29b1e, b/163871221) FocusState2
jest wycofany i zastąpiony przezFocusState
(Ia8b79, b/160822876, b/160923332)- Usunęliśmy przestarzałe przeciążenia AndroidView. (I946b9, b/163802393)
- Niestandardowe funkcje emitujące mogą teraz deklarować, że co najmniej jeden z ich setterów może zostać pominięty i ponownie skomponowany niezależnie od funkcji emitującej. (Ibbd13)
Zmieniono klasy wektorowe, aby nie były już klasami danych, ponieważ do kompozycji używana jest ta sama instancja obiektu.
Dodano flagę mutableStateOf dla VectorPainter, aby warunkowo ponownie rysować, jeśli zmieni się zawartość wektora.
Zrefaktoryzowano instancję VectorComponent, aby była częścią VectorPainter, ponieważ jest ona ponownie używana w różnych kompozycjach.
Zaktualizowano komponenty GroupComponent i PathComponent, aby ich pola nazwy były modyfikowalne (Ieae45, b/151378808).
Usunięto
onChildPositioned
iOnChildPositionedModifier
. Zamiast tego programiści powinni używać w układzie podrzędnym elementówonPositioned
iOnPositionedModifier
. (I4522e, b/162109766)Przesunięcie stało się klasą wbudowaną (Iaec70)
Dodano parametr modyfikatora do SelectionContainer (I4aada, b/161487952)
Usunięto wycofany modyfikator FocusModifier (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)
Dodano funkcję lambda
mergePolicy
do usługiSemanticsPropertyKey
. Można jej użyć do zdefiniowania niestandardowych zasad scalania semantyki mergeAllDescendants. Zasada domyślna polega na używaniu wartości nadrzędnej, jeśli jest już obecna, a w przeciwnym razie wartości podrzędnej. (Iaf6c4, b/161979921)Constraints to teraz klasa wbudowana (I88736)
Dodano klasę FocusManager, która przenosi wspólną logikę ostrości z klasy AndroidComposeView (I528ef, b/161487952, b/162206799)
Zaktualizowano nazwy PointerEventPass w wersji alfa. (Ifda6f)
IntOffset jest teraz klasą wbudowaną (Iac0bf)
IntSize jest teraz klasą wbudowaną (I2bf42).
Nazwa
PlacementScope.placeAbsolute()
została zmieniona naPlacementScope.place()
, a poprzednia nazwaPlacementScope.place()
została zmieniona naPlacementScope.placeRelative()
. W konsekwencji metodaPlacementScope.place()
nie będzie już automatycznie odzwierciedlać pozycji w kontekstach pisanych od prawej do lewej. Jeśli chcesz to zrobić, użyj zasadyPlacementScope.placeRelative()
. (I873ac, b/162916675)AlertDialog używa teraz FlowRow w przypadku przycisków (I00ec1, b/161809319, b/143682374)
Niektóre narzędzia testowe zostały ustawione jako niepubliczne, ponieważ nie znajdują się w odpowiednim miejscu. W przyszłości zostanie upubliczniona. (I32ab1)
Zmieniono organizację kodu wejścia wskaźnika. (Ie3f45)
Wycofano PxBounds na rzecz Rect. Zaktualizowano wszystkie użycia PxBounds za pomocą funkcji rect i dodano odpowiednie adnotacje dotyczące wycofania/zastąpienia, aby ułatwić migrację. (I37038, b/162627058)
Usunięto wycofany element KeyEvent2. Zamiast tego użyj KeyEvent. (Ied2d0, b/162097587)
Obiekt KeyEvent ma właściwość unicode, która umożliwia uzyskanie znaku Unicode wygenerowanego przez określoną kombinację klawisza i klawisza meta (If3afc).
Zdarzenie niestandardowe DelayUp i powiązane z nim klasy zostały przekształcone w interfejs API, który wymaga zgody użytkownika, ponieważ prawdopodobnie ulegnie zmianie. (I56d6f)
Usunięto 2 przekazywania PointerEvent, które nie są już potrzebne. (I3dd9d)
Dodaj do funkcji Paragraph.paint parametry color, shadow i TextDecoration. Ta funkcja jest przydatna, aby uniknąć niepotrzebnego ponownego tworzenia obiektu Paragraph. (I81689)
Poprawki błędów
- Usunięto wywołania zwrotne onFocusChanged z pola tekstowego. Zamiast tego użyj Modifier.focusObserver. (I51089, b/161297615)
- Funkcja Modifier.drawBorder została wycofana. Zamiast tego użyj Modifier.border. Klasa danych Border została zastąpiona klasą BorderStroke (I4257d, b/158160576)
Usunięto wycofane wywołania FrameManager.
Wewnętrzne interfejsy API do tworzenia zostały zmienione, aby zmniejszyć obciążenie związane ze śledzeniem obiektów stanu, takich jak
mutableStateof()
(I80ba6).Komponenty VerticalScroller i HorizontalScroller zostały usunięte. Zamiast tego użyj ScrollableColumn/Row. Usunięto Modifier.drawBackground. Użyj Modifier.background (I73b0d, b/163019183)
Naprawiono błąd powodujący awarię, gdy w pętli for użyto czegoś, co zapisuje stan. Teraz ten sam klucz w metodzie savedInstanceState() jest dozwolony, więc interfejs API UiSavedStateRegistry został dostosowany do tego nowego wymagania (I4ab76, b/160042650, b/156853976, b/159026663, b/154920561).
Funkcja
state { ... }
została wycofana na rzecz jawnych wywołań funkcjiremember { mutableStateOf(...) }
, aby zwiększyć przejrzystość. Zmniejsza to ogólną powierzchnię interfejsu API i liczbę koncepcji zarządzania stanem oraz pasuje do wzorcaby mutableStateOf()
delegowania właściwości klasy. (Ia5727)Zmiana nazwy RRect na RoundRect, aby lepiej pasowała do wzorców nazewnictwa w Compose. Utworzono podobne konstruktory funkcji do RRect i wycofano konstruktory funkcji RRect (I5d325).
Wersja 0.1.0-dev16
5 sierpnia 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:0.1.0-dev16
Wersja 0.1.0-dev16 zawiera te zmiany.
Zmiany w interfejsie API
- Metoda OnChildPositioned została wycofana. Zamiast tego użyj OnPositioned w przypadku elementu podrzędnego. (I87f95, b/162109766)
- Funkcja setViewContent została wycofana. Zamiast niej należy używać funkcji setContent. (I7e497, b/160335130)
- Dodano interfejs AndroidViewBinding API do tworzenia i komponowania zasobów układu na podstawie ViewBinding. (I081c6)
- KeyEvent2 został zastąpiony przez KeyEvent (I2d770, b/162097585)
- Dodano obsługę klawisza Alt (I9036b)
- Interfejs FocusManager został wycofany. Zamiast tego użyj funkcji Modifier.focus(), Modifier.focusObserver() i Modifier.focusRequester(). (I74ae4, b/162211322)
- Funkcja loadVectorResource obsługuje atrybuty trimPath (I808fe)
- Przeniesienie okna do interfejsu (I47fa6)
- Usunięto 2 przekazywania PointerEvent, które nie są już potrzebne. (I33ca7)
- Zaimplementowano PointerInteropModifier, który umożliwia odbieranie MotionEvent i interakcję z Compose tak, jakby była to implementacja widoku Androida. (Ieb08c)
- Usunięto wycofany modyfikator tagu. Zamiast niego użyj parametru layoutId. (Idaa05, b/162023919)
- Zaktualizowaliśmy interfejsy API obsługujące pisanie od prawej do lewej. Dodano LayoutDirectionAmbient, którego można używać do odczytywania i zmieniania kierunku układu. Usunięto Modifier.rtl i Modifier.ltr. (I080b3)
- Obsługa przycinania ścieżek w grafice wektorowej (Ie16c9, b/158188351)
- Dodano funkcję Modifier.layout(), która umożliwia wygodne tworzenie niestandardowego modyfikatora układu (I73b69, b/161355194).
- Dodano nowy interfejs AndroidView API i wycofano dotychczasowe. (I5bcfd)
- Funkcja Modifier.plus została wycofana. Zamiast niej używaj funkcji Modifier.then. Słowo „wtedy” silniej sygnalizuje kolejność, a także uniemożliwia wpisanie znaku
Modifier.padding().background() + anotherModifier
, który przerywa ciąg i utrudnia czytanie (Iedd58, b/161529964). - Dodaj podklasy widoku [Abstract]ComposeView do hostowania treści Compose w hierarchii widoków. (I46357)
- Funkcje
Row
iColumn
są teraz funkcjami wbudowanymi, co znacznie zmniejsza obciążenie związane z ich używaniem. (I75c10) - Dodano SubcomposeLayout. Jest to element podstawowy niskiego poziomu, który umożliwia komponowanie elementów podrzędnych podczas pomiaru, jeśli chcemy użyć wartości dostępnych dopiero później podczas pomiaru do kompozycji poddrzewa. Na przykład WithConstraints nie jest zaimplementowany przy użyciu SubcomposeLayout. (I25cc8)
- Dodano
SemanticsNode.positionInRoot
, aby uzyskać pozycję elementu SemanticsNode względem głównego węzła hierarchii Compose (Icdf26, b/161336532). - Obiekty MotionEvent są przekazywane z Androida do Compose i z powrotem do Androida. (I14be8, b/158034713)
- Usunięto dropdownPopup. (I00430)
- Ustalona pozycja wyskakującego okienka na ekranach z wycięciem. (Idd7dd)
- Dodawanie działania związanego z ułatwieniami dostępu w celu uzyskania obiektu TextLayoutResult (I9d6e6)
- Dodano RemeasurementModifier. Umożliwia on synchroniczne ponowne pomiary układu. Zwykle nie jest to potrzebne, ponieważ ponowny pomiar i ponowny układ są wykonywane automatycznie, ale używamy go w elementach LazyColumn podczas przewijania. (I5f331, b/160791058)
- Usunięto funkcje getLineEllipsisOffset i getLineEllipsisCount. Zamiast tego użyj getLineVisibleEnd/getLineEnd/isLineEllipsized. (I85aa2)
- Dodaj kilka oznaczeń lub adnotacji, aby zastosować sprawdzone metody. (I66b20)
- udostępniać więcej interfejsów API w klasie TextLayoutResult. (I79bd2)
- Wbudowane konwertery wektorowe do konwertowania wbudowanych jednostek są teraz dostępne za pomocą Foo.VectorConverter, np. Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter itp. (I3e273).
Poprawki błędów
- Poprawki w interfejsie API (I077bc)
- Usuwanie nieużywanego interfejsu OffsetBase
- Ujednolicenie klas Offset i IntOffset w celu zapewnienia spójnego interfejsu API
- Zmiana nazwy IntOffset.Origin na IntOffset.Zero w celu zachowania spójności z interfejsem Offset API
- Przeniesiono metodę nativeCanvas z interfejsu Canvas, aby umożliwić konsumentom tworzenie własnych instancji Canvas.
- Utworzono klasę EmptyCanvas, aby refaktoryzować DrawScope i zamiast lateinit używać parametru niepustego, a także zapewnić, że pole nie będzie miało wartości null.
- Zmiana nazw wyliczeń ClipOp na PascalCase
- Zmiana nazwy wyliczeń FilterQuality na Pascal Case
- Zmiana nazw wyliczeń StrokeJoin na Pascal Case
- Zmiana nazwy wyliczeń PointMode na Pascal Case
- Zmiana nazw wyliczeń PaintingStyle na Pascal Case
- Zmiana nazwy wyliczeń PathFillType na Pascal Case
- Zmieniono nazwy wyliczeń StrokeCap na Pascal Case
- Zaktualizowano implementację DrawCache, aby nie używać już parametrów lateinit
- Zaktualizowano DrawScope, aby nie używać już leniwego delegowania w przypadku wewnętrznych parametrów fillPaint i strokePaint
- Zaktualizowano funkcję kompozycyjną Image, aby uniknąć używania Box, co zmniejsza obciążenie.
- Zaktualizowano klasę Outline, aby zawierała adnotacje @Immutable
- Zaktualizowano klasę PathNode, aby zawierała adnotacje @Immutable dla każdej instrukcji ścieżki.
- Zaktualizowano podkompozycję wektora, aby usunąć zbędne sprawdzanie warunkowe równości, ponieważ kompozycja już je obsługuje.
- Wyłączenie metod konstruktora towarzyszącego Rect na rzecz konstruktorów funkcji
- Zaktualizowano klasy Brush i konstruktory funkcji za pomocą interfejsów API @Immutable i @Stable
- Zaktualizowano wyliczenie VertexMode, aby używać notacji PascalCase
- Zaktualizowano metodę DrawScope selectPaint, aby warunkowo nadpisywać parametry pędzla, jeśli uległy zmianie.
- Aktualizacja klasy Size w celu dodania interfejsu API destructuring, zmiany nazwy UnspecifiedSize na Unspecified i usunięcia nieużywanych metod
- Zaktualizowano wykorzystanie interfejsu API BlendMode w Compose, aby prawidłowo mapować tryby BlendMode w Androidzie na tryby PorterDuff w zależności od poziomu interfejsu API. Wprowadzono interfejs BlendMode#isSupported API, który działa jako zapytanie o możliwości, aby przed użyciem określić, czy tryb BlendMode jest obsługiwany na urządzeniu. (I0ef42)
- Dodano LazyItemScope dla parametru itemContent list leniwych. Zawiera modyfikatory, które wypełniają maksymalny rozmiar elementu nadrzędnego, co rozwiązuje problem, gdy element powinien wypełniać obszar widoku, a zwykły modyfikator Modifier.fillMaxSize() nie działa, ponieważ element jest mierzony z ograniczeniami nieskończoności. (Ibd3b2, b/162248854)
- Użytkownik
SemanticsNodeInteraction.performPartialGesture
został usunięty. Zamiast niej używaj właściwościSemanticsNodeInteraction.performGesture
. (Id9b62) - Nazwa
LazyColumnItems
została zmieniona naLazyColumnFor
. NazwaLazyRowItems
została zmieniona naLazyRowFor
(I84f84) - Pakiet
foundation.shape.corner
został spłaszczony dofoundation.share
(I46491, b/161887429) - Zmieniono nazwę
AndroidComposeTestRule
nacreateAndroidComposeRule
. (I70aaf) - Dodano więcej interfejsów API do
TextLayoutResult
. (Id7e04) - Nazwa Material
FilledTextField
została zmieniona naTextField
, a nazwa foundationalTextField
została zmieniona naBaseTextField
, aby ułatwić znajdowanie i używanie najprostszego interfejsu API (Ia6242, b/155482676). - Funkcja Modifier.drawBackground została zmieniona na Modifier.background (I13677)
Wersja 0.1.0-dev15
22 lipca 2020 r.
Zostanie wycofaneandroidx.compose.ui:ui-*:0.1.0-dev15
Wersja 0.1.0-dev15 zawiera te zmiany.
Aktualizacja zależności
- Aby używać wersji
0.1.0-dev15
biblioteki Compose, musisz zaktualizować zależności zgodnie z nowymi fragmentami kodu pokazanymi powyżej w sekcji Deklarowanie zależności.
Zmiany w interfejsie API
- FocusModifier został wycofany na rzecz Modifier.focus, Modifier.focusRequester i Modifier.focusObserver. Stany FocusState i FocusDetailedState zostały wycofane na rzecz stanu FocusState2 (I46919, b/160822875, b/160922136).
- Dodano modyfikator do obserwowania zmiany stanu fokusu. (I05866, b/160924455, b/160923326)
- Dodano modyfikator do żądania zmiany fokusu (I8dd73, b/161182057, b/160924778)
- Dostosuj menu paska narzędzi, aby poprawnie wyświetlać opcje kopiowania, wycinania i wklejania. (Id3955)
- Właściwości semantyczne pojedynczej wartości używają teraz stylu wywoływania.
Na przykład „semantics { hidden = true }” jest teraz zapisywane jako:
semantics { hidden() }
(Ic1afd, b/145951226, b/145955412) - Dodano Modifier.focus, który zastępuje FocusModifier. (Ib852a, b/160924778)
- Dodanie pływającego paska narzędzi do zaznaczenia pola tekstowego. (Ie8b07)
- Dodano eksperymentalną adnotację interfejsu API do interfejsu API związanego z wprowadzaniem kluczy (I53c0a).
- Dodano eksperymentalną adnotację interfejsu API do wszystkich interfejsów API związanych z funkcją Focus (I53b24, b/160903352).
- Dodano FocusState2, który zastąpi FocusDetailedState (I0a3ba, b/160822595).
- Dodano ExperimentalFocus, czyli adnotację @OptIn dla interfejsu Focus API. (I1544b, b/160820961)
- Dodano klasę jednostki IntBounds, która reprezentuje granice pikseli w układzie. Interfejs API PopupPositionProvider został zaktualizowany, aby go używać. (I0d8d0, b/159596546)
- Klasa Applier wymaga teraz metody clear() do usuwania kompozycji (Ibe697)
- Klasa KeyEvent została wycofana i zastąpiona klasą KeyEvent2 (I68730).
- Do narzędzi do wyszukiwania testów dodaliśmy nowy opcjonalny flag useUnmergedTree. (I2ce48)
- Udostępniliśmy eksperymentalny interfejs API LayoutNode (I4f2e9).
Dodano metody kopiowania do różnych typów klas wbudowanych, w tym:
- Przesunięcie
- Rozmiar
- Promień
- Ruch
TransformOrigin
Metoda obiektu towarzyszącego Size.copy została wycofana na rzecz metody kopiowania instancji (Ife290, b/159905651)
Wyskakujące okienka, okna dialogowe i menu dziedziczą teraz kontekstowy motyw MaterialTheme (Ia3665, b/156527485).
TextDirection zmienia nazwę na ResolvedTextDirection (I3ff38)
Usunięto parametr kierunku układu z bloku miary funkcji Layout(). Kierunek układu jest jednak dostępny w wywołaniu zwrotnym za pomocą obiektu zakresu pomiaru (Ic7d9d).
Refactor SelectionHandles for reusing. (I420e0)
Element klikalny został usunięty. Użyj modyfikatora clickable (I84bdf)
Tag testowy i semantyka zostały usunięte. Zamiast tego używaj Modifier.testTag i Modifier.semantics (I15ff0, b/158841414)
Przed tą zmianą wtyczka kompilatora Compose w nietrywialny sposób przechwytywała wywołania konstruktorów w funkcji @Composable, jeśli istniał (I5205a, b/158123804).
Zmieniliśmy nazwę Modifier.tag na Modifier.layoutId, aby uniknąć nieporozumień z Modifier.testTag. (I995f0)
Pozycje liczb całkowitych w liniach wyrównania zwracane przez Placeable#get(AlignmentLine) nie są już wartościami null. Jeśli wyszukiwana linia wyrównania nie istnieje, zwracana jest wartość AlignmentLine.Unspecified. (I896c5, b/158134875)
Do komponentu kompozycyjnego AndroidView dodano parametr modyfikatora. (I48a88, b/158746303)
Funkcja Semantics() została wycofana. Zamiast tego użyj funkcji Modifier.semantics(). (I72407, b/158841414)
Dodanie funkcji kompozycyjnej viewModel(), która umożliwia tworzenie lub pobieranie utworzonego już obiektu ViewModel w sposób podobny do tego, jak działa to w przypadku aktywności lub fragmentu (I5fdd1).
Zastąpiono użycie IntPx przez Int. Zastąpiono IntPxPosition przez IntOffset. Zastąpiono IntPxSize wartością IntSize. (Ib7b44)
Aby zmniejszyć liczbę klas używanych do reprezentowania informacji o rozmiarach, ujednolić użycie klasy Size zamiast PxSize. Dzięki temu możesz korzystać z zalet klasy wbudowanej, aby używać typu long do pakowania 2 wartości zmiennoprzecinkowych reprezentujących szerokość i wysokość. (Ic0191)
Aby zmniejszyć liczbę klas używanych do reprezentowania informacji o pozycjonowaniu, ujednolić użycie klasy Offset zamiast klasy PxPosition. Dzięki temu można korzystać z zalet klasy wbudowanej, aby używać typu long do pakowania 2 wartości zmiennoprzecinkowych reprezentujących przesunięcia x i y w postaci liczb zmiennoprzecinkowych. (I3ad98)
W ramach dużych zmian w kodzie zastąpiono użycie klasy Px w różnych klasach Compose, aby w przypadku parametrów pikseli korzystać tylko z jednostek Dp i typów prostych. Usunięto w całości klasę Px (I3ff33)
W ramach dużego refaktoryzacji zastąpiono użycie klasy Px w różnych klasach kompozycji, aby w przypadku parametrów pikseli używać tylko typów Dp i pierwotnych (I086f4).
W ramach dużego refaktoryzacji zastąpiono użycie klasy Px w różnych klasach kompozycji, aby w przypadku parametrów pikseli używać tylko typów Dp i pierwotnych (Id3434).
W ramach dużego refaktoryzowania zastąpiono użycie klasy Px w różnych klasach kompozycji, aby w przypadku parametrów pikseli używać tylko typów Dp i pierwotnych (I97a5a).
TestTag został wycofany. Zamiast tego użyj Modifier.testTag. (If5110, b/157173105)
Domyślna implementacja bez operacji interfejsu ParentDataModifier#modifyParentData została usunięta – była ona równoważna z nieimplementowaniem interfejsu. (I0deaa)
Wcześniej wycofana funkcja ScaleFit została usunięta. Zamiast tego użyj ContentScale. (Ifbc5b)
Zastąpiono użycie klasy Px w różnych klasach Compose w ramach dużego refaktoryzowania, aby w przypadku parametrów pikseli używać tylko typów Dp i pierwotnych (I19d02).
Dodano komponent DropdownMenu w ui-material, czyli implementację menu Material Design. (I9bb3d)
Usunięto wycofaną funkcję LayoutTag(). Zamiast niej używaj funkcji Modifier.tag(). Usunięto wycofany modyfikator Modifier.matchParent(). Zamiast niego używaj modyfikatora Modifier.matchParentSize(). (If8044)
W ramach dużego refaktoryzacji zastąpiono użycie klasy Px w różnych klasach kompozycji, aby w przypadku parametrów pikseli używać tylko typów Dp i pierwotnych (I57bff).
Wycofanie funkcji Modifier.semantics zostało cofnięte, aby umożliwić używanie jej w komponentach wysokiego poziomu. (I4cfdc)
Ujednolicone implementacje CanvasScope, dzięki czemu są teraz tylko DrawScope i ContentDrawScope. Zmieniono nazwę CanvasScope na DrawScope. Zaktualizowano DrawScope, aby zaimplementować interfejs Density i udostępnić LayoutDirection. Usunięto podklasę DrawScope w ContentDrawScope. Zaktualizowano Painter i PainterModifier, aby nie utrzymywały już same właściwości RTL, ponieważ DrawScope już je udostępnia bez ręcznego podawania (I1798e).
DoubleTapGestureFilter odróżnia teraz SingleTapGestureFilter w całym drzewie. (If92b1)
Zaktualizowano interfejs Alignment API i dodano obsługę wyrównania bezwzględnego (które nie jest automatycznie odzwierciedlane w kontekście od prawej do lewej) (I38cd3).
Zmieniliśmy interfejs API modyfikatorów DrawLayer: outlineShape został zmieniony na shape i ma teraz wartość domyślną RectangleShape oraz nie może mieć wartości null; clipToOutline został zmieniony na clip; clipToBounds został usunięty, ponieważ jest taki sam jak clip == true z RectangleShape (I7ef11, b/155075735).
Zaktualizowano interfejsy API Compose wyższego poziomu, które udostępniają Canvas, aby zamiast tego udostępniać CanvasScope. Eliminuje to konieczność utrzymywania przez konsumentów własnych obiektów Paint. Użytkownicy, którzy nadal potrzebują dostępu do elementu Canvas, mogą użyć metody drawCanvas, która zapewnia wywołanie zwrotne do wydawania poleceń rysowania za pomocą bazowego elementu Canvas. (I80afd)
Zmieniono interfejs API lambda końcowego WithConstraints. Zamiast 2 parametrów ma teraz zakres odbiorcy, który oprócz ograniczeń i kierunku układu udostępnia właściwości minWidth, maxWidth, minHeight i maxHeight w jednostkach dp (I91b9a, b/149979702).
Zmieniono nazwę LayoutModifier2 na LayoutModifier. (Id29f3)
Usunięto wycofany interfejs LayoutModifier. (I2a9d6)
Funkcje pomiarów wewnętrznych w Layout i LayoutModifier2 mają teraz odbiornik IntrinsicMeasureScope, który udostępnia interfejs API zapytań o wartości wewnętrzne z niejawnym kierunkiem układu. (Id9945)
Elementy podrzędne Layout i LayoutModifier można mierzyć w innym kierunku układu. (Ibd731)
Dodano nowy modyfikator Modifier.zIndex(), który umożliwia kontrolowanie kolejności rysowania elementów podrzędnych w tym samym układzie nadrzędnym. Właściwość elevation w modyfikatorze DrawLayerModifier została zmieniona na shadowElevation i nie kontroluje już kolejności rysowania. Zmieniono kolejność parametrów funkcji DrawShadow: pierwszy to teraz elevation, a drugi to shape z domyślnym RectangleShape. (I20150, b/152417501)
Usunięto funkcje onSizeChange i onPositionChange w klasie Owner. (I5c718)
Dodano Constraints2, kopię Constraints, która obsługuje tylko wartości Int connstraints, a nie IntPx. IntPx zostanie usunięty, a wszystkie ograniczenia dotyczące liczb całkowitych będą traktowane jako piksele, tak jak w Androidzie.
- Dodaliśmy też IntSize, który ostatecznie zastąpi IntPxSize. (I4b43a)
Umożliwiono tworzenie instancji klasy Alignment z dowolnymi wartościami. Dodano wyrównania 1D. (Ia0c05)
Funkcja alignToSiblings akceptuje teraz obiekt Measured zamiast Placeable. (I5788d)
-
- Zmiana nazwy ScaleFit na ContentScale
- Przeniesiono ContentScale z modułu ui-graphics do modułu ui-core, aby znajdował się w tym samym module co interfejs API Alignment.
- Zmieniono nazwę FillMaxDimension na Crop
- Zmiana nazwy FillMinDimension na Fit
- Zmiana nazwy z Dopasowanie na Wewnątrz, aby lepiej pasowała do funkcji
- Odpowiedniki ImageView.ScaleType
- Dodano dokumentację wskazującą, że połączenie opcji Przytnij i Wyrównanie.Środek daje ten sam efekt co ImageView.ScaleType.CENTER_CROP, a opcja Dopasuj używana z opcją Wyrównanie.Środek daje ten sam efekt co ImageView.ScaleType.FIT_CENTER. Opcja Wewnątrz używana z opcją Wyrównanie.Środek daje ten sam efekt co ImageView.ScaleType.CENTER_INSIDE.
Obsługa kierunku pisma od prawej do lewej w przypadku modyfikatorów rysowania. (I0aaf9)
Wprowadzono interfejs API do tworzenia widoków Androida z pliku XML. Więcej informacji znajdziesz w demonstracji ViewInCompose. (I42916)
Ulepszenie interfejsu DrawModifier API:
- Zmieniono zakres odbiorcy funkcji draw() na ContentDrawScope
- Usunięto wszystkie parametry funkcji draw()
- DrawScope ma taki sam interfejs jak poprzednia wersja CanvasScope.
- ContentDrawScope ma metodę drawContent() (Ibaced, b/152919067)
Dodano positionInParent i boundsInParent dla LayoutCoordinates. (Icacdd, b/152735784)
W przypadku funkcji DrawLayerModifier i drawLayer() domyślne wartości clipToBounds i clipToOutline to teraz false. (I0eb8b, b/152810850)
Zmieniono nazwę LayoutResult na MeasureResult. (Id8c68)
Dodano LayoutModifier2, nowy interfejs API do definiowania modyfikatorów układu; wycofano LayoutModifier (If32ac).
Zastąpienie operatora „Modyfikator plus” funkcjami rozszerzenia fabrycznego (I225e4)
Dodaliśmy właściwości translationX/Y, aby obsługiwać przesuwanie listy wyświetlania poleceń rysowania dla danej warstwy. Jest to przydatne do przenoszenia treści w odpowiedzi na animacje lub zdarzenia dotknięcia. (I8641c)
Dodano parametry pivotX i pivotY do interfejsów API warstwy, aby obsługiwać obracanie i skalowanie wokół określonego punktu na warstwie (Icf7c3).
Dodaj modyfikatory OnPositionedModifier i OnChildPositionedModifier, aby zastąpić funkcje kompozycyjne OnPositioned i OnChildPositioned. (I2ec8f)
Dodano LayerModifier, modyfikator, który umożliwia dodawanie RenderNode do układu. Umożliwia ustawianie przycinania, krycia, obrotu, skalowania i cieni. Zastąpi on RepaintBoundary. (I7100d, b/150774014)
Umożliwiono propagowanie kierunku układu z węzła układu nadrzędnego do węzłów podrzędnych. Dodano modyfikator kierunku układu. (I3d955)
Komponent Stack obsługuje kierunek od prawej do lewej (Ic9e00)
Początkowa obsługa układu od prawej do lewej w Compose (Ia5519)
Połączyliśmy interfejsy Density i DensityScope w jeden. Zamiast ambientDensity() możesz teraz używać DensityAmbient.current. Zamiast withDensity(density) używaj tylko with(density) (I11cb1).
Zmieniono LayoutCoordinates, aby providedAlignmentLines było zbiorem zamiast mapy, a LayoutCoordinates implementowało operatora get() zamiast pobierania wartości. Ułatwia to modyfikatorom modyfikowanie co najmniej jednej wartości zestawu bez tworzenia nowej kolekcji dla każdego modyfikatora. (I0245a)
LayoutCoordinates nie ma już właściwości position. Właściwość position nie ma sensu w przypadku modyfikatorów układu, obrotu ani skalowania. Zamiast tego programiści powinni używać funkcji parentCoordinates i childToLocal() do obliczania przekształcenia z jednego obiektu LayoutCoordinate na inny.
LayoutCoordinates używa IntPxSize dla właściwości size zamiast PxSize. Układy korzystają z rozmiarów w pikselach, więc wszystkie rozmiary układów powinny być liczbami całkowitymi, a nie wartościami zmiennoprzecinkowymi. (I9367b)
Ulepszenia interfejsu API ograniczeń (I0fd15)
Utworzono interfejs CanvasScope API, który opakowuje obiekt Canvas, aby udostępnić bezstanowy, deklaratywny interfejs API do rysowania. Przekształcenia są zawarte w odpowiednim zakresie odbiornika, a informacje o rozmiarze są również ograniczone do odpowiednich granic wstawki. Nie wymaga to od użytkownika utrzymywania własnego obiektu stanu Paint do konfigurowania operacji rysowania.
- Dodaliśmy CanvasScopeSample, a także zaktualizowaliśmy aplikację demonstracyjną, aby zawierała demonstrację grafiki deklaratywnej (Ifd86d).
Usunięto nieużywany interfejs MaskFilter API, ponieważ jest on rzadko używany i nie jest zoptymalizowany pod kątem akceleracji sprzętowej w większości przypadków użycia (I54f76).
RectangleShape przeniesiono z androidx.ui.foundation.shape.* do androidx.ui.graphics.* (Ia74d5, b/154507984)
Zastąpiono wszystkie użycia wartości Color, które mogą przyjmować wartość null, w interfejsie API wartościami, które nie mogą przyjmować wartości null, i zamiast wartości null użyto wartości Color.Unset (Iabaa7).
Wprowadzenie dodatkowego opcjonalnego parametru rect do ImagePainter w celu obsługi rysowania podsekcji bazowego elementu ImageAsset (I0ea9e)
Dodano kolor „Unset Color” (Nieskonfigurowany kolor), aby reprezentować nieskonfigurowaną wartość bez otaczania kolorów ramką. (If901a)
Dodano metody rozszerzenia Canvas.rotate i Canvas.scale, aby używać opcjonalnych współrzędnych punktu obrotu w przypadku przekształceń. Domyślnie są one ustawione w lewym górnym rogu bieżącego tłumaczenia obszaru roboczego.
Przeniesiono też Canvas.rotateRad, aby był metodą rozszerzającą dla zachowania spójności (Ibaca6).
Utworzono interfejs PixelMap API, aby obsługiwać zapytania o informacje o pikselach z obiektu ImageAsset. (I69ad6)
Zmieniono nazwy funkcji toFrameworkRect/toFrameworkRectF na toAndroidRect/toAndroidRectF, aby były zgodne z konwencją nazewnictwa konwersji obiektów między interfejsami API Compose i Androida, na których są oparte. Zaktualizowaliśmy też dokumentację tych interfejsów API (I86337).
Dodano interfejs VectorPainter API, który zastępuje dotychczasowy interfejs subcomposition API w przypadku grafiki wektorowej. Wynikiem subkompozycji jest obiekt VectorPainter zamiast DrawModifier. Wycofano poprzednie funkcje kompozycyjne DrawVector na rzecz VectorPainter.
Zmiana nazwy interfejsu Image(Painter) API na PaintBox(Painter). Utworzenie komponentu Vector, który działa jak komponent Image, ale zamiast ImageAsset używa VectorAsset (I9af9a, b/149030271).
Zmieniliśmy nazwę Image na ImageAsset, aby lepiej odróżnić dane Image od nadchodzącego komponentu Image, który będzie używany do tworzenia układu i rysowania treści. _Body:Utworzono metodę rozszerzenia w klasie android.graphics.Bitmap, Bitmap.asImageAsset(), aby utworzyć instancję klasy ImageAsset przydatną do łączenia tradycyjnego tworzenia aplikacji na Androida z platformą Compose (Id5bbd).
Dodano TextDirection.Content (I48f36)
Dodano operator TextDecoration.plus (I0ad1a)
Usunięto
Force
z wartości typu wyliczeniowego TextDirectionAlgorithm (Icc944)Zmiana nazwy TextDirectionAlgorithm na TextDirection (I75ce8)
Implementuje LongPressAndDrag na potrzeby zaznaczania w polu tekstowym. (I17919)
Dodano AnnotatedString.getStringAnnotations, która zwraca wszystkie adnotacje w zakresie. (I1fa00)
Zmieniono nazwę pakietu dla Locale i LocaleList z androidx.ui.text na androidx.ui.intl (I8132c)
Kursor w polu TextField ma animację migania (Id10a7)
Zmiana w interfejsie API: AnnotatedString(builder: Builder) zmieniono na annotatedString(builder: Builder). (Ia6377)
Zmiana w interfejsie API: AnnotatedString.Item zmieniono na AnnotatedString.Range. (I2d44d)
Zmiana nazwy funkcji AnnotatedString.Builder.addAnnotationString na addStringAnnotation. (I5059e)
Klawiaturę ekranową można teraz ukrywać i wyświetlać za pomocą klasy SoftwareKeyboardController, która jest dostarczana przez wywołanie zwrotne onTextInputStarted (I8dc44, b/151860051).
Dodano operator plusa dla (Text/Paragraph/Span)Style, który przekazuje wywołanie do funkcji merge(). (Ia1add)
Funkcja FontWeight.lerp nie przyciąga już wartości. Nadal jest to klasa danych. (I521c2)
Konstruktor FontWeight jest teraz publiczny i nie jest już klasą danych. (Id6b1f)
Dodanie funkcji getLineStart, getLineEnd, getEllipsisOffset i getEllipsisCount do TextLayoutResult (Ibc801)
Moduł ui-text został zmieniony na ui-text-core (I57dec)
Usunięto nieużywaną klasę Size, ponieważ w module ui-geometry znajduje się zduplikowana klasa Size, która jest używana. (I1b602)
Dodano AdapterList, komponent listy przewijanej, który tylko komponuje i układa widoczne elementy. Obecnie znane problemy obejmują to, że jest on tylko pionowy i nie obsługuje w pełni wszystkich przypadków zmian w jego elementach podrzędnych. (Ib351b)
Dodaj parametry dopełnienia, obramowania, kształtu i tła do elementu Box (I05027, b/148147281)
Poprawki błędów
- Wywołanie zwrotne onFocusChange w polach tekstowych zostało zmienione na onFocusChanged (Ida4a1)
- Komponenty VerticalScroller i HoriziontalScroller zostały wycofane. Użyj komponentów ScrollableColumn i ScrollableRow, aby wbudować funkcje z zachowaniem i parametrami Column/Row, lub użyj modyfikatorów Modifier.verticalScroll i Modifier.horizontalScroll we własnym elemencie. Podobnie klasa ScrollerPosition została wycofana na rzecz klasy ScrollState (I400ce, b/157225838, b/149460415, b/154105299).
- Nazwa została zmieniona na
runOnIdle
(I83607)runOnIdleCompose
- Zmieniliśmy nazwy kilku interfejsów API do testowania, aby były bardziej intuicyjne. Wszystkie interfejsy API findXYZ zostały zmienione na onNodeXYZ. Wszystkie interfejsy API doXYZ zostały zmienione na performXYZ. (I7f164)
- Interfejs Compose można teraz tworzyć w ViewGroups bez konieczności tworzenia nowej kompozycji. Przykład znajdziesz w sekcji ViewInteropDemo. (I9ab0b, b/160455080)
- Dodano funkcje sortWith i removeRange do klasy MutableVector (Icccf7)
- Zaimplementuj uchwyty przeciągania, aby zmienić zaznaczenie w przypadku elementu TextField. (I27032)
- Usunięto klasę wbudowaną Shader, która opakowywała klasę oczekiwaną NativeShader. Zmieniono nazwę klasy NativeShader na Shader. Klasa wbudowana Shader nie wnosiła niczego wartościowego do interfejsu API i była klasą wbudowaną, więc używaj bezpośrednio klasy NativeShader. (I25e4d)
Przebudowano PainterModifier, aby nie zapewniać już skalowania na podstawie podanych ograniczeń i parametru ContentScale. Implementacje Painter muszą samodzielnie skalować rysowane treści na podstawie podanego rozmiaru DrawScope, w którym rysują.
Rozwiązaliśmy problem polegający na tym, że pamięć podręczna VectorPaintera bitmap miała rozmiar domyślny zamiast rozmiaru podanego do rysowania.
Zaktualizowano ImagePainter, aby skalował zawartość zamiast polegać na PainterModifier. (I6ba90)
dodanie funkcji najwyższego poziomu withFrameNanos do określania czasu animacji (Ie34c5);
Adnotacja @Untracked została wycofana. Zastąp @ComposableContract(tracked=false) (Id211e)
Interfejsy androidx.ui.foundation.TextFieldValue i androidx.ui.input.EditorValue zostały wycofane. Komponenty TextField, FilledTextField i CoreTextField, które używają tego typu, również zostały wycofane. Zamiast tego użyj androidx.ui.input.TextFieldValue (I4066d, b/155211005)
Rozwiązaliśmy problem, który powodował awarię podczas wysyłania danych wejściowych wskaźnika, jeśli filtry PointerInputFilters zostały usunięte za pomocą subkompozycji podczas wysyłania. Zostało to już rozwiązane. (I1f48b, b/157998762)
Rozwiązaliśmy problem, który powodował awarię podczas wysyłania danych wejściowych wskaźnika, jeśli filtry PointerInputFilters zostały usunięte za pomocą subkompozycji podczas wysyłania. Zostało to już rozwiązane. (Iab398, b/157998762)
Przekształcono klasę Radius w klasę wbudowaną. Usunięto metody tworzenia kształtu towarzyszącego na rzecz konstruktora funkcji z parametrem domyślnym, aby promień wzdłuż osi y był zgodny z obowiązkowym parametrem promienia wzdłuż osi x.
Zaktualizowano funkcję DrawScope.drawRoundRect, aby używała jednego parametru Radius zamiast 2 osobnych wartości zmiennoprzecinkowych dla promienia wzdłuż osi X i Y (I46d1b).
Funkcja kompozycyjna Recompose nie jest już przydatną abstrakcją. Większość ponownego komponowania powinna następować w wyniku przypisań MutableState. W innych przypadkach zalecamy użycie funkcji
invalidate
, aby wywołać ponowne skomponowanie bieżącego zakresu. (Ifc992)Zastąpiono użycie klasy Px w różnych klasach Compose w ramach dużego refaktoryzacji, aby w przypadku parametrów pikseli używać tylko jednostek dp i typów pierwotnych (Iede0b).
Zmienia strategię generowania kodu kompilatora Compose. Przed zmianą kompilator Compose przekształcał wywołania funkcji kompozycyjnych. Dzięki tej zmianie przekształcamy treść funkcji kompozycyjnej, a miejsce wywołania pozostaje (w większości przypadków) bez zmian.
Oznacza to, że większość logiki komunikującej się z środowiskiem wykonawczym funkcji kompozycji znajduje się na początku treści funkcji, a nie w miejscu wywołania.
Powinna to być zmiana zgodna ze źródłem w przypadku wszystkich zastosowań funkcji compose. Większość użytkowników Compose nie będzie musiała aktualizować kodu w wyniku tej zmiany.
Aby to umożliwić, zmieniliśmy sygnaturę JVM wszystkich funkcji kompozycyjnych. Funkcja Composable przyjmująca 1 parametr jest przekształcana w funkcję przyjmującą 3 parametry. Dodatkowe parametry to Composer, liczba całkowita „key” i liczba całkowita maski bitowej używana do propagowania metadanych przez wywołania.
Compose przekształca teraz argumenty domyślne w funkcję z możliwością komponowania. Nie wprowadza to dodatkowego syntetycznego przeciążenia domyślnego samej funkcji, więc ta zmiana spowoduje zdefiniowanie mniejszej liczby funkcji.
Znane celowe zmiany w zachowaniu wynikające z tego:
- Niektóre połączenia będą pomijane w miejscach, w których wcześniej nie były pomijane.
- Wyrażenia kompozycyjne w wyrażeniach argumentów domyślnych są teraz prawidłowo subskrybowane i obsługiwane.
W ramach tych prac wprowadziliśmy kilka optymalizacji: 1. Wyniki porównań parametrów są propagowane w grafie wywołań do innych funkcji kompozycyjnych. Dzięki temu w czasie działania aplikacji będzie wykonywanych mniej porównań, zmniejszy się rozmiar tabeli slotów, a także będzie można pominąć więcej funkcji kompozycyjnych, które wcześniej nie były pomijane. Parametry, które w momencie kompilacji są uznawane za „statyczne”, nie są już porównywane ani przechowywane w środowisku wykonawczym. Zmniejsza to liczbę porównań i rozmiar tabeli slotów. 3. Struktura przepływu sterowania w treści funkcji służy do minimalizowania liczby generowanych grup. Zmniejsza to rozmiar tabeli przedziałów i wymaga mniej pracy od środowiska wykonawczego. Nieużywane parametry wysyłania i odbioru funkcji nie są uwzględniane przy określaniu, czy funkcję można pominąć, jeśli nie są używane w treści funkcji.
Większość zmian powodujących niezgodność dotyczyła interfejsów API, które są bezpośrednio używane przez kompilator. Typowe użycie funkcji Compose nie będzie miało na nie wpływu: 1. Usunięto Composer::startExpr 2. Usunięto Composer::endExpr 3. Composer::call został wycofany 4. Przeciążenia funkcji
key
, które nie przyjmują argumentów o zmiennej liczbie, zostały usunięte. Od teraz używaj wersjivararg
. 5. Adnotacja Pivotal została wycofana. Użyjkey
jako zamiennika. 6. Funkcja ScopeUpdateScope::updateScope została zmieniona tak, aby oczekiwała funkcji Function3 zamiast Function1. 7. Funkcje restartableFunction i restartableFunctionN zostały zaktualizowane, aby zawierały dodatkowe parametry czasu kompilacji (I60756, b/143464846).Usunięto wycofane modyfikatory LayoutAlign. (I10877)
Usunięto RepaintBoundary na rzecz DrawLayerModifier (I00aa4)
Komponenty Button, FloatingActionButton i Clickable mają teraz osobny parametr
enabled
. Niektóre parametry w przypadku komponentu Button zostały zmienione lub zmieniono ich kolejność. (I54b5a)Zastąpiono ButtonStyle odrębnymi funkcjami i usunięto przeciążenie tekstu (ciągu znaków). Informacje o użytkowaniu znajdziesz w zaktualizowanych przykładach. (If63ab, b/146478620, b/146482131)
Zmiany powodujące niezgodność w interfejsie API ambients. Szczegółowe informacje znajdziesz w dzienniku i
Ambient<T>
dokumentacji (I4c7ee, b/143769776).Zmieniono działanie domyślnego parametru TextDirection, aby było określane przez parametr LayoutDirection. Jeśli np. parametr LayoutDirection ma wartość RTL, domyślny parametr TextDirection będzie miał wartość RTL. Poprzednio był to TextDirection.ContentOrLtr/Rtl (I4e803)
Poprawka błędu: gdy w obiekcie AnnotatedString zagnieżdżone są wagi i style czcionki, tekst nie jest renderowany prawidłowo. (I77a9d)
Dodaje do funkcji Text() często używane parametry. Jeśli obecnie tworzysz lokalny styl tekstu, aby przekazać niewielką liczbę tych parametrów, np. Text(style = TextStyle(textAlign = TextAlign.Center)), możesz teraz podać parametry bezpośrednio: Text(textAlign = TextAlign.Center) (I82768).
Moduł ui-android-text został zmieniony na ui-text-android (I68cbe).