IU de Compose
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(Puedes ver todos los paquetes de Compose en los documentos de referencia de la API).
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
4 de septiembre de 2024 | 1.7.0 | - | - | 1.8.0-alpha01 |
Estructura
Compose es una combinación de 7 IDs de grupo de Maven en androidx
. Cada grupo contiene un subconjunto de funcionalidades objetivo, cada uno con su propio conjunto de notas de la versión.
En esta tabla, se explican los grupos y vínculos correspondientes a cada conjunto de notas de la versión.
Grupo | Descripción |
---|---|
compose.animation | Compila animaciones en las aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario. |
compose.compiler | Transforma las funciones que admite @Composable y habilita las optimizaciones con un complemento de compilador de Kotlin. |
compose.foundation | Escribe aplicaciones de Jetpack Compose con componentes fundamentales listos para usar y extiende la base para compilar tus propias piezas de sistema de diseño. |
compose.material | Compila las IUs de Jetpack Compose con componentes de Material Design listos para usar. Este es el punto de entrada de nivel superior de Compose, diseñado para proporcionar componentes que coincidan con los descritos en www.material.io. |
compose.material3 | Compila las IUs de Jetpack Compose con componentes de Material Design 3, la siguiente evolución de Material Design. Material 3 incluye temas y componentes actualizados, y funciones de personalización de Material You, como el color dinámico. Además, se diseñó para ser coherente con el nuevo estilo visual y la IU del sistema de Android 12. |
compose.runtime | Se trata de los componentes fundamentales del modelo de programación de Compose y de su administración de estados, así como del entorno de ejecución principal al cual se orienta el complemento de compilación de Compose. |
compose.ui | Son los componentes fundamentales de la IU de Compose necesarios para interactuar con el dispositivo, incluidos el diseño, el dibujo y la entrada. |
Cómo declarar dependencias
Para agregar una dependencia en Compose, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.7.1" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.7.1") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.15" } kotlinOptions { jvmTarget = "1.8" } }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.8
Versión 1.8.0-alpha01
4 de septiembre de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.8.0-alpha01
. La versión 1.8.0-alpha01 contiene estas confirmaciones.
Versión 1.7
Versión 1.7.0
4 de septiembre de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0
.
Cambios importantes desde la versión 1.6.0
Los cambios importantes en la versión 1.7.0 se describen en esta entrada de blog.
Versión 1.7.0-rc01
21 de agosto de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-rc01
. La versión 1.7.0-rc01 contiene estas confirmaciones.
Cambios notables
- El módulo ui:ui ahora fuerza el requisito de una versión mínima de Foundation:foundation para que sea, al menos, 1.7.0-rc01 o posterior. Esto se aplica para solucionar un comportamiento incompatible entre la IU y la base con respecto a los cambios de
NestedScrollSource
que ocurrieron a principios de 1.7.0-alpha01.
Versión 1.7.0-beta07
7 de agosto de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta07
. La versión 1.7.0-beta07 contiene estas confirmaciones.
Correcciones de errores
- Las funciones
SemanticsNodeInteraction
relacionadas con la entrada de textoperformTextReplacement
,performTextInput
yperformTextClearance
ahora arrojarán errores de aserción cuando se llamen enTextFields
de solo lectura. (I4ae8f).
Versión 1.7.0-beta06
24 de julio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta06
. La versión 1.7.0-beta06 contiene estas confirmaciones.
Versión 1.7.0-beta05
10 de julio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta05
. La versión 1.7.0-beta05 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error por el que cambiar el teclado en pantalla hacía que
TextField
no aceptara entradas del teclado nuevo hasta que se perdiera y se recuperara el enfoque. - Se corrigió un problema por el que los intentos de persistencia del contenido de la capa causaban efectos secundarios no deseados cuando se procesaba con contenido de
SurfaceView
.
Versión 1.7.0-beta04
26 de junio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta04
. La versión 1.7.0-beta04 contiene estas confirmaciones.
Correcciones de errores
- Evita fallas cuando se miden líneas de texto muy grandes (p. ej., 10,000 caracteres) (8157ab).
- Inhabilita la compatibilidad con la renderización de software para la API de
GraphicsLayer
. (35ddd8). - Se corrigió una falla en la lógica de persistencia de capas. (70b13e).
- Se revirtió la reutilización de la optimización de objetos de capas, ya que esto causó problemas de renderización. (70b13e).
Versión 1.7.0-beta03
12 de junio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta03
. La versión 1.7.0-beta03 contiene estas confirmaciones.
Versión 1.7.0-beta02
29 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta02
. La versión 1.7.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
SemanticsProperties.Editable
aIsEditable
y se cambióSemanticsPropertyReceiver.editable
a un valorisEditable
. Ahora, la propiedad es booleana y siempre se especifica mediante campos de texto. (I8acd8). - Se cambió el nombre del parámetro de comparativas de accesibilidad. (I3d440).
- Se actualizó la API para definir el estilo de los vínculos:
TextLinkStyles
ahora es parte del constructorLinkAnnotation
y el métodoAnnotatedString.fromHtml
(I90b2b). También se quitó el objetoTextDefaults
del material. (I5477b)
Correcciones de errores
- Se cambió el nombre de
LayoutCoordinates.introducesFrameOfReference
porLayoutCoordinates.introducesMotionFrameOfReference
para reflejar mejor su propósito. Se cambió el nombre de la función relacionada para calcular coordenadas basadas en esa marca. (I3a330).
Versión 1.7.0-beta01
14 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta01
. La versión 1.7.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
performCustomAccessibilityActionLabelled
porperformCustomAccessibilityActionWithLabel
y el deperformCustomAccessibilityActionWhere
porperformCustomAccessibilityActionWithLabelMatching
(I5387f). AnnotatedString.hasEqualsAnnotations
ahora eshasEqualAnnotations
. (I685c0)- Se actualizó la API para obtener vínculos con temas de Material en el texto. Específicamente, se quitaron los métodos de
TextDefaults
para construirLinkAnnotations
con temas y analizar HTML con vínculos temáticos. En su lugar, se agregó una claseTextLinkStyles
que permite diseñar los vínculos como un parámetro en el elemento Text componible. (I31b93).
Correcciones de errores
- Se corrigieron casos de uso adicionales cuando se agregan de forma dinámica modificadores de entrada de puntero durante eventos. 63e1504
Versión 1.7.0-alpha08
1 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha08
. La versión 1.7.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad para implementaciones de formas mutables. Ahora se observa
Shape#createOutline
dentro de las capas de gráficos, por lo que la lectura de los valores de estado dentro de ellas causará invalidaciones cuando cambie el estado, lo que permitirá animaciones de formas con mejor rendimiento. (Id1629, b/326070216). - Se cambió el nombre de
isPositionedByParentWithDirectManipulation
aintroducesFrameOfReference
. Ten en cuenta que ahora tiene el efecto inverso, lo que significa que, de forma predeterminada, la mayoría de losLayoutCoordinates
introduce un marco de referencia y, solo cuando se coloca bajo manipulación directa, la propiedad será falsa. Para consultar la posición con solo aquellos que ingresan un marco de referencia, usapositionInLocalFrameOfReference(...)
. O bienpositionInLocalLookaheadFrameOfReference
desde unLookaheadScope
. (Ifc5f7). - Se volvieron estables las APIs de
LookaheadScope
. (I21507) - Se cambió la lambda de acción para
getScrollViewportLength
según los comentarios del consejo de la API. (Ibc74a). - Se actualizaron las
GraphicsLayer
APIs de outline para consumir parámetros de número de punto flotante en lugar de int. Se quitaron los valores centinelaUnsetOffset/UnsetSize IntSize
existentes en favor de las constantes no especificadas ya existentes en las clases intercaladas Offset y Size basadas en números de punto flotante (I2fb03, b/333863462). - Cuando se inserta la entrada del mouse durante las pruebas,
MouseInjectionScope.click()
,MouseInjectionScope.doubleClick()
,MouseInjectionScope.tripleClick()
yMouseInjectionScope.longClick()
ahora aceptan un parámetrobutton: MouseButton
para que se puedan aplicar a nivel universal. El valor predeterminado esMouseButton.Primary
para todos los métodos. (I31a23, b/190493367, b/261439695). - Se cambió el nombre de
onClicked
aonClick
dentro deLinkInteractionListener
(Iaa35c). - Se cambió el nombre de
TextInclusionStrategy.isInside
porisIncluded
. Hace que el tipo de datos que se muestra deParagraph/MultiParagraph#getRangeForRect()
no admita valores nulos. (I51f26).
Correcciones de errores
- Se corrigió la captura de pantalla larga para desplazar contenedores con
reverseScrolling=true
. (I7c59c).
Contribución externa
- Se agregó compatibilidad para la carga previa de elementos en
LazyLists
anidados (p.ej., unLazyColumn
que renderizaLazyRows
anidados). Se espera que este cambio reduzca las caídas de fotogramas durante el desplazamiento para estosLazyLists
El valor predeterminado de implementación es la carga previa de los primeros 2 elementos anidados; sin embargo, este comportamiento se puede controlar con las nuevas APIs deLazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
yLazyListPrefetchStrategy#onNestedPrefetch
. (I51952).
Versión 1.7.0-alpha07
17 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha07
. La versión 1.7.0-alpha07 contiene estas confirmaciones.
Cambios en la API
ClickableText
se marcó como obsoleto. Para agregar vínculos al texto, crea unAnnotatedString
con unLinkAnnotation
correspondiente a tu vínculo y pasa esteAnnotatedString
al elemento componible Text. (I34d4b, b/323346994).- Se introdujo
ViewConfiguration.HandwritingGestureLineMargin
para los gestos de escritura a mano. Se agregó compatibilidad con el gestoJoinOrSplit
paraBasicTextField
. (Ie6e13, b/325660505) FocusProperties.enter
yFocusProperties.exit
dejaron de ser experimentales.FocusDirection.Enter
yFocusDirection.Exit
ya no son experimentales.FocusRequester.Cancel
ya no es experimental. (I461a1, b/261564106)- Cuando consultes coordenadas de diseño, ahora puedes usar el argumento
excludeDirectManipulationOffset
para excluir el desplazamiento configurado por los diseños superiores que colocaron a sus elementos secundarios conPlaceable.PlacementScope.withDirectManipulationPlacement
. Del mismo modo, un diseño que cambia la posición de sus elementos secundarios con frecuencia ahora puede ubicarlos conwithDirectManipulationPlacement
(como el desplazamiento, implementado de forma predeterminada). Esto ayuda a que las animaciones basadas enapproachLayout
sean más intuitivas, ya que ahora tiene la oportunidad de diferenciar qué desplazamiento se animará y qué aplicar directamente cuando se decida animar su enfoque. (I60ec7). - Se quitó la marca de función para las capturas de pantalla largas. (I28648, b/329128246).
LazyColumn
ahora renderizará correctamente los encabezados fijos en las capturas de pantalla largas (I8d239, b/329296635).- Se reemplazarán los elementos Drag y Fling de
NestedScroll
porUserInput
ySideEffect
para adaptarse a la definición extendida de estas fuentes, que ahora incluyen animaciones (Efecto lateral), Rueda del mouse y Teclado (UserInput
). (I40579). ApproachLayoutModifierNode
yModifier.approachLayout
ahora son estables, con los nuevosisMeasurementApproachInProgress()
yisPlacementApproachInProgress()
para reemplazar a los antiguosisMeasurementApproachComplete()
yisPlacementApproachComplete()
, respectivamente.- Se quitó el modificador
intermediateLayout
obsoleto. (I3e91c). - Cambia el nombre de
GraphicsLayer#buildLayer
para grabar y así duplicar los métodos de start/endRecording de las APIs respaldadas por Displaylist, comoRenderNode
y Picture. - Se actualizó
rememberGraphicsLayer
para aprovecharrememberObserver
. (I312c1, b/288494724, b/330758155). UrlAnnotation
dejó de estar disponible; en su lugar, usaLinkAnnotation.Url
. Si usas temas de Material, usa el objetoTextDefaults
para crear la anotación con los temas de Material aplicados (I8d180, b/323346545).- Los vínculos de texto tienen la opción de estilo de estado presionado, además del estilo normal, se colocan sobre ellos y se enfocan. (I5f864, b/139312671)
- Se cambió el nombre de
String.parseAsHtml
porAnnotatedString.Companion.fromHtml
. (I43dcd). - Se agregaron argumentos de estilo (
linkStyle
,focusedLinkStyle
,hoveredLinkStyle
) y un objeto de escucha de interacción de vínculos al métodoparseAsHtml
. Cuando analices la cadena etiquetada con HTML con etiquetas<a>
, el método construirá unaLinkAnnotation.Url
para cada etiqueta y pasará los objetos de estilo y el objeto de escucha de interacción de vínculos a cada anotación. (I7c977). LinkAnnotation
ahora toma los argumentos de diseño basados en el estado y unLinkInteractionListener
. Agrega esta anotación aAnnotatedString
para obtener un hipervínculo. Si pasas los valoresfocusedState
ohoveredState
, podrás definir laconfiguration
visual para los vínculos cuando se enfoquen o se coloquen el cursor sobre ellos. (I81ce4, b/139312671).ImeOptions.hintLocales
ya no es anulable. Si deseas pasar una lista de configuración regional vacía, usaLocaleList.Empty
. (Ic5bc4).
Correcciones de errores
- Administra de manera óptima los datos de eventos de entrada históricos dañados o incorrectos (ignora los datos de desplazamiento incorrectos).
- Corrige los eventos inesperados del puntero cuando se agrega de forma dinámica un modificador de entrada del puntero antes de otro modificador de entrada del puntero durante una transmisión de eventos de entrada de un puntero activo (por ejemplo, entre una entrada al colocar el cursor sobre un elemento y una salida cuando se coloca el cursor sobre un elemento [mouse/pluma stylus]).
Versión 1.7.0-alpha06
3 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha06
. La versión 1.7.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se agregó el método
parseAsHtml
para cadenas con estilo: permite convertir una cadena marcada con etiquetas HTML enAnnotatedString
. Ten en cuenta que no todas las etiquetas son compatibles; por ejemplo, todavía no podrás mostrar listas con viñetas. (I84d3d, I30626, b/139326648). - Se implementó la compatibilidad experimental para capturas de pantalla largas en contenedores de desplazamiento de Compose con la API oficial de Android (
ScrollCaptureCallback
). Esta función es experimental y es posible que actualmente no maneje correctamente todos los casos. Por esa razón, está inhabilitado de forma predeterminada. Para habilitarlo, establece la marcaComposeFeatureFlag_LongScreenshotsEnabled
como verdadera. (I2b055, b/329296471).
Cambios en la API
fun ClipEntry.getMetadata()
se cambió aval ClipEntry.clipMetadata
. (I50155).- Se quitaron las funciones
ClipboardManager.getClipMetadata
yClipboardManager.hasClip
. UsaclipEntry.getMetadata()
para leer los metadatos de la entrada del clip actual. Además, revisa el resultado deClipboardManager.getClip
, si es nulo o no, para comprender si el Portapapeles tiene un clip actual. (I50498). - Ahora puedes pasar objetos
GraphicsLayer
a funcionesplaceable.placeWithLayer()
. (I1b22f) ClipboardManager.setClip
ahora acepta valores nulos para poder borrar el portapapeles. (I7d2e9).- Se agregaron IDs de recursos para ayudar a ocultar las vistas usadas como detalles de implementación dentro de las herramientas de compilación (I99531).
- Se agregó el método de suspensión
GraphicsLayer#toImageBitmap
para admitir la renderización de contenido de un mapa de bits en unGraphicsLayer
. Esta es una operación de renderización acelerada por hardware en el nivel de API 22 o versiones posteriores (inclusive) que admite más del 99% de todos los dispositivos Android. En el nivel de API 21 de Android, esto recurre a la renderización de software. (I9e114). - Método de ayuda para convertir un
RectF
de Android enComposeRect
. (I39925, b/325660505) - Todos los parámetros
KeyboardOptions
ahora tienen un valor no especificado de forma predeterminada. Se agregó el métodoKeyboardOptions.merge
. - Se cambió el nombre de
KeyboardOptions.autoCorrect
aautoCorrectEnabled
y se hizo anulable, donde nulo indica que no se especificó ningún valor. (Ia8ba0, b/295951492). - La variante
BasicTextField(state)
yBasicSecureTextField
ahora usanKeyboardActionHandler
en lugar deKeyboardActions
para procesar las acciones realizadas por el teclado en pantalla (I58dda).
Versión 1.7.0-alpha05
20 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha05
. La versión 1.7.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Incorpora una nueva API de
GraphicsLayer
para registrar comandos de dibujo en una lista de visualización, así como propiedades adicionales que afectan la renderización de la lista. Esto proporciona un límite de aislamiento para dividir una escena compleja en partes más pequeñas que pueden actualizarse individualmente sin recrear toda la escena. Las transformaciones realizadas en unGraphicsLayer
se pueden realizar sin volver a grabar la lista de visualización. A diferencia deModifier.graphicsLayer
,GraphicsLayer
permite renderizar contenido de componibilidad en otro lugar y es útil en casos de uso animados en los que se espera que el contenido se renderice en diferentes escenas.
Cambios en la API
GraphicsLayer.draw(Canvas)
ya no es una API pública. En su lugar, usa la función de extensiónDrawScope.drawLayer(GraphicsLayer)
para dibujar la capa. (I7a7c0).- Se dividió
restrictedConstraints()
en dos métodos:fitPrioritizingWidth()
yfitPrioritizingHeight()
(I6d7fd). - Se agregó el stub de
HardwareCanvas
para el uso de Android L. (I1c3b5, b/288494724) - Actualiza el framework de Compose para exponer un elemento
GraphicsContext
de composición local junto con la actualización de las implementaciones de propietario,DelegateableNode
y modificadordrawWithCache
para exponer el acceso alGraphicsContext
para un acceso específico que limpiará automáticamente las instancias deGraphicsLayer
cuando se eliminen los modificadores. (I64a2f, b/288494724). - Se agregó
InterceptPlatformTextInput
para ayudar a escribir pruebas relacionadas con el IME de bajo nivel y otros casos de uso de IME de bajo nivel. El elementoPlatformTextInputTestOverride
dejó de estar disponible. (I862ed, b/322680547). - Se agregó la función de extensión
GraphicsLayer.setOutline(Outline)
. (Ib81f4). - Se introdujo el constructor de la función
GraphicsContext
para crear una fábrica y crear instancias deGraphicsLayer
. (Ib98d6, b/288494724) - Se expuso la API de
GraphicsLayer
para proporcionar una flexibilidad definida por el desarrollador en la captura de comandos de dibujo que se pueden usar para dibujar en otro lugar y también aplicar diferentes efectos visuales al resultado final. (I80245, b/288494724). - Introduce el objeto
Paragraph#getRangeForRect
, que muestra un rango de texto cubierto por un área rectangular determinada. (Iee516, b/325660505). - Se quitó la anulación experimental de
BasicText
con el argumentoonLinkClicked
. En el futuro, tendremos una API de reemplazo para admitir hipervínculos. (I107d5).
Correcciones de errores
- Se agregó la definición
GraphicsLayer
esperada/real de la API para admitir la captura y repetición de comandos de dibujo con transformaciones y efectos visuales de composición opcionales. Se introdujo la interfaz deGraphicsContext
para que contenga dependencias de gráficos, incluida la creación y administración de instancias deGraphicsLayer
. (I4a8d6, b/288494724). - Se corrigió un problema de interoperabilidad con la búsqueda de enfoque 1D en el que el foco se bloqueaba dentro de un
ComposeView
que estaba incorporado entre otras vistas. (I08fd4).
Contribución externa
- Se movió
LocalLifecycleOwner
de la IU de Compose alifecycle-runtime-compose
para que sus APIs auxiliares basadas en Compose se puedan usar fuera de la IU de Compose. Gracias, Jake Wharton por la contribución. (I6c41b, b/328263448). - Expón de manera coherente propiedades de número de punto flotante de sesgo en todos los subtipos de alineación basados en sesgo. (I69f0f, b/328088992).
Versión 1.7.0-alpha04
6 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha04
. La versión 1.7.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad con la función de escritura a mano con la pluma stylus para BasicTextField2 en dispositivos con Android U. (I002e4).
- En este CL, agregamos la acción semántica
GetScrollViewportLength
para canalizar información sobre los componentes que se desplazan en Compose al sistema a11y. Esta CL también aplica el uso de dicha propiedad en las listas desplazables básicas. (Ic5fa2). FocusRequester.createRefs
ahora es estable. (I4d92c, b/261436820)- Se agregó
DelegatableNode.requireView()
para permitir que los nodos modificadores obtengan elView
de Android actual sin leer un elemento local de composición. (I40768). - Se agregó una nueva API de
Path.reverse()
para revertir la dirección de una ruta (I36348). - Se agregó
hintLocales
aKeyboardOptions
para queTextFields
pueda sugerir a los IME con configuraciones regionales específicas que preestablezcan un idioma preferido. - Expón la propiedad
platformLocale
deLocale
que muestra el objeto de plataforma subyacente, p.ej.,java.util.Locale
(I921c6).
Versión 1.7.0-alpha03
21 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha03
. La versión 1.7.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Presentamos
ContextualFlowRow
yFlowRow
/Column
mejorados con MaxLines y Overflow. Nos complace anunciar mejoras en losFlowRow
yFlowColumn
experimentales, que ahora incluyen maxLines y compatibilidad con overflow, junto con el debut deContextualFlowRow
yContextualFlowColumn
. Esta actualización está diseñada para proporcionar componentes de rendimiento óptimo, en los queContextualFlow*
es perfecto para una gran cantidad de elementos que usan una configuración pequeña demaxLines
y botones para ver más dinámicos +N, yFlowRow
yFlowColumn
son perfectos para una cantidad pequeña de elementos, menos de 100. Importante: Para mantener el comportamiento existente enFlowRow
oFlowColumn
, donde se componen todos los elementos, independientemente de si se ajustan al máximo del eje cruzado, estableceoverflow
enFlowRowOverflow.Visible
oFlowColumnOverflow.Visible
durante la inicialización. ExploraContextualFlowRowSample
yFlowRowSample
para ver ejemplos de estas nuevas funciones en acción. (Ib9135, b/293577082). - Agrega la propiedad semántica
maxTextLength
que debe establecerse en los campos de texto que filtren la cantidad máxima permitida de caracteres. (I24d9f, b/170648072). - El wrapper
Modifier.inspectable
dejó de estar disponible. Esta API creará más invalidaciones de tu modificador que las necesarias, por lo que no se recomienda su uso. Se recomienda a los desarrolladores que implementen el métodoinspectableProperties()
enModifierNodeElement
si desean exponer las propiedades del modificador a las herramientas. (Ib3236). - Nuevo constructor para
PopupProperties
, que permite un control total sobre las marcasWindowManager.LayoutParams
(Ibb33e, b/312485503). - Se introdujo
DelegatableNode.requireLayoutCoordinates()
como una forma de obtener elLayoutCoordinates
actual deModifier.Node
sin necesidad de anularonPlaced
y almacenar las coordenadas en una propiedad. (Ia8657). - Se introdujo
DelegatableNode.currentLayoutCoordinates
como una forma de obtener elLayoutCoordinates
actual deModifier.Node
sin necesidad de anularonPlaced
y almacenar las coordenadas en una propiedad. (Iaebaa). BasicTextField2
y las APIs relacionadas en el paqueteandroidx.compose.foundation.text2
se movieron aandroidx.compose.foundation.text
. (I9f635).- Se agregó una nueva API de
ApproachLayoutModifierNode
para admitir la creación de lógica de enfoque personalizado en un nodo modificador explícito. También se agregó una nueva API experimental deDeferredTargetAnimation
para animaciones cuyo destino se desconoce en la creación de la instancia. (I60745). - Se agregaron nuevas APIs de
Path
para consultar la dirección de una ruta de acceso y extraer contornos de unaPath
. (I63d04). - Se agregaron
PathHitTest
yPath.contains(Offset)
para verificar si unPath
contiene un punto específico. (I3b218). TextLayoutResult
ahora expone el métodogetLineBaseline(lineIndex)
. Esto permite leer la línea de base de una línea arbitraria del texto, además de las propiedades de convenienciafirstBaseline
ylastBaseline
existentes. (Ide4e8, b/237428541).- Se agregó un método para comparar solo las anotaciones de dos
AnnotatedStrings
. (I32659).
Correcciones de errores
- Se corrigió un problema de retrocompatibilidad con
SemanticsPropertyReceiver.performImeAction
ySemanticsActions.PerformImeAction
. (Id0528, b/322269946).
Versión 1.7.0-alpha02
7 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha02
. La versión 1.7.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se corrigió un problema de compatibilidad binaria con
SemanticsPropertyReceiver.performImeAction
. (I65865, b/322269946). - El constructor
PopupProperties
que toma un parámetrousePlatformDefaultWidth
ya no es experimental. (I8f8d2). - Se agregó una sobrecarga de
ComposeTestRule.waitUntil
, que toma una descripción de cadena de la condición para incluir en el mensaje de tiempo de espera. (I9413e). - Se agregó una nueva API de semántica
unset()
para quitar las propiedades semánticas que se agregan en la misma cadena de modificadores. Nueva propiedad semánticaisOpaque
. (I8c583, b/317966058, b/246056649). - Se quitó
originalEventPosition
del método de copia en la API pública dePointerInputChange
. (I7bead).
Correcciones de errores
- Se corrigió un error de a11y que permite que se pueda hacer clic en botones que no son de pestaña ni de radio cuando se seleccionan. (I2181c).
- Ahora,
VelocityTracker
tendrá la solución para agregar puntos de forma predeterminada. Aun así, si se produce algún problema, se puede desactivar la corrección. Para ello, se debe configurarVelocityTrackerAddPointsFix
como falso. (Ib3877, b/269487059). - Se corrigió la incompatibilidad binaria con versiones anteriores en
TextStyle
yParagraphStyle
. (I179f0, b/320819734).
Contribución externa
- Se agregó un nuevo constructor
DialogProperties
sin parámetros específicos de la plataforma. (I45829). - Se agregó un nuevo constructor
PopupProperties
sin parámetros específicos de la plataforma. (I9a038).
Versión 1.7.0-alpha01
24 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha01
. La versión 1.7.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se expandió
ClipboardManager
agregandoClipEntry
yClipMetadata
para admitir contenido arbitrario, como imágenes. - Agrega la API de
DeviceConfigurationOverride
aui-test
para permitirlo de forma local anulando el comportamiento del contenido que se prueba, como especificar una política el tamaño, la configuración regional, la dirección del diseño, la escala de la fuente o el tema.
Versión 1.6
Versión 1.6.8
12 de junio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.8
. La versión 1.6.8 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron las inconsistencias en el escalamiento de fuente cuando esta es menor que la tabla más baja definida. En este caso, interpolamos la escala lineal de 1x y la tabla más baja definida para que el tamaño de la fuente aumente de forma monotónica a medida que aumentan las escalas. (Icbae3).
Versión 1.6.7
1 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.7
. La versión 1.6.7 contiene estas confirmaciones.
Versión 1.6.6
17 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.6
. La versión 1.6.6 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla inusual de
BasicTextField
.
Versión 1.6.5
3 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.5
. La versión 1.6.5 contiene estas confirmaciones.
Versión 1.6.4
20 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.4
. La versión 1.6.4 contiene estas confirmaciones.
Versión 1.6.3
6 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.3
. La versión 1.6.3 contiene estas confirmaciones.
Versión 1.6.2
21 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.2
. La versión 1.6.2 contiene estas confirmaciones.
Versión 1.6.1
7 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.1
. La versión 1.6.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema de retrocompatibilidad con
SemanticsPropertyReceiver.performImeAction
ySemanticsActions.PerformImeAction
. (Ie0bb2, b/322269946). - Los diseños ahora emiten un error mientras miden cuando uno muestra un tamaño anormalmente grande. Por lo general, este tipo de error ocurre cuando la medición usa restricciones máximas directamente sin verificar la
Constraints.Infinity
. La verificación ayudará a los desarrolladores a encontrar problemas con el tamaño incorrecto del diseño en lugar de en un diseño que lo contiene. (I339a9).
Versión 1.6.0
24 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.0
. La versión 1.6.0 contiene estas confirmaciones.
Versión 1.6.0-rc01
10 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-rc01
. La versión 1.6.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se optimizó la implementación de gráficos vectoriales para mejorar el rendimiento minimizando las recomposiciones adicionales.
Versión 1.6.0-beta03
13 de diciembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta03
. La versión 1.6.0-beta03 contiene estas confirmaciones.
Nuevas funciones
- Ahora es posible desconectar un
LayoutCoordinates
sin desconectar el nodo. Protégete contra eso en el Inspector de diseño de Compose (If693).
Correcciones de errores
- Ahora,
PlatformImeOptions
es una clase concreta en lugar de una interfaz. (If40a4). - Se corrigieron las recomposiciones descendentes adicionales causadas por las que
LocalSoftwareKeyboardController
yLocalTextInputService
recibían valores nuevos cada vez que se recompone una raíz. (I42190, b/310510985).
Versión 1.6.0-beta02
29 de noviembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta02
. La versión 1.6.0-beta02 contiene estas confirmaciones.
Versión 1.6.0-beta01
15 de noviembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta01
. La versión 1.6.0-beta01 contiene estas confirmaciones.
Cambios en la API
- El modificador
DragAndDropTarget
ahora toma elDragAndDropTarget
receptor de manera explícita y tiene una lambda para habilitar una sesión de arrastrar y soltar. Ahora hay dos funciones de fábrica para un objetoDragAndDropModifierNode
. Uno para recibir transferencias y otro para transferir datos (I69481). - Se actualizó
maximumFlingVelocity
para que se represente como número de punto flotante. Se actualizó la documentación para ser más claro sobre la unidadmaximumFlingVelocity
. (I8adc7). - Se cambió el nombre de
onDragAndDropStart
de la fábricaDragAndDropModifierNode
aacceptDragAndDropTransfer
.Se agregóacceptsDragAndDropTransfer
al modificadordragAndDropTarget
para aceptar desde una sesión de arrastrar y soltar. Esta lambda muestra unDragAndDropTarget
viable si está interesado en una sesión de arrastrar y soltar. Se reemplazaron otras lambdas para procesar eventos de arrastre. Se agregó una función de fábricaDragAndDropTarget
para recibir datos de sesiones de arrastrar y soltar. (Iebf3a) Se quitó
DragAndDropInfo
como tipoDragAndDropModifierNode.drag
ahora toma parámetros para la lambdatransferData
, tamaño de la decoración y arrastre de la decoraciónDrawScope
.DragAndDropTarget
tiene métodos para eventos específicos de arrastrar y soltar, en lugar de ser un solo método abstracto.Se cambió el nombre de
onDragAndDropEvent
en la función de fábrica deDragAndDropModifierNode
poronDragAndDropStart
para comunicar mejor que elDragAndDropTarget
proporcionado solo es válido para una sesión determinada de arrastrar y soltar.Se quitó
DragAndDropEventType
. (I645b1)Se cambió el nombre de
PlatformTextInputModifierNode.runTextInputSession
aestablishTextInputSession
. (I03cd0).Mejora los nombres de API de nodo transversales para que sean más comprensibles. (Ia4474).
Reemplaza
OriginalText
porTextSubstitution
. (Ifa5a8).Se cambió el nombre de
PlatformTextInputModifierNode.textInputSession
arunTextInputSession
. (Ie9c6b).Los elementos secundarios de
SubcomposeLayout
(y los diseños comoLazyColumn
basados en él) que se retienen para volver a usarse en el futuro se consideran desactivados. Se introdujo la nueva API de prueba deassertIsDeactivated()
para probar esos nodos. El resto de las APIs de prueba filtrarán los nodos desactivados de forma predeterminada. (I2ef84, b/187188981).Se quitaron
FocusDirection.In
yFocusDirection.Out
, y usanFocusDirection.Enter
yFocusDirection.Exit
en su lugar. (I2f660)Las APIs de
SwipeToReveal
de Material (para tarjetas y chips) ahora dependen de una API basada en ranuras (como recomienda Compose) en lugar de instancias basadas en clases de datos para crear esas ranuras. Este es un cambio rotundo. Consulta la demostración y la muestra de código para ver ejemplos de cómo usar la nueva API. (Ia8943).El constructor
FontStyle(int)
dejó de estar disponible. En su lugar, usaFontStyle.Normal
oFontStyle.Italic
. (I66610).Se cambió el nombre de la interfaz
FontScalable
aFontScaling
. (Ie804a)
Correcciones de errores
SoftwareKeyboardController.show()
ya no mostrará el teclado en pantalla si no se enfoca ningún editor de texto. (I2165a, b/301477279).- Ahora se ignorarán los eventos de tecla de hardware hacia arriba para las teclas que no hayan recibido un evento Down en la misma vista de Compose. (Ib37b4, b/305518328).
- Se agregó compatibilidad con el procesador para el gradiente de barrido en
ArcLine
. (I4d5bb). - Implementa equals y hashcode para
PageSize.Fixed
. (Ie3ede, b/300134276). - Se corrigió un problema de compatibilidad binaria con el cambio de inserción de ventana (Iee695).
- Se quitó la capa principal de Material para el chip o botón de Material 3, ya que las microcomparativas muestran un mejor rendimiento sin ella. (I55555).
- Los objetos
TestDispatcher
pasados comoeffectContext
para las pruebas de Compose ahora se usarán para crear los relojes de prueba y de fotogramas. (Ia7178).
Versión 1.6.0-alpha08
18 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha08
. La versión 1.6.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- A
Modifier.dragAndDrawSource
se le cambió el nombre de la lambdaonDrawDragShadow
pordrawDragDecoration
y se cambió el nombre del parámetro de tamaño adragDecorationSize
aDragAndDropInfo
. (Id0e30, b/303904810). - Introduce
SemanticsNodeInteraction.isDisplayed()
ySemanticsNodeInteraction.isNotDisplayed()
para verificar si un nodo coincidente es visible o no sin confirmarlo también. (I2c196, b/302100809). - Se agregó un valor
Unspecified
especial para los camposTextAlign
,TextDirection
,Hyphens
yLineBreak
deParagraphTextStyle
para reemplazarnull
. Debido a que estas clases son clases intercaladas, cuando se reemplaza el valor anulable con No especificado, evitamos el empaquetado de tipos primitivos. Se actualizaron los constructores, métodos get y otros métodos enTextStyle
y el estilo de párrafo para aceptar los parámetros mencionados como tipos no nulos. (I4197e, b/299490814). - Se agregó una sobrecarga de
GoogleFont
para leer unGoogleFont
desde XML. (If8f59). - Se convirtió a
LoremIpsum
PreviewParameterProvider
en una clase abierta. (I41bf5, b/266918816, b/300116360).
Correcciones de errores
FontFamilyResolver
ahora usaDispatchers.Main
para las corrutinas de administración de caché. (Ie8dd9).- Ahora,
AndroidViewBinding
quita de forma síncrona las instancias aumentadas deFragment
cuando incluyes unFragmentContainerView
en tu diseño como parte de suonRelease
usandocommitNow
(en lugar decommit
que usaba antes), lo que soluciona los problemas con el método de Ediciones en vivo con el reemplazo de la composición ante los cambios. (I58fbf).
Versión 1.6.0-alpha07
4 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha07
. La versión 1.6.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se agregó
PlatformTextInputMethodTestOverride
, que permite escribir pruebas para editores de texto personalizados. (Id159b). - Agrega el modificador
dragAndDropSource
para iniciar sesiones de arrastrar y soltar, y el modificadordragAndDropTarget
para recibir de sesiones de arrastrar y soltar. (Ib7828, b/286038936). - Se agregaron colecciones
ColorList
yColorSet
que evitan las asignaciones. (I744bd). - Se agregó la marca temporal
DisableNonLinearFontScalingInCompose
para inhabilitar el escalamiento de fuente no lineal. EstableceDisableNonLinearFontScalingInCompose = true
en las pruebas si necesitas tiempo para realizar una limpieza. Esta marca se quitará en Compose 1.6.0-beta01. (Ic9486).
Correcciones de errores
- Análisis optimizado de elementos de diseño vectoriales XML (Ibb015).
Versión 1.6.0-alpha06
20 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha06
. La versión 1.6.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Optimizaciones adicionales para los íconos de Material. (I3e08d).
- Se agregó la capacidad de atravesar el árbol de modificadores hacia arriba y abajo para encontrar nodos similares. (I2d234).
- Se agregó una devolución de llamada
onRestoreFailed()
al modificadorfocusRestorer()
. (Ie1d43) - Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar
ColorInt
,FloatRange
,IntRange
,Size
y más. (Id65c8, b/290950582). - Se agregó
showSystemUi=true
a la definición dePreviewScreenSizes
. (Ib61d3)
Cambios en el comportamiento
- Compose ahora usa el escalamiento de fuente no lineal para mejorar la legibilidad y accesibilidad. Cuando la fuente se adapta > 100% en la configuración del sistema. Por lo general, el texto pequeño aumentará de tamaño, pero el texto que ya es grande solo lo hará un poco. Además, las alturas de línea definidas en PS se ajustarán automáticamente para mantenerse proporcionales a la altura deseada de la escala del 100%. Consulta las prácticas recomendadas para el ajuste de tamaño de las fuentes a fin de obtener más información. (I11518).
Versión 1.6.0-alpha05
6 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha05
. La versión 1.6.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Habilitar la captura de contenido en
AndroidComposeViewAccessibilityDelegateCompat
. (Ib2969). - Las velocidades de envío en los componentes de View, como
ScrollView
yRecyclerView
, se limitan aViewConfiguration.ScaledMaximumFlingVelocity
. Compose ahora contiene su propia versión demaximumFlingVelocity
, que ahora se aplica aDraggable
. (Ibf974). - Se agregó una estructura inicial para admitir las APIs de arrastrar y soltar de la plataforma. (If84ce).
- Se agregó
deviceId
aRotaryScrollEvent
. (Iba3bf) - Se actualizó la API de
ui-tooling
Devices para incluir dispositivos más nuevos (Ib25b4).
Versión 1.6.0-alpha04
23 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha04
. La versión 1.6.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó un método para desactivar
ReusableComposition
, lo que quita las observaciones, pero mantiene los nodos en su lugar. La composición desactivada se puede volver a activar llamando asetContent
. (Ib7f31). - Se agregó la interfaz
ReusableComposition
para administrar el ciclo de vida y la reutilización de subcomposiciones (I812d1, b/252846775). - Se ascendió
Modifier.focusGroup
a APIs estables. (I7ffa3). - Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar
ColorInt
,FloatRange
,IntRange
,Size
y más. (I70487, b/290950582). - Se actualizó la API de
ColorFilter
para tener tipos de subclases concretos y mejorar la inspección de los parámetros. (I5fe29). - Se introdujo la biblioteca wear-tooling-preview para enumerar los dispositivos Wear válidos que se pueden usar para vistas previas de la IU. (Ib036e)
- Se creó la interfaz
FontScalable
para controlar la parte del escalamiento de fuentes de la interfaz Density. (I2cf3f).
Versión 1.6.0-alpha03
9 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha03
. La versión 1.6.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Nuevo tipo de transición de entrada y salida que escala el contenido según el tamaño del contenedor de la animación durante las operaciones de entrada y de salida. animación de salida.
LookaheadScope
La interfaz y la diversión de componibilidad ahora son estables. (Ifb2ce). - Se agregó compatibilidad para configurar
privateImeOptions
(Idb772).
Correcciones de errores
PopupPositionProvider.calculatePosition
ahora actualizará automáticamente la posición de la ventana emergente cuando se cambie el estado de lectura en el cálculo. (I676a1, b/292257547).- Se corrigieron los campos de texto que muestran el teclado y se pueden editar cuando
readOnly
es verdadero También se corrigió el teclado que no se mostraba cuandoreadOnly
se cambiaba de verdadero a falso mientras estaba enfocado (I34a19, b/246909589). - Se amplió la aplicación de aserciones globales en las pruebas de IU. (I1f90d).
Versión 1.6.0-alpha02
26 de julio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha02
. La versión 1.6.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una interfaz de localizador de servicios que los implementadores de Composition pueden implementar y que permite una implementación de ella que se delega a la composición original otras búsquedas del servicio delegado de composición. No se debe llamar directamente y se usa para habilitar la creación de APIs experimentales en el tiempo de ejecución que se pueden encontrar en versiones unidas del compositor, como lo hace el módulo de la IU. (I296b9).
- API de
PlatformTextInput*
completamente rediseñada. (I6c93a, b/274661182, b/267235947, b/277380808). SoftwareKeyboardController
yLocalSoftwareKeyboardController
dejaron de ser experimentales.LocalSoftwareKeyboardController
ahora también es unCompositionLocal
adecuado. (I4c364).LookaheadLayout
yLookaheadLayoutScope
dejaron de estar disponibles para algunas versiones y ahora se quitaron. Las APIs de reemplazo sonLookaheadScope
que pueden funcionar con cualquier diseño. (I12ac3).- Se agregó
SemanticsNodeInteraction.requestFocus
como una forma más conveniente y detectable de solicitar el enfoque en las pruebas. (Ie8722). - Se agregaron APIs experimentales para registrar aserciones globales para usarlas en frameworks de prueba en el futuro. (I12d77).
Correcciones de errores
- La primera invocación de la devolución de llamada
update
deAndroidView
ahora se aplazará hasta que se adjunte la vista, en lugar de ejecutarse cuando se aplique la composición que presenta elAndroidView
. Esto corrige un error por el que la devolución de llamadaupdate
no se invalidaba si un efecto cambiaba de inmediato un estado que leyía. (Ie9438, b/291094055).
Versión 1.6.0-alpha01
21 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha01
. La versión 1.6.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Se admite el elemento anticipado en
LazyList
. Esto permite queLazyList
en el pase anticipado omita cualquier animación (p. ej., animación de posición de elementos,AnimatedVisibility
, etc.) y calcule el tamaño y la posición del elemento anticipado para todos los elementos secundarios. Después del pase anticipado, los elementos secundarios deLazyList
podrían animarse independientemente de la realidad, como se ve en el pase anticipado.
Cambio de comportamiento: includeFontPadding ahora es falso de forma predeterminada en Compose
Ahora, includeFontPadding
es falso de forma predeterminada (21d806) en Compose.
includeFontPadding
es un atributo heredado que controla si se incluyen o no rellenos adicionales en la parte superior de la primera línea y la última línea del texto para adaptarse a los caracteres que se puedan extender por encima o por debajo de los modelos de referencia del texto.
Si actualizas esta versión de Compose, se modificará la forma en que se renderizan todos los textos en tu IU, ya que se quitará el padding adicional sobre la primera y la última línea de cada texto que muestres.
Según los requisitos de la IU y las métricas de fuentes que utilices, los cambios deberían ser mínimos. Sin embargo, puedes encontrar obstáculos como los siguientes: - Pruebas de capturas de pantalla rotas. Corrige la IU si es necesario y vuelve a generar las imágenes doradas. - El texto está ligeramente desalineado. Quita los rellenos negativos personalizados o agrega padding si es necesario.
Puedes habilitar includeFontPadding
usando PlatformTextStyle
para cada texto:
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = true/false
)
/* … */
)
)
Puedes habilitar includeFontPadding
para todos tus textos configurando tus estilos de Material. Ten en cuenta que los nombres de los parámetros variarán entre M2 y M3.
val Typography = Typography(
body1 = TextStyle(
fontFamily = /* … */,
fontSize = /* … */,
platformStyle = PlatformTextStyle(
includeFontPadding = false
)
/* … */
)
)
MaterialTheme(
typography = Typography,
/* … */
)
Puedes obtener más información sobre Compose includeFontPadding
en la documentación para desarrolladores y en esta entrada de blog.
Si experimentas problemas o errores relacionados con este cambio, envía un informe de error con la Herramienta de seguimiento de errores.
Cambios en la API
- Se admite
InputConnection#requestCursorUpdates
. (I0c69b) - Se agregaron
FocusRequester.saveFocusedChild
yFocusRequester.restoreFocusedChild
. (Ic557e, b/272302679, b/275157318) - Agrega el tipo
ResourceResolutionException
para unir los throwables que se arrojan cuando se intentan cargar elementos de mapas de bits con una descripción de la ruta de acceso del recurso que no se pudo cargar. (I19f44, b/230166331, b/278424788). - Accesibilidad optimizada para asignaciones de rendimiento y memoria. (Iede48).
- Se agregaron propiedades y acciones semánticas para admitir la traducción de texto. (I4a6bc).
- Nueva propiedad en
IntrinsincMeasureScope
y sus implementaciones (p.ej.,MeasureScope
) para indicar si el pase de medición actual es un pase anticipado. (I7a812). - Se actualizó la API de
DrawScope
para incorporar la capacidad de reorientar la renderización en un lienzo diferente con densidad/dirección de diseño y tamaño alternativos. - Se actualizó
DrawContext
para admitir la configuración de densidad y dirección del diseño, además de hacer que el lienzo sea configurable. (Ie1f9b, b/225408150). - Se agregó
Paragraph#fillBoundingBoxes
para calcular cuadros de límite de caracteres. (If30ee). - Se agregó un conjunto de
MultiPreviews
comunes (Ia5a27).
Correcciones de errores
- Se agregó la interfaz de
FocusTargetModifierNode
que se puede usar para crear unFocusTarget
personalizado. (I9790e). - Se cambió el nombre de los parámetros
fallback*
en el constructorTextMeasurer
adefault*
. (I940a5). - Se cambió el nombre de
SemanticsPropertyReceiver.performImeAction
poronImeAction
y el deSemanticsActions.PerformImeAction
porOnImeAction
(I8e841). - Se agregó la rueda para diferenciar un desplazamiento del mouse de un arrastre en un desplazamiento anidado (específicamente, en
NestedScrollConnection
). (Ie57e4). - Se agregó la API de
asComposePaint
para reemplazartoComposePaint
, ya que el objeto que se muestra une laandroid.graphics.Paint
original (I22b4c). SemanticsProperties.imeAction
dejó de estar disponible y reemplázalo por un parámetro nuevo paraSemanticsActions.performImeAction
. (I4a587).- Se agregó compatibilidad con la selección con mouse. La selección táctil se expandirá por palabra y se reducirá por carácter. (Ic0c6c, b/180639271).
- Los métodos
Paragraph
que solían arrojarAssertionError
para desplazamientos fuera de los límites ahora arrojanIllegalArgumentException
como lo haceMultiParagraph
. (I549d3, b/243338896).
Versión 1.5
Versión 1.5.4
18 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.4
. La versión 1.5.4 contiene estas confirmaciones.
Versión 1.5.3
4 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.3
. La versión 1.5.3 contiene estas confirmaciones.
Correcciones de errores
- (b/301209788) En ocasiones,
TextField
aplicaba incorrectamente comandos anteriores cuando se enfocaba e ingresaba entradas coreanas, lo que provocaba la pérdida de caracteres.
Versión 1.5.2
27 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.2
. La versión 1.5.2 contiene estas confirmaciones.
Correcciones de errores
- Se agregó una solución alternativa para las fallas cuando se accede a la API de Accessibility Desplazamiento desde el subproceso en segundo plano.
- Se corrigieron los nodos no conectados que se agregaban al árbol semántico.
Versión 1.5.1
6 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.1
. La versión 1.5.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron los campos de texto que muestran el teclado y se pueden editar cuando
readOnly
es verdadero También se corrigió el teclado que no se mostraba cuandoreadOnly
se cambiaba de verdadero a falso mientras estaba enfocado (I34a19, b/246909589).
Versión 1.5.0
9 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0
. La versión 1.5.0 contiene estas confirmaciones.
Versión 1.5.0-rc01
26 de julio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-rc01
. La versión 1.5.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla que se producía cuando se usaba
SubcomposeLayout
dentro demovableContentOf()
.
Versión 1.5.0-beta03
28 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta03
. La versión 1.5.0-beta03 contiene estas confirmaciones.
Correcciones de errores
- Se agregó la interfaz de FocusTargetModifierNode, que se puede usar para crear un FocusTarget personalizado. (Ifb1d6).
- Se corrigió un problema con los elementos componibles Dialog y Popup que podían hacer que la ventana secundaria no cambiara el tamaño como se esperaba cuando
usePlatformDefaultWidth=true
. (I112ee).
Versión 1.5.0-beta02
7 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta02
. La versión 1.5.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API de
asComposePaint
para habilitar el consumo de una instancia deandroid.graphics.Paint
que se usará en Compose.
Correcciones de errores
- Se agregó la API de
asComposePaint
para reemplazartoComposePaint
, ya que el objeto que se muestra une laandroid.graphics.Paint
original (I22b4c).
Versión 1.5.0-beta01
24 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta01
. La versión 1.5.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se quitaron las asignaciones de la recomposición, las animaciones de color y
AndroidComposeView
. (Ib2bfa) - Se agregó la diversión auxiliar
CacheDrawModifierNode()
para permitir la delegación. (Icf8f9) - Presentamos la propiedad
isLookingAhead
, a la que se puede acceder desdeMeasureScope
, para observar resultados anticipados e influir en el pase principal si lo deseas. (Ibf4c3). - Nueva propiedad semántica
traversalIndex
, un número de punto flotante que se usa para reordenar los nodos en el recorridoTalkBack
(los valores más bajos vienen antes). (I9a81b, b/186443263). - Se cambió el nombre de la propiedad semántica
isContainer
aisTraversalGroup
. (I121f6) ColorProducer
ahora tiene unoperator fun invoke
en lugar deproduce
. (I4a9a2)- Se agregó la API de transformación
Path
para aplicar transformaciones de traducción, ajuste de escala y rotación a los objetos de ruta de acceso. (I23434, b/233772232). - El método de
ColorProducer
se llamaproduce
. (I78bde). - Se cambió el nombre de
toFrameworkColorSpace
portoAndroidColorSpace
. (I4f547) - Se cambió el nombre de
ColorLambda
porColorProducer
. (I73b1a). - Incorporar las APIs para realizar conversiones entre tipos de espacio de color de Android y Compose (Ie7db4, b/279979665).
- Se agregó un parámetro de color a
BasicText
para permitir animar o establecer el color del texto de manera eficiente. (Iffd88, b/246961787). - Se cambió el nombre de
TextRange.constrain
aTextRange.coerceIn
. (I31be2). - Se agregó
TextStyle.merge(...)
optimizado con la lista completa de parámetros. (Iad234, b/246961787). - Se estabilizaron muchas APIs de Text que incluyen
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
yMultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245). PlatformTextStyle.includeFontPadding
no está obsoleto. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo. (I98e96, b/277703184)- Se agregó el método público
TextRange.constrain
. (I97912). - Los objetos
UrlAnnotation
enAnnotatedString
ahora se pueden abrir a través de servicios de accesibilidad comoTalkBack
. (If4d82, b/253292081). - Se agregó la acción semántica
InsertTextAtCursor
para los campos de texto. (I11ed5). - El constructor
LineHeightStyle.Alignment(topRatio)
asciende a una API estable. (I79c32, b/261565383). TextMeasurer
y las APIs relacionadas ya no son experimentales. (I74647, b/261581753).- Se agregó la acción semántica
PerformImeAction
para invocar la acción del IME en los nodos del editor de texto. (Ic606f, b/269633506). - Las APIs de
PlatformTextInput
ya no son experimentales para Android. (I668eb). - Se cambió el nombre del parámetro de valor de
Enum.valueOf
. (Ia9b89) - Se arrojaron más excepciones de enum valueOf. (I818fe)
- Se agregó una nueva API de
PlatformTextInputAdapter
de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4). - Se agregó el parámetro
BlendMode
a los métodosDrawScope.drawText
,Paragraph.paint
yMultiParagraph.paint
para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508). - Se cambió el nombre de
Font.MaximumAsyncTimeout
porFont.MaximumAsyncTimeoutMillis
. Solo cambiar el nombre. (I07af5). - Se actualizaron los valores de DPI de los dispositivos de referencia
@Preview
(Id6151, b/254528382). - Agrega los parámetros
brush
yalpha
aBasicText
para permitir animar o configurar de manera eficiente el pincel de texto. - Se definen los tipos de lambda sin cuadros para Float, Double, Long, Int, Short en :ui:ui-unit. (I6f18d, b/246961787)
Correcciones de errores
- Se quitaron varias asignaciones del seguimiento de velocidad del puntero. (I26bae)
- Se redujeron las asignaciones en la administración de entradas de diseño y puntero. (I5333a)
- Optimiza el uso de memoria vectorial y la renderización de primeros fotogramas. (I2f3c6)
- Se quitaron las asignaciones cuando se dibujaban líneas y puntos con Canvas. (I9f535)
- Se agregaron documentos para
AndroidFont.fontVariationSettings
(I7d9e2).
Contribución externa
- Se mejoró el rendimiento y se reducen las asignaciones en las APIs de Vector. (I906cb)
Versión 1.5.0-alpha04
10 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha04
. La versión 1.5.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
Modifier.Node
Mejoras en la delegación Se agregó una capacidad mejorada para delegar a otras instancias deModifier.Node
desde unDelegatingNode
. Esto se puede hacer con las APIs dedelegate
yundelegate
. Antes de este cambio, cada API del nodo delegante debía delegarse explícitamente al nodo delegado. Después de este cambio, las interfaces del nodo se delegarán de forma implícita, a menos queDelegatingNode
las anule de forma explícita. (67352bc).
Cambios en la API
- Presenta
NestedScrollModifierNode
, un objetoNestedScroll Modifier.Node
al que se puede delegar. (I69513). - Se agregaron los parámetros
onReset
yonRelease
al elementoAndroidViewBinding
componible, lo que duplica el elementoAndroidView
y habilita la compatibilidad con la reutilización de objetos View conViewBinding
. (I00b1e, b/276802519). - Se actualizó la API de Compose Path para admitir operaciones de retroceso para admitir casos de uso de manipulación frecuente de rutas con una reutilización más rápida. (I7b797).
- Se agregó
TextStyle.merge(...)
optimizado con la lista completa de parámetros. (Iad234, b/246961787). - Se estabilizaron muchas APIs de Text que incluyen
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
yMultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245). PlatformTextStyle.includeFontPadding
no está obsoleto. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo. (I98e96, b/277703184)
Correcciones de errores
- Se corrigió la regresión en la que el teclado no se mostraba para los campos de texto dentro de diálogos no creados por el elemento componible
Dialog
. (I82551, b/262140644).
Versión 1.5.0-alpha03
19 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha03
. La versión 1.5.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Nuevo comportamiento predeterminado para
SubcomposeLayout
enLookaheadScope
: LosSubcomposeLayouts
que no tienen ranuras condicionales (p. ej.,TabRow
,Scaffold
,BoxWithConstraints
, etc.) ahora funcionan bien con las animaciones anticipadas.
Cambios en la API
- El nuevo
intermediateMeasurePolicy
predeterminado que reutiliza la política de medición del pase anticipado permite que los subtipos deSubcomposeLayout
sin ranuras condicionales, comoScaffold
,TabRow
yBoxWithConstraints
, funcionen con el parámetro anticipado de forma predeterminada. (Id84c8). - El recompositor creado para una ventana de Android ahora solo bloqueará las llamadas a
withFrameNanos
en lugar de toda la composición cuando reciba una notificaciónON_STOP
. Esto significa que las ventanas asociadas con las actividades detenidas se seguirán recomponiendo para los cambios en los datos, pero se bloquearán las animaciones o cualquier otro llamador dewithFrameNanos
. (Id9e7f, b/240975572). - Cambia
motionEventSpy
a estable. (Ic5ec4, b/261560988). - Se agregó el método público
TextRange.constrain
. (I97912). PlatformTextStyle.includeFontPadding
ya no está obsoleto para alentar a los desarrolladores a usar esta API de compatibilidad para cambiar y probar el parámetro de configuraciónincludeFontPadding
como falso. (I98e96, b/277703184).
Versión 1.5.0-alpha02
5 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha02
. La versión 1.5.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregó la nueva API de
SubcomposeLayout
, que toma una política de medición intermedia adicional para controlar la lógica de medición y diseño durante las animaciones basadas en la visualización anticipada. (I017d3). - PointerInput ahora es diferida y usa Modifier.Node para mejorar el rendimiento (obtén más información sobre los cambios menores en el comportamiento). (15dab9).
- Se cambiaron las APIs experimentales a estables con eventos de tecla (I9c7d8, b/261566839, b/261567368).
- Se cambiaron las APIs experimentales a estables en
PointerInputChange
. (I1b543, b/261560988, b/261565762, b/261565749). - Agrega una forma de crear una instancia de
SuspendingPointerInputModifierNode
para implementaciones deModifier.Node
más complejas. (Ic4933). - Los objetos
UrlAnnotation
enAnnotatedString
ahora se pueden abrir a través de servicios de accesibilidad comoTalkBack
. (If4d82, b/253292081). - Se agregó una API para interceptar teclas de hardware antes de que se envíen al teclado en pantalla (I4f4c6, b/186800395).
- Se agregó la acción semántica
InsertTextAtCursor
para los campos de texto. (I11ed5). - Las acciones de prueba relacionadas con el texto (p.ej.,
performTextInput
) ahora solicitarán el enfoque directamente mediante la acción semántica en lugar de hacer clic en el campo. (I6ed05).
Correcciones de errores
- Las acciones de prueba de texto ahora requieren que se habiliten los campos de texto. (Iab328).
Versión 1.5.0-alpha01
22 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha01
. La versión 1.5.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Modifier.intermediateLayout ahora no requiere un LookaheadScope explícito. El bloque de medición en internalLayout tiene el objeto InterMeasurementScope como receptor, que proporciona los objetos CoroutineScope, LookaheadScope y MeasureScope convenientes.(Ibe2e5)
- Se reemplazó LookaheadLayout por LookaheadScope, que ya no es un diseño. Esto permite que la MeasurePolicy superior controle directamente el contenido de chid en LookaheadScope. (Ibe2e5).
- Agrega
Modifier.Node#coroutineScope
para permitir que Modifier.Nodes inicie corrutinas. (I76ef9). - Permite que Modifier.Nodes lea CompositionLocals implementando la interfaz CompositionLocalConsumerModifierNode. (Ib44df).
- Propagación de la clase @Required a la propiedad. (I882d1).
Versión 1.4
Versión 1.4.3
3 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.3
. La versión 1.4.3 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que
AndroidView
no se mostraba correctamente cuando se usaba con ciertos modificadores (I4dc77, b/274797771). - Se corrigió un error en 2D Focus Search que afectaba los menús de
DropDown
(b/276811828). - Se corrigió un error en las propiedades de entrada/salida del enfoque personalizado que solo ejecutaba el bloque de entrada/salida la primera vez que se invocaba la lambda (b/277234245).
- Se corrigió una regresión en el sistema de enfoque que causaba una falla durante la lectura de
focusProperties
. (b/271324781, b/274897776).
Versión 1.4.2
19 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.2
. La versión 1.4.2 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema por el que
AndroidView
no reutilizaba correctamente sus modificadores, lo que podía provocar fallas y comportamientos inesperados. (Ib67ee, b/275919849). - Se corrigió la regresión en la que el teclado no se mostraba para los campos de texto dentro de diálogos no creados por el elemento componible
Dialog
(I82551, b/262140644).
Versión 1.4.1
5 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.1
. La versión 1.4.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema con
ParentDataModifier
que no afectaba aAndroidView
(b/274797771).
Versión 1.4.0
22 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0
. La versión 1.4.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.3.0
- Se agregó una nueva API de
PinnableContainer
que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo,Modifier.focusable()
usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010). - El sistema de enfoque se reescribe con las nuevas APIs experimentales de
Modifier.Node
(I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589). - Se agregó en la propiedad semántica
IsContainer
en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379). - Se agregó un nuevo rol de accesibilidad
DropdownList
. Se puede usar para replicar el comportamiento deTalkBack
cuando se enfocaandroid.widget.Spinner
. (I177e5, b/236159001). - Ahora puedes usar
PlatformTextStyle(emojiSupportMatch)
para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806). - Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de
waitForIdle
). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277). - Se agregó
TextMotion
experimental aTextStyle
para definir texto comoStatic(default)
o animado. UsaTextMotion.Animated
si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).
Versión 1.4.0-rc01
8 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-rc01
. La versión 1.4.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Se agregó una sobrecarga de la función de componibilidad
AndroidView
, que acepta el parámetroonReset
. Permite volver a usar las instancias de View cuando su nodo en la composición se descarta y se vuelve a usar de una manera compatible. Esto es especialmente útil paraLazyRows
yLazyColumns
de Views. (I3f10d, b/230099236). - Se agregó una nueva API de
PlatformTextInputAdapter
de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4).
Correcciones de errores
- La acción semántica
SetText
deBasicTextField
ahora actualizará el búfer de texto con la misma ruta de código que las actualizaciones de IME y las funciones de prueba (p.ej.,performTextReplacement
). - Las funciones de prueba de texto
performTextClearance
,performTextReplacement
yperformTextSelection
ahora usanSemanticsActions
. (I0807d, b/269633168, b/269624358).
Versión 1.4.0-beta02
22 de febrero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-beta02
. La versión 1.4.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se quitó la API de
modifierElementOf()
. En su lugar, extiende desdeModifierNodeElement
directamente. (I2256b). - Se agregó una nueva devolución de llamada
Modifier.Node.onReset()
, que permite restablecer un estado local para controlar correctamente el caso cuandoLayout
se vuelva a usar (por ejemplo, como un elemento deLazyColumn
). Se corrigióFocusTargetModifierNode
para restablecer correctamente el estado enfocado (I65495, b/265201972). - Se agregó el parámetro
BlendMode
a los métodosDrawScope.drawText
,Paragraph.paint
yMultiParagraph.paint
para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508).
Correcciones de errores
- Se mejoró el algoritmo de orden de enfoque de accesibilidad; por ejemplo, las barras superiores y inferiores se leen al principio y al último, respectivamente. (74e9c5)
Versión 1.4.0-beta01
8 de febrero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-beta01
. La versión 1.4.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
PinnableContainer.PinnedHandle.unpin()
porrelease()
(I4667a). - Se agregaron
waitUntilNodeCount
,waitUntilAtLeastOneExists
,waitUntilExactlyOneExists
ywaitUntilDoesNotExist
como APIs experimentales aComposeTestRule
, que extiende la API dewaitUntil
para aceptar cualquier comparador y cualquier recuento de nodos. ConsultaComposeTestRule
para obtener más documentación (Ifa1b9, b/226934294). - Se cambió el nombre de
Font.MaximumAsyncTimeout
aFont.MaximumAsyncTimeoutMillis
(I07af5). - Se quitó
GoogleFont.Provider.AllFontsListUri
y se vinculó a él en ktdoc. (I16f29)
Correcciones de errores
- Se agregaron documentos para
AndroidFont.fontVariationSettings
(I7d9e2).
Versión 1.4.0-alpha05
25 de enero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha05
. La versión 1.4.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se introdujeron nuevas sobrecargas experimentales para la función
runComposeUiTest
y las funcionescreate*ComposeRule
que aceptan parámetrosCoroutineContext
. El contexto se usará para la composición de prueba y cualquier llamadaLaunchedEffect
yrememberCoroutineScope()
en la composición (I10614, b/265177763). - Se agregó una nueva API para realizar el seguimiento de 1 velocidad dimensional (If5a82).
FocusRequester
ahora está marcado como@Stable
(I580ee).- Se quitó una anotación experimental del constructor
DialogProperties
que toma un parámetrousePlatformDefaultWidth
(Ic4048). - Se agregó la función a la posición del cálculo y la tangente a distancia en una ruta, con
PathMeasure.getPosition()
yPathMeasure.getTangent()
(I3b47c). - Se quitó un método set público expuesto de forma accidental en
PlatformParagraphStyle
(I07f47). - Se agregaron más funciones de tipo/nulabilidad de funciones ocultas intercaladas y obsoletas (I24f91).
- Se agregó
AnnotatedString.hasStringAnnotations
para consultar anotaciones con cero asignaciones (I94dfe, b/246960758). - Se agregó una nueva sobrecarga para la función
TextMeasurer.measure
que toma unaString
como texto (I47b2d, b/242705342). - Las APIs de
LineBreak
yHyphens
en TextStyle se cambiaron a la versión estable (Ic1e1d).
Contribución externa
- Los métodos
notifyFocusedRect
deTextInputSession
yTextInputService
ya no son obsoletos (I23a04, b/262648050).
Versión 1.4.0-alpha04
11 de enero de 2023
Se lanzó androidx.compose.ui:ui-*:1.4.0-alpha04
. La versión 1.4.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva API de
PinnableContainer
que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo,Modifier.focusable()
usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010). - El sistema de enfoque se reescribe con las nuevas APIs experimentales de
Modifier.Node
(I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589). - Se agregó en la propiedad semántica
IsContainer
en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379). - Se agregó el nuevo rol de accesibilidad
DropdownList
. Se puede usar para replicar el comportamiento deTalkBack's
cuando se enfocaandroid.widget.Spinner
(I177e5, b/236159001). - Ahora puedes usar
PlatformTextStyle(emojiSupportMatch)
para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806). - Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de
waitForIdle
). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277). - Se agregó
TextMotion
experimental aTextStyle
para definir texto comoStatic(default)
o animado. UsaTextMotion.Animated
si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).
Cambios en la API
- Se reemplazó el argumento
maxSize: IntSize
endrawText
consize: Size
para intercalarlo con otras funcionesDrawScope
.size
se establece enSize.Unspecified
de forma predeterminada, lo que no debería cambiar el comportamiento predeterminado anterior (Icd27d). - Se quitó el constructor de fuentes experimentales obsoleto (I8a724, b/261435386).
- La clase de datos de herramientas de IU
Group
ahora tiene un campo,isInline
, que indica si el grupo es para una llamada a una función de componibilidad intercalada. SiisInline
estrue
, la llamada se realiza a una función de componibilidad intercalada. Sin embargo, el valor puede ser falso para llamadas a funciones de componibilidad intercaladas que provienen de módulos que se compilan con una versión del complemento del compilador de Compose que no genera la información de la función intercalada (Idb846). - Varias APIs que antes eran experimentales pasaron a niveles estables.
- La API de Rotary Scroll Event ahora es estable (I42ad3, b/261561229).
- La API de
FontVariation
ahora es estable (I8779f, b/241016309). - Todos los constructores
Font()
ahora son APIs estables (I5948b, b/261435386). DeviceFontFamilyName
ahora es estable (I8b640, b/261435386).- El constructor de
AndroidFont
convariationSettings
ahora es una API estable y se puede usar para crear nuevos tipos de descriptores de fuente (I5adcc, b/261565807). - La API de
createFontFamilyResolver
ahora es estable. Se puede usar para detectar excepciones no detectadas durante la carga asíncrona de fuentes (Ibb481, b/261435386). - La API de
Font.loadingStrategy
ahora es estable (I5937c, b/261435386). - La API de
GoogleFont
ahora es estable (Ic90b0, b/261435386). TextUnit(float, TextUnitType)
ahora es una API estable (I90c84, b/261561612).pluralStringResource
ahora es una API estable (I09849, b/261439703).
Versión 1.4.0-alpha03
7 de diciembre de 2022
Se lanzó androidx.compose.ui:ui-*:1.4.0-alpha03
. La versión 1.4.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se quitó
ExperimentalComposeUiApi
dePointerIcon
(I23af8). - Se introdujeron las acciones de accesibilidad de la página:
PageUp
,PageDown
,PageLeft
,PageRight
. Ten en cuenta que solo están disponibles a partir de la API 29 (Ida4ab). - Se actualizó la vista del parámetro
rememberNestedScrollConnection
de la vista raíz a la vista de host (Ia5200). - Se agregó una API de modificador para consultar información de desplazamiento de principales (I2ba9d, b/203141462).
- Se usa en
Clickable
para retrasar correctamente las interacciones de presionar, cuando los gestos pueden convertirse en eventos de desplazamiento. - Se corrigió un error donde
Clickables
no retrasaba correctamente las ondas, cuando se usa dentro de unScrollable ViewGroup
. - Se actualizaron los paneles laterales y las hojas de cálculo para retrasar correctamente las presiones en caso de que los gestos se conviertan en eventos de desplazamiento.
- Se cambió el nombre de
CompositingStrategy.Always
porOffscreen
para indicar quegraphicsLayer
siempre se renderizará en un búfer intermedio (I47dc1). - Se estabilizó la sobrecarga de diseño con varias ranuras de contenido (I10566, b/248294649).
- Se agregaron las nuevas APIs experimentales
PerfettoTrace.record {}
yPerfettoTraceRule
para capturar los registros de Perfetto (también conocidos como Registros del sistema) como parte de una prueba, para inspeccionar el comportamiento y el rendimiento de la misma (I3ba16). - En las pruebas de IU que usan una regla de Compose, no se despacharán las continuaciones reanudadas durante las devoluciones de llamada de
withFrameNanos
hasta que todas las devoluciones de llamada de marco terminen de ejecutarse. Esto coincide con el comportamiento de Compose cuando se ejecuta normalmente. Sin embargo, las pruebas que dependen del comportamiento anterior pueden fallar. Esto solo debería afectar al código que llama awithFrameNanos
owithFrameMillis
de forma directa, y cuenta con una lógica fuera de la devolución de llamada que pasa a las funciones que pueden necesitar moverse dentro de las devoluciones de llamada. Consulta los cambios de la prueba de animación en esta CL para ver ejemplos. - Se agregó el parámetro opcional
onPerformTraversals: (Long) -> Unit
al constructorTestMonotonicFrameClock
y la función de fábrica para ejecutar el código después de las devoluciones de llamada dewithFrameNanos
, pero antes de reanudar las corrutinas de los emisores. (Idb413, b/254115946, b/222093277, b/255802670). - Se agregó EmojiCompat a Compose (Ibf6f9, b/139326806).
- Se agregó un nuevo parámetro de fondo de pantalla a
@Preview
para admitir colores dinámicos (I9f512).
Correcciones de errores
- Las notificaciones de aplicación de instantáneas ahora se envían después de que
Recomposer
termina de aplicar los cambios (Iad6c0, b/222093277). - Se introdujeron cambios en
captureToImage
para permitir la captura de pantalla multiventana. Esto es útil para las pruebas de captura de pantalla que usan ventanas emergentes de Compose (I169c5).
Actualizaciones de dependencias
- La IU de Compose y Compose Material ahora dependen de Lifecycle 2.5.1. (I05ab0, b/258038814).
Versión 1.4.0-alpha02
9 de noviembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha02
. La versión 1.4.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se actualizó
GraphicsLayerScope
para exponer el tamaño actual degraphicsLayer
. Esto es útil para calcular las transformacionesgraphicsLayer
como una función del tamaño componible. (If8c43,b/181387080) - Se agregó
CompositingStrategy
para determinar cuándo aprovechar una capa de composición fuera de la pantalla para procesar contenidographicsLayer
. Mantiene automáticamente el comportamiento predeterminado que aprovecha internamente una capa si se aplica alfa oRenderEffect/Overscroll
Siempre introducirá un búfer fuera de pantalla, en el queModulateAlpha
evitará aprovechar un búfer fuera de pantalla y, en su lugar, modulará cada una de las instrucciones de dibujo grabadas dentro degraphicsLayer
. El uso deModulateAlpha
seguirá aprovechando un búfer fuera de la pantalla para usos deRenderEffect/Overscroll
. (I25e82, b/256382834) - Se agregó
invalidateSubtree()
aModifier.Node
para permitir la invalidación de jerarquías completas para el diseño y el dibujo. (I4bd90) - Se asciende
rememberNestedScrollInteropConnection
a estable. Se introdujo la capacidad de pasar una vista raíz arememberNestedScrollInteropConnection
. Esto puede ayudar a que la vista personalizada reaccione mejor a las restricciones de desplazamiento, especialmente en las vistas no estándar (p. ej.,ModalBottomSheetDialog
). (I9e107) - Se agregó la interfaz de
ObserverNode
que se pueden usar las implementaciones deModifier.Node
que deben notificarse cuando haya cambiado un valor que hayan leído anteriormente. (I5728b, b/247716483) - Se agregó un nuevo constructor a
Paint
que acepta unandroid.graphics.Paint
nativo. También se agregó una función de extensióntoComposePaint()
que convierte un objeto Paint nativo existente en Compose Paint. (Ica91b) - Se agregó un
FontFamily.Resolver.resolveAsTypeface
nuevo para usar en Android. (I8950b) - Se agregó
ToolingState
para permitir que las herramientas cambien los estados internos de Compose (Ie6614). - Se refactorizaron las herramientas para tener una mejor compatibilidad con las nuevas animaciones agregadas. (I8677b)
- Se agregó el parámetro
minLines
al texto de Material y Material 3,TextField
yOutlinedTextField
, que permiten establecer la altura mínima del componente en términos de cantidad de líneas (I4af1d).
Versión 1.4.0-alpha01
24 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha01
. La versión 1.4.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se agregó un nuevo método,
awaitEachGesture()
, para los detectores de gestos. Funciona de manera similar aforEachGesture()
, pero la repetición de gestos funciona completamente dentro deAwaitPointerEventScope
, por lo que no se pueden perder eventos entre iteraciones. forEachGesture()
dejó de estar disponible a favor deawaitEachGesture()
porque permite que se pierdan eventos entre gestos (Iffc3f, b/251260206).- Se dio de baja el reciclaje de objetos de accesibilidad en AndroidX. Detectamos que los cambios en el rendimiento son insignificantes, incluso en las versiones compatibles más antiguas. (I0a961)
- Se agregó
DrawStyle
como atributo experimental aTextStyle
ySpanStyle
para habilitar el dibujo de texto con contorno. (If24b8, b/155421273) AnnotatedString.Builder
ahora implementakotlin.text.Appendable
. (I1a061, b/231030444)AnnotatedString.Builder
ahora tiene un métodoappend(AnnotatedString, start: Int, end: Int)
para agregar una substring de unAnnotatedString
y los estilos de intersección.- Se agregó el parámetro
DrawStyle
a las funciones de pinturaParagraph
yMultiParagraph
que habilita el dibujo de texto con contorno. (Ic8102, b/155421273)
Contribución externa
- Gracias por
vighnesh
, por agregar dispositivos de TV a las vistas previas (Ie15cd).
Versión 1.3
Versión 1.3.3
11 de enero de 2023
Se lanzó androidx.compose.ui:ui-*:1.3.3
. La versión 1.3.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla que a veces se producía en Android 9 cuando Activity guardaba el estado de Compose View (I0b755, b/260322832).
Versión 1.3.2
7 de diciembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.2
. La versión 1.3.2 contiene estas confirmaciones.
Correcciones de errores
- Se actualizó para usar Profobuf 3.21.8, lo que evita una alerta de seguridad en
protobuf-javalite:3.19.4
(CVE-2022-3171) (b/255545055).
Versión 1.3.1
9 de noviembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.1
. La versión 1.3.1 contiene estas confirmaciones.
Versión 1.3.0
24 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0
. La versión 1.3.0 contiene estas confirmaciones.
Cambios importantes desde 1.2.0
- Nuevo paquete de API experimental
LookaheadLayout
(que habilita comportamientos de animación que antes eran imposibles) - Nuevo paquete de API experimental
Modifier.Node
(alternativa de mayor rendimiento en comparación conModifier.composed
) - Compatibilidad con las inserciones de ventana mejorada
- Enfoque en la compatibilidad con pads direccionales y teclados de hardware en LazyLists
- La elevación máxima admitida en diálogos y ventanas emergentes se redujo a 8 dp (cambio rotundo en el comportamiento para algunos sistemas de diseño personalizados; lógica en las notas de la versión beta01)
- Muchas mejoras menores y continuas en la API
- Varias correcciones de errores y mejoras de rendimiento
Versión 1.3.0-rc01
5 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-rc01
. La versión 1.3.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Se agregaron nuevos guiones experimentales de API para admitir la separación silábica automática en Text (Iaa869).
Correcciones de errores
- Las fuentes
DeviceFontFamilyName
no configuraránwght
ni hará variaciones enital
de los parámetros predeterminados, sino que usarán la configuración de la plataforma paraTypeface
cargados (Ia7a6d, b/246989332). - Se corrigió la fuga de memoria de
LazyColumn
en la que no se llamaba aonModifierLocalsUpdated
con el valor predeterminado cuando se reutilizaban los modificadores (b/230168389).
Versión 1.3.0-beta03
21 de septiembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-beta03
. La versión 1.3.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregaron opciones para personalizar el salto de línea en el texto (I86907).
- Se cambió el argumento
size:IntSize
conconstraints: Constraints
en el métodoTextMeasurer.measure
para admitir restricciones de ancho mínimo (I37530, b/242707525).
Correcciones de errores
- La API de
BackHandler
de AndroidX Activity ahora funciona dentro de un elementoDialog
componible (I35342).
Versión 1.3.0-beta02
7 de septiembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-beta02
. La versión 1.3.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una sobrecarga experimental para Layout que acepta una lista de varias lambdas de contenido componible. Esto permite vincular mediciones en diferentes lambdas de contenido (Ic1b4e).
Cambios en las APIs experimentales de Focus:
FocusDirection.In
yFocusDirection.Out
dejaron de estar disponibles y se reemplazaron porFocusDirection.Enter
yFocusDirection.Exit
(Ia4262, b/183746982).- Se agregaron dos nuevas propiedades de enfoque de entrada y salida para especificar un comportamiento personalizado para
FocusManager.moveFocus(Enter)
yFocusManager.moveFocus(Exit)
(I5f3f9, b/183746982). - Ahora puedes usar
FocusRequester.Cancel
para cancelar un movimiento de enfoque.FocusRequester.Cancel
se puede usar en cualquiera de las siguientes propiedades de enfoque: arriba, abajo, izquierda, derecha, siguiente, anterior, inicio, finalización, entrada y salida (Ib300f).
Versión 1.3.0-beta01
24 de agosto de 2022
Se lanzó androidx.compose.ui:ui-*:1.3.0-beta01
. La versión 1.3.0-beta01 contiene estas confirmaciones.
Refactorización del nodo modificador
Se refactorizó en gran medida la capa que controla las instancias de Modifier/Modifier.Element
y coordina su comportamiento en LayoutNodes
. Tal como está, esta fue una refactorización que no afectó a la API pública de ninguno de los numerosos modificadores de Compose y se puede considerar un cambio solo de implementación. A pesar de eso, este es un cambio importante por varios motivos (Ie4313).
Resumen de cambios
Las APIs experimentales de Modifier.Node
agregadas proporcionan una abstracción que permite mantener el estado en una instancia que se conservará con el ciclo de vida del nodo de diseño y se asignará por nodo de diseño y por uso del Modifier.Element
correspondiente que lo produjo.
En términos generales, esta abstracción proporciona un mecanismo alternativo para producir modificadores con estado sin depender de la mecánica de la API de Modifier.composed
.
Riesgo
Este cambio es estrictamente binario y compatible con versiones anteriores, y está pensado para ser retrocompatible en términos de comportamiento observable tanto como sea práctico y razonable. Dicho esto, hay pocos subsistemas de Compose que esta refactorización no tocó y es probable que el comportamiento haya cambiado de maneras que no fueron cubiertas por nuestras pruebas y que aún no se han encontrado ni corregido.
Actualiza a esta versión con precaución. Si crees que esto haya producido fallas en tu caso, avísanos.
APIs experimentales
Se agregaron varias APIs experimentales que se relacionan con el concepto nuevo de "nodo modificador". Los Modifier.Node se crean como resultado de lo siguiente:
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
Cambio rotundo de comportamiento
La elevación máxima admitida en los diálogos y las ventanas emergentes se redujo a 8 dp.
La elevación máxima admitida para los diálogos y las ventanas emergentes de Compose se redujo de 30 dp a 8 dp. Este cambio afecta a los diálogos personalizados y a las ventanas emergentes de IU y Material. Este cambio se realiza para mitigar un error de accesibilidad en las versiones de Android anteriores a S y garantizar que los servicios de accesibilidad de esas ventanas puedan interactuar con el contenido dentro del diálogo o la ventana emergente.
Este cambio solo te afectará si creas un diálogo personalizado o una implementación de ventana emergente con una elevación establecida en niveles superiores a 8 dp. Puedes bajar la elevación del diálogo o la ventana emergente. Si quieres rechazar este nuevo comportamiento, bifurca tu propio diálogo o ventana emergente con la configuración de elevación deseada. Esto no se recomienda, ya que la accesibilidad podría verse afectada negativamente y es responsabilidad del desarrollador asegurarse de que la parte inferior del diálogo o la ventana emergente sea interactiva y legible con los servicios de accesibilidad.
Cambios en la API
- Se solucionó un problema por el que
painterResource
no se actualizaba con los cambios de configuración (I58e73, b/228862715). rememberTextMeasurer
ya no toma los parámetrosFontFamily.Resolver
,Density
niLayoutDirection
. Usa el constructorTextMeasurer
a fin de proporcionar valores personalizados para estos parámetros (Ia1da3).- Se agregó la propiedad
DialogProperties.decorFitsSystemWindows
para permitir que Dialogs sea compatible conWindowInsets
(I57742, b/229378542). - Se revirtieron los constructores de fuente al archivo Kotlin original para conservar la compatibilidad binaria. Sin cambios desde la última versión estable (Ieb2f3).
- Se quitó el operador innecesario de varias definiciones de igualdad; esto no tiene efecto (I6c309).
FontVariation.Setting
es una interfaz sellada para permitir futuras APIs de restricciones (I11021, b/143703328).- Se agregó
CompositionGroup.findParameters
aSlotTree.kt
. Esto permite que las herramientas recuperen parámetros para unCompositionGroup
sin tener que analizar toda la tabla de ranuras (I124fe).
Versión 1.3.0-alpha03
10 de agosto de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-alpha03
. La versión 1.3.0-alpha03 contiene estas confirmaciones.
Cambios en la API
LayoutCoordinates.findRootCoordinates()
ahora es público (I7fa37, b/204723384).- Se agregó una API experimental para obtener
LayoutCoordinates
enPlacementScope
. Esto permite a los desarrolladores saber dónde se encuentra el diseño actual para colocar los elementos secundarios en relación con su posición (I5482b, b/238632578). - Se agregó
LayoutCoordinates.transformFrom
para obtener la transformación de Matrix de unaLayoutCoordinates
a otra (Ic5ab1, b/238632578). SemanticsModifier.id
dejó de estar disponible y, en su lugar, se movió el ID de semántica aLayoutInfo.semanticsId
(Iac808, b/203559524).- Las fuentes de recursos ahora admiten la configuración de variaciones de fuentes (nivel de API 26 o versiones posteriores) (I900dd, b/143703328).
- Compatibilidad con fuentes variables en
DeviceFontFamilyNameFont
(Ic1279, b/143703328). - Los constructores de fuentes ahora aceptan una lista de
FontVariation.Setting
para configurar fuentes variables en dispositivos O+ (I11a9d, b/143703328). - Se agregó la API de
FontVariation
para definir y usar fuentes variables (I3c40c, b/143703328). - El constructor
LineHeightStyle.Alignment
ahora es público (experimental) (I4bbbe, b/235876330). - Ahora, el párrafo es esperado|real y se define para Android y computadoras de escritorio (Id387e, b/239962983).
- Ahora, el párrafo de interfaz es una interfaz sellada de Paragarph. No existe un caso de uso para la creación de subclases de párrafos, y te recomendamos que te comuniques con nosotros si este cambio te afecta (If5247, b/239962983).
- Se quitó la anotación experimental de
PlatformTextStyle
yLineHeightStyle
(I64bef). TextInputService.show|hideSoftwareKeyboard
dejó de estar disponible. En su lugar, usaSoftwareKeyboardController
en el código de la app yTextInputSession
en el código de administración de IME. (I14e4c, b/183448615).- Se agregó una API nueva para los tipos de animación existentes (I26179).
Correcciones de errores
- Se agregó
@RequiresPermission
a las APIs que requieren que se otorgue el permisoPOST_NOTIFICATIONS
en SDK 33 y versiones posteriores (Ie542e, b/238790278).
Versión 1.3.0-alpha02
27 de julio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-alpha02
. La versión 1.3.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una nueva propiedad
PointerInputChange#pressure
para recuperar la presión (I45a5e, b/205164819). - Se agregó
rememberTextMeasurer
para crear y recordar instancias deTextMeasurer
con facilidad en la composición (I8d66e). Rect
,RoundRect
yMutableRect
ahora admiten la sintaxisin
de Kotlin para llamar a la funcióncontains
(Ie42b0, b/238642990).- Se quitaron las funciones innecesarias de
KeyInjectionScope
, ya que se pueden implementar fácilmente con partes más simples de la API. Las funciones que se quitaron incluyenpressKeys
,keysDown
ykeysUp
(I81d77). - Se refactorizaron nombres de constantes y parámetros de
KeyInjectionScope
para incluir el sufijo "Millis", donde las unidades de esos parámetros y constantes son milisegundos (Iabef5). - Se agregó el método
toStringForLog()
aEditCommand
para ayudar a solucionar problemas de edición de texto (I53354, b/228862731). - Se agregó la función de extensión
drawText
enDrawScope
para proporcionar una forma de dibujar texto multiestilo en elementos componibles y modificadores que funcionan enDrawScope
, comoCanvas
ydrawBehind
. (I16a62, b/190787898). - Presentamos una nueva API experimental llamada
TextMeasurer
que habilita el cálculo de diseño de texto arbitrario que crea resultados idénticos aBasicText
, independientemente del entorno de ejecución de Compose (I17101). - Se agregó
mapTree
aSlotTree.kt
Esto permite que las herramientas inspeccionen elSlotTree
sin hacer primero una copia en la memoria, como lo hace asTree. Para el Inspector de diseño, esto mejora el rendimiento en aproximadamente un factor 10 (I5e113). - Se cambió la vista previa de Compose para que se almacene en archivos de salida binarios para permitir que los desarrolladores escriban y reutilicen anotaciones
MultiPreview
de bibliotecas (I85699, b/233511976).
Correcciones de errores
- Cuando se agreguen eventos
InputEventChange
aVelocity
Tracker, consideraremos los deltas en lugar de las posiciones, lo que garantizará que la velocidad se calcule correctamente en todos los casos, incluso si se mueve el elemento objetivo (Icea9d, b/216582726, b/223440806, b/227709803). - Se corrigió la NPE generada por
AnnotatedString.toUpperCase
cuando hay anotaciones (I0aca2, b/210899140).
Versión 1.3.0-alpha01
29 de junio de 2022
Se lanzó androidx.compose.ui:ui-*:1.3.0-alpha01
. La versión 1.3.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Nuevo objeto
LookaheadLayout
que admite un pase anticipado antes del diseño o la medición real. Esto permite realizar un cálculo previo del diseño cuando cambia y, al mismo tiempo, permite que la medición o el diseño posvisualización use el tamaño o la posición previamente calculados para animar el tamaño y las posiciones hacia el objetivo.SubcomposeLayouts
todavía no son compatibles, pero lo serán en una próxima versión (I477f5). - Se agregó el parámetro alfa opcional al tipo de pincel de
TextStyle
ySpanStyle
para modificar la opacidad de todo el elementoText
(Ic2fac, b/234117635). - Se introdujo el tipo de anotación
UrlAnnotation
y los métodos asociados para admitir la compatibilidad con vínculosTalkBack
enAnnotatedString
(I1c754, b/231495122). - Se migró la funcionalidad de la utilidad al entorno de ejecución (I4f729).
Correcciones de errores
- No se arroja
TextLayoutResult.getLineForOffset
(Idc5d6, b/235876324).
Contribución externa
- Se agregó una nueva API de
WindowInfo.keyboardModifiers
para observar su estado dentro de funciones de componibilidad o a través de snapshotFlow (Icdb8a).
Versión 1.2
Versión 1.2.1
10 de agosto de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.1
. La versión 1.2.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un valor nulo en el inspector (b/237987764).
- Se corrigió la excepción de transmisión de clase durante la recuperación en el inspector (b/235526153).
Versión 1.2.0
27 de julio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0
. La versión 1.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.1.0
Mejoras en el recorrido del foco:
- El desplazamiento basado en el foco de las listas diferidas ahora funciona con la nueva API principal de
BeyondBoundsLayout
- Nuevas APIs de personalización de comportamiento en
FocusOrder
yFocusProperties
- Comportamiento mejorado con el teclado físico o el control remoto de la TV
- El desplazamiento basado en el foco de las listas diferidas ahora funciona con la nueva API principal de
Nuevas APIs para lo siguiente:
- Inserción de ventana
- Primitivas básicas para animaciones infinitas, de diseño y controladas por gestos
- Capacidades de
GraphicsLayer
, lo que incluyeRenderEffect
Varias correcciones de errores y mejoras de rendimiento
Versión 1.2.0-rc03
29 de junio de 2022
Se lanzó androidx.compose.ui:ui-*:1.2.0-rc03
. La versión 1.2.0-rc03 contiene estas confirmaciones.
- No hay cambios desde la versión 1.2.0-rc02.
Versión 1.2.0-rc02
22 de junio de 2022
Se lanzó androidx.compose.ui:ui-*:1.2.0-rc02
. La versión 1.2.0-rc02 contiene estas confirmaciones.
Versión 1.2.0-rc01
15 de junio de 2022
Se lanzó androidx.compose.ui:ui-*:1.2.0-rc01
. La versión 1.2.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Las interfaces en las bibliotecas de Compose ahora se compilan con métodos de interfaz predeterminados de jdk8 (I5bcf1).
- Se agregaron funciones de orden superior a
KeyInjectionScope
para insertar pulsaciones de teclas mientras otras teclas se mantienen presionadas o activadas. Estas funciones incluyenwithKeysDown
,withKeysToggled
, etc. También se agregaron propiedades para comprobar si una tecla meta específica está inactiva (por ejemplo,isCtrlDown
) para verificar si se dejó de presionar alguna de las teclas de control. ConsultaKeyInjectionScope
para ver la documentación de cada función (I9f6cd, b/229831515). - Se agregó un elemento
OverscrollEffect
experimental que permite efectos de desplazamiento personalizados, junto con las sobrecargas deModifier.scrollable
que lo aceptan. - Se movió el elemento experimental
LocalOverScrollConfiguration
defoundation.gesture
al paquete de base y se cambió su nombre porLocalOverscrollConfiguration
(If19fb, b/204650733). - Se cambió el nombre de
runComposeUiTestWithoutActivity {}
porrunEmptyComposeUiTest {}
, para que quede alineado concreateEmptyComposeRule()
(I6fed7).
Versión 1.2.0-beta03
1 de junio de 2022
Se lanzó androidx.compose.ui:ui-*:1.2.0-beta03
. La versión 1.2.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
pressKeyTimes
,isCapsLockOn
y amigos aKeyInjectionScope
. Además, la API ahora admite patrones de inyección combinados del mouse y el teclado, como hacer clic con el botón del mouse y presionar una tecla meta a la vez (I4c8da, b/229831515). - Se agregó compatibilidad experimental para insertar eventos clave. Usa
performKeyInput
para enviar eventos clave o envíalos a través de la propiedadkey
deMultiModalInjectionScope
durante un gesto de entrada multimodal conperformMultiModalInput
. ConsultaKeyInjectionScope
para ver la documentación disponible de la API (Ic5000, b/229831515). - Se agregó un nuevo
GoogleFont.Provider.AllFontsListUri
para recuperar la fuente de Internet canónica de Google Fonts compatible con Android. - Se mejoraron los mensajes de error que se producían cuando Google Fonts no se cargaba en Compose (I0416c).
Correcciones de errores
- Cuando se agregan eventos
InputEventChange
a Velocity Tracker, consideraremos los deltas en lugar de las posiciones, lo que garantizará que la velocidad se calcule correctamente en todos los casos, incluso si se mueve el elemento objetivo (I51ec3, b/216582726, b/223440806, b/227709803). - Ahora, el parámetro de configuración
Show Layout Bounds
se aplicará a los elementos componibles inmediatamente después de activar o desactivar la tarjeta de configuración rápida, sin tener que salir de la actividad y volver a ingresar. (I843d5, b/225937688). - La búsqueda de strings de accesibilidad no activa la carga de fuentes. Antes, intentaba cargar fuentes para
StyleSpans
, lo que provocaba fallas si se reemplazabaFontFamily.Resolver
(I4609d). - Si presionas la tecla de borrar hacia adelante cuando el cursor se encuentra al final de un campo de texto, ya no fallará.
DeleteSurroundingTextCommand
yDeleteSurroundingTextInCodePointsCommand
ahora requieren que sus argumentos de constructor sean no negativos. (Ica8e6, b/199919707).
Versión 1.2.0-beta02
18 de mayo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-beta02
. La versión 1.2.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se volvió a implementar la funcionalidad en otros tipos de vista previa (I19f39).
Correcciones de errores
- Se cambió el nombre de
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
porDisposeOnDetachedFromWindowOrReleasedFromPool
para reflejar mejor cuando se producen las eliminaciones, en lugar de solo cuando no se producen (If15ca).
Versión 1.2.0-beta01
11 de mayo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-beta01
. La versión 1.2.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Esta es la primera versión beta de 1.2.
Cambios en la API
- Se agregó el objeto
BeyondBoundsInterval
experimental que las implementaciones personalizadas deLazyList
pueden utilizar cuando diseñan elementos que superan los límites visibles (Ifabfb, b/184670295). - Las versiones con clave de
Modifier.composed
ahora son una API estable (Ie65e4, b/229988420). - Se simplificó la API de
rememberNestedScrollConnection
para usar configuraciones regionales de composición y adquirir información sobre la vista actual (I67ca7). - La anotación
@ComposableTarget
y las anotaciones marcadas por@ComposableTargetMarker
ahora se pueden usar en el alcance del archivo con el prefijo@file
. El uso de una anotación de destino en el alcance del archivo hará que el compilador asuma que todas las funciones que admiten composición en el archivo deben orientarse al aplicador asociado. Por ejemplo, el uso de@file:UiComposable
declara que todas las funciones@Composable
están orientadas al aplicador de la IU de Compose. Una función que necesita orientarse a otro aplicador debe proporcionar explícitamente la anotación del marcador de destino para el aplicador deseado (I40804). Agregamos una nueva API experimental, independiente de la plataforma, de prueba: una
interface ComposeUiTest
y unafun runComposeUiTest(block: ComposeUiTest.() -> Unit)
, que se pueden usar para ejecutar pruebas de IU de Compose sin la necesidad de usarTestRule
. Para ejecutar una prueba sin unaComposeTestRule
, pasa la prueba como una lambda arunComposeUiTest
y usa los métodos y los miembros en laComposeUiTest
del alcance del receptor, que son los mismos que enComposeContentTestRule
.Se agregan
interface AndroidComposeUiTest
yfun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)
específicos de Android para brindar acceso a la actividad subyacente, similar aAndroidComposeTestRule
. Para obtener aún más control, puedes crear una instancia declass AndroidComposeUiTestEnvironment
.La implementación para computadoras de escritorio es la
class DesktopComposeUiTest
, pero, por el momento, no se ofrecen funciones de ejecución específicas para computadoras.La migración de una prueba de
ComposeTestRule
aComposeUiTest
se puede hacer de esta manera (ejemplo de Android). De:@RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }
A:
@RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
Por ahora,
ComposeContentTestRule
yComposeTestRule
no se extienden desdeComposeUiTest
, lo que significa que aún no se puede llamar a las funciones de extensión enComposeUiTest
en la interfazTestRule
. CuandoComposeUiTest
cambie a una API estable, se cambiaránComposeContentTestRule
yComposeTestRule
para extenderse deComposeUiTest
(Ib4e90).Se cambió el nombre de
LineHeightBehavior
porLineHeightStyle
.Se cambió el nombre de
LineVerticalAlignment
porLineHeightStyle.Alignment
.LineHeightTrim
cambia de nombre aLineHeightStyle.Trim
.Se quitaron los valores de constructor predeterminados de
LineHeightStyle
(I582bf, b/181155707).Se agregó
Brush
aTextStyle
ySpanStyle
para proporcionar una manera de dibujar texto con colores con gradientes (I53869, b/187839528).Los atributos
trimFirstLineTop
,trimLastLineBottom
deLineHeightBehavior
se cambiaron a una sola enumeración:LineHeightTrim
.LineHeightTrim
tiene valores de 4 estados definidos por dos booleanos:FirstLineTop
,LastLineBottom
, Ambos y Ninguno (Ifc6a5, b/181155707).Se agregó
LineHeightBehavior
aTextStyle
yParagraphStyle
.LineHeightBehavior
controla si la altura de la línea se aplica a la parte superior de la primera línea y a la parte inferior de la última línea. También define la alineación de la línea en el espacio proporcionado porTextStyle(lineHeight)
.Por ejemplo, es posible obtener un comportamiento similar al que define CSS a través de
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
.Las configuraciones de
trimFirstLineTop
ytrimLastLineBottom
funcionan correctamente solo cuandoincludeFontPadding
es falso (I97332, b/181155707).Se cambiaron las funciones
PlatformParagraphStyle.lerp
yPlatformSpanStyle.lerp
para que sean de nivel superior (I9a268).
Correcciones de errores
- La documentación de
PointerInputChange::copy
ahora indica correctamente que es una copia superficial (I182f5). - Se admite elipsis cuando la altura es limitada y no cabe en todas las líneas de texto (Ie528c, b/168720622).
includeFontPadding
está activado de manera predeterminada. Es posible desactivarincludeFontPadding
con el atributoTextStyle.platformTextStyle
. Sin embargo, en un futuro cercano, cambiaremos el comportamiento predeterminado hasta ese momento, lo que nos permitirá integrar mejor las mejoras de altura de línea (aosp/2058653) y solucionar problemas de recorteTextField
. (I01423, b/171394808).
Contribución externa
MouseInjectionScope.scroll(delta = someDelta)
ahora se invierte en Android si nos desplazamos verticalmente (si someDelta es positivo, se desplazará hacia abajo) (Ifb697, b/224992993).
Versión 1.2.0-alpha08
20 de abril de 2022
Se lanzó androidx.compose.ui:ui-*:1.2.0-alpha08
. La versión 1.2.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Las funciones
pluralStringResource
se marcaron como experimentales para permitir que la evolución apoye una mejor internacionalización en el futuro (If24e4). - Paragraph y MultiParagraph ahora aceptan el parámetro Constraints. Pasar
Constraints.maxHeight
es una no-op en este momento, pero te permitirá hacer algunos cálculos en el futuro, como la elipsis según la altura (I6afee, b/168720622). SubcomposeSlotReusePolicy.getSlotsToRetain()
ahora acepta una clase personalizada similar a MutableSet que no permite agregar elementos nuevos en ella (Icd314).- PointerIcon ahora es una interfaz
@Stable
(I9dafe). - El consumo parcial (de posición abajo O) ya no está disponible en
PointerInputChange
. Puedes usarconsume()
para consumir el cambio por completo. También puedes usarisConsumed
para determinar si otra persona ya consumió el cambio. PointerInputChange::copy()
ahora siempre hace una copia superficial. Significa que se consumirán copias dePointerInputChange
una vez que se consuma una de las copias. Si quieres crear unaPointerInputChange
no vinculada, usa un constructor (Ie6be4, b/225669674).- Habilita la interoperabilidad de desplazamiento anidada entre Compose y View en la dirección Compose > View. Esto significa que un elemento superior de composición podrá recibir deltas de desplazamiento anidados desde una vista de desplazamiento anidada (If7949, b/174348612).
- Se agregó el nuevo
SemanticsProperty testTagsAsResourceId
, que se puede usar para que Compose cumpla con las pruebas de UIAutomator diseñadas para el sistema de View (I39c20). - Se muestran todos los grosores disponibles para las fuentes del sistema en Android cuando se use
FontFamily.SansSerif
. Para ello, se usarán nombres de fuentes de resguardo como sans-serif-medium internamente en los niveles de API 21 a 28. Este es un cambio de comportamiento, ya que anteriormente solo se admitían los grosores 400 y 700 en los niveles de API 21 a 28 (I380fe, b/156048036, b/226441992). - Los instructores de Paragraph y Multiparagraph reordenaron los argumentos de posición antes de los argumentos opcionales (Idafaa).
AndroidFont
ahora toma typefaceLoader como parámetro de constructor (I2c971).
Versión 1.2.0-alpha07
6 de abril de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha07
. La versión 1.2.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se agregó la nueva función
Snapshot.withoutReadObservation { ... }
. Permite que los usuarios ejecuten la lambda pasada sin suscribirse a los cambios de los valores de estado leídos durante este bloque. Puede resultarte útil en los casos de uso en los que quieres aprovechar las escrituras y lecturas con protección de subprocesos basadas en instantáneas, pero también deseas poder leer el valor sin causar nuevas composiciones o mediciones innecesarias (I9f365, b/214054486). - La propiedad de extensión
consumeWindowInsets
deComposeView
permite a los desarrolladores inhabilitar el consumo de AndroidWindowInsets
. Esto permite queComposeViews
independientes en la jerarquía apliquenWindowInsets
sin interferir entre sí (I0ef08, b/220943142). - Se agregó
KeyboardType.Decimal
como alternativa aKeyboard.Number
para incluir específicamente un separador decimal en IME (Iec4c8, b/209835363). PointerEventType.Scroll
yPointerEvent.scrollDelta
ahora son API estables (I574c5, b/225669674).- Se habilitó la interoperabilidad de desplazamiento anidado entre View y Compose para clases de View que cooperan. Esto significa que Compose ahora puede despachar deltas de desplazamiento a un elemento superior de View (que coopera) (I5d1ac, b/174348612).
- Se actualizó
FontFamily.Resolver
para integrar la configuración de accesibilidad de texto en negrita en todo el sistema (I6c1e7). Font(AssetManager, String, ...)
dejó de estar disponible y se reemplazó porFont(String, AssetManager, ...)
. Esta es una API experimental (I1c7a4).- Se agregó un nuevo descriptor de fuente
Font(DeviceFontFamilyName)
para buscar fuentes instaladas en el sistema de forma opcional durante las cadenas de resguardo de fuentes (I30468, b/219754572). - Se agregó una configuración de compatibilidad temporal para
includeFontPadding
en TextStyle/ParagraphStyle.includeFontPadding
se puede cambiar medianteTextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
. Esta es una opción de configuración temporal para habilitar la migración y se quitará (If47be, b/171394808). - Se agregó la extensión
GoogleFont.Provider.isAvailableOnDevice
para ayudar con la depuración (I64e31). - Se agregó el constructor
GoogleFont.Provider
para su uso con@ArrayRes
(Ic5ee1, b/225984280). Compose GoogleFont
ahora se llamaFont(GoogleFont)
; de lo contrario, la API permanece estable (I125f2).
Correcciones de errores
- Se agregó una comprobación de lint a material/Scaffold para garantizar que se use el padding interno (Ifb111).
Versión 1.2.0-alpha06
23 de marzo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha06
. La versión 1.2.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Se agregó la acción semántica de
RequestFocus
para solicitar el enfoque en el objetivo enfocable (I17b71). - Se actualizó el análisis de elementos de diseño vectoriales para admitir la duplicación automática a fin de girar el contenido de un
VectorPainter
si la dirección de diseño actual es RTL (I79cd9, b/185760237). Se actualizaron los colores de sombras y ambientes con el objetivo de que sean parámetros finales de
Modifier.graphicsLayer
para la compatibilidad de la API (I3f864, b/160665122).Se agregaron implementaciones predeterminadas al color de sombra o ambiente en
GraphicsLayerScope
para garantizar que no se produzcan cambios de API rotundos.Se agregó la hora del evento a eventos RSB (Ief8ae).
FocusOrder
se combinó conFocusProperties
, yfocusProperties()
ahora tiene todas las capacidades defocusOrder()
.FocusOrder
yfocusOrder()
ya no están disponibles. ElfocusOrder()
que acepta unafocusRequester
se debe reemplazar por un modificadorfocusRequester()
en combinación confocusProperties()
. Esto permite que los modificadores tengan una separación más profunda de problemas (I601b7).La actualización de
RecyclerView
yCompose
ahora dará como resultado un rendimiento de desplazamiento mucho mejor para RecyclerViews con vistas de Compose como elementos secundarios.Se agregó
ViewCompositionStrategy.Default
como medio para recuperar la estrategia predeterminada integrada.Se agregó
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
, que es la nueva estrategia predeterminada y controla de forma correcta los contenedores de agrupación, como RecyclerView (If7282).Se agregó compatibilidad para anotar clases de anotaciones con @Preview como primer paso para incorporar la función de vista previa. Estas anotaciones se pueden usar para anotar métodos componibles u otras clases de anotaciones, que luego se podrían considerar anotaciones indirectas con el objeto @Preview determinado (I12eff).
Se agregaron dispositivos de referencia a la lista Dispositivos de @Preview (I071c9).
Correcciones de errores
- Se actualizaron las APIs de gráficos vectoriales para usar la anotación componible correcta @VectorComposable en lugar de @UiComposable (I942bc).
- Se quitó crossinline de
AnnotatedString.Builder.withStyle
(If84d5).
Contribución externa
- compose-ui: Se agregaron las propiedades
ambientShadowColor
yspotShadowColor
aGraphicsLayerScope
+ (I1ba1a, b/160665122). - Los recursos plurales ahora son compatibles con las funciones
pluralStringResource
(Ib2f23, b/191375123).
Versión 1.2.0-alpha05
9 de marzo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha05
. La versión 1.2.0-alpha05 contiene estas confirmaciones.
Cambios en la API
TextToolbar
ahora toma argumentos lambda en lugar deActionCallback
(Ib2eb9, b/197950089).- Se actualizó la nulabilidad en core y appcompat para que coincida con Tiramisu DP2 (I0cbb7).
- La interfaz de Measured ahora expone la propiedad parentData (I3313f).
Modifier.onPlaced
y la interfazOnPlacedModifier
ahora son estables (Ib5482).- ¡Hip, hip, hurra! La animación de Compose ahora permite configurar la "Escala de duración de animador" desde las Opciones para desarrolladores (I5a4fc, b/161675988).
- Se agregó un modificador
BeyondBoundsLayout
local (If8b51, b/184670295). - Texto: El elemento includeFontPadding está desactivado de forma predeterminada. Se controlaron los problemas de recorte como resultado de
includeFontPadding=false
y no se deberían producir recortes para secuencias de comandos altas (I31c84, b/171394808).
Correcciones de errores
ComposeContentTestRule.setContent
ahora arrojará unaIllegalStateException
si intentas configurar contenido cuando ya existe contenido (I888a5, b/199631334).- Se corrigió la falla que causaba el contenido del portapapeles mientras se leía desde el portapapeles en Android (I06020, b/197769306).
- Se realizaron mejoras en las muestras de desplazamiento de RSB (I6a596).
Contribución externa
- Se actualizó para usar corrutinas de Kotlinx 1.6.0 (I3366d).
Versión 1.2.0-alpha04
23 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha04
. La versión 1.2.0-alpha04 contiene estas confirmaciones.
Cambios en la API
Se agregaron
ComposableTarget
,ComposableTargetMarker
yComposableOpenTarget
, que permiten generar informes sobre el tiempo de compilación cuando se llama a una función de componibilidad dirigida a un aplicador que no estaba diseñada para usar.En la mayoría de los casos, el complemento del compilador de Compose puede inferir las anotaciones, por lo que no es común utilizarlas directamente. Entre los casos que no se pueden inferir, se incluyen la creación y el uso de un aplicador personalizado, las funciones de componibilidad abstractas (como los métodos de interfaz), los campos o las variables globales que son lambdas componibles (las variables y los parámetros locales se infieren), o cuando se usa
ComposeNode
o una función de componibilidad relacionada.En el caso de los aplicadores personalizados, las funciones que admiten composición y que llaman a
ComposeNode
oReusableComposeNode
deben agregar una anotaciónComposableTarget
para la función y para cualquier tipo de parámetro lambda que admita composición. Sin embargo, se recomienda crear una anotación con la anotaciónComposableTargetMarker
y, luego, usar la anotación marcada en lugar deComposableTarget
directamente. Una anotación que admite composición marcada conComposableTargetMarker
es equivalente a unaComposbleTarget
con el nombre completamente calificado de la clase de atributo como el parámetro aplicador. Para ver un ejemplo del uso deComposableTargetMarker
, consultaanroidx.compose.ui.UiComposable
(I38f11).Font(resId, ...)
ahora toma loadStrategy en una API estable (Ief3d2).FontLoadingStrategy
ahora es una API estable (I1ee35, b/174162090).Compatibilidad con la carga de fuentes asíncrona en Text (I77057, b/214587005).
Se agregó una API de puente para convertir
Font.ResourceLoader
personalizados enFontFamily.Resolver
(Ia0060).
Correcciones de errores
- Los
FontFamily.Resolver
proporcionados se pasan a subcomposiciones, como Popup. - Los
Font.ResourceLoader
proporcionados se pasan a subcomposiciones, como Popup (I48fa5).
Versión 1.2.0-alpha03
9 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha03
. La versión 1.2.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Los métodos
notifyFocusedRect
deTextInputSession
yTextInputService
dejaron de estar disponibles y no se los llamará. UsaBringIntoViewRequester
en su lugar. (Ia4302, b/192043120, b/216842427, b/178211874). - Se agregó el método
destroyDisplayListData
en la clase stub deRenderNode
(I1e659, b/216660268). - Se agregó una nueva API que permite realizar una medición previa de los elementos secundarios de
SubcomposeLayout
que ya creaste (I857ea). Se agregó
movableContentOf
, que convierte una lambda componible en una que mueve su estado y los nodos correspondientes a cualquier ubicación nueva a la que se la llame. Cuando la llamada anterior sale de la composición, el estado se conserva de forma temporal y, si una llamada nueva a la lambda ingresa a la composición, el estado y los nodos asociados se mueven a la ubicación de la llamada nueva. Si no se agrega una llamada nueva, se quitará el estado de forma permanente y se notificará a los observadores.Si se llama a una lambda de
movableContentOf
varias veces en la misma composición, se crean nuevos estados y nodos para cada llamada. Además, a medida que las llamadas dejan la composición y entran en una nueva llamada, el estado se mueve desde las primeras llamadas salientes hasta las entrantes en el orden en que se llaman. Todo el estado que las llamadas nuevas no reclamen se quitarán permanentemente (Ib4850).FontFamilyResolver
ahora está disponible a través deLocalFontFamilyResolver.current
.Se agregaron
createFontFamilyResolver(context)
ycreateFontFamilyResolver(context, coroutineScope)
para crear nuevos agentes de resolución de FontFamily fuera del uso de Compose.Ahora Paragraph y MultiParagraph, incluyen
FontFamily.Resolver
.TextLayoutResult.layoutInput.fontFamilyResolver
ahora contiene el agente de resolución que se usa para este diseño, y se dio de bajaTextLayoutResult.layoutInput.resourceLoader
, debido a que ya no se usa (Id5a45, b/174162090).Se agregó compatibilidad con la carga de fuentes asíncronas y opcionales, con comportamiento de resguardo. Text y TextField usan esta ruta, y se expone mediante FontFamilyResolver.
Se agregó compatibilidad con la carga previa de fuentes mediante
FontFamilyResolver.preload
.FontFamilyResolver.setAsyncLoadContext
permite configurar el contexto de corrutinas global que se usa para cargar fuentes asíncronas (I87fe8, b/174162090).Se agregó
AndroidFont
, una nueva API de bajo nivel que proporciona nuevos tipos de descriptores de recursos de fuentes en Android. Por ejemplo, cargar fuentes de un backend específico de la app, ubicar de forma opcional fuentes preinstaladas en el dispositivo o cargar una fuente de un recurso que no proporcionan las fábricas de fuentes actuales.Se amplió la API de
Font.ResourceLoaded
para admitir la carga de fuentes opcional y asíncrona. No se recomienda que los desarrolladores de aplicaciones usen esta API de forma directa. Para agregar nuevos tipos de fuentes, consultaAndroidFont
.La función de extensión
Font.AndroidResourceLoader
permite construir unaFont.ResourceLoader
cuando se encuentra fuera de la composición.Se agregó el parámetro
loadingStrategy
a fuentes basadas en recursos, para permitir la carga asíncrona cuando la fuente de recursos hace referencia a fuentes descargables XML (Ie5aea, b/174162090).El constructor
Typeface(FontFamily)
dejó de estar disponible. Anteriormente, se usaba a fin de precargar fuentes, lo que podía demorar hasta 10 segundos en el caso de las fuentes descargables. Con las fuentes descargables, esta llamada se puede bloquear durante 10 segundos. En su lugar, usaFontFamilyResolver.preload
.fontResource(FontFamily): Typeface
ya no está disponible. Anteriormente, se usaba a fin de precargar fuentes, lo que podía demorar hasta 10 segundos en el caso de las fuentes descargables. En su lugar, usaFontFamilyResolver.preload
(If8e7c, b/174162090).El constructor
SubcomposeLayoutState
que aceptamaxSlotsToRetainForReuse
dejó de estar disponible. En su lugar, hay un nuevo constructor que aceptaSubcomposeSlotReusePolicy
, una nueva interfaz que permite un control más detallado sobre los espacios publicitarios que se deben conservar para volver a usarlos en el futuro. (I52c4d).Se expuso la función HSV y HSL en
Color
como API no experimental. El espacio de color de Oklab ahora es una API pública (I08fb6, b/180731008).El objeto
AndroidComposeTestRule.AndroidComposeStatement
dejó de estar disponible, ya que no estaba destinado a estar disponible en una API pública y no era de utilidad (Ibc46b).Se cambió el nombre de la clase kt que se genera internamente (Ia0b9e, b/174162090).
Se quitó
FontLoadingStrategy.values
(I42a9d, b/174162090).El cargador de fuentes global ahora se llama
FontFamilyResolver
(I4f773, b/174162090).Se usa el nuevo sistema de carga de fuentes para computadoras de escritorio (I9ce5c, b/174162090).
FontFamily.Resolver.resolve
muestraState<Any>
(I4406c, b/174162090).
Correcciones de errores
- TextFields ahora se mantendrá arriba del teclado cuando este se enfoque y se muestre, y cuando el modo de entrada de software sea
ADJUST_PAN
(I8eaeb, b/190539358, b/192043120). - En computadoras, se usa la composición local para
FontFamily.Resolver
. - La versión de escritorio de
FontLoader
dejó de estar disponible. - Nueva fábrica de
createFontFamilyResolver
para computadoras (I6bbbb, b/174162090). - El tipo de entrada de teclado en pantalla ya no gira cuando se cambia el enfoque entre los campos de texto (I1bf50, b/187746439).
Versión 1.2.0-alpha02
26 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha02
. La Versión 1.2.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
Modifier.onRotaryScrollEvent()
yModifier.onPreRotaryScrollEvent()
para dispositivos Wear con un botón lateral que rota. (I18bf5, b/210748686) - Se agregó la extensión experimental
View.createLifecycleAwareRecomposer
. (I0cde6)
Contribución externa
- Ahora,
PointerEvent.scrollDelta.y
se invierte en Android (muestra 1 en lugar de -1 si se inclina la rueda del mouse hacia la derecha). (Ia9811)
Versión 1.2.0-alpha01
12 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha01
. La versión 1.2.0-alpha01 contiene estas confirmaciones.
Cambios en la API
FontFamily.canLoadSynchronously
quedó obsoleto. Esta propiedad no tiene significado semántico. (Ica5ef)- Se agregó el campo de identidad a
CompositionData
para generar IDs que no varían en el Inspector de diseño (Ic116e) - Se agregaron los IDs de dispositivos de Wear OS a la lista de dispositivos de vista previa (I93232).
Actualizaciones de dependencias
- Ahora depende de Kotlin versión
1.6.10
.
Versión 1.1
Versión 1.1.1
23 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.1
. La versión 1.1.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió
NullPointerException
enandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462). - Se corrigió la falla que causaba el contenido del portapapeles mientras se leía desde el portapapeles en Android (I06020, b/197769306).
- Se corrigió la lectura de derecha a izquierda en
LazyVerticalGrid
(aosp/1931080, b/207510535).
Versión 1.1.0
9 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.0
. La versión 1.1.0 contiene estas confirmaciones.
Cambios importantes desde 1.0.0
- Se agregó compatibilidad estable con el efecto de desplazamiento de Android 12.
- Se agregaron mejoras en el tamaño de los objetivos táctiles.
- Ten en cuenta que, con respecto a Compose 1.0, los componentes de Material expandirán su espacio de diseño para cumplir con los lineamientos de accesibilidad de Material relativos al tamaño del objetivo táctil. Por ejemplo, el objetivo táctil del botón se expandirá hasta un tamaño mínimo de 48 x 48 dp, incluso si configuras el tamaño del botón para que sea más pequeño. Esto alinea Compose Material con el mismo comportamiento de los componentes de Material Design y proporciona un comportamiento coherente si combinas View y Compose. Este cambio también garantiza que, cuando crees tu IU mediante componentes de Compose Material, se cumplan los requisitos mínimos de la accesibilidad de objetivos táctiles.
- Se agregó compatibilidad estable con Navigation Rail.
- Varias API que antes eran experimentales se pasaron a niveles estables.
- Se agregó compatibilidad con versiones más recientes de Kotlin.
Versión 1.1.0-rc03
26 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-rc03
. La versión 1.1.0-rc03 contiene estas confirmaciones.
Correcciones de errores
- Se actualizó para admitir Compose Material 1.1.0-rc03.
Versión 1.1.0-rc01
15 de diciembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-rc01
. La versión 1.1.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error que causaba acciones de desplazamiento de accesibilidad faltantes (I7cbfb).
SemanticsNodeInteraction.captureToImage()
ahora también funcionará siHardwareRenderer.isDrawingEnabled()
esfalse
, por lo que se habilitará durante la llamada. (Idf3d0)
Versión 1.1.0-beta04
1 de diciembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta04
. La versión 1.1.0-beta04 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó para que sea compatible con Kotlin
1.6.0
.
Cambios en la API
- Se corrigió la nulabilidad en
androidx.core.view
(I7078a, b/204917439). - Se agregaron API experimentales que permiten a los usuarios utilizar PointerInputchange en su totalidad o verificar si se consumió o no (I2e59d).
- Se agregó compatibilidad con eventos de rueda del mouse en la capa de IU (Ia14eb, b/198214718).
- Se agregaron sobrecargas experimentales de
Modifier.composed
que aceptan claves para comparar la igualdad y calificar en la optimización de omisión (Ice799, b/205851704). ComposeNotIdleException
ahora se extiende desdeException
, en lugar de hacerlo directamente desdeThrowable
. Ten en cuenta que esto significa que las cláusulas de captura que capturabanException
es posible que ahora detecten elementosComposeNotIdleException
, cuando antes no lo hacían (I9c217).
Correcciones de errores
- Se corrigieron los controladores de texto que no se movían cuando se cambiaba la visibilidad del IME (I25f2e).
Versión 1.1.0-beta03
17 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta03
. La versión 1.1.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregó el nuevo modificador Modifier.onPlaced para permitir que se observe el cambio de posición. Por lo tanto, se pueden realizar cambios adicionales en la compensación del modificador secundario a partir del cambio de posición observado (I558fd).
- Se quitaron
InjectionScope.flush()
yInjectionScope.dispose()
. El vaciamiento de todos los eventos y la eliminación del alcance ahora ocurren al final del método perform*Input() method al que se llama, como antes (I2bed8). - Se quitaron
MultiModalInjectionScope.Touch
yMultiModalInjectionScope.Mouse
. A fin de incorporar eventos táctiles y del mouse para los gestos multimodales, ahora puedes usarMultiModalInjectionScope.touch()
yMultiModalInjectionScope.mouse()
. Ambos aceptan una lambda que tiene el alcance del receptor de esa modalidad (Idde18).
Correcciones de errores
- El valor predeterminado para
durationMillis
enTouchInjectionScope.swipeWithVelocity
ahora se calcula de modo que el deslizamiento sea posible (I19deb).
Versión 1.1.0-beta02
3 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta02
. La versión 1.1.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API experimental de BringIntoView que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459).
- Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).
Contribución externa
- Se agregó Modifier.pointerHoverIcon. (I95f01)
Versión 1.1.0-beta01
27 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta01
. La versión 1.1.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API experimental de
BringIntoView
que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459). - Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).
Versión 1.1.0-alpha06
13 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha06
. La versión 1.1.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Se quitó
ExperimentalComposeUiApi
deViewRootForInspector
yLayoutInfo.ownerViewId
. (I5c2e3) - Se agregó una sobrecarga para Layout sin elemento secundario con eficiencia mejorada. (IB0d9a)
- Se quitó
InternalCompilerApi
de los métodos de Composer que deben llamarse entre módulos. (I1aa0b) SemanticsNodeInteraction.performSemanticsAction
ahora muestra laSemanticsNodeInteraction
en la que se llamó a la función. (I9e5db)- Se agregó LocalInputModeManager CompositionLocal para detectar TouchMode/NonTouchMode. (I6a83c, b/175899786)
- Se agregó
viewConfiguration: ViewConfiguration
aLayoutInfo
para permitir que los consumidores obtengan el valor correcto de cosas como el tiempo de espera de presión prolongada. (I76ca6)- Se agregó
viewConfiguration: ViewConfiguration
aInjectionScope
para permitir que las pruebas ajusten la inserción de entrada en función de parámetros como el tiempo de espera de presión prolongada o la inclinación táctil. - Se cambió la duración predeterminada de mantener presionado y presionar dos veces para la entrada táctil y del mouse, según los valores en
InjectionScope.viewConfiguration
.
- Se agregó
- Se implementó ExposedDropdownMenu basado en ExposedDropdownMenuBox con TextField y DropdownMenu dentro. (If60b2)
- Se agregó descarteOnOnsideClick a PopupProperties para reemplazar a descarteOnClickOutside, que dejó de estar disponible. La nueva propiedad recibe la posición del clic y los límites de anclaje, lo que brinda un control más preciso sobre si se debe invocar onDismissRequest o no. Por ejemplo, esto puede ser útil para evitar el descarte de anclajes al tocarlos.
- Se agregó updateAndroidWindowManagerFlags a PopupProperties, y ofrece un control de bajo nivel sobre las marcas que pasa la ventana emergente a WindowManager de Android. El parámetro de la lambda será las marcas calculadas a partir de los valores de PopupProperties que generen marcas de WindowManager (p. ej., enfocables). El resultado de la expresión lambda serán las marcas finales que se pasarán a Android WindowManager. De manera predeterminada, updateAndroidWindowManagerFlags dejará las marcas calculadas a partir de los parámetros sin modificar. Esta API se debe utilizar con precaución, solo en los casos en que la ventana emergente tenga requisitos de comportamiento muy específicos. (I6e9f9)
Recomposer.state
dejó de estar disponible y se reemplazó porRecomposer.currentState
para cambiar su tipo a StateFlow. (Ic2ab3, b/197773820)- Se agregaron
flush()
ydispose()
aInjectionScope
Úsalas cuando quieras limpiar todos los eventos en fila de inmediato y cuando quieras eliminar el alcance, respectivamente. (Ifb73a) - Se agregó
performScrollToNode(matcher: SemanticsMatcher)
, que desplaza un contenedor desplazable hasta el contenido que coincide con el comparador dado. (Ic1cb8) InjectionScope
ahora implementaDensity
, lo que te permite convertir fácilmente entre px y dp enperformTouchInput
y amigos. (I8fe1f)
Correcciones de errores
- AndroidView ahora propaga LocalLifecycleOwner y LocalSavedStateRegistryOwner a su vista a través de ViewTreeLifecycleOwner y ViewTreeSavedStateRegistryOwner. (I38f96, b/179708470)
- Se corrigió el problema por el que WearOS SwipeToDismissBox no controlaba los deslizamientos. (I9387e)
- El tiempo predeterminado entre los eventos de entrada inyectados cambió de 10 ms a 16 ms. Esto puede cambiar el resultado de las pruebas que realizan gestos de entrada, como un deslizamiento específico. (I829fd)
Versión 1.1.0-alpha05
29 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha05
. La versión 1.1.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad con la comunicación entre modificadores (Id5467, b/198826874).
- Se agregaron punteros históricos experimentales a PointerEventChange (Ic1fd8, b/197553056, b/199921305)
- Se agregaron
density: Density
ylayoutDirection: LayoutDirection
aLayoutInfo
Esto permite que los consumidores deLayoutInfo
interpreten correctamente las dimensiones y posiciones expuestas enLayoutInfo
. (I002f1) - Se agregó compatibilidad experimental para insertar eventos del mouse. Usa
performMouseInput
para comenzar a enviar eventos del mouse, o envía eventos de este mediante la propiedadMouse
deMultiModalInjectionScope
durante un gesto de entrada multimodal conperformMultiModalInput
. ConsultaMouseInjectionScope
para ver la documentación de la API disponible. (Iaa4a8, b/190493367)
Correcciones de errores
- Se corrigió la compatibilidad de la accesibilidad para elementos desplazables (diferidos y no diferidos) con respecto al desplazamiento (I6cdb0).
- Se mejoró
TouchInjectionScope.swipeWithVelocity
. Ahora acepta un rango más amplio de variables de entrada y sugerirá cambios en la entrada si no se puede crear un deslizamiento. (I40fbe, b/182477143)
Versión 1.1.0-alpha04
15 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha04
. La versión 1.1.0-alpha04 contiene estas confirmaciones.
Cambios en la API
PointerEvent
ahora tiene unPointerEventType
para admitir eventos de colocamiento del cursor sobre elementos. (I091fa)- Permite que los elementos secundarios acepten entradas de puntero fuera de los límites de entrada del elemento superior. Los elementos superiores pueden interceptar esas llamadas con una propiedad PointerInputScope.alwaysInterceptChildEventss. (I9eae3, b/192479655)
performGesture
yGestureScope
dejar de estar disponibles y se reemplazaron conperformTouchInput
yTouchInjectionScope
. (Ia5f3f, b/190493367)- Se agregó
touchBoundsInRoot
aSemanticsNode
, que incluye el tamaño mínimo del objetivo táctil para que los desarrolladores puedan garantizar que estos cumplan con los requisitos de accesibilidad mínimos. (I2e14b, b/197751214) - Se rehizo la implementación del objeto inspectable. (I927bc, b/191017532)
- Se cambió el nombre de un parámetro de inspectable para que coincida con el compuesto. (I3a482, b/191017532)
Se introdujeron
performTouchInput
yTouchInjectionScope
como reemplazo deperformTouchInput
yTouchInjectionScope
, lo que prepara el camino para otras modalidades (como el mouse).TouchInjectionScope
tiene los mismos métodos queGestureScope
, con excepción demovePointerTo
ymovePointerBy
, que cambiaron de nombre aupdatePointerTo
yupdatePointerBy
. Todos los demás métodos son iguales.El comportamiento de
TouchInjectionScope
es casi idéntico al deGestureScope
, con dos pequeñas diferencias:- Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (en otras palabras, se usaba
updatePointerTo()
, pero nomove()
, y, luego, se llamaba adown()
), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación sigue enviando el evento de movimiento, pero no avanza el tiempo del evento en esta situación específica. - Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (similar al anterior), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación no realiza ninguna de las dos acciones: las nuevas posiciones de los punteros solo se reflejarán a través del evento ascendente.
Por último,
TouchInjectionScope
presenta un nuevo métodocurrentPosition(pointerId: Int)
para obtener la posición actual del puntero determinado. (If1191, b/190493367)- Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (en otras palabras, se usaba
Correcciones de errores
- Permite que el clip extienda los límites del objetivo táctil más allá de la región del clip para los fines mínimos del objetivo táctil. (I43e10, b/171509422)
- Se agregó compatibilidad con el sobredesplazamiento expandido en dispositivos con Android 12. (Iccf3c, b/171682480)
Versión 1.1.0-alpha03
1 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha03
. La versión 1.1.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó Compose
1.1.0-alpha03
para que dependa de Kotlin1.5.30
. (I74545)
Cambios en la API
- Se agregó
Modifier.inspectable
para unir otros modificadores. (I1909b, b/191017532) - Se agregó la API de
BlurredEdgeTreatment
para simplificar los casos de uso de desenfoque a combinaciones de uso general de marcas de clips y TileModes. La mayoría de los casos de uso implican dejar que el contenido difuminado se renderice fuera de los límites del contenido original y difuminar las regiones fuera de estos límites con negro transparente, o bien recortar el contenido a los límites del contenido muestreando el borde más cercano para los kernels de desenfoque que se extienden más allá de los límites del contenido. (I6b4b7, b/166927547) - Se agregó compatibilidad con RenderEffect en el escritorio de Compose. Se introdujeron OffsetEffect y el modificador de desenfoque como una manera sencilla de ingresar efectos visuales de desenfoque en una parte de la jerarquía de composición. (I0f6aa, b/166927547)
- Se introdujo la API de RenderEffect que se puede configurar de forma opcional en una
Modifier.graphicsLayer
para alterar el contenido de la capa. Se puede usar para desenfocar el contenido de un elemento componible y sus elementos secundarios dentro de una jerarquía de composición (I47c4d, b/166927547) - Ahora, AwaitPointerEventScope tiene withTimeout() y withTimeoutOrNull(). (I507f0, b/179239764, b/182397793)
- Se agregó un tamaño mínimo de objetivo táctil a ViewConfiguration para usarlo en la semántica y la entrada de puntero a fin de garantizar la accesibilidad. (Ie861c)
- Se agregó compatibilidad con TileMode.Decal, que sirve para definir el comportamiento de borde para RenderEffects basados en desenfoques. (I7e8ed, b/166927547)
performScrollToIndex
,performScrollToKey
,hasScrollToIndexAction
yhasScrollToKeyAction
ahora son API estables. (I142ae, b/178483889)- Se agregó un método de prueba para obtener los límites recortados. (I6b28e)
Correcciones de errores
- Se quitó el método isBounded de BlurredEdgeTreatment a fin de verificar de forma explícita si el parámetro de forma es nulo. (I85d68)
Versión 1.1.0-alpha02
18 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha02
. La versión 1.1.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- PointerEvent ahora es compatible con la lectura del estado del botón del mouse y del estado del modificador del teclado (I6310c, b/180075467).
- Los gestos inyectados ahora usan el tiempo de MainTestClock como fuente de información de tiempo. La hora actual de los eventos inyectados en
performGesture
se inicializará en la hora actual de MainTestClock. (Ifb364, b/192064452) - Se agregó el constructor
DpRect(DpOffset, DpSize)
. (I2cf16, b/194219828) - Se agregó la clase DpSize. (I7abb1, b/194219828)
Correcciones de errores
- Se actualizó el análisis de XML de gráficos vectoriales para admitir ColorStateLists como propiedades de tono de color raíz en VectorDrawables (I86915, b/195668138)
Versión 1.1.0-alpha01
4 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha01
. La versión 1.1.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Ahora
RelocationRequester.bringIntoView
acepta un rectángulo como parámetro que nos permite poner en la vista una parte de un elemento que admite composición. (Ice2c5, b/194330245) AnimatedImageVector
y las API relacionadas ahora están en el nuevo móduloandroidx.compose.animation:animation-graphics
. (I60873)- Se agregó un modificador experimental para controlar las solicitudes de reubicación. (I65a97, b/178211874)
Se introdujo la API de BrushPainter para admitir el dibujo de un Brush arbitrario dentro de un Painer, similar a ColorPainter.
Se actualizó la API de Brush para tener un parámetro de tamaño intrínseco que se consulta dentro de BrushPainter. (Ia2752, b/189466433)
Se actualizó el método DrawScope#drawImage que consume los rects de origen y destino para consumir un parámetro opcional FilterFilter. Esto es útil para el arte de píxeles que se pixela cuando se escala verticalmente para el arte basado en píxeles. Se actualizó el objeto BitmapPainter + Image que admite composición para que también consuma un parámetro opcional FilterQuality. (Ie4fb0, b/180311607)
Se agregó el método
GestureScope.advanceEventTime
para proporcionar más control sobre el tiempo de los eventos en un gesto. (Ibf3e2)
Correcciones de errores
- A fin de admitir mejor el encadenamiento de modificadores de dibujo, asegúrate de que la implementación de Modifier.Paint llame a drawsContent.
Anteriormente, se esperaba que Modifier.Paint se utilizara en un nodo de hoja del conjunto de modificadores. Sin embargo, esto evita que se configure en un contenedor que admita composición (p. ej., un cuadro) o que se agreguen decoraciones adicionales arriba como
Modifier.paint().border()
. Al hacer que el objeto Modifier.Paint llame a drawContent después de dibujar los contenidos del pintor determinado, logramos una mejor coherencia de comportamiento en el comportamiento con el patrón modificador. (Ibb2a7, b/178201337, b/186213275) - Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece
usePlatformDefaultWidth
como falso para anular este comportamiento. (Iffaed, b/192682388) - Se movió
InfiniteAnimationPolicy
a :compose:ui. (I5eb09, b/160602714) - El desplazamiento a través de acciones semánticas para listas diferidas y componentes de desplazamiento normales ahora tiene animación. (Id9066, b/190742024)
Versión 1.0
Versión 1.0.5
3 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.5
. La versión 1.0.5 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla en el seguimiento de las instancias de derivedStateOf (aosp/1792247).
Versión 1.0.4
13 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.4
. La versión 1.0.4 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.31
Versión 1.0.3
29 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.3
. La versión 1.0.3 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.30
Versión 1.0.2
1 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.2
. La versión 1.0.2 contiene estas confirmaciones.
Se actualizó para que sea compatible con la versión 1.0.2
de Compose. Compose 1.0.2
continúa siendo compatible con Kotlin 1.5.21
.
Versión 1.0.1
4 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.1
. La versión 1.0.1 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.21
.
Versión 1.0.0
28 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0
. La versión 1.0.0 contiene estas confirmaciones.
Funciones principales de la versión 1.0.0
Esta es la primera versión estable de Compose. Consulta el blog oficial de Lanzamientos de Compose para obtener más información.
Errores conocidos
Si usas Android Studio Bumblebee Canary 4 o AGP
7.1.0-alpha04
/7.1.0-alpha05
, es posible que se produzca la siguiente falla:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Para sortear el problema, aumenta temporalmente tu minSdkVersion a más de 24 en el archivo
build.gradle
. Este error se solucionará en la próxima versión de Android Studio Bumblebee y en el AGP7.1
. (b/194289155)
Versión 1.0.0-rc02
14 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-rc02
. La versión 1.0.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece
usePlatformDefaultWidth
como falso para anular este comportamiento. (Iffaed, b/192682388)
Versión 1.0.0-rc01
1 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-rc01
. La versión 1.0.0-rc01 contiene estas confirmaciones.
Nuevas funciones
- Se dividió el módulo ui-tooling en
ui-tooling
yui-tooling-preview
. (Iefa28, b/190649014)
Cambios en la API
- Se quitaron las funciones experimentales
FocusManager#moveFocusIn
yFocusManager#moveFocusOut
obsoletas. (I227d7, b/170154986, b/186567354, b/168510304)) - Canvas ahora admite un parámetro contentDescription para accesibilidad. (Ib547c)
- Se cambió el nombre de
useDefaultMaxWidth
enPopupProperties
porusePlatformDefaultWidth
. (I05710) - Ahora se pueden usar los diálogos en todo el ancho de la pantalla. (I83929, b/190810877)
- Se agregó compatibilidad experimental para las representaciones de color HSV y HSL. (Id7cf8, b/180731008)
Cambios en el comportamiento
- Compose
@Preview
ahora proporciona unLocalActivityResultRegistryOwner
que te permite obtener una vista previa de elementos componibles que usan API comorememberLauncherForActivityResult()
que dependen de que exista ese propietario. (Ib13d1, b/185693006) - Compose
@Preview
ahora proporciona unLocalOnBackPressedDispatcherOwner
que te permite obtener una vista previa de elementos componibles que usan API comoBackHandler
que dependen de que exista ese propietario. (Ia1c05, b/185693006)
Correcciones de errores
- Se movió
InfiniteAnimationPolicy
aandroidx.compose.ui:ui
. (I5eb09, b/160602714) - Se quitó temporalmente AnimatedImageVector para cambiar la estructura del módulo. (I41906, b/160602714)
Versión 1.0.0-beta09
16 de junio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta09
. La versión 1.0.0-beta09 contiene estas confirmaciones.
Cambios en la API
- Se cambió Role de enumeración y LiveRegionMode por clases intercaladas con un constructor privado. (Id1890)
- KeyboardCapitalization se convierte en una clase intercalada. (Id5a1c)
- Se cambió HapticFeedbackType a una clase intercalada. (I255ec)
- Modifier.pointerInteropFilter es @ExperimentalComposeUiApi. (Iede6c)
- TextAlign, FontSynthesis y TextDirection ahora son clases intercaladas. (I212fe)
- Se cambió TextOverflow a una clase intercalada. (I433af)
- Ahora, FontStyle es una clase intercalada. (I9e48b)
Correcciones de errores
- Por el momento, las constantes de clave son @ExperimentalComposeUiApi. El código de consumo puede declarar constantes privadas antes de la estabilización. (Ia5d48)
- Ahora, las pruebas de Compose se pueden ejecutar en Robolectric. Hasta ahora, se identificaron las siguientes limitaciones:
- No hay un mapa de bits nativo, por lo que
ImageBitmap()
dirige a una NullPointerException. - No hay un dibujo, por lo que
captureToImage()
esperará de forma indefinida al próximo pase de dibujos (es decir, se produce un interbloqueo). - No se cargó ninguna fuente, por lo que se medirá todo el texto de forma incorrecta. Todos los caracteres tienen una altura fija de alrededor de 20 px y un ancho de 1 px.
ComposeTestRule.waitUntil {}
no ejecuta el subproceso principal mientras espera, por lo que es prácticamente igual queComposeTestRule.mainClock.advanceTimeUntil {}
. Se espera identificar más limitaciones en el futuro. (I284fa)
- No hay un mapa de bits nativo, por lo que
Reglas de perfiles agregadas
En esta versión, se agregaron reglas de perfiles a los siguientes módulos de Compose (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
¿Qué son las reglas de perfiles?
Las reglas de perfiles de una biblioteca se especifican en un archivo de texto
baseline-prof.txt
, ubicado ensrc/main
o el directorio equivalente. El archivo especifica una regla por línea, donde una regla en este caso es un patrón para la coincidencia con métodos o clases de la biblioteca. La sintaxis de estas reglas es un superconjunto del formato de perfil ART legible que se usa cuando se implementaadb shell profman --dump-classes-and-methods ...
. Estas reglas adoptan una de dos formas para segmentar métodos o clases.Una regla de métodos tendrá el siguiente patrón:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Una regla de clases tendrá el siguiente patrón:
<CLASS_DESCRIPTOR>
Aquí,
<FLAGS>
es uno o más caracteresH
,S
yP
, los cuales indican si este método debe marcarse como "Hot" (caliente), "Startup" (inicio) o "Post Startup" (posterior al inicio).El
<CLASS_DESCRIPTOR>
es el descriptor de la clase a la que pertenece el método segmentado. Por ejemplo, la claseandroidx.compose.runtime.SlotTable
tendría un descriptor deLandroidx/compose/runtime/SlotTable;
.El
<METHOD_SIGNATURE>
es la firma del método y, además, incluye el nombre, los tipos de parámetros y los tipos de datos que muestra. Por ejemplo, el métodofun isPlaced(): Boolean
enLayoutNode
tiene la firmaisPlaced()Z
.Estos patrones pueden tener comodines (
**
,*
y?
) para tener una sola regla que abarque varios métodos o clases.
¿Para qué sirven las reglas?
Un método con la marca
H
indica que es "hot" y debe compilarse con anticipación.Un método con la marca
S
indica que se llama durante el inicio y debe compilarse con anticipación para evitar el costo de interpretarlo y compilarlo en el momento del inicio.Un método que tiene la marca
P
indica que es un método que se llama después del inicio.Una clase presente en este archivo indica que se usa durante el inicio y debe asignarse previamente en el montón para evitar el costo de cargarla.
¿Cómo funciona?
- Las bibliotecas pueden definir estas reglas que se empaquetarán en artefactos de AAR. Luego, cuando se compila una app que incluye esos artefactos, esas reglas se combinan y se usan para compilar un perfil de ART binario compacto específico para la app. De esta manera, ART puede tomar este perfil cuando se instala la app en dispositivos para compilar con anticipación un subconjunto específico de la aplicación a fin de mejorar su rendimiento, especialmente en la primera ejecución. Ten en cuenta que esta acción no tendrá efecto en las aplicaciones depurables.
Versión 1.0.0-beta08
2 de junio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta08
. La versión 1.0.0-beta08 contiene estas confirmaciones.
Cambios en la API
- Se reemplazó la enumeración
NestedScrollSource
por una clase intercalada. (Ie321b, b/187055290) - Se cambió el nombre de
FocusManager.clearFocus(forcedClear = true)
porFocusManager.clearFocus(force = true)
. (Ia0c41) - Se refactorizaron los usos de enumeración en clases intercaladas para evitar problemas con explicaciones exhaustivas cuando se agregan nuevos valores de enumeración. (I2b5eb)
- Quitar
@ExperimentalComposeUiApi
dePopupProperties
. (I01fa6) - Se cambió
PointerType
de una enumeración a una clase intercalada (If5058) - Las propiedades semánticas de ContentDescription y Text ya no son valores individuales, sino listas. Esto permite fusionarlas como aparecen en lugar de concatenaciones. También se proporcionaron mejores API de prueba para usar estos cambios. (Ica6bf, b/184825850)
Modifier.focusModifier()
dejó de estar disponible y se reemplazó porModifier.focusTarget()
. (I6c860)Modifier.onSizeChanged()
yModifier.onGloballyPositioned()
ya no son funciones intercaladas. (I727f6, b/186109675)- Se reemplazó la enumeración
KeyboardType
por una clase intercalada. (I73045, b/187055290) - Se reemplazó la enumeración
FocusState
por una interfazFocusState
. (Iccc1a, b/187055290) - Se reemplazó la enumeración ImeAction por una clase intercalada. (I18be5, b/187055290)
PlaceholderVerticalAlign
se convierte en una clase intercalada. (If6290)- TextUnitType ahora es una clase intercalada. (I4cba9)
- Las funciones
AnnotatedString.withAnnotation
ahora son ExperimentalTextApi en lugar de ExperimentalComposeApi. (I0cd0a)- El constructor TextUnit con TextUnitType ahora es ExperimentalTextApi en lugar de ExperimentalComposeApi.
Correcciones de errores
- Se corrigió el error que se introdujo en la versión beta07, en la que los elementos LazyColumn/Row se mostraban parcialmente después del desplazamiento. (I8c9ac, b/188566058).
- Ahora
detectDragGesures
,detectVerticalGestures
ydetectHorizontalGestures
consumirán el cambio de posición automáticamente, sin necesidad de llamar a change.consumePositionChange en las devoluciones de llamada de onDrag. (I42fc4, b/185096350, b/187320697) - Se corrigieron los LayoutModifiers que proporcionaban líneas de alineación. También se solucionó un error que provocaba que no se volviera a medir el elemento principal cuando se cambiaban las líneas de alineación de los elementos secundarios. (I4401f, b/174315652)
- Se modificó
Modifier.onGloballyPositioned()
para informar las coordenadas de este modificador en la cadena correspondiente, no las coordenadas de diseño después de aplicar todos los modificadores. Es decir, ahora el orden de los modificadores afecta las coordenadas que se informarán. (Ieb67d, b/177926591)
Versión 1.0.0-beta07
18 de mayo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta07
. La versión 1.0.0-beta07 contiene estas confirmaciones.
Cambios en la API
- Se agregó la interfaz
ViewRootForInspector
para usar en inspector. (Ib70df) SubcomposeLayoutState
ahora admite la configuración de recuento de ranuras reutilizables. El diseño mantendrá estos recuentos de ranuras activos, en lugar de desecharlos para reutilizar la ranura la próxima vez que necesite una nueva. (Ieb981)- Se reemplazó la enumeración KeyEventType por una clase intercalada. (Id670a, b/187055290)
- Se reemplazó la enumeración
FocusDirection
por una clase intercalada. (Ib6d03, b/187055290, b/184086802) - Se introdujo la capacidad de elevar el estado de SubcomposeLayout que te permite componer previamente el contenido en un slotID obligatorio, lo que agilizará la siguiente medición, ya que una vez que se realice la subcomposición con el slotID determinado, la próxima vez, no será necesaria la composición. (I42580, b/184940225)
- Se agregó el controlador de selección de clips. (Iff80d, b/183408447)
- Se quitaron las API relacionadas con la compatibilidad con LayoutInspector que ya no se usaban. (I2ac78)
Correcciones de errores
- LazyColumn/Row ahora mantendrá activos hasta 2 elementos previamente visibles (no se desechan), incluso cuando ya se desplazaron. Esto permite que el componente vuelva a usar las subcomposiciones activas cuando necesitemos componer un elemento nuevo que mejore el rendimiento del desplazamiento. (Ie5555)
- Se aplicarán
TextGeomerticTransform
yTextDecoration
enAnnotatedString
como se indica. (I61900, b/184760917)
Versión 1.0.0-beta06
5 de mayo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta06
. La versión 1.0.0-beta06 contiene estas confirmaciones.
Cambios en la API
- Se solucionó el problema con la navegación por gestos (I1145e).
@ComposeCompilerApi
ya no admite@RequiresOptIn
. (Iab690)- Se agregaron las API de accesibilidad CollectionInfo y CollectionItemInfo, que permiten marcar la colección y sus elementos para los servicios de accesibilidad. (Id54ef, b/180479017)
- Se añadió
SemanticsActions.ScrollToIndex
a fin de desplazar una lista con elementos indexados hasta aquel que tenga un índice determinado ySemanticsProperties.IndexForKey
para obtener el índice de un elemento en una lista de elementos con claves. LazyList implementa ambas acciones.- Se agregó
SemanticsNodeInteraction.performScrollToIndex
, que desplaza una lista hasta el índice dado, ySemanticsNodeInteraction.performScrollToKey
, que la desplaza hasta el elemento con la clave determinada (I4fe63, b/178483889, b/161584524)
- Se agregó
- Se agregó ownerViewId a GraphLayerLayerInfo. (I19f62)
- Se agregaron sobrecargas de Font() a fin de cargar fuentes desde recursos (File y FileDescriptor). (I5d382)
- Se agregó la API de accesibilidad
error
que permite marcar un nodo que contiene entradas no válidas. (I12997, b/180584804, b/182142737) - Se agregaron sobrecargas de
Font()
a fin de cargar fuentes desde recursos (File y FileDescriptor). (I43007) - Se agregó compatibilidad con AnnotatedString a
TextFieldValue.Saver
. Se agregaron las funciones de utilidadaddTtsAnnotation
y withAnnotation aAnnotatedString.Builder
. (I8cbdc, b/178446304) - Se agregó la función de constructor TextUnit
TextUnit(value: Float, type: TextUnitType)
(I7ecce, b/178446304).
Versión 1.0.0-beta05
21 de abril de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta05
. La versión 1.0.0-beta05 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
FocusManager.moveFocus(In)
yFocusManager.moveFocus(Out)
experimentales. (Ic5534, b/183746743) - Se agregó la API experimental de
performTextInputSelection
. (I2dcbb, b/178510628) - La interfaz de
InputEventCallback
dejó de estar disponible. No se podía usar en ninguna API pública y tampoco se utilizaba en el código. (I34a02, b/184003208) - Se dio de baja
TextLayoutResult/createTextLayoutResult
, una función pública sin uso que se había agregado para el proceso de prueba. La función no realiza ninguna acción útil en las API de texto de Compose, por lo que dejó de estar disponible y se quitará más adelante. (I80413)
Correcciones de errores
- Se corrigieron las acciones de desplazamiento de accesibilidad
ACTION_SCROLL_FORWARD
,ACTION_SCROLL_BACKWARD
,accessibilityActionScrollLeft
,accessibilityActionScrollUp
,accessibilityActionScrollRight
yaccessibilityActionScrollDown
. Ahora se desplazará de a una pantalla en la dirección que corresponda en lugar de moverse hasta el final. (Ieccb0) - Los archivos AndroidManifest de ui-test-manifest y ui-tooling-data ahora son compatibles con Android 12 (I6f9de, b/184718994).
Versión 1.0.0-beta04
7 de abril de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta04
. La versión 1.0.0-beta04 contiene estas confirmaciones.
Cambios en la API
- Cambia el nombre de
hideSoftwareKeyboard
yshowSoftwareKeyboard
enSoftwareKeyboardController
porhide()
yshow()
, respectivamente.- Proporciona la interfaz completa de CompositionLocal para LocalSoftwareKeyboardController, que permite que se configure (especialmente útil en pruebas). (I579a6).
- Se agregó la API de accesibilidad LiveRegion. Si el nodo está marcado como una región live, los servicios de accesibilidad notificarán automáticamente al usuario sobre los cambios. (Idcf6f, b/172590946)
- Se introdujo TextOverflow.Visible. (Ic8f89)
Correcciones de errores
- Se corrigió el problema cuando los elementos de
LazyColumn
/LazyRow
ubicados en los bordes se encontraban posicionados de forma incorrecta después de un lanzamiento rápido. (Ie4d13, b/183877420) - Ahora
AndroidViewBinding
quita correctamente los fragmentos aumentados a través deFragmentContainerView
cuando se quita elAndroidViewBinding
de la jerarquía de composición. (Ib0248, b/179915946) - Ahora
AndroidViewBinding
anida correctamente los fragmentos aumentados a través deFragmentContainerView
cuando tuComposeView
se encuentra dentro de unFragment
, lo que corrige problemas al guardar y restablecer el estado de esos fragmentos. (I70eb0, b/179915946) - Ahora, Compose ViewBinding depende del Fragmento
1.3.2
y muestra fragmentos aumentados de forma coherente a través deFragmentContainerView
después de los cambios en la configuración. (I0743d, b/179915946)
Versión 1.0.0-beta03
24 de marzo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta03
. La versión 1.0.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se realizó la verificación diferida para las dependencias de ViewTree de ComposeView. (I8dbbf, b/182466548)
- Se agregaron los parámetros opcionales
startX
/endX
ystartY
/endY
a las funcionesswipeUp
/swipeDown
/swipeLeft
/swipeRight
enGestureScope
. (I49e2d, b/182063305)
Versión 1.0.0-beta02
10 de marzo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta02
. La versión 1.0.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I5951e, b/168778053) - Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I84472, b/168778053) - Se quitaron los siguientes elementos
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(If16bd)
- Se marcó el elemento
SemanticsMatchers
como @ExperimentalTestApi:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(Ia600c)
- Se agregaron los siguientes elementos
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(I2f502)
Correcciones de errores
- Se aplicaron restricciones sobre el uso público de las API experimentales (I6aa29, b/174531520)
androidx.compose.ui:ui
ya no depende de AppCompat ni Fragment. Si usas ComposeView en tu aplicación y usas Fragment o AppCompat, asegúrate de usar AppCompat 1.3+ o Fragment 1.3+. Se necesitan estas versiones para establecer correctamente el ciclo de vida y los estados guardados del propietario que se requieren para ComposeView. (I1d6fa, b/161814404)- Se corrigió la falla de
rememberSaveable { mutableStateOf(0) }
cuando se usaba dentro de un destino de navigation-compose. (I1312b, b/180042685, b/180701630) - Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053) - Se corrigió el error NoSuchElementException en
tearDownRegistry()
deComposeRootRegistry
. (Iddce1)
Versión 1.0.0-beta01
24 de febrero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta01
. La versión 1.0.0-beta01 contiene estas confirmaciones.
Esta es la primera versión de Compose 1.0.0 Beta.
Cambios en la API
- Se agregó la devolución de llamada onStart a
detectDragGestures
. (I67269, b/179995594) - Ya no son experimentales los modificadores para cambiar el tamaño de las funciones intrínsecas. (I15744)
- Se cambió el nombre de MeasurementBlocks por MeasurementPolicy, que se convirtió en una interfaz divertida. Se actualizaron o simplificaron las API de diseño para que usen MeasurePolicy. (Icab48, b/167662468, b/156751158)
- Se reemplazó
InteractionState
por[Mutable]InteractionSource
.- Las interfaces son responsables de emitir o recopilar eventos de interacción.
- En lugar de pasar el elemento
interactionState = remember { InteractionState() }
a componentes comoButton
yModifier.clickable()
, usa el objetointeractionSource = remember { MutableInteractionSource() }
. - En lugar del elemento
Interaction.Pressed in interactionState
, debes usar las funciones de extensión en el objeto InteractionSource, como InteractionSource.collectIsPressedAsState(). - Para casos complejos de uso, puedes usar el elemento InteractionSource.interactions para observar el flujo de Interactions. Para obtener más información, consulta la documentación y ejemplos de InteractionSource.
- (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
- Agrega la interfaz AccessibilityMananger y LocalAccessibilityMananger en CompositionLocals. (I53520)
- Se quitaron los métodos obsoletos de LayoutCoordinates; usa la función en lugar de la propiedad para positionInParent y boundsInParent. (I580ed, b/169874631, b/175142755)
- Se reemplazó el método typealiases por tipos subyacentes:
ColorStop
ahora esPair<Float, Color>
.SpanStyleRange
ahora es AnnotatedString.RangeParagraphStyleRange
ahora esAnnotatedString.Range<ParagraphStyle>
.StringAnnotation
ahora esAnnotatedString.Range<String>
.- (I8dd1a)
- Se creó un nuevo elemento TextInputSession para sesiones de entrada a partir de componentes de texto de bajo nivel, como CoreTextField. (I8817f, b/177662148)
- Placeable ahora expone measuredSize, que representa el tamaño hasta el cual se mide realmente el diseño secundario. Es posible que este tamaño no respete las restricciones de medición. (Ib2729, b/172560206, b/172338608)
- Agrega un modificador selectionGroup que permite marcar la colección de Tabs o RadioButtons con fines de accesibilidad. (Ie5c29)
Ahora es obligatorio el uso de
defaultFactory
paracompositionLocalOf
ystaticCompositionLocalOf
en lugar de ser opcional.Este cambio quita un error de escritura potencial del tipo no anulable en los que no se proporcionó el valor predeterminado de fábrica. Anteriormente, esto hubiera proporcionado una referencia nula del tipo no anulable.
En el caso de los tipos nulos, puedes proporcionar
{ null }
como el valor predeterminado de fábrica.No recomendamos usar configuraciones locales con tipos no anulables, a menos que se pueda proporcionar un valor predeterminado razonable. Si no existe un valor predeterminado razonable, la expresión lambda
defaultFactory
debe arrojar una excepción. Sin embargo, usar una excepción significa que los usuarios de la configuración local tendrán una dependencia implícita de ella siempre que el sistema de tipos no la aplique de manera forzada. (Ifbd2a)Se quitaron los métodos obsoletos de módulos de IU. (I646f6)
Se cambiaron los nombres de los modificadores de tamaño. Se cambió el nombre de modifier.width a requiredWidth, de modifier.height a requiredHeight y de modifier.size a requiredSize. Se cambió el nombre de modifier.preferredWidth a width, de preferredHeight a height y de preferredSize a size. (I5b414)
Se quitó
Modifier.tapGestureFilter
. UsaModifier.pointerInput { detectTapGestures(...) }
en su lugar. (I266ed, b/175294473)Se quitó el consumo parcial del sistema de entrada del puntero. El método recomendado para coordinar el consumo parcial es Modifier.nestedScroll. (Ie9c9b)
Se migró Orientation al paquete de base. Se migró VelocirtTracker de ui.gesture a ui.input.pointer. (Iff4a8, b/175294473)
Ahora imageResource y vectorResource son funciones de extensión en las complementarias de ImageBitmap y ImageVector, respectivamente. Se borraron funciones
load{Image,Vector,Font}Resource
. (I89130)Se quitó AnimationClockObservable, así como sus subclases. Se quitó AnimatedFloat. (Icde52, b/177457083)
Se cambió el nombre de Providers a CompositionLocalProvider.
- El constructor Composition ya no acepta ningún parámetro clave y es obsoleto.
- Se convirtió currentCompositeKeyHash en una propiedad de nivel superior que admite composición en lugar de una función de nivel superior que admite composición.
- Se migraron CompositionData y CompositionGroup al espacio de nombres androidx.compose.runtime.tooling
- Se convirtió ComposableLambda en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
- Se convirtió ComposableLambdaN en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
- Se migró la función snapshotFlow al espacio de nombres androidx.compose.runtime
- Ya no es experimental el método de combinación de SnapshotMutationPolicy.
- Se quitó la función clearRoots de nivel superior de @TestOnly. Ya no es necesaria.
- Se quitaron las funciones keySourceInfoOf y resetSourceInfo. Ya no son necesarias.
- Se quitó el elemento Composer.collectKeySourceInformation. Ya no es necesario.
- Se quitaron los métodos joinedKeyRight, isJoinedKey y joinedKeyLeft. Ya no son necesarios.
- Se migraron y reorganizaron varias API de nivel superior en archivos diferentes. Debido a la semántica de la clase de archivos de Kotlin, se romperá la compatibilidad binaria, pero no la compatibilidad de origen, por lo que no debería ser un problema para la mayoría de los usuarios.
- (I99b7d, b/177245490)
Se quitó
ComponentActivity.setContent()
de Compose:ui. Usa la deandroidx.activity:activity-compose:1.3.0-alpha01
. Se quitaronviewModel()
yLocalViewModelStoreOwner
de Compose:ui. Usa las deandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
. (I6f36b)Se modificó Modifier.scrollable. Ahora, usa la interfaz Scrollable en lugar de la clase ScrollableController. (I4f5a5, b/174485541, b/175294473)
Se quitó la compatibilidad con CustomUniforms de PointerInputModifier. (I02707, b/175294473)
SnapshotStateObserver dejó de ser experimental (Id2e6a).
Se borraron algunas APIs obsoletas (Ice5da, b/178633932).
Se quitaron longPressGestureFilter y doubleClickGestureFilter. Usa modificador.pointerInput con funciones auxiliares, como detectTapGestures. (I2fedf, b/175294473)
Se quitó la API de String.format que refactorizó los usos en varios métodos toString para no aprovechar internamente el formato String.format. (Id1290)
Se quitaron las aserciones de dp. (I798d2)
Se quitó androidx.compose.runtime:runtime-dispatch (I55feb).
Las acciones de texto ahora comprueban el enfoque automáticamente (I13777, b/179648629).
Se quitó
runBlockingWithManualClock
. (I15cdc, b/179664814)Ahora, la posición de desplazamiento en Modifier.verticalScroll()/horizontalScroll() se representa con Ints. (I81298).
Ahora, se cambió el nombre de FlingConfig por FlingBehavior para personalizar la animación de suspensión en lugar del elemento predefinido Decays (I02b86, b/175294473)
Se agregó una función auxiliar que es útil para configurar la misma acción para todas las devoluciones de llamada de ImeAction (I63447, b/179226323).
Se quitó la devolución de llamada de SoftwareKeyboardController de todos los campos de texto que, en breve, se reemplazarán por una nueva API (Iae869, b/168778053)
Dejó de usarse FontSpan y FontWeigthStyleSpan y, por lo tanto, se quitaron. (Ie5b56, b/177423444)
Se realizaron los siguientes cambios en la API de Material:
- Se agregó el parámetro contentPadding a Top/BottomAppBar para permitir personalizar el relleno predeterminado.
- Se reorganizaron los parámetros en BackdropScaffold a fin de cumplir con los lineamientos de las API para los parámetros obligatorios antes de los parámetros opcionales.
- Se migró el parámetro
icon
en BottomNavigationItem para que sea posterior aselected
yonClick
. - Se cambió el nombre del parámetro
alwaysShowLabels
en BottomNavigationItem aalwaysShowLabel
. - Se cambiaron los nombres de los parámetros
bodyContent
en algunos componentes a solocontent
. - Se reorganizaron los parámetros en
ButtonDefaults.buttonColors()
. Ten en cuenta que, debido a que no cambió el tipo de parámetros, no se producirá un error en tu código. Asegúrate de estar usando parámetros con nombre o actualiza el orden de manera manual; de lo contrario, tu código no funcionará como antes. - Se agregó el parámetro
secondaryVariant
adarkColors()
. Por lo general, este color es el mismo que el desecondary
en el tema oscuro, pero agrega coherencia y mayor personalización. - Se quitó ElevationDefaults y animateElevation() de la superficie de la API pública, ya que no se usaban con frecuencia ni eran útiles.
- Se cambió el nombre de
onValueChangeEnd
enSlider
aonValueChangeFinished
y se hizo nulo. - Se cambió el nombre del parámetro
text
enSnackbar
acontent
para brindar coherencia. - Se agregó el parámetro
contentPadding
aDropdownMenuItem
para permitir la personalización del relleno predeterminado y se convirtiócontent
en una extensión enRowScope
. - Se cambió el nombre de
ModalDrawerLayout
aModalDrawer
. - Se cambió el nombre de
BottomDrawerLayout
aBottomDrawer
. - (I1cc66)
Correcciones de errores
- Se agregó una API para usar recursos AnimatedVectorDrawable en Compose. Usa animatedVectorResource para cargar un XML
<animated-vector>
como AnimatedImageVector y anímalo con pintorFor. (I8ea91) - Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053)
Versión 1.0.0-alpha12
10 de febrero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha12
. La versión 1.0.0-alpha12 contiene estas confirmaciones.
Cambios en la API
- Se quitó la compatibilidad con ViewGroups de UiApplier. Se quitaron los elementos emitView obsoletos que admiten composición. (Ifb214)
- Modifier.pointerInput ahora requiere claves de memoria para indicar cuándo se debe reiniciar la corrutina de detección de la entrada del puntero para las dependencias nuevas. (I849cd)
- El nombre de CompositionReference cambió a CompositionContext. (I53fcb)
- El nombre de Bounds se cambió a DpRect. (I4b32a)
- Actualización de pruebas: hasText() verificará los textos de entrada y label/hint/placeholder en el campo de texto (Iab803).
- Se movieron viewModel(), que es componible, y LocalViewModelStoreOwner a androidx.lifecycle.viewmodel.compose. Para su uso, deberás agregar una nueva dependencia androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 por separado (I7a374)
- Se permite utilizar acciones anulables en AccessibilityAction, etiquetas de cambio de acción en AccessibilityAction y CustomAccessibilityAction de CharSequence a String (I0dc82).
- Para que las convenciones de nombre coincidan mejor con ImageBitmap y con ImageVector, se cambió el nombre de ImagePainter por BitmapPainter para que sea paralelo a VectorPainter (Iba381, b/174565889)
- Se mejoraron las APIs de prueba de substring con una substring como argumento (Icbe78).
- Se agregó un objeto
Modifier.focusOrder()
que acepta un elemento FocusRequester sin especificar el orden de foco personalizado para una expresión lambda. Esto es útil cuando solo se necesita especificar una referencia en lugar de un orden de foco personalizado para un objeto componible (I4f52a, b/179180978). - Se movió ComponentActivity.setContent a androidx.activity.compose.setContent en el módulo androidx.activity:activity-compose. (Icf416)
- Se quitaron los métodos copy() y de desestructuración de varias clases en las que se usaban con muy poca frecuencia. (I26702, b/178659281)
- Se movió el elemento Popup para que sea específico de plataformas. Se cambió el nombre de AndroidPopupProperties a PopupProperties, y se movió
isFocusable
a un parámetrofocusable
enPopupProperties
. (Ieeea5) - Se movió el elemento Dialog para que sea específico de plataformas. Se cambió el nombre de AndroidDialogProperties a DialogProperties. (I4ef69, b/179138130)
- LayoutNode ahora es un elemento interno. (I8a7b1, b/175103944)
- Se reemplazó Constraints.enforce con Constraints.constrain. (I8b8ea)
- loadFontResource dejó de estar disponible. En su lugar, usa fontResource. imageResource, loadImageResource, vectorResource y loadVectorResource dejaron de estar disponibles. o painterResource. (I6b809)
- Por motivos de rendimiento, la semántica de ScrollAxisRange ahora toma expresiones lambda que muestran objetos Float en lugar de valores Float directos. (If4a35, b/178657186)
- Se agregaron una semántica de EditableText para marcar texto de entrada editable del campo de texto con fines de accesibilidad y los métodos de prueba correspondientes para verificar la semántica (I8e07a).
- Ahora OwnerLayer/OwnerScope/OwnerSnapshotObserver es un elemento interno. (I4ffaf, b/175103944)
- Se cambió el nombre de toIntPx() a roundToPx(). (I9b7e4, b/173502290)
- Se cambió el nombre de IntBounds a IntRect y se mejoró la API. (I1f6ff)
- Se actualizó la API de Snapshot para que sea más coherente con los lineamientos de API y para ocultar las clases de implementación interna en la API pública (Id9e32)
- Se agregaron las acciones de semántica para expandir y contraer. Se agregaron los elementos expand y halfExpand en ModalBottomSheetState (Ib5064).
- Modifier.dragGestureFilter dejó de estar disponible. Usa
Modifier.pointerInput { detectDragGestures (...)}
en su lugar. De forma alternativa, puedes usar Modifier.draggable para arrastrar un eje. (I0ba93, b/175294473) - Se cambió el nombre de Ambients para que coincida con Ambient -> CompositionLocal. Los elementos Ambients se solían llamar AmbientFoo; ahora los elementos CompositionLocals se llaman LocalFoo. (I2d55d)
- Se quitó el objeto BaseTextField que dejó de estar disponible. En su lugar, usa BasicTextField. (I71368)
- Se movió la selección a la base. (I7892b)
- Se quitará el objeto componible
savedInstanceState { 0 }
, de forma similar a como se quitó el objeto componiblestate { 0 }
, y ahora se promociona el uso deremember { mutableStateOf(0) }
, por ejemplo. En su lugar, se debe usarrememberSaveable { mutableStateOf(0) }
, que se guardará y restablecerá automáticamente si el tipo usado dentro de MutableState se puede almacenar en el paquete. Si antes pasabas un objeto Saver personalizado, ahora debes usar una sobrecarga nueva de rememberSaveable, que tiene el parámetrostateSaver
. Se verá de la siguiente manera:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
. (Ib4c26, b/177338004) - Se agregó una semántica de contraseña para accesibilidad. (I231ce)
- Se agregó ProgressBarRangeInfo.Indeterminate a fin de marcar barras de progreso indeterminadas para la accesibilidad. (I6fe05)
- Dejaron de estar disponibles las utilidades
emptyContent()
y(@Composable () -> Unit).orEmpty()
, dado que ya no tienen un valor ni impacto de rendimiento positivos. (I0484d) snapshotFlow
ywithMutableSnapshot
dejaron de ser experimentales. (I6a45f)- Ahora se pueden cerrar los elementos Recomposer. Si se cierran, continuarán componiendo hasta que se completen las corrutinas de elementos secundarios de composición. Se cambió el nombre de Recomposer.shutDown a cancel para que haya una diferencia con la acción de cerrar. (Ib6d76)
- Se cambió el nombre de UiSavedStateRegistry por SaveableStateRegistry y el de AmbientUiSavedStateRegistry por AmbientSaveableStateRegistry, y se movieron los dos elementos al paquete androidx.compose.runtime.saveable (I30224)
- Se cambió el nombre de androidx:compose:runtime:runtime-saved-instance-state por androidx:compose:runtime:runtime-saveable (I6dcac).
- Se borraron muchas API que dejaron de estar disponibles en el paquete de IU. (I2f2dc)
- El artefacto compose:runtime-dispatch dejó de estar disponible. Ahora se puede encontrar MonotonicFrameClock en compose:runtime y AndroidUiDispatcher en compose:ui. (Ib5c36)
- Las clases Outline.* ya no son clases de datos. (I4879e, b/178001427)
- Se quitó
view.captureToImage()
, pero no tiene reemplazo. (I7fcd2) - Se introdujo la API de ColorMatrix para modificar valores RGB de contenido fuente y se refactorizó la API de ColorFilter para que sea una interfaz y coincida con la implementación de PathEffect. (Ica1e8)
- Se agregó el parámetro layoutDirection al objeto createOutline del elemento Shape. Esto permite crear formas que reconozcan la dirección en el diseño. (I57c20, b/152756983)
- onImeActionPerformed dejó de estar disponible. En su lugar, usa KeyboardActions. (If0bbd, b/179071523)
- Se introdujo un elemento de contexto de corrutinas
InfiniteAnimationPolicy
que se aplicará en animaciones infinitas. No se instala ninguna política de forma predeterminada, excepto cuando se ejecutan pruebas conComposeTestRule
. (I50ec4, b/151940543) - Se quitó el elemento canDrag de Modifier.scrollable. (Id66e7, b/175294473)
- Se cambió el nombre de LayoutCoordinates.parentCoordinates por LayoutCoordinates.parentLayoutCoordinates para habilitar una propiedad parentCoordinates nueva. Ahora, la propiedad parentCoordinates ofrece el elemento superior LayoutCoordinates del modificador. Esto permitirá crear casos de uso más completos para onSizeChanged() y onGloballyPositioned() (Idfbfd, b/177926591).
- Los elementos tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter y pressIndicaitonGestureFilter dejaron de estar disponibles. En su lugar, usa Modifier.clickable o Modifier.pointerInput con la función detectTapGestures. (I6baf9, b/175294473)
- Se quitó el elemento unregisterProvider de SaveableStateRegistry. Ahora, registerProvider() muestra el objeto SaveableStateRegistry.Entry, que se puede usar para cancelar un registro. (Ic4274, b/178583739)
- Se cambió el nombre de rememberSavedInstanceState() a rememberSaveable() y se movió al paquete androidx.compose.runtime.saveable. (I1366e, b/177338004)
- Se quitaron los elementos CoreText y CoreTextField de la API pública.
- Se quitó la sobrecarga SelectionContainer que dejó de estar disponible.
- (I99c19)
- Las pruebas en las que se usa Compose en jerarquías que directamente se agregan a WindowManager o se quitan de allí ahora son más estables (Ie81ed, b/175765614)
- Se quitó Recomposer.current(). Ahora [Abstract]ComposeView es la opción predeterminada para los elementos Recomposer aplicados a ventanas y creados de forma diferida que controla ViewTreeLifecycleOwner para la ventana. La recomposición y las marcas de animación basadas en withFrameNanos-based se pausan cuando se detiene el ciclo de vida del host. (I38e11)
- Recomposer.runningRecomposers ahora ofrece un StateFlow global de RecomposerInfo de solo lectura para observar el estado de la composición en proceso. Se prefiere esta API en lugar de Recomposer.current(), que dejó de estar disponible. (If8ebe)
- Se movieron a androidx.compose.runtime.saveable los elementos Saver, listSaver(), mapSaver() y autoSaver de androidx.compose.runtime.savedinstancestate (I77fe6).
- El objeto EditCommands acepta AnnotatedString. Sin embargo, este cambio es solo para la API, y la edición de texto multiestilo aún no se implementó (I4c3ea)
- Se quitaron los elementos Uptime y Duration. (Ib9bf4, b/177420019)
- Se movió CompositionData.asTree() y las APIs relacionadas al módulo independiente ui-tooling-data, y se marcaron como experimentales (Ic95b8).
- Se cambió el nombre de los parámetros en RounderCornerShape, CutCornerShape y CornerBasedShape de left/right a start/end para admitir la duplicación automática de la forma en la dirección de derecha a izquierda. Se introdujeron los objetos AbsoluteRounderCornerShape y AbsoluteCutCornerShape para los casos en los que no se prefiere la duplicación automática. (I61040, b/152756983)
Se refactorizó la API a la que orienta el complemento de compilador de Compose para usar una interfaz en lugar de una clase concreta. La interfaz ya dejó de usar un parámetro de tipo.
Este es un cambio interno que no debería afectar la compatibilidad del código fuente, pero es un cambio rotundo del objeto binario. (I3b922, b/169406779)
Se quitó la función StringBuilder.deleteAt, que se volvió pública de forma no intencional. (Id6ed9)
Correcciones de errores
- Los objetos ComposeView ubicados en jerarquías de vistas que son elementos secundarios de otra composición ahora alojan composiciones secundarias de sus entidades principales (I92883).
- Se actualizó la API de imageFromResource de Compose para volver a utilizar la caché del elemento de diseño del recurso cuando se cargan objetos ImageBitmap. (If3627, b/178751994)
Versión 1.0.0-alpha11
28 de enero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha11
. La versión 1.0.0-alpha11 contiene estas confirmaciones.
Cambios en la API
- WithConstraints se rediseñó y nombró BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
- Key.DPadUp dejó de estar disponible. En su lugar, usa Key.DirectionUp. (Iab335, b/177954892)
- A partir de ahora, la interfaz de propietario es interna. (If8e35)
- Se agregó la API de FocusManager.moveFocus() para mover el enfoque de manera programática. (I045cb, b/177681839)
- Se cambió PopupPositionProvider para usar coordenadas relativas de ventana, no coordenadas globales. Se cambió el nombre de parentGlobalBounds a anchorBounds y se modificó windowGlobalBounds para que sea windowSize: IntSize. (I2994a)
- Duration y Uptime se reemplazarán por Long en milisegundos, y este paso quitará la dependencia de entrada del puntero en esas clases (Ia33b2, b/175142755, b/177420019)
- Se agregó AmbientSavedStateRegistryOwner de manera similar al AmbientLifecycleOwner y AmbientViewModelStoreOwner existentes. (I9a3e8, b/176756365)
- Se actualizó la API de gráficos vectoriales para admitir el análisis del tono aplicado a la raíz de los gráficos vectoriales (Id9d53, b/177210509)
- Se agregó toolType a PointerInputChange para diferenciar dispositivos. (Iac787, b/175142755)
- Se cambió el nombre de AmbientWindowManager por AmbientWindowInfo (I2686a, b/177084714, b/177084983).
- Los métodos de coordenadas globales dejaron de estar disponibles y se crearon nuevos métodos de coordenadas basados en ventanas. (Iee284)
- Se agregó Modifier.toolingGraphicsLayer, que agrega un modificador de capas de gráficos cuando se activa la inspección. (I315df)
- Ahora, FocusRequester.createRefs se marca como experimental, ya que podría sufrir cambios. (I2d898, b/177000821)
- Se cambió el nombre de SemanticsPropertyReceiver.hidden a invisibleToUser y se marcó como @ExperimentalComposeUiApi. Se cambió el nombre de AccessibilityRangeInfo a ProgressBarRangeInfo, y el de stateDescriptionRange a progressBarRangeInfo. Se cambió el nombre de AccessibilityScrollState a ScrollAxisRange, el de horizontalAccessibilityScrollState a horizontalScrollAxisRange, y el de verticalAccessibilityScrollState a verticalScrollAxisRange. (Id3148)
- Se quitó PointerInputData y se modificó el PointerInputChange para otorgarle todos los campos de PointerInputData. Se convirtieron en internos los elementos PointerInputEvent y PointerInputEventData debido a que no se usan en ninguna API pública. (Ifff97, b/175142755)
- Se actualizó GraphicsLayerScope para implementar la densidad a fin de admitir las conversiones de dp en píxeles sin procesar. (Ied528, b/176819695)
- Se actualizó la API de Matrix para seguir el orden de las filas principales y proporcionar constantes de índice para ayudar con las conversiones entre diferentes representaciones de matrices y hacer coincidir la lógica de conversión de framework entre SkMatrix y Matrix4 de forma interna. (I432e6)
- Se quitaron los métodos experimentales de monotonicFrameAnimationClockOf (Ib753f, b/170708374).
- Se traslada String.fintPrecedingBreak y String.fingFollowingBreak a InternalTextApi. (I657c4)
- Se quitó androidx.compose.ui.util.isSurrogatePair de la API pública. (Ia9494)
- Se cambió el nombre de TransformedText.transformedText a TransformedText.text.
- TransformedText ya no es una clase de datos. (Ie672a)
- Se quitó
data class
de las siguientes clases:- InlineTextContent
- LocaleList (I605c7)
- Las siguientes clases ya no son clases de datos:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
- Se cambió VisualTransformation para que sea una interfaz funcional. (I3bba4)
- Se agregó un tipo de parámetro de referencia de función. (I5e1bd)
- Se agregaron límites transformados a InspectorNode. (Ice42f)
Correcciones de errores
- onCommit, onDispose y onActive dejaron de estar disponibles, y se los reemplazó por las APIs de SideEffect y DisposableEffect (If760e).
Se realizaron cambios en las funciones de fábrica de Font/FontFamily/Typeface.
- Se agregaron funciones de fábrica que comienzan con mayúscula.
- Las funciones anteriores con letra minúscula dejaron de estar disponibles.
- Las nuevas funciones de fábrica muestran la FontFamily en lugar de subclases.
- Se ocultaron los constructores de las subclases, por lo que solo se pueden construir mediante funciones de fábrica.
- Se cambió el nombre de Font.asFontFamily a Font.toFontFamily. (I42aa7)
Se agregó
ComposeContentTestRule
, que extiendeComposeTestRule
y definesetContent
, que se quitó deComposeTestRule
. Se agregó un métodocreateEmptyComposeRule()
de fábrica que muestra unComposeTestRule
y no inicia una Activity para ti. Usa este método cuando quieras iniciar tu Activity durante una prueba, p. ej., conActivityScenario.launch
. (I9d782, b/174472899).animateAsState ahora es animateFooAsState, donde Foo es el tipo de variable que se anima, p. ej., Float, Dp, Offset, etc. (Ie7e25)
Se agregó un parámetro de descripción de contenido a Image y Icon. Este se usa para proporcionar una descripción a los servicios de accesibilidad. (I2ac4c)
Como debe evitarse displaySize, este debe quitarse. En general, es mejor usar el tamaño de onRoot() o, al menos, el tamaño de la ventana. (I62db4)
OnSizeChanged informó el tamaño del contenido del diseño. Ahora informa el tamaño en su posición dentro de la cadena de modificador. (I36b78, b/177562900)
La API de emit() y todas las sobrecargas dejaron de estar disponibles y cambiaron de nombre a ComposeNode. Las API son idénticas; solo tienen un nombre diferente para seguir las convenciones de nomenclatura de Compose. (I4137b)
TextFieldValue acepta AnnotatedString. Sin embargo, este cambio es solo para la API y la edición de texto multiestilo todavía no se implementó.
- Se quitó
initial
de los parámetros del constructor EditingBuffer. (I326d5)
- Se quitó
invalidate y compositionReference() dejaron de estar disponibles y se reemplazaron con currentRecomposeScope y rememberCompositionReference, respectivamente. (I583a8)
AnnotatedString se modificó para que se extendiera de kotlin.CharSequence. Por lo tanto, la longitud y subSequence ahora son funciones de instancia, y se quitaron las funciones de extensión. (Iaf429)
CompositionLifecycleObserver dejó de estar disponible y se reemplazó por RememberObserver.
RememberObserver
es un reemplazo deCompositionLifecycleObserver
con una semántica modificada y métodos con nombres cambiados. El cambio a la API nueva se puede realizar de manera mecánica para objetos que solo se recuerdan una vez y sigue siendo la práctica recomendada. Sin embargo, si se olvidó una referencia más de una vez en una composición, se llama aonRemembered
para cada referencia en la queonEnter
solo se llama una vez. Antes, se llamaba aonEnter
varias veces si el objeto se usaba en subcomposiciones, comoWithConstraints
yScaffold
, por lo que la garantía de la única llamada aonEnter
no era confiable. Por lo tanto, se quitó deRememberObserver
.RememberObserver
agregaonAbandoned
, que se llama si la devolución de llamada pasada aremember
muestra la instanciaRememberObserver
, pero como esta no se recuerda en el estado de composición, nunca se llamará aonRemembered
. Esto puede ocurrir si una excepción termina la composición antes de completarla, o bien si la descarta, ya que el estado que estaba produciendo una composición ya no está vigente o no se necesita. Si la instancia deRememberObserver
que sigue a la recomendación de referencia única anterior realiza el seguimiento de un recurso externo, tantoonForgotten
comoonAbandoned
indicarán que el recurso ya no es necesario. Si el objeto realiza un seguimiento del trabajo que se inició o los recursos asignados enonRemembered
, se puede ignorar aonAbandoned
, ya que no se llamará si se llama aonRemembered
. (I02c36)Las operaciones aritméticas entre 2 o más TextUnits dejaron de estar disponibles. Las funciones TextUnit.Sp y TextUnit.Em dejaron de estar disponibles antes que las funciones de extensión, como Int.sp y Int.em. (I48369)
De forma predeterminada, los recursos de las bibliotecas sin recursos públicos declarados de manera explícita (p. ej., a través de public.xml) son privados. (Ia1dcc, b/170882230)
ScrollableColumn y Row dejaron de estar disponibles. El uso de ScrollableColumn es menos eficiente en comparación con LazyColumn cuando tienes contenido que lleva mucho desplazamiento, ya que con LazyColumn solo se podía componer, medir o dibujar elementos visibles. Para evitar que los usuarios sufran la ineficiencia, decidimos dar de baja ScrollableColumn y ScrollableRow para promover el uso de LazyColumn y LazyRow. Los usuarios aún pueden decidir no usar el comportamiento diferido y recurrir a los modificadores directamente de la siguiente manera: Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083).
Se agregó un método de fábrica
items(count: Int)
nuevo para el alcance de LazyColumn/LazyRow/LazyVerticalGrid.items(items: List)
yitemsIndexed(items: List)
ahora son funciones de extensión, así que debes importarlas manualmente cuando las uses. Se agregaron sobrecargas de extensiones nuevas para Arrays:items(items: Array)
yitemsIndexed(Array)
. (I803fc, b/175562574)Usa ImeAction.None en lugar de ImeAction.NoAction.
- Usa ImeAction.Default en lugar de ImeAction.Unspecified. (Ie1bcc)
Se implementó TestCoroutineDispatcher en pruebas. (I532b6)
Se cambió el nombre de TextInputService.onStateUpdated a updateState. (Id4853)
La transición TransitionDefinition-based dejó de estar disponible. (I0ac57)
Se quitó TextUnitType.Inherit. En su lugar, usa TextUnitType.Unspecified. (I9ff64)
Versión 1.0.0-alpha10
13 de enero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha10
. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Cambio rotundo
La reestructuración del compilador interno de la API permite realizar cambios por lote en los nodos que se generan a partir de la composición a la fase "aplicar cambios", después de que se completan todas las funciones
@Composable
.Este es un cambio rotundo de comportamiento que podría afectar el código de la aplicación, dado que los nodos ya no estarán disponibles en las API internas ni en las experimentales hasta que se hayan aplicado los cambios. Por lo general, se puede evitar si se envuelve el código con esas dependencias en un elemento componible
SideEffect
para diferir la ejecución del código hasta que se hayan creado e inicializado los nodos. (I018da)
Cambios en la API
- Se agregó Modifier.focusOrder(), que se puede usar para especificar un orden de recorrido de foco personalizado (I90cf5, b/175899543, b/170155556, b/170155429).
- Se quitó focusObserver, que era obsoleto. En su lugar, utiliza onFocusChanged o onFocusEvent. (I3ecb9, b/175156387)
- Se realizaron cambios en la API de EditOperations.
- Se cambió el nombre de EditOperation a EditCommand.
- Se agregó el sufijo Command para implementaciones concretas de EditOperation.
- Las EditCommand ya no son clases de datos.
- Se cambió el nombre de la función EditOperation.process a applyTo.
- Se cambió el nombre de InputEventListener a InputEventCallback.
- (I0a366)
- Se quitaron PxSquared, PxCubed y PxInverse sin usar. Se modificó Size.center() para que sea una propiedad. (I973f7)
- El módulo ui-test ahora podrá configurar la creación de Recomposer para las IUs que se están probando (Ibebd8).
- Se modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
- Se cambió el nombre de
@ExperimentalTesting
por@ExperimentalTestApi
para que sea coherente con anotaciones de API experimentales similares (Ia4502, b/171464963). - Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
- Se quitaron las clases DpInverse, DpSquared y DpCubed sin usar. (I4d62b)
- Se cambió el nombre de Constraints#satisfiedBy a isSatisfiedBy. (I9cf5c)
- Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (I72fd1)
- Se agregó isSpecified, isUnspecified y useOrElse para las clases intercaladas con una constante Unspecified. (I93f7b, b/174310811)
Se expandieron las APIs de [Abstract]ComposeView para permitir el reciclado de las vistas basadas en Compose, ya que se dispone la composición para volver a recrearla más adelante. Se agregaron API para instalar y descubrir elementos Recomposer y CompositionReferences aplicados a ventanas, con el objetivo de crear composiciones secundarias.
Se agregó ViewCompositionStrategy para configurar la estrategia de descarte de composición de [Abstract]ComposeViews; el comportamiento predeterminado es que se descarta cuando se desconecta la ventana. (I860ab)
Se quitó la API pública de Any.identityHashCode(). (I025d7)
Se quitó la API de toStringAsFix para dar lugar al uso de String.format directamente. (Iaba6b)
Se agregó la opción de activar o desactivar el Strings.kt de Foundation. (I4a5b7, b 172366489)
Se trasladó nativeClass al módulo de IU y se la convirtió en clase interna. Se actualizaron los usos de nativeClass en implementaciones iguales a usar “es MyClass” en su lugar. (I4f734)
Modifier.focus() y Modifier.focusRequester() dejaron de estar disponibles. En su lugar, usa Modifier.focusModifier() y Modifier.focusReference(). (I75a48, b/175160751, b/175160532, b/175077829)
Se agregó SelectionRegistry.notifySelectableChange para notificar a SelectableManager las actualizaciones de Selectable. (I6ff30, b/173215242)
Se introdujo la propiedad Outline.bounds para obtener el rectángulo delimitador de varias implementaciones de contorno. (I16e74, b/175093504)
TestUiDispatcher dejó de estar disponible. En su lugar, usa Dispatchers.Main. (Ic171f, b/175385255)
ImeOptions y KeyboardOptions ya no son clases de datos. (I3c898, b/168684531)
Se realizaron cambios en la API de VisualTransformation.
- Se cambió el nombre de OffsetMap a OffsetMapping.
- Se cambió el nombre de OffsetMapping.identityOffsetMap a OffsetMapping.Identity.
- PasswordTransformation ya no es una clase de datos.
- Se movió OffsetMapping a su propio archivo.
- (I0bdf3)
Se cambió el nombre de Position a DpOffset y se quitó getDistance(). (Ib2dfd)
Se cambió la función Dp.isFinite() a un valor Dp.isFinite. (I50e00)
Correcciones de errores
- Recomposer ahora muestra un flujo de estado actual, lo que permite supervisar su actividad y la actividad de los efectos asociados. (Ifb2b9)
- Ahora se puede acceder al keyEvent nativo a través de keyEvent.nativeKeyEvent (I87c57 o b/173086397).
- Se reemplazó
animate()
conanimateAsState()
, que muestraState<T>
, en lugar deT
. Esto mejora el rendimiento, ya que el alcance de la invalidación se puede limitar a donde se lee el valor State. (Ib179e) - Se agregó la API de función de Semantics y Role como parámetro para SemanticsModifier que se puede seleccionar, activar o desactivar, y en el que se puede hacer clic. Se cambió Modifier.progressSemantics para que Slider también pudiera usarlo. (I216cd)
- Se agregó la nueva API de
Animatable
basada en corrutinas que garantiza la exclusividad mutua entre sus animaciones.- Se agregó DecayAnimationSpec para admitir animaciones de disminución multidimensionales.
- (I820f2, b/168014930)
Versión 1.0.0-alpha09
16 de diciembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha09
. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Cambios en la API
- Se quitó el elemento KeyEvent.Alt obsoleto. Ahora, en su lugar, usa KeyEvent.isAltPressed. (Idd695)
- Modifier.keyInputFilter y Modifier.previewKeyInputFilter dejaron de estar disponibles, por lo que se debe usar Modifier.onKeyEvent y Modifier.onPreviewKeyEvent en su lugar. (Idbf1b, b/175156384)
- Dejó de estar disponible el elemento Modifier.focusObserver. En su lugar, usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)
- Se cambió el nombre de HandlePointerInputScope por AwaitPointerEventScope y el de handlePointerInput() por awaitPointerEventScope() para las APIs de entrada de puntero de suspensión (Idf0a1, b/175142755).
- Ahora la API de autocompletado es una experimental y requiere que la habilites (I0a1ec).
- Se agregaron declaraciones de desestructuración para crear instancias de FocuSRequester (I35d84, b/174817008).
- Se cambió el nombre de accessibilityLabel por contentDescription y el de accessibilityValue por stateDescription (I250f2)
- Se quitaron los eventos personalizados de la API de entrada de puntero de suspensión (Ia54d5, b/175142755).
- Se introdujeron varias funciones nuevas en SelectionRegistrar y también se cambió el nombre de onPositionChange por notifyPositionChange (Ifbaf7)
- Se marcaron más miembros de LayoutNode como internos. (I443c6)
- Se introdujo LayoutInfo para usarlo con herramientas y pruebas. (I9b190)
- AndroidOwner se hizo interno. (Ibcad0, b/170296980)
- Se quitó la anotación ExperimentalPointerInput. (Ia7a24)
- Se agregó el sistema de desplazamiento anidado. Consulta Modifier.nestedScroll para obtener más detalles. (I36e15, b/162408885)
- subcomposeInto(LayoutNode) se hizo interno. (Id724a)
Se modificó la interfaz de
Applier
para simplificar la creación de árboles de abajo hacia arriba en lugar de arriba hacia abajo.Se cambió el nombre del método
insert()
porinsertTopDown()
.Se agregó un método nuevo:
insertBottomUp()
.Un aplicador inserta cualquiera de los nodos en el árbol que edita con
insertTopDown()
oinsertBottomUp()
según el que tenga mejor rendimiento.Algunos árboles, como
LayoutNode
yView
, son mucho más eficientes para compilar hacia arriba que hacia abajo. Antes de este cambio, se necesitaba una pila de inserciones para implementar la compilación de abajo hacia arriba, que debía copiarse en cada aplicador que necesitaba una construcción de abajo hacia arriba para funcionar. Con este cambio, un elementoApplier
anulainsertBottomUp()
para compilar un árbol de abajo hacia arriba yinsertTopDown()
para compilar el árbol de arriba hacia abajo. (Icbdc2)Se agregaron las propiedades dismissOnBackPress y dismissOnClickOutside s AndroidDialogProperties. Estas permiten configurar el momento en el que se invocará el método onDismissRequest lambda del diálogo. (If5e17)
Se agregó la API de painterResource para controlar objetos de Painter que se cargan de manera opaca desde formatos de recursos en trama (como PNG) o VectorDrawable. Los usuarios ya no tienen que determinar el tipo de recurso por adelantado y pueden llamar a este método para obtener un objeto Painter que se pueda usar en los elementos de Image que admiten composición o los modificadores de Painter. (I2c703, b/173818471)
Se agregó Modifier.clearAndSetSemantics para borrar la semántica de los derivados y establecer nuevas. (I277ca)
Se movió ContentDrawScope al módulo ui-graphics para que esté con DrawScope. (Iee043, b/173832789)
Se introdujo la API de gráficos de PathEffect para proporcionar diferentes patrones a las formas con trazos. Se dejó de usar NativePathEffect y se reemplazó por la implementación real o esperada de PathEffect. (I5e976, b/171072166)
Se agregaron interfaces de IdlingResource a Compose como variantes admitidas de los recursos inactivos de Espresso para Compose. Se pueden registrar y cancelar su registro mediante ComposeTestRule. (I433f3)
Se quitó el registro global de ComposeIdlingResource y de los relojes en ComposeIdlingResource, o bien la cancelación de sus registros (I32660).
Correcciones de errores
- Las expresiones lambda en los modificadores de compensación ahora muestran IntOffset en lugar de Float. (Ic9ee5, b/174137212, b/174146755)
Se quitó SlotTable, SlotReader y SlotWriter de la API pública. Anteriormente, se marcaban como InternalComposeAPI. Ahora, son elementos internos del módulo de Compose.
Se agregaron ComposiciónData y ComposiciónGroup como reemplazo de la API de ui-tooling para que se usen con el fin de extraer información de composición. Son públicos, pero no están destinados para su uso fuera de la API de ui-tooling, ya que proporcionan la información sin procesar que interpreta la API de ui-tooling. (I31a9c)
Se refactorizó ShaderBrush para crear de forma diferida una instancia de sombreador cuando está disponible la información sobre el tamaño del entorno de dibujo. Esto es útil para definir gradientes que ocupan todos los límites de dibujo de un elemento componible en el momento de la composición, sin tener que llevar a cabo implementaciones personalizadas de DrawModifier.
Dejaron de estar disponibles las API del constructor de la función de gradiente y se reemplazaron por los métodos de fábrica en un objeto de gradiente. (I511fc, b/173066799)
Dejaron de estar disponibles los objetos LazyColumnFor, LazyRowFor, LazyColumnForIndexed y LazyRowForIndexed. En su lugar, usa LazyColumn y LazyRow. (I5b48c)
Dejó de estar disponible BuildCompat.isAtLeastR. (Idb37e)
Se agregó la función de fábrica buildAnnotatedString para compilar un elemento AnnotatedString. Dejó de estar disponible la función del compilador de annotatedString. (Idfe0b)
Se quitaron métodos de extensión en los elementos Float y Double para convertir valores a radianes. Se movieron a una función privada dentro de la implementación de PathParser, que es el único lugar en el que se usaban (I25f52).
Versión 1.0.0-alpha08
2 de diciembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha08
. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se agregó la acción de semántica Descartar. (I2b706)
- Se movieron las API de DrawModifier del paquete androidx.compose.ui a androidx.compose.ui.draw. Se creó el archivo DrawModifierDeprecated.kt para que incluya los métodos typealiases/helper para asistir en la migración de las APIs que dejaron de estar disponibles a las actuales. (Id6044, b/173834241)
- Se cambió el nombre de Modifier.drawLayer a Modifier.graphicsLayer y se actualizaron las clases relacionadas con GraphicsLayer según los comentarios de la API. (I0bd29, b/173834241)
- Se agregaron los métodos nuevos placeable.placeWithLayer() y placeable.placeRelativeWithLayer() que permiten que los diseños personalizados y los modificadores de diseño ubiquen un elemento secundario introduciendo una capa de gráficos como dibujo. En consecuencia, podemos primero optimizar los diseños nuevos de modo que, cuando se necesite trasladar un elemento secundario, no haya que volver a dibujar su contenido. Luego, se podrán aplicar transformaciones de dibujo para un elemento secundario (Ibd8f6, b/170296989, b/171493718, b/173030831).
- Se quitó
<T>
de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8) - Se agregaron APIs de Modifier.scale/rotate como convenientes para drawLayer.
- Se cambió el nombre de
Modifier.drawOpacity
aModifier.alpha
. - Se cambió el nombre de
Modifier.drawShadow
aModifier.shadow
. (I264ca, b/173208140)
- Se cambió el nombre de
- Los campos de posición y tiempo de actividad de PointerInputData se hicieron no nulos. (Id468a)
- MaterialTheme ahora configura los colores correctos para los controladores y el fondo de selección. Las apps que no son de Material pueden usar AmbientTextSelectionColors de forma manual para personalizar los colores usados para la selección. (I1e6f4, b/139320372, b/139320907)
- Se agregó WindowManager.isWindowFocused para comprobar si la ventana del host está enfocada y un objeto WindowFocusObserver que proporciona una devolución de llamada onWindowFocusChanged. (I53b2a, b/170932874)
- Se actualizó la API de TransformOrigin para obtener una sintaxis de desestructuración que muestre
pivotFractionX
ypivotFractionY
comocomponent1
ycomponent2
. (If43c4, b/173586560) - Se agregó la comprobación de lint para el nombre y la posición del parámetro lambda componibles para verificar la coherencia con los lineamientos de Compose.
También se migraron algunas API que usaban
children
como nombre de su lambda al final acontent
, según la comprobación y orientación de lint. (Iec48e) - Se agregó una API para verificar si se habían presionado las teclas modificadoras Alt, Ctrl, Meta o Mayúsculas cuando se enviaba KeyEvent. (I50ed9)
- Se agregó una nueva sobrecarga de
Modifier.drawLayer()
. Toma un bloqueo de lambda en un objeto GraphicsLayerScope nuevo donde se definen los parámetros de la capa de una forma que permita omitir la recomposición y la creación de un diseño nuevo cuando se produce el cambio de estado. DrawLayerModifier ahora es un elemento interno en la preparación para migrar su lógica al método placeable.placeWithLayer() de LayoutModifier (I15e9f, b/173030831). - Los entornos Ambient con el nombre
Ambient
como sufijo dejaron de estar disponibles, y se los reemplazó por nuevas propiedades con el prefijo Ambient, en función de otros lineamientos de la API de Compose y Ambients. (I33440) - Se trasladó
androidx.compose.ui.text.Typeface
aandroidx.compose.ui.text.font.Typeface
. (Ic2b81) - Se cambió el nombre del argumento de semántica mergeAllDescendants a mergeDescendants. (Ib6250)
- Se incluyó un nuevo detector del gesto arrastrar en la API de entrada de puntero de suspensión, que también admite el bloqueo de orientación. (Icef25)
- Se cambió el nombre de VectorAsset por ImageVector y se movió VectorAsset a Builder para que sea una clase de ImageVector de acuerdo con los lineamientos de la API. Se agregó un typealias de VectorAssetBuilder para vincularlo a ImageVector.Builder por motivos de compatibilidad (Icfdc8)
- Se cambió el nombre de ImageAsset y los métodos relacionados a ImageBitmap. (Ia2d99)
- Se agregó el parámetro zIndex para el objeto place() de PlacementScope, de modo que Modifier.zIndex() ahora funciona como LayoutModifier y cualquier diseño personalizado puede establecer parámetros zIndex para sus elementos secundarios en el bloque de posición. (I711f7, b/171493718)
- Se trasladaron las propiedades de semántica básica a la IU (I6f05c).
- Dejaron de estar disponibles place(Offset) y placeRelative(Offset). En su lugar, usa sobrecargas con compensaciones de Int. (I4c5e7).
- Se quitaron APIs que dejaron de estar disponibles, como Modifier.onPositioned. En su lugar, usa Modifier.onGloballyPositioned. Se quitó Modifier.onDraw y se debe usar Modifier.onDrawBehind. Se quitó Modifier.plus y se debe usar Modifier.then. Se quitó Color.Unset y se debe usar Color.Unspecified. Se quitó la clase PxBounds. En su lugar, usa Rect. (Ie9d02, b/172562222)
- Se actualizó la interfaz de Alignment y se hizo funcional. (I46a07, b/172311734)
- Se agregó el detector de gestos para presionar, presionar dos veces, mantener presionado y la indicación de presión mediante la nueva entrada de puntero suspendida. También se agregaron algunas utilidades que facilitan la tarea de los desarrolladores para escribir sus propios detectores de gestos. (I00807)
- Se cambió el nombre de
id
alayoutId
paraLayoutIdParentData
. Se cambió el nombre deMeasurable.id
aMeasurable.layoutId
. (Iadbcb, b/172449643) - Se agregó un nuevo detector de gestos multitáctil que incluye asistentes para detectar acciones de rotación, zoom y desplazamiento. (Ic459d)
- Se introdujeron las APIs de SweepGradientShader y SweepGradientBrush (Ia22c1)
- El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
Se agregaron APIs de desplazamiento basadas en corrutinas:
Se agregaron LazyListState.snapToItem y LazyListState.smoothScrollBy, al igual que API de niveles inferiores para controlar el desplazamiento. Estas API proporcionan una interfaz de suspensión para controlar el desplazamiento que espera hasta que la acción finalice antes de mostrar el resultado. (Ie5642)
Se agregó Modifier.focusable en Foundation. Usa este elemento para agregar comportamiento enfocable a un componente con semántica y accesibilidad correctas. (I41eb9, b/152525426, b/162865824)
Se proporcionaron implementaciones predeterminadas de métodos y propiedades en AnimationClockTestRule que se pueden delegar a su
clock
(I7ea3d, b/173399709).AndroidComposeTestRule ahora puede aceptar selectores de actividad personalizados. (Ib8288, b/153623653, b/154135019)
Dejó de estar disponible TextLayoutResult.getLineVisibleEnd. Como reemplazo, TextLayoutResult.getLineEnd ahora tiene un parámetro visibleEnd nuevo. (I73282)
Se actualizó la API de TextFieldValue.
- TextFieldValue.composition se hizo de solo lectura.
- Se quitó la excepción que se arrojaba para el rango de selección no válido. (I4a675, b/172239032)
Se agregó compatibilidad con TtsAnnotation para el motor de texto a voz. (I54cc6)
Se agregaron APIs nuevas para las animaciones que se ejecutan en corrutinas (Ied662).
Correcciones de errores
- Se cambió el nombre del parámetro de alineación de Box a contentAlignment. (I2c957)
- Se cambiaron los nombres de los modificadores de offsetPx a offset. Ahora toman parámetros lambda en lugar de State. (Ic3021, b/173594846)
- Se agregó el parámetro resetInput a TextInputService#onStateUpdated. (I3e8f5, b/172239032, b/171860947)
- Se agregó una comprobación de lint para los parámetros de modificación en funciones de componibilidad. Esta comprobación de lint verifica el nombre, el tipo de datos que se muestra, el valor predeterminado y el orden del parámetro para mantener la coherencia con los lineamientos de Compose. (If493b)
- Se agregó una opción temporal para permitir que MonotonicFrameClock controle a TestAnimationClock. (I1403b, b/173402197)
- Se agregó el wrapper Typeface de Android. Puedes cargar un Typeface de Android mediante la función
typeface
; es decir,typeface(Typeface.DEFAULT)
. También se cambió el nombre detypefaceFromFontFamily()
atypeface()
. (I52ab7) - Se agregó una comprobación de lint para verificar que las funciones de fábrica de Modifier se definan como extensiones en Modifier, de modo que se puedan encadenar con fluidez (I07981)
- Se quitó el módulo ui-tests y sus stubs. (I3a7cb)
- Recomposer ya no acepta EmbeddingContext. Las dependencias de programación requeridas se obtienen de effectCoroutineContext. FrameManager dejó de estar disponible. Las integraciones de plataforma deben inicializar su propio manejo global de instantáneas. (I02369)
- Se pasa la información de estilo al nodo de accesibilidad. (If5e8d)
- Se cambió el nombre de TextUnit.Inherit a TextUnit.Unspecified para mantener la coherencia con otras unidades. (Ifce19)
Compose UI versión 1.0.0-alpha07
11 de noviembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha07
. La versión 1.0.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se introdujo la clase intercalada ScaleFactor para representar factores de escala de los ejes horizontales y verticales independientes para admitir casos de uso de escalamiento no uniforme.
- Se agregó el método computeScaleFactor a ContentScale.
- Se agregó ContentScale.FillBounds para realizar escalamientos no uniformes a fin de estirar los límites de src y completar el destino.
- Se agregaron métodos de operador para calcular los parámetros de ScaleFactor con los parámetros Size.
- (Ic96a6, b/172291582)
- Se agregaron las fábricas BiasAlignment y BiasAbsoluteAlignment para crear alineaciones. (Iac836, b/169406772)
- El desarrollador puede eliminar el enfoque de manera forzada. (I90372)
- Se corrigió un error que provocaba que no se dibujara la elevación para vistas dentro de Compose. (If7782)
- Se creó la API de onDrawBehind dentro de ContentDrawScope para que la convención de nombres coincida con Modifier.drawBehind. (I4fc3a, b/171955269)
- Se agregó compatibilidad con la distancia de la cámara para complementar las transformaciones 3D rotationX/rotationY en las API de Layers. (I40213, b/171492100)
- Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
- Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
- Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
- Se quitó la opacidad del modificador drawShadow(), ya que era confusa. (I82c62, b/171624638)
- Se quitó MeasureResult de MeasureScope. (Ibf96d, b/171184002)
- Varios símbolos relacionados con el diseño se movieron de androidx.compose.ui a androidx.compose.layout.ui. (I0fa98, b/170475424)
- Se quitó FocusState2, que era obsoleto. (I686cb, b/168686446)
- ZIndexModifier ahora es un objeto interno. (I1808b, b/171493718)
- Se actualizó el tipo de datos que se muestra del método lerp en los parámetros Size para mostrar un parámetro Size no nulo a fin de evitar cuadros innecesarios. (Ib0044)
- Se agregó TestMonotonicFrameClock para probar el código que se basa en MonotonicFrameClock de Compose para esperar eventos de fotogramas de composición con runBlockingTest de kotlinx-coroutines-test (I4402f).
- Se quitó GestureScope.localToGlobal (I15299, b/171462785).
- Se agregó el buscador
onAllNodesWithSubstring
. (I81dd7, b/171462889) - androidx.ui.test dejó de estar disponible. Migra a androidx.compose.ui.test y androidx.compose.ui.test.junit4 (I452e8).
Correcciones de errores
- Se movió captureToBitmap a captureToImage. (I86385)
- foundation.Text dejó de estar disponible y se reemplazó por material.Text. Para ver una API de texto básica y sin tendencias que no consuma valores de un tema, consulta androidx.compose.foundation.BasicText. (If64cb)
- Se actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
- Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
- Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
- Se agregó provideDefault como alternativa para proporcionar ambientes y se puede usar a fin de especificar valores ambientales que solo se establecerán cuando no se haya proporcionado ningún valor ambiental. (Id6635, b/171024925)
- BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
- Se introdujo el módulo ui-test-junit4. (Ib91f8)
- Se cambió el nombre de
relativePaddingFrom
apaddingFrom
. Se agregó el modificadorpaddingFromBaseline
para especificar distancias de límites de diseño a la línea de base del texto. (I0440a, b/170633813) - Se cambió el nombre de LaunchedTask a LaunchedEffect para conservar la coherencia con las API de SideEffect y DisposableEffect. No se permite el uso de LaunchedEffect sin parámetros de asunto para fomentar las prácticas recomendadas. (Ifd3d4)
- Se incorporaron recursos componibles que se reescriben cuando se actualiza la configuración (I6387c, b/167352819)
- Recomposer ahora requiere CoroutineContext en la construcción. (Ic4610)
- Se suman valores
zIndex
cuando se aplican variosModifier.zIndex()
. Anteriormente, ganaba el primero. (Ic514c, b/170623936) - Se realizaron cambios en la implementación interna de SlotTable que no deberían afectar a la API pública (If9828)
- Se agregó la opción IME de corrección automática del teclado. (I57b8d)
- Se movió androidx.ui.test a androidx.compose.ui.test (I9ffdb).
- Se quitó TKeyboardOptions.toImeOptions de la API pública. (Ic2e45)
Contribución externa
- Se inhabilitó la publicación del artefacto interno androidx.compose.ui:ui-text-android. (Ib93fa)
Versión 1.0.0-alpha06
28 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha06
. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Recomposer ahora es CompositionReference y es un elemento superior de composición válido. El Recomposer explícito ahora es obligatorio en menos lugares. (I4036f)
- VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter para indicar mejor que la API componible aprovecha internamente "remember" para conservar datos entre las composiciones (Ifda43)
- Se actualizó la API de Modifier.drawWithCache para exponer ContentDrawScope como alcance del receptor en lugar de DrawScope para proporcionar a las implementaciones la capacidad de reordenar los comandos de dibujo. Esto sirve para combinar o ajustar casos de uso en los que los píxeles de contenido deben procesarse primero para que el algoritmo del modo de variación correspondiente se aplique de forma correcta (Ie7ec8)
- Se movió SimpleContainer a PopupTestUtils.kt. (I78c57)
- ConsumedData ya no es una clase de datos. Para obtener más información, consulta https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219. (I1737f)
- Se corrigió la posición del controlador Rtl. (I6e1e0)
- Se refactorizaron DrawScope y ContentDrawScope para que sean interfaces en lugar de clases abstractas.
- Se creó la implementación de CanvasDrawScope de DrawScope.
- Se refactorizaron implementaciones de DrawScope para usar CanvasScope.
- Se creó DrawContext para unir dependencias de DrawScope.
- Se quitaron los métodos obsoletos de DrawScope. (I56f5e)
- Cambio rotundo: se quitó el valor que se mostraba de
PointerInputFilter.onPointerEvent(...)
, dado que el único valor que se puede modificar en los eventos del puntero es el de los datos de consumo. En lugar de mostrar datos dePointerInputFilter.onPointerEvent(...)
, ahora puedes mutar los datos de consumo de los objetos PointerEvents pasados. (I6acd0) - IntrinsicMeasureScope y MeasureScope se convirtieron en interfaces. (I1a087, b/170461665)
- Se ocultó la función de combinación para AlignmentLine. (I9da1a, b/170612900, b/170611568)
- Se agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
- Se agregó la opción SelectAll al menú de selección. (Ief02b)
- Se actualizó DrawTransform.rotate para tomar un parámetro dinámico predeterminado del centro que coincida con la documentación.
- Se actualizó DrawScope.rotateRad a fin de consumir un Offset para que el punto dinámico coincida con otros métodos de transformación.
- La sobrecarga de DrawScope.rotateRad que consumía números de punto flotantes para la coordenada x e y del valor dinámico dejó de estar disponible
- (Iffcbb, b/170434992)
Correcciones de errores
- Se habilitó la comprobación de lint de API para MissingGetterMatchingBuilder en androidx. (I4bbea, b/138602561)
- Se agregó una prueba. (I6b8ae)
- Se habilitaron transiciones en ComposeTestRule y se quitó la opción que permitía habilitar el cursor intermitente desde ComposeTestRule. (If0de3)
- Se agregó la opción de IME KeyboardCapitalization. (I8ac38)
- Se agregó la opción de teclado de una sola línea a CoreTextField. (I72e6d)
- Se movió SimpleContainer a PopupTestUtils.kt (I65c3e).
- Se cambió el nombre de la API de Radius por CornerRadius para expresar mejor la manera en que se usa en Compose. Se actualizó la documentación para indicar que la esquina negativa radii se fijará en cero. (I130c7, b/168762961)
- Se mejoró la interoperabilidad de Android al continuar enviando MotionEvents a vistas secundarias de Android que muestran un resultado falso para onTouchEvent en todas las acciones excepto
ACTION_DOWN
. (I94c5a, b/170320973) - Se creó Box como función intercalada. (Ibce0c, b/155056091)
Contribución externa
- Compatibilidad con diferentes configuraciones regionales para
AnnotatedString.capitalize
yAnnotatedString.decapitalize
. (I4aa7f)
Versión 1.0.0-alpha05
14 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha05
. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se agregó una DSL para especificar la información de inspección. (Ic9a22)
- Se movió LongPress a Text. (Iff2bc)
- El objeto experimental Modifier.pointerInput suspende la entrada del modificador. (Ia77d2)
- Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
- Se quitó el constructor público para AndroidOwner. (Iacaef)
- Las ventanas emergentes y los diálogos ahora heredan FLAG_SECURE desde la ventana superior. También se agregó la opción de configurar esto explícitamente. (I64966, b/143778148, b/143778149)
Los datos de consumo ahora son mutables. Además, las llamadas a funciones de extensión que generan consumo ahora no muestran un nuevo objeto PointerInputChange, sino que modifican el objeto PuinterInputChange proporcionado.
Este es el primero de 2 pasos para hacer que los datos de PointerEvent sean mutables y que el código de usuario no pueda editar otros datos del puntero. El segundo paso es quitar el tipo de datos que se muestra de
List<PointerInputChange>
dePointerInputFilter.onPointerEvent(...)
. (Id067e)Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)
Ahora, onGloballyPositioned es una función intercalada (I15830).
Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)
Se agregó la propiedad hasPendingMeasureOrLayout a Owner para indicarle al propietario si tiene derechos de diseño pendientes (I3d9f8, b/169038599)
Se agregó una API para que borre el enfoque de manera programática (Ie1dc2, b/161487952).
Se quitó
PointerInputFilter.onPointerInput(...)
.PointerInputFilter.onPointerEvent(...)
debe usarse en su lugar. (I6f04a)Cambios a Size
- Se quitó Size.getFliped.
- Se quitó Size.rem.
- Se quitó Size.truncDiv. (Ief44d, b/169790720)
Como parte de la estandarización de los valores sentinela para las clases intercaladas, se cambia el nombre a Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas. (I97611, b/169797763)
Se agregó TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)
Se cambió el nombre del parámetro scope dentro de AnnotatedString.Builder.addStringAnnotation a tag para mantener la coherencia de la API. (I7c8cb)
Correcciones de errores
- Se mejoró el rendimiento de desplazamiento de LazyColumn/Row al hacer menos trabajo de subcomposición en cada desplazamiento. Se agregó el nuevo método hasInvalidations() para la clase Composición. Se cambió el nombre del método hasPendingChanges() de Recomposer por hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- Se actualizaron los parámetros de Size.Unspecified a Float.NaN en lugar de Float.POSITIVE_INFINITY. Se actualizaron las implementaciones de Painter para verificar con Size.Unspecified, así como Sizes no finitos. (I95a7e)
- El orden de las llamadas a place() en los diseños personalizados ahora define el orden de dibujo para los elementos secundarios. (Ibc9f6)
- Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
- Se agregaron stubs para las clases de Android que se encuentran en plataformas anteriores a fin de evitar el uso de reflejo cuando sea posible. (Ia1790)
- Error corregido: Si el teclado en pantalla hacía que la app tradujera, las coordenadas de entrada del puntero se convertían en errores (Ic4cec, b/163077821)
Versión 1.0.0-alpha04
1 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha04
. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó OwnerScope para permitir la recopilación de alcances de observación de diseños y dibujos cuando ya no son válidos. (Ic4cf8)
- Se agregó OnRemeasuredModifier y onSizeChanged() para recibir una devolución de llamada cuando cambió la medida y el tamaño del diseño del contenido, respectivamente. (I657cf, b/154108792)
- Se agregó la acción de semántica de clics largos. (I6281b, b/156468846)
- FocusManager ahora es privado. (I7872f)
Se actualizó la implementación para crear una implementación dedicada de DrawCacheModifier en lugar de agregar propiedades opcionales en DrawModifier.
Se actualizó la documentación para varios métodos. (Ibd166)
Se creó el intercalado de TextRange para evitar la creación de objetos. (Id034b)
Ya no se pueden leer PlacementScope#parentWidth ni PlacementScope#parentLayoutDirection desde el bloque de ubicación de un diseño personalizado. (Icc1ae, b/168295623)
Se agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)
Se introdujo Modifier.drawWithCache para admitir la creación de un objeto de dibujo que recree condicionalmente dependencias que dependan de información de tamaño/estado. (I376dc)
Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)
Correcciones de errores
- Se actualizaron varias API de gráficos.
- Se actualizaron las API de transformación de escalamiento y rotación a fin de consumir un solo parámetro de compensación para representar la coordenada dinámica, en lugar de parámetros flotantes separados para las coordenadas x/y en DrawScope y DrawTransform.
- Se quitaron los métodos Rect.expandToInclude y Rect.join.
- Se actualizó la documentación de Radius para indicar el óvalo además del elíptico.
- Se agregó documentación para indicar que el constructor público para la clase de Radius intercalado no se debe llamar directamente, sino que se debe crear una instancia de los objetos Radius a través de sus constructores de funciones.
- Se quitaron las API de RoundRect para consultar topRight, bottomRight, bottomCenter, etc.
- Rect.shift dejó de estar disponible y se reemplazó por Rect.translate.
- Se quitaron las API de RoundRect.grow y Rect.shrink.
- Se cambió el nombre de RoundRect.outerRect a Rect.boundingRect.
- Se quitaron los métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect y Rect.isStadium.
- Se cambió el nombre de RoundRect.longestSide a RoundRect.maxDimension.
- Se cambió el nombre de RoundRect.shortestSide a RoundRect.minDimension.
- Se modificó RoundRect.center para que sea una propiedad en lugar de una función.
- Se actualizó el constructor RoundRect para consumir propiedades de Radius en lugar de parámetros individuales para valores de radio x/y.
- Se quitaron las API de tamaño que asumían que se trataba de un rectángulo con el origen en 0,0.
- Se agregó una API destructiva a Radius.
- Se migraron varias funciones de extensión de RoundRect para que sean propiedades.
- (I8f5c7, b/168762961)
- foundation.Box dejó de estar disponible. Usa foundation.layout.Box en su lugar. (Ie5950, b/167680279)
- Se cambió el nombre de Stack a Box. La función Box anterior dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
- Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
- Se actualizaron varias API de gráficos.
- Se actualizaron las API de DrawScope con métodos de transformación con alcance para indicar que la transformación solo se aplica dentro de la devolución de llamada y se quita una vez invocada la devolución de llamada.
- Se actualizó la documentación de clipPath para hacer referencia a Path en lugar del rectángulo redondeado.
- Se corrigió el espaciado en la documentación del parámetro en clipPath.
- Se cambió el nombre de DrawScope.drawCanvas a drawIntoCanvas y se quitó el parámetro de tamaño.
- Se cambió el nombre de los parámetros dx/dy en el método de inserción a horizontal y vertical.
- Se agregó una sobrecarga de inserción que proporciona el mismo valor de inserción a los 4 límites.
- Se quitó la documentación del método de inserción que indicaba que la inserción se aplicaba a los 4 lados.
- Se actualizó la documentación de la clase Rect.
- Se actualizaron los comentarios en los parámetros Rect para que coincidan con el estilo de KDoc.
- Se quitaron Rect.join and Rect.expandToInclude.
- Se creó una sobrecarga para Rect.translate (desplazamiento), y Rect.shift dejó de estar disponible.
- (If086a, b/167737376)
- Se agregaron las anotaciones rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled y textInputServiceFactory con @VisibleForTesting, se las convirtió en internas para la API y se ocultó su KDoc (I554eb, b/168308412).
- Quita SelectionContainer de Top para inhabilitar la selección predeterminada y evitar un comportamiento inesperado. Se puede usar SelectionContainer específicamente para ajustar el contenido que debe seleccionarse. (I8dfe0, b/158459594)
Versión 1.0.0-alpha03
16 de septiembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha03
. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se quitaron las acciones de semántica de desplazamiento hacia adelante y hacia atrás. Se agregaron pasos a AccessibilityRangeInfo. (Ia47b0)
- Se quitó
onInvalidate()
deOwner
.OwnedLayer
ahora controla la invalidación. (Ica72b, b/162061312) Se quitaron métodos de operadores de la API de Size que consumen parámetros Offset. El resultado de estas operaciones no es claro y el tipo de resultado es inesperado. Por ejemplo, no es claro si el parámetro Offset de Size debería mostrar un desplazamiento o un resultado de tamaño con la diferencia.
También se quitaron los métodos obsoletos de la clase Size. (Iec902, b/166514214)
Correcciones de errores
- Se implementó una corrección para los elementos de LazyColumn que, a veces, se presentaban de forma incorrecta y provocaban fallas en algunas condiciones (Ibcf17, b/163066980, b/165921895)
- DpConstraints y las API que usaban esas restricciones dejaron de estar disponibles. (I90cdb, b/167389835)
- Se trasladó
createAndroidComposeRule
yAndroidInputDispatcher
desdeandroidx.ui.test.android
aandroidx.ui.test
. (Idef08, b/164060572) - Se cambiaron de manera coherente los nombres de los usos de Gravity por Align o Alignment en las APIs de diseño (I2421a, b/164077038)
- Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
Versión 1.0.0-alpha02
2 de septiembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha02
. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Quita la devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (If654e, b/166106882)
- Se agregó compatibilidad con parámetros de tipo de relleno en rutas de acceso de gráficos vectoriales para admitir recortes de formas según las reglas de relleno de la ruta de acceso pares, impares o distintas de cero. (I43dd2)
- El tiempo de actividad y la velocidad ahora son clases intercaladas. (I48f4a)
- Ahora la duración es una clase intercalada. (I565eb)
- Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (Ic40b3)
Se corrigió el error por el que el constructor de la función Rect con desplazamiento y radio creaba el Rect en el orden de izquierda, derecha, arriba, abajo en lugar de izquierda, arriba, derecha, abajo.
Se quitaron los métodos complementarios obsoletos en Rect y se reemplazaron por los constructores de funciones.
Se agregaron pruebas para verificar los métodos en Rect.kt (I08460, b/165822356).
Correcciones de errores
- Se agregó MutableRect, un rectángulo que se puede modificar. (I71bd2, b/160140398)
- Se reemplazó Matrix4 con Matrix. Se quitaron todas las otras partes del paquete de vectormath. (Ibd665, b/160140398)
La convención de llamada para función de componibilidad cambió. Este es un cambio rotundo del objeto binario. Se deben volver a compilar todas las bibliotecas para que funcionen con esta versión del complemento del compilador de Compose.
Esta modificación no crea un cambio rotundo a nivel de la fuente, ya que las únicas API que cambiaron son las API del compilador que tienen una participación explícita. (I7afd2, b/158123185)
Se corrigió la falla que se producía cuando se enviaba a un PointerInputFilter que provocaba que el PointerInputFilter se quitara de forma síncrona (I58f25)
Versión 1.0.0-alpha01
26 de agosto de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha01
. La versión 1.0.0-alpha01 contiene estas confirmaciones.
Versión 0.1.0-dev
Versión 0.1.0-dev17
19 de agosto de 2020
Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev17
. La versión 0.1.0-dev17 contiene estas confirmaciones.
Cambios en la API
- El objeto
emitView
dejó de estar disponible. En su lugar, si fuera posible, usaAndroidView
para emitir objetos Views dentro de Compose. Ten en cuenta que la composición directa de objetos Views y ViewGroups no se admitirá en el futuro, a menos que estos sean hojas en el árbol de la composición. En ese caso, esto se logra mediante AndroidView. (I29b1e, b/163871221) FocusState2
dejó de estar disponible y se reemplazó porFocusState
. (Ia8b79, b/160822876, b/160923332)- Se quitaron las sobrecargas de AndroidView obsoletas. (I946b9, b/163802393)
- Las emisiones personalizadas ahora pueden declarar que uno o más de sus métodos set pueden omitirse y reescribirse de forma independiente de la emisión. (Ibbd13)
Se cambiaron las clases de Vector para que ya no sean clases de datos, dado que se usa la misma instancia de objeto para la composición.
Se agregó la marca mutableStateOf en VectorPainter para volver a dibujar condicionalmente si cambia el contenido del vector.
Se refactorizó la instancia de VectorComponent para que forme parte de VectorPainter, ya que se vuelve a usar en todas las composiciones.
Se actualizaron GroupComponent y PathComponent para que sus campos de nombre puedan mutar (Ieae45, b/151378808).
Se quitaron
onChildPositioned
yOnChildPositionedModifier
. Los desarrolladores deben usaronPositioned
yOnPositionedModifier
en el diseño secundario. (I4522e, b/162109766)Offset se convirtió en una clase intercalada. (Iaec70)
Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)
Se quitó el elemento obsoleto FocusModifier. (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)
Se agregó la lambda
mergePolicy
aSemanticsPropertyKey
. Se puede usar con el fin de definir una política personalizada para la combinación de semántica de mergeAllDescendants. La política predeterminada es usar el valor del elemento superior si ya está presente; de lo contrario, se utiliza el valor secundario. (Iaf6c4, b/161979921)Constraints ahora es una clase intercalada. (I88736)
Se agregó FocusManager, que quita la lógica de enfoque común de AndroidComposeView. (I528ef, b/161487952, b/162206799)
Se actualizaron los nombres de PointerEventPass para la versión alfa. (Ifda6f)
IntOffset ahora es una clase intercalada. (Iac0bf)
IntSize ahora es una clase intercalada. (I2bf42)
Se cambió el nombre de
PlacementScope.placeAbsolute()
aPlacementScope.place()
, y el delPlacementScope.place()
anterior aPlacementScope.placeRelative()
. Como resultado, el métodoPlacementScope.place()
ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usaPlacementScope.placeRelative()
en su lugar. (I873ac, b/162916675)AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)
Algunas herramientas de prueba ya no son públicas porque no están en el lugar correspondiente. Se harán públicas en el futuro. (I32ab1)
Se refactorizó la organización del código de entrada del puntero. (Ie3f45)
PxBounds dejó de estar disponible y se reemplazó por Rect. Se actualizaron todos los usos de PxBounds con rect y se agregaron la baja y reemplazo adecuados, con anotaciones para ayudar con la migración. (I37038, b/162627058)
Se quitó KeyEvent2 porque era obsoleto. En su lugar, usa KeyEvent. (Ied2d0, b/162097587)
KeyEvent tiene una propiedad Unicode que se puede usar para obtener el carácter Unicode generado por la combinación especificada de tecla y estado de la tecla meta. (If3afc)
Se hizo una API de habilitación con el evento personalizado DelayUp y las clases relacionadas, ya que es muy probable que se modifiquen (I56d6f)
Se quitaron 2 PointerEventPasses que ya no son necesarios. (I3dd9d)
Se agregaron los parámetros color, shadow y TextDecoration a Paragraph.paint. Esta función sirve para evitar la recreación innecesaria de Paragraph (I81689)
Correcciones de errores
- Se quitaron las devoluciones de llamada onFocusChanged de TextField. En su lugar, usa Modifier.focusObserver. (I51089, b/161297615)
- Modifier.drawBorder dejó de estar disponible. En su lugar, usa Modifier.borde. Se reemplazó la clase de datos Border por BorderStroke. (I4257d, b/158160576)
Se quitaron las llamadas a FrameManager obsoletas.
Se modificaron las APIs de composición interna para reducir la sobrecarga para realizar el seguimiento de los objetos de estado, como
mutableStateof()
(I80ba6).Se quitaron VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Usa Modifier.background. (I73b0d, b/163019183)
Se corrigió la falla que ocurría cuando se utilizaba dentro del bucle algo que guardaba el estado. Ahora se permite tener la misma clave en savedInstanceState(), y ya se ajustó la API de UiSavedStateRegistry en virtud de este requisito nuevo (I4ab76, (b/160042650), b/156853976, b/159026663, b/154920561).
El elemento componible
state { ... }
dejó de estar disponible y se reemplazó por cualquier llamada explícita aremember { mutableStateOf(...) }
por motivos de claridad. Con esto, se reduce la superficie general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrónby mutableStateOf()
con la delegación de propiedades de clase. (Ia5727)Se cambió el nombre de RRect a RoundRect para que se adapte mejor a los patrones de nombres de Compose. Se crearon constructores de funciones similares a RRect y los de RRect quedaron obsoletos. (I5d325)
Versión 0.1.0-dev16
5 de agosto de 2020
Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev16
. La versión 0.1.0-dev16 contiene estas confirmaciones.
Cambios en la API
- OnChildPositioned dejó de estar disponible. Usa OnPositioned en el elemento secundario. (I87f95, b/162109766)
- SetViewContent dejó de estar disponible. En su lugar, usa setContent. (I7e497, b/160335130)
- Se agregó la API de AndroidViewBinding para aumentar y componer los recursos de diseño según ViewBinding. (I081c6)
- KeyEvent reemplazó a KeyEvent2. (I2d770, b/162097585)
- Se agregó compatibilidad con la tecla de hardware Alt. (I9036b)
- FocusManager ya no está disponible. En su lugar, usa Modifier.focus(), Modifier.focusObserver() y Modifier.FocusRequester(). (I74ae4, b/162211322)
- loadVectorResource admite atributos trimPath. (I808fe)
- Se movió diálogo a la IU. (I47fa6)
- Se quitaron 2 PointerEventPasses que ya no son necesarios. (I33ca7)
- Se implementó PointerInteropModifier, que permite recibir MotionEvents e interactuar con Compose como si se tratara de la implementación de una vista de Android. (Ieb08c)
- Se quitó el modificador de etiquetas obsoleto. En su lugar, usa layoutId. (Idaa05, b/162023919)
- Se actualizaron las APIs correspondientes a la compatibilidad de orientación de derecha a izquierda. Se agregó LayoutDirectionAmbient, que puede usarse para leer y cambiar la dirección del diseño. Se quitaron Modifier.rtl y Modifier.ltr. (I080b3)
- Compatibilidad con el recorte de ruta de acceso en gráficos vectoriales. (Ie16c9, b/158188351)
- Se agregó Modifier.layout(), que permite crear un modificador de diseño personalizado de forma práctica (I73b69, b/161355194).
- Se agregó una nueva API de AndroidView, y las que ya existen dejaron de estar disponibles. (I5bcfd)
- Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte, a la vez que prohíbe la escritura de
Modifier.padding().background() + anotherModifier
, el cual interrumpe la cadena y es más difícil de leer (Iedd58, b/161529964). - Se agregaron subclases View de [Abstract]ComposeView para alojar contenido de Compose en una jerarquía de vistas (I46357)
Row
yColumn
ahora son funciones intercaladas, lo que reduce en forma significativa la sobrecarga asociada a su uso. (I75c10)- Se agregó SubcomposeLayout. Se trata de un elemento primitivo de bajo nivel que permite componer los elementos secundarios durante la medición si queremos usar algunos valores disponibles más adelante durante la medición de la composición del subárbol. Por ejemplo, WithConstraints no se implementa mediante SubcomposeLayout. (I25cc8)
- Se agregó
SemanticsNode.positionInRoot
para obtener la posición de un SemanticsNode en relación con la raíz de la jerarquía de Compose. (Icdf26, b/161336532) - Los MotionEvents se pasaron de Android a Compose y nuevamente a Android. (I14be8, b/158034713)
- Se quitó dropdownPopup. (I00430)
- Se corrigió la posición de la ventana emergente en las pantallas cortadas. (Idd7dd)
- Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)
- Se agregó remeasurementModifier, que permite volver a medir el diseño de forma síncrona. En general, no lo necesitas, ya que la nueva medición o el rediseño se realizan automáticamente, pero lo usamos dentro de LazyColumnItems durante el desplazamiento (I5f331, b/160791058)
- Se quitó getLineEllipsisOffset/getLineEllipsisCount. En su lugar, usa getLineVisibleEnd/getLineEnd/isLineEllipsized. (I85aa2)
- Se agregaron algunas marcas/anotaciones a fin de aplicar prácticas recomendadas. (I66b20)
- Se expusieron más APIs de líneas en TextLayoutResult (I79bd2)
- Ahora se puede acceder mediante Foo.VectorConverter a los convertidores vectoriales para convertir unidades integradas (p. ej., Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter, etc.) (I3e273).
Correcciones de errores
- Se abordaron correcciones amplias de API. (I077bc)
- Se quitó la interfaz OffsetBase sin usar.
- Se alinearon las clases Offset y IntOffset a fin de tener una superficie de API coherente.
- Se cambió el nombre de IntOffset.Origin por IntOffset.Zero para que sea coherente con la API de Offset.
- Se quitó de la interfaz de Canvas el método nativeCanvas con el objeto de ayudar a los consumidores a crear sus propias instancias de Canvas.
- Se creó una clase stub EmptyCanvas para refactorizar DrawScope a fin de hacerlo un parámetro no nulo en lugar de usar lateinit y de garantizar la no nulabilidad del campo.
- Se cambió el nombre de las enumeraciones ClipOp para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones FilterQuality para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones StrokeJoin para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PointMode para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PaintingStyle para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PathFillType para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones StrokeCap para que lleven mayúsculas en la primera letra de cada palabra.
- Se actualizó la implementación de DrawCache para que deje de usar parámetros lateinit.
- Se actualizó DrawScope a fin de que deje de usar la delegación lazy para los parámetros internos fillPaint y strokePaint.
- Se actualizó el objeto Image que admite composición a fin de evitar el uso de Box y lograr una sobrecarga menor.
- Se actualizó la clase Outline para que tenga anotaciones @Immutable.
- Se actualizó PathNode para que tenga anotaciones @Immutable en cada instrucción de la ruta de acceso.
- Se actualizó la subcomposición de Vector a fin de quitar verificaciones condicionales redundantes de igualdad dado que compose ya las administra.
- Los métodos de construcción complementarios de Rect dejaron de estar disponibles y se los reemplazó por constructores de funciones.
- Se actualizaron las clases Brush y los constructores de funciones con las API de @Immutable y @Stable.
- Se actualizaron las enumeraciones VertexMode para que lleven mayúsculas en la primera letra de cada palabra.
- Se actualizó el método selectPaint de DrawScope a fin de reemplazar condicionalmente los parámetros de trazo en la pintura si estos cambiaron.
- Se actualizó Size para agregar la API de desestructuración, se cambió el nombre de UnspecifiedSize por Unspecified y se quitaron métodos sin usar.
- Se actualizó el consumo de la API de BlendMode de Compose para asignar correctamente entre los modos PorterDuff y BlendModes del framework de Android, según el nivel de API. Se introdujo la API de BlendMode#isSupported con el objeto de que funcione como una consulta de capacidad para determinar si BlendMode es compatible con el dispositivo antes de que se lo utilice (I0ef42)
- Se agregó LazyItemScope para el parámetro itemContent de las listas Lazy. Esto proporciona modificadores para rellenar el tamaño máximo del elemento superior, lo cual resuelve el caso de uso en el que el elemento debía rellenar viewport, pero el Modifier.fillMaxSize() normal no funcionaba debido a que el elemento se mide con restricciones infinitas. (Ibd3b2, b/162248854)
- Se quitó
SemanticsNodeInteraction.performPartialGesture
. Se usaSemanticsNodeInteraction.performGesture
en su lugar. (Id9b62) - Se cambió el nombre de
LazyColumnItems
aLazyColumnFor
. Se cambió el nombre deLazyRowItems
aLazyRowFor
. (I84f84) - Se acopló el paquete
foundation.shape.corner
afoundation.share
. (I46491, b/161887429) - Se cambió el nombre de
AndroidComposeTestRule
porcreateAndroidComposeRule
(I70aaf) - Se agregaron más APIs a
TextLayoutResult
. (Id7e04) - Se cambió el nombre de
FilledTextField
de Material porTextField
, y el delTextField
principal porBaseTextField
para que la API deseada resulte más fácil de encontrar y usar (Ia6242, b/155482676). - Se cambió el nombre de Modifier.drawBackground por Modifier.background (I13677).
Versión 0.1.0-dev15
22 de julio de 2020
Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev15
. La versión 0.1.0-dev15 contiene estas confirmaciones.
Actualización de dependencias
- Para usar la versión
0.1.0-dev15
de Compose, deberás actualizar tus dependencias de acuerdo con los nuevos fragmentos de código que se muestran más arriba en Cómo declarar dependencias.
Cambios en la API
- El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester y Modifier.focusObserver. FocusState y FocusDetailedState dejaron de estar disponibles y se los reemplazó por FocusState2 (I46919, b/160822875, b/160922136).
- Se agregó un modificador para observar el cambio de estado del enfoque. (I05866, b/160924455, b/160923326)
- Se agregó un modificador para solicitar cambios de enfoque (I8dd73, b/161182057, b/160924778).
- Se ajustó el menú de la barra de herramientas para mostrar los botones Copiar, Cortar y Pegar de forma correcta. (Id3955)
- Las propiedades semánticas de valor único ahora usan un estilo de llamada.
Por ejemplo, "semantics { hidden = true }" ahora se escribe como:
semantics { hidden() }
. (Ic1afd, b/145951226, b/145955412) - Se agregó el objeto Modifier.focus que reemplaza al elemento FocusModifier. (Ib852a, b/160924778)
- Se agregó el objeto FloatingToolbar para la selección del elemento TextField. (Ie8b07)
- Se agregó una anotación de API experimental para las API relacionadas con entradas clave. (I53c0a)
- Se agregó una anotación de API experimental para todas las APIs relacionadas con el enfoque (I53b24, b/160903352).
- Se agregó el objeto FocusState2 que reemplazará al elemento FocusDetailedState. (I0a3ba, b/160822595)
- Se agregó el elemento ExperimentalFocus, que es una anotación @OptIn para la API de Focus (I1544b, b/160820961)
- Se agregó una clase de unidad IntBounds, que representa los límites de píxeles enteros del diseño. Se actualizó la API de PopupPositionProvider para usarla. (I0d8d0, b/159596546)
- El aplicador ahora requiere un método clear() para desechar las composiciones. (Ibe697)
- KeyEvent dejó de estar disponible y se reemplazó por KeyEvent2. (I68730)
- Se agregó una nueva marca opcional useUnmergedTree a fin de probar los buscadores. (I2ce48)
- Se creó la API experimental LayoutNode. (I4f2e9)
Se agregaron métodos de copia a varios tipos de clases intercaladas, que incluye lo siguiente:
- Desplazamiento
- Tamaño
- Radio
- Movimiento
TransformOrigin
El método del objeto complementario Size.copy dejó de estar disponible para el método de copia de instancias (Ife290, b/159905651).
Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)
Se cambió el nombre de TextDirection por ResolvedTextDirection. (I3ff38)
Del bloque de medición de la función Layout(), se quitó el parámetro de dirección del diseño. Sin embargo, la dirección de diseño está disponible dentro de la devolución de llamada a través del objeto de alcance de medición (Ic7d9d).
Refactoriza el objeto SelectionHandles para reutilizar. (I420e0)
Se quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)
Se borraron los objetos TestTag y Semantics. En su lugar, usa Modifier.testTag y Modifier.semantics. (I15ff0, b/158841414)
Antes del cambio, el complemento del compilador de Compose interceptaría llamadas no triviales a los constructores dentro de una función @Composable si hubiese una. (I5205a, b/158123804)
Se cambió el nombre del objeto Modifier.tag por Modifier.layoutId para evitar confusiones con el elemento Modifier.testTag (I995f0)
El objeto Placeable#get(AlignmentLine) ya no muestra las posiciones Int de la línea de alineación como nulas. Si falta la línea de alineación consultada, se mostrará el objeto AlignmentLine.Unspecified. (I896c5, b/158134875)
Se agregó un parámetro modificable al elemento componible AndroidView (I48a88, b/158746303)
El elemento Semantics() dejó de estar disponible. En su lugar, usa el objeto Modifier.semantics(). (I72407, b/158841414)
Se agregó el elemento componible viewModel() que permite crear o conseguir el objeto ViewModel ya creado de manera similar a cómo funciona en las clases Activity o Fragment (I5fdd1).
Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)
A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I086f4)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Id3434)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I97a5a)
El componente TestTag dejó de estar disponible. En su lugar, usa Modifier.testTag. (If5110, b/157173105)
Se quitó la implementación no-op predeterminada del objeto ParentDataModifier#modifyParentData, ya que equivalía a no haber implementado la interfaz. (I0deaa)
Se quitó el elemento ScaleFit, que anteriormente había quedado obsoleto. En su lugar, usa el objeto ContentScale. (Ifbc5b)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I19d02)
Se agregó el componente DropdownMenu en ui-material, una implementación del menú de Material Design (I9bb3d)
Se quitó el elemento LayoutTag() obsoleto; en su lugar, usa Modifier.tag(). Se quitó el elemento Modifier.matchParent() obsoleto; en su lugar, usa Modifier.matchParentSize(). (If8044)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I57bff)
Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc)
Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope a DrawScope. Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente (I1798e).
El objeto DoubleTapGestureFilter ahora desambigua el elemento SingleTapGestureFilter en todo el árbol. (If92b1)
Se actualizó la API de Alignment y se agregó compatibilidad con la alineación absoluta (que no se duplica automáticamente en contexto de derecha a izquierda). (I38cd3)
Se modificó la API de los modificadores DrawLayer: se cambió el nombre del objeto outlineShape a shape y tiene el valor predeterminado de RectangleShape, ahora sin valores anulables. Se cambió el nombre del elemento clipToOutline a clip; se quitó el objeto clipToBounds, ya que es igual que clip == true con RectangleShape (I7ef11, b/155075735).
Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los usuarios que aún necesitan acceso a Canvas, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el Canvas subyacente (I80afd)
Se modificó la API de WithConstraints con expresión lambda final. Ahora, en lugar de dos parámetros, tiene un alcance de receptor que, además de las restricciones y layoutDirection, brinda propiedades minWidth, maxWidth, minHeight y maxHeight en Dp. (I91b9a, b/149979702)
Se cambió el nombre del objeto LayoutModifier2 a LayoutModifier. (Id29f3)
Se quitó la interfaz de LayoutModifier obsoleta. (I2a9d6)
Las funciones de medición intrínseca en los objetos Layout y LayoutModifier2 ahora tienen un receptor IntrinsicMeasureScope que proporciona una API de consulta intrínseca con dirección de diseño propagada de forma implícita (Id9945)
Se pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)
Se agregó el elemento Modifier.zIndex() para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño de nivel superior. Se cambió el nombre de la propiedad de elevación de DrawLayerModifier por shadowElevation, y esta propiedad ya no controla el orden del dibujo. Se cambió el orden de los parámetros de DrawShadow: el primer parámetro ahora es elevation y el segundo es shape, con una configuración RectangleShape predeterminada. (I20150, b/152417501)
Se quitaron los elementos onSizeChange y onPositionChange en Owner. (I5c718)
Se agregó el objeto Constraints2, una copia del elemento Constraints que solo admite valores de restricción Int, en lugar del parámetro IntPx. Se quitará el objeto IntPx y se asumirá que todas las restricciones de número entero son píxeles como Android.
- También se agregó el objeto IntSize, que finalmente reemplazará al elemento IntPxSize. (I4b43a)
Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)
El objeto alignToSiblings ahora acepta un elemento Measured en lugar del parámetro Placeable. (I5788d)
-
- Se cambió el nombre del objeto ScaleFit por ContentScale
- Se trasladó el elemento ContentScale del módulo ui-graphics al módulo ui-core a fin de quede ubicado en el mismo módulo que la API de Alignment.
- Se cambió el nombre del objeto FillMaxDimension por Crop.
- Se cambió el nombre del objeto FillMinDimension por Fit.
- Se cambió el nombre del objeto Fit por Inside para que coincidan mejor.
- Equivalentes de ImageView.ScaleType
- Se agregó documentación que indica que combinar Crop y Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_CROP, que el uso de Fit con Alignment.Center genera lo mismo que ImageView.ScaleType.FIT_CENTER, y que el uso de Inside con Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_INSIDE.
Compatibilidad con lectura de derecha a izquierda para modificadores de dibujo. (I0aaf9)
Se lanzó la API para aumentar vistas de Android desde XML. Consulta la demostración de ViewInCompose para obtener más detalles. (I42916)
Mejora la API de DrawModifier:
- Se creó el alcance del receptor para el objeto draw() ContentDrawScope.
- Se quitaron todos los parámetros de draw().
- El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
- ContentDrawScope tiene el método drawContent() (Ibaced, b/152919067).
Se agregaron los objetos positionInParent y boundsInParent para el elemento LayoutCoordinates (Icacdd, b/152735784)
Ahora, los objetos DrawLayerModifier y drawLayer() establecen de forma predeterminada los elementos clipToBounds y clipToOutline como falso. (I0eb8b, b/152810850)
Se cambió el nombre del objeto LayoutResult a MeasureResult. (Id8c68)
Se agregó LayoutModifier2, una nueva API para definir modificadores de diseño; LayoutModifier quedó obsoleto (If32ac).
Se reemplazaron el modificador y el operador por funciones de extensión (I225e4).
Se agregaron propiedades translationX/Y para admitir la compensación de la lista de visualización de comandos de dibujo para una capa determinada. Esto es útil para mover contenido en respuesta a animaciones o eventos táctiles. (I8641c)
Se agregaron parámetros pivotX, pivotY a las APIs de Layers para admitir la rotación y el escalamiento en un punto específico de una capa (Icf7c3).
Se agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones de componibilidad OnPositioned y OnChildPositioned (I2ec8f)
Se agregó el objeto LayerModifier, un modificador que permite agregar un elemento RenderNode a una capa. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará al objeto RepaintBoundary. (I7100d, b/150774014)
Se permitió que la dirección del diseño se propagara desde el nodo de diseño de nivel superior hasta los secundarios. Se agregó un modificador de dirección de diseño. (I3d955)
El componente de pila admite la dirección de derecha a izquierda. (Ic9e00)
Asistencia inicial para lectura de derecha a izquierda en el diseño de Compose. (Ia5519)
Se combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)
Se modificó el objeto LayoutCoordinates para que el elemento providedAlignmentLines sea un conjunto en lugar de un mapa y para que el objeto LayoutCoordinates implemente el operador get() a fin de recuperar un valor. Esto permite que los modificadores cambien con más facilidad uno o más valores del conjunto, sin que se cree una colección nueva para cada modificador. (I0245a)
LayoutCoordinates ya no tiene una propiedad de posición. La propiedad de posición no tiene sentido cuando se tienen en cuenta los objetos LayoutModifiers, la rotación o el escalamiento. En cambio, los desarrolladores deben usar los objetos parentCoordinates y childToLocal() para calcular la transformación de un objeto LayoutCoordinate a otro.
El objeto LayoutCoordinates usa el elemento IntPxSize para la propiedad de tamaño, en lugar de PxSize. Se usan tamaños de píxeles enteros para los diseños, por lo que todos los tamaños de diseño deberían usar números enteros y no valores de punto flotante. (I9367b)
Mejoras en la superficie de la API de Constraints (I0fd15)
Se creó la API de CanvasScope que une un objeto de Canvas para exponer una superficie de API de dibujo declarativa y sin estado. Las transformaciones se contienen dentro de su propio alcance de receptor, y la información de tamaño también se define en los límites de inserción correspondientes. No requiere que un consumidor mantenga su propio objeto de estado de Paint para configurar las operaciones de dibujo.
- Se agregó CanvasScopeSample y se actualizó la app de demostración a fin de incluir una demostración de gráficos declarativos. (Ifd86d)
Se quitó la API de MaskFilter sin usar, ya que se usa de manera limitada y no se optimiza para la aceleración de hardware en la mayoría de los casos de uso (I54f76).
Se trasladó el objeto RectangleShape de androidx.ui.foundación.shape.* al elemento androidx.ui.graphics.* (Ia74d5, b/154507984)
Se reemplazaron todos los usos anulables de Color en la API con valores no anulables y se usa Color.Unset en lugar de valor nulo (Iabaa7).
Se ingresaron parámetros rect opcionales adicionales en ImagePainter para admitir el dibujo de una subsección de ImageAsset subyacente. (I0ea9e)
Se agregó el objeto Unset Color para representar un valor sin configurar, sin el recuadro Colors. (If901a)
Se agregaron métodos de extensión Canvas.rotate y Canvas.scale para consumir coordenadas dinámicas opcionales para las transformaciones. De forma predeterminada, estos métodos se ubican en la esquina superior izquierda de la traslación del lienzo actual.
También se trasladó el objeto Canvas.rotateRad a fin de que sea un método de extensión para mantener la coherencia. (Ibaca6)
Se creó la API de PixelMap para admitir consultas de información de píxeles desde un elemento ImageAsset. (I69ad6)
Se cambió el nombre del objeto toFrameworkRect/toFrameworkRectF por toAndroidRect/toAndroidRectF para que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las APIs del framework de Android sobre las que están compiladas. También se actualizaron los documentos de estas API. (I86337)
Se agregó la API de VectorPainter a fin de reemplazar la API de subcomposición existente para gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un elemento DrawModifier. El objeto DrawVector anterior que admite composición dejó de estar disponible y se reemplazó por el elemento VectorPainter.
Se cambió el nombre de la API de Image(Painter) a PaintBox(Painter) Created Vector componible y que se comporta como el elemento Image componible, pero con un parámetro VectorAsset en lugar de un objeto ImageAsset (I9af9a, b/149030271).
Se cambió el nombre de Image a ImageAsset para diferenciar mejor entre los datos de Image y el próximo elemento componible Image, que se utiliza para participar en el diseño y dibujar contenido. Método de extensión _Body:Created en android.graphics.Bitmap, Bitmap.asImageAsset() para crear una instancia útil del objeto ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el framework de Compose (Id5bbd).
Se agregó el objeto TextDirection.Content. (I48f36)
Se agregó el operador TextDecoration.plus. (I0ad1a)
De los valores de enumeración de TextDirectionAlgorithm, se quitó el objeto
Force
. (Icc944)Se cambió el nombre de TextDirectionAlgorithm a TextDirection. (I75ce8)
Se implementó el objeto LongPressAndDrag para la selección del elemento TextField. (I17919)
Se agregó el objeto AnnotatedString.getStringAnnotations que muestra todas las anotaciones dentro del rango (I1fa00)
Se cambió el nombre del paquete de Locale y LocaleList de De androidx.ui.text a androidx.ui.intl. (I8132c)
El cursor de TextField tiene una animación intermitente. (Id10a7)
Cambio en la API: se cambió el nombre del objeto AnnotatedString(builder: Builder) a annotatedString(builder: Builder) (Ia6377)
Cambio en la API: se cambió el nombre del objeto AnnotatedString.Item por AnnotatedString.Range (I2d44d)
Se cambió el nombre del objeto AnnotatedString.Builder.addAnnotationString a addStringAnnotation. (I5059e)
Ahora es posible ocultar o mostrar el teclado en pantalla usando SoftwareKeyboardController, que se entrega mediante la devolución de llamada onTextInputStarted (I8dc44, b/151860051).
Se agregó el operador de adición para (Text/Paragraph/Span)Style, que delega a la función merge() (Ia1add)
El elemento FontWeight.lerp ya no se ajusta. Sigue siendo una clase de datos. (I521c2)
El constructor del elemento FontWeight ahora es público, ya no es una clase de datos. (Id6b1f)
Se agregaron los objetos getLineStart, getLineEnd, getEllipsisOffset y getEllipsisCount al elemento TextLayoutResult (Ibc801).
Se cambió el nombre del módulo ui-text a ui-text-core. (I57dec)
Se quitó la clase Size sin usar, ya que hay una clase Size duplicada en el módulo ui-geometry que se consume. (I1b602)
Se agregó AdapterList, un componente de lista de desplazamiento que solo compone y presenta los elementos visibles. Según los problemas que se conocen, solo es vertical y no maneja todos los casos de cambios en sus elementos secundarios. (Ib351b)
Agrega los parámetros paddings, border, shape y background al objeto Box. (I05027, b/148147281)
Correcciones de errores
- Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto a onFocusChanged. (Ida4a1)
- VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y se reemplazó con ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
- Se cambió el nombre de
runOnIdleCompose
arunOnIdle
. (I83607) - Se cambió el nombre de varias API de prueba con el fin de que sean más intuitivas. Se cambió el nombre de todas las API findXYZ por el de onNodeXYZ. Se cambió el nombre de todas las APIs doXYZ por el de performXYZ (I7f164)
- IU de Compose ahora admite compilación dentro del objeto ViewGroups sin requerir una nueva composición. Consulta el elemento ViewInteropDemo para ver un ejemplo. (I9ab0b, b/160455080)
- Se agregaron sortWith y removeRange a MutableVector (Icccf7).
- Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField (I27032)
- Se quitó la clase intercalada Shader que une la clase de espera NativeShader. Se cambió el nombre del objeto NativeShader por Shader. La clase intercalada Shader unida no agregó ningún valor a la superficie de la API y era una clase intercalada, así que usa la clase NativeShader directamente. (I25e4d)
Se refactorizó el objeto PainterModifier para dejar de proporcionar escalamiento según las restricciones y el parámetro ContentScale especificados. Las implementaciones del objeto Painter deben escalar el contenido de su dibujo en función del tamaño especificado del elemento DrawScope en el que están dibujados.
Se corrigió el problema por el cual se ajustaba el tamaño del mapa de bits en caché del objeto VectorPainter a su configuración predeterminada, en lugar del tamaño determinado para dibujar.
Se actualizó el objeto ImagePainter a fin de escalar su contenido en lugar de depender del elemento PainterModifier para hacerlo en su nombre. (I6ba90)
Se agregó la función withFrameNanos de nivel superior para la sincronización de la animación (Ie34c5).
La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)
androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue quedaron obsoletos. TextField, FilledTextField y CoreTextField que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)
Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió ese error. (I1f48b, b/157998762)
Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió ese error. (Iab398, b/157998762)
Se refactorizó la clase Radius para que sea una clase intercalada. Se quitaron los métodos de creación complementarios para que el radio a lo largo del eje "y" coincida con el parámetro obligatorio del radio del eje "x" en el constructor de funciones con el parámetro predeterminado.
Se actualizó DrawScope.drawRoundRect para que admita un solo parámetro Radius en lugar de 2 números de punto flotante separados para el radio en los ejes "x" e "y" (I46d1b).
El elemento componible Recompose ya no es una abstracción útil. La mayor parte de la recomposición debería ocurrir como resultado de las asignaciones de MutableState. Para todo lo demás, se recomienda usar la función
invalidate
para activar una recomposición del alcance actual (Ifc992)Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Iede0b)
Cambia la estrategia para la generación de código del compilador de Compose. Antes del cambio, el compilador de compose transformaba las llamadas en funciones que admiten composición. Con este cambio, ahora transformamos el cuerpo de este tipo de función sin modificar (en su mayor parte) el sitio de llamada.
Esto significa que la mayor parte de la lógica que se comunica con el tiempo de ejecución de compose sucede al comienzo del cuerpo de la función, en lugar de ocurrir en el sitio de llamada.
Este cambio debería ser compatible con código fuente para cualquier uso de compose. La mayoría de los usuarios de compose no deberían tener que actualizar ningún código como resultado de este cambio.
A fin de brindar compatibilidad con este trabajo, se ha modificado la firma de JVM de todas las funciones que admiten composición. Una función que admite composición y que acepta un solo parámetro se transforma en una función que acepta 3 parámetros. Los parámetros adicionales son Composer, un objeto integer. "clave", que es un valor entero de máscara de bits que se utiliza para propagar metadatos a través de llamadas.
Ahora, Compose también transforma los argumentos predeterminados en una función que admite composición. Lo hace sin introducir una sobrecarga sintética, adicional y predeterminada de la función. Como resultado, este cambio tendrá menos funciones que se definan.
Como consecuencia, se realizarán los siguientes cambios de comportamiento intencionales conocidos:
- Algunas llamadas se omitirán en los casos en que antes no hubiese ocurrido.
- Ahora, se suscriben y se administran correctamente las expresiones que admiten composición en las expresiones de argumento predeterminados.
En este trabajo, se incluyeron algunas optimizaciones: 1. El resultado de las comparaciones de parámetros se propaga a otras funciones que admiten composición mediante el gráfico de llamadas. Como resultado, se realizarán menos comparaciones en el tiempo de ejecución, se reducirá el tamaño de la tabla de ranuras y se omitirán más funciones que admiten composición que antes no se omitían. 2. Los parámetros que se determinan "estáticos" en el tiempo de compilación ya no se comparan ni se almacenan en el tiempo de ejecución. Esto reduce la cantidad de comparaciones y el tamaño de la tabla de ranuras. 3. Se utiliza la estructura para el flujo de control del cuerpo de las funciones a fin de minimizar la cantidad de grupos que se generan. Esto reduce el tamaño de la tabla de ranuras y da como resultado menos trabajo para el tiempo de ejecución. 4. Si los parámetros de envío y recepción para las funciones no se utilizan dentro del cuerpo de la función, no se los incluye para determinar si se puede omitir la función.
La mayoría de los cambios rotundos se realizaron en las API a las que el compilador se orienta de manera directa, y el uso típico de Compose no se verá afectado: 1. Se quitó el objeto Composer::startExpr. 2. Se quitó el objeto Composer::endExpr. 3. Composer::call quedó obsoleto. 4. Se quitaron las sobrecargas del objeto
key
que no son varargs. Usa la versiónvararg
en el futuro. 5. La anotación Pivotal quedó obsoleta. Usa el objetokey
como reemplazo. 6. Se cambió el objeto ScopeUpdateScope::updateScope para esperar un elemento Function3 en lugar de Function1. 7. Se actualizaron los objetos restartableFunction y restartableFunctionN para que incluyan parámetros adicionales de tiempo de compilación. (I60756, b/143464846)Se quitaron los modificadores obsoletos LayoutAlign. (I10877)
Se quitó RepaintBoundary y se reemplazó por DrawLayerModifier. (I00aa4)
Button, FloatingActionButton y Clickable ahora tienen un parámetro
enabled
separado. Se reorganizaron algunos de los parámetros de Button o se les cambió el nombre. (I54b5a)Se reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta muestras actualizadas para obtener información de uso. (If63ab, b/146478620, b/146482131)
Cambios rotundos en la API de ambients. Consulta el registro y la documentación de
Ambient<T>
para obtener más detalles (I4c7ee, b/143769776).Se cambió el comportamiento del objeto TextDirection predeterminado, según lo establecido por el elemento LayoutDirection. Por ejemplo, si LayoutDirection es de derecha a izquierda, el objeto TextDirection predeterminado también lo será. Antes era TextAddress.ContentOrLtr/Rtl. (I4e803)
Corrección de errores: cuando el tamaño y el estilo de la fuente estaban anidados en un objeto AnnotatedString, no se procesaba correctamente el texto. (I77a9d)
Agrega los parámetros que se usan con frecuencia al objeto Text(). Si estás creando un estilo de texto local para pasar una pequeña cantidad de estos parámetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), ahora puede proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)
Se cambió el nombre del módulo ui-android-text a ui-text-android (I68cbe).