Base de Compose

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.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
6 de marzo de 2024 1.6.3 - - 1.7.0-alpha04

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.

GrupoDescripción
compose.animationCompila animaciones en las aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario.
compose.compilerTransforma las funciones que admite @Composable y habilita las optimizaciones con un complemento de compilador de Kotlin.
compose.foundationEscribe 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.materialCompila 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.material3Compila 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.runtimeSe 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.uiSon 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.foundation:foundation:1.6.3"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.foundation:foundation:1.6.3")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.10"
    }

    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.

Crear un error nuevo

Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.

Versión 1.7

Versión 1.7.0-alpha04

6 de marzo de 2024

Lanzamiento de androidx.compose.foundation:foundation-*: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 pluma stylus en dispositivos posteriores a Android U. (I002e4).
  • Se agregó hintLocales a KeyboardOptions para proporcionar a TextFields la capacidad de sugerir a los IME con configuraciones regionales específicas para preestablecer un idioma preferido (Id18c2).
  • Se quitaron las sobrecargas experimentales de BasicTextField2 y BasicSecureTextField que tomaban los parámetros value: String y onValueChange: () -> String (I568b4).
  • Agrega una función applySemantics opcional a InputTransformation para influir en la semántica del BasicTextField2 a la que se aplica. (I74a2f, b/170648072).
  • En esta CL, agregamos la acción semántica GetScrollViewportLength para canalizar la información sobre los componentes que se desplazan en Compose al sistema de a11y. Esta CL también aplica el uso de dicha propiedad en las listas desplazables base. (Ic5fa2).
  • El nombre de BasicTextField2 cambió por BasicTextField. (Ie5713).
  • FocusRequester.createRefs ahora es estable (I4d92c, b/261436820).
  • Se introdujo DelegatableNode.scrollIntoView() para permitir que los nodos modificadores realicen solicitudes scrollIntoView directamente (I2b3b7, b/299939840).
  • Se introdujo DelegatableNode.requireView() para permitir que los nodos modificadores obtengan el View actual de Android sin leer un elemento local de composición (I40768).
  • Se agregó información de diseño contextual dentro del alcance de la fila del flujo contextual y el alcance de la columna de flujo contextual, con el índice de línea, la posición y las restricciones del ancho y la altura máximos para permanecer en la posición especificada. Los elementos que superan el ancho o alto máximos pueden pasar a la línea siguiente, o bien omitirse según la configuración de menú ampliado. (Id13f8, b/292114798).

Correcciones de errores

  • Se corrigió un error por el que, en ciertas condiciones, activar o desactivar los atributos enabled o readOnly de TextField provocaba una falla (Iae17b).

Versión 1.7.0-alpha03

21 de febrero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.7.0-alpha03. La versión 1.7.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo DelegatableNode.requireLayoutCoordinates() como una forma de obtener el LayoutCoordinates actual de un Modifier.Node sin necesidad de anular onPlaced y almacenar por tu cuenta las coordenadas en una propiedad (Ia8657).
  • Se introdujo DelegatableNode.currentLayoutCoordinates como una forma de obtener el LayoutCoordinates actual de un Modifier.Node sin necesidad de anular onPlaced y almacenar por tu cuenta las coordenadas en una propiedad (Iaebaa).
  • Optimizaciones de rendimiento en DraggableAnchors utilizadas por AnchoredDraggable. (I89cff).
  • BasicTextField2 y las APIs relacionadas del paquete androidx.compose.foundation.text2 se mueven a androidx.compose.foundation.text. (I9f635).
  • BasicTextField2 ya no acepta un parámetro CodepointTransformation. Usa BasicSecureTextField o OutputTransformation. (Id34ff).
  • Se agregó un método para comparar solo las anotaciones de dos AnnotatedStrings. (I32659).
  • Presentamos ContextualFlowRow y FlowRow/Column mejoradas con MaxLines y Overflow. Nos complace anunciar mejoras para FlowRow y FlowColumn experimentales, que ahora incluyen maxLines y compatibilidad adicional, junto con el lanzamiento de ContextualFlowRow y ContextualFlowColumn. Esta actualización está diseñada para proporcionar componentes óptimos de rendimiento, en el que ContextualFlow* es ideal para una gran cantidad de elementos con una pequeña configuración de maxLines y una opción dinámica para ver más botones, y FlowRow y FlowColumn son perfectos para una pequeña cantidad de elementos, menos de 100. Importante: Para mantener el comportamiento existente en FlowRow o FlowColumn donde todos los elementos están compuestos, independientemente de si se ajustan al máximo del eje cruzado, establece overflow en FlowRowOverflow.Visible o FlowColumnOverflow.Visible durante la inicialización. Explora ContextualFlowRowSample y FlowRowSample para ver ejemplos de estas nuevas funciones en acción. (Ib9135, b/293577082).

Correcciones de errores

  • La animación del cursor ya no solicita fotogramas entre los estados activado y desactivado. (Ia2253).
  • Los constructores de copias obsoletos de KeyboardOptions ahora copiarán correctamente todas las propiedades (If12de).

Versión 1.7.0-alpha02

7 de febrero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.7.0-alpha02. La versión 1.7.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • HorizontalPager, VerticalPager y PagerState se ascienden a estables. (I67660, b/316966909).
  • Se agregó el elemento local de composición LocalTextLinkStyle que permite cambiar el estilo de los vínculos en Texto en la app. Si usas tu propio tema en la app, debes configurar esta composición a nivel local según el tema. Cuando uses el tema de Material, el color del vínculo se establecerá de forma predeterminada como el color principal de Material. (I7eb10).
  • Se introdujo el modificador receiveContent que proporciona a los desarrolladores una forma de recibir contenido enriquecido en Jetpack Compose.
  • receiveContent se integra con BasicTextField2 para aceptar contenido enriquecido proporcionado por el teclado en pantalla o mediante la acción de pegar el portapapeles. (I81b72).
  • En este cambio, reemplazaremos SnapFlingBehavior por TargetedFlingBehavior en el localizador para desbloquear otros casos de uso y brindar mayor flexibilidad. (I762ea).
  • En este cambio, haremos que las APIs de Snapping sean estables. También estamos limpiando parte del código de prueba y agregando más muestras a Snapping. (Id8da9).
  • Ingresa TargetedFlingBehavior, un FlingBehavior que permite propagar información sobre el estado de la animación en curso y su desplazamiento objetivo. (I6a207).

Correcciones de errores

  • BasicTextField2 ahora mantiene el cursor a la vista mientras escribes cuando el usuario se desplaza fuera de la vista o se mueve fuera de la vista debido a la entrada (Ieb856, b/237190748).

Contribución externa

  • Se agregó una API experimental para configurar el comportamiento de carga previa de LazyLists. (I022a4).

Versión 1.7.0-alpha01

24 de enero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.7.0-alpha01. La versión 1.7.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó un nuevo Indication API: IndicationNodeFactory. Esto genera implementaciones de Indication con mejor rendimiento en comparación con la API de rememberUpdatedInstance anterior (que ahora está obsoleta). Para obtener información sobre la migración, consulta developer.android.com.
  • clickable / combinedClickable / selectable / toggleable ahora acepta un parámetro MutableInteractionSource anulable. Si es nulo, y el Indication proporcionado es un IndicationNodeFactory, el Indication se puede crear de forma diferida solo cuando es necesario, lo que mejora el rendimiento. Si no elevas y usas MutableInteractionSource, se recomienda pasar un valor nulo.

Cambios en la API

  • Se introdujo DecayAnimation en AnchoredDraggable. Este cambio agrega un parámetro decayAnimationSpec a AnchoredDraggable, lo que permite usar la animación de disminución cuando se establece en uno de los anclas El cambio también incluye el cambio de nombre del animationSpec existente a snapAnimationSpec para ayudar a comprender el caso de uso de cada especificación.
  • BasicTextField2 está disponible para uso experimental. Debería ser similar a la paridad de funciones con BasicTextField, y el comportamiento debe estar listo para la producción. Sin embargo, por ahora, la API sigue siendo experimental. Antes de la estabilización, se cambiará el nombre por BasicTextField y se moverá al mismo paquete.
  • Se introdujo el primer borrador de la API de OutputTransformation para BasicTextField2. Esta API reemplaza la mayoría de los casos de uso de VisualTransformation en el BasicTextField anterior. Sin embargo, aún no está completa y algunas cosas no funcionarán correctamente, pero nos gustaría recibir comentarios sobre la usabilidad de la API para tus casos de uso. (aosp/2708848).
  • Se introdujo LinkAnnotation, que permite agregar al texto vínculos y elementos en los que se puede hacer clic. La función de vínculos aún no está completa y se realizarán más cambios en la API.
  • Se introdujo el modificador receiveContent que proporciona a los desarrolladores una forma de recibir contenido enriquecido en Jetpack Compose.
  • receiveContent se integra con BasicTextField2 para aceptar contenido enriquecido proporcionado por el teclado en pantalla o mediante la acción de pegar desde el Portapapeles.
  • KeyboardOptions.shouldShowKeyboardOnFocus te permite inhabilitar el comportamiento predeterminado de BasicTextField de solicitar un teclado en pantalla en foco.
  • TextInputService y LocalTextInputService dejaron de estar disponibles En su lugar, usa PlatformTextInputModifierNode para integrarlo directamente con las APIs de IME de la plataforma. (aosp/2862698).
  • Indication#rememberUpdatedInstance quedó obsoleto. Tiene una penalización de rendimiento alta que es inevitable y evita otras optimizaciones. En su lugar, debes usar la nueva API de IndicationNodeFactory.

Correcciones de errores

  • BasicTextField ahora validará previamente una pequeña selección de asignaciones de desplazamiento cuando se pase VisualTransformation Esto ayuda a detectar errores de código comunes que generan excepciones irrecuperables en pases de dibujo o medición posteriores. Si se lanzan durante la composición, es más probable que los desarrolladores vean estos errores durante el desarrollo que ayudan a evitar fallas de producción. (I0fd42).
  • No se arrojará VisualTransformation si muestras un índice no válido para uno no válido (b/316401857 ).

Versión 1.6

Versión 1.6.3

6 de marzo de 2024

Lanzamiento de androidx.compose.foundation:foundation-*: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.foundation:foundation-*:1.6.2. La versión 1.6.2 contiene estas confirmaciones.

Correcciones de errores

  • Corrige AnimateContentSize que no se restablece correctamente. (I07051).
  • Se solucionó el problema por el que intrinsicHeight del texto se almacenaba en caché en exceso en algunas circunstancias (3cd398, b/217910352).

Versión 1.6.1

7 de febrero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.1. La versión 1.6.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió la medida de cuadrícula escalonada que se producía cuando el usuario se desplazaba por encima del límite (bffc39).
  • Se agregó verificación para el diseño con dimensiones grandes. (e74af5).
  • Corrige la posición de elementos de tamaño 0 al comienzo de la cuadrícula escalonada. (785f94).
  • Llama a la devolución de llamada onRelease en el mismo orden que onBehindten. (31ce3b).

Versión 1.6.0

24 de enero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0. La versión 1.6.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.5.0

  • Se agregó el nuevo modificador Modifier.anchoredDraggable, que desbloquea la capacidad de arrastrar y animar entre un conjunto predefinido de anclas Este modificador está diseñado para reemplazar Modifier.swipeable. Obtén información para usarla y migrar desde Modifier.swipeable en la guía de migración.
  • Se agregó la funcionalidad de arrastrar y soltar entre apps y componentes. Consulta DragAndDropTarget, Modifier.dragAndDropSource y otras APIs para comenzar
  • Modifier.draggable2D es el nuevo modificador que permite una compatibilidad sencilla de arrastre en 2D. Consulta la Muestra.
  • Se agregaron AndroidExternalSurface y AndroidEmbeddedExternalSurface para facilitar la adición de componentes basados en la superficie en Compose.
  • Se implementaron varios cambios y mejoras en la API en Pager y snapFlingBehaviour.
  • Se promovieron varias APIs de enfoque, texto e inserciones a APIs estables.

Versión 1.6.0-rc01

10 de enero de 2024

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-rc01. La versión 1.6.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Se quitó el constructor de la extensión DragAndDropTarget(). Crea una instancia nueva con object: DragAndDropTarget {}. (I32318).

Versión 1.6.0-beta03

13 de diciembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-beta03. La versión 1.6.0-beta03 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió la falla que afectaba el texto muy grande que se mide con restricciones infinitas (I1a7df, b/312294386).
  • Ahora, PlatformImeOptions es una clase concreta en lugar de una interfaz. (If40a4).

Versión 1.6.0-beta02

29 de noviembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-beta02. La versión 1.6.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió el error por el que no se actualizaba canScroll después del desplazamiento de solo rediseño (I60a86).
  • Se corrigió Modifier.animateItemPlacement() y LookaheadScope después de desplazamientos pequeños (I3a2b7).

Versión 1.6.0-beta01

15 de noviembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-beta01. La versión 1.6.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • El modificador DragAndDropTarget ahora toma la DragAndDropTarget receptora 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 DragAndDropModifierNode. 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 que sea más clara sobre la unidad maximumFlingVelocity. (I8adc7).
  • Se cambió el nombre de onDragAndDropStart en la fábrica de DragAndDropModifierNode a acceptDragAndDropTransfer.

    Se agregó acceptsDragAndDropTransfer a dragAndDropTarget Modifier para aceptarlo desde una sesión de arrastrar y soltar Esta lambda muestra un DragAndDropTarget 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ábrica DragAndDropTarget para recibir de las sesiones de arrastrar y soltar (Iebf3a).

  • Si expones startDragImmediately en AnchoredDraggable, obtienes el control para detectar los gestos de arrastre cuando se usa. Resulta útil configurarlo cuando el widget se anima a un ancla de destino. Consulta la Muestra. (Ie6d13, b/285139987).

  • Las APIs de Foundation Insights ahora son @ExperimentalFoundationApi (I30b0b).

  • Se quitó DragAndDropInfo como tipo DragAndDropModifierNode.drag ahora toma parámetros para transferData, el tamaño de la decoración y la lambda DrawScope de decoración de arrastre

    DragAndDropTarget tiene métodos para eventos de arrastrar y soltar específicos en lugar de ser un solo método abstracto.

    Se cambió el nombre de onDragAndDropEvent en la función de fábrica de una DragAndDropModifierNode a onDragAndDropStart para comunicar mejor que el DragAndDropTarget proporcionado solo es válido para una sesión de arrastrar y soltar

    Se quitó DragAndDropEventType (I645b1).

  • Se cambió el nombre de PlatformTextInputModifierNode.runTextInputSession a establishTextInputSession. (I03cd0).

  • Reemplaza OriginalText por TextSubstitution. (Ifa5a8).

  • Se cambió el nombre de PlatformTextInputModifierNode.textInputSession a runTextInputSession. (Ie9c6b).

  • Los elementos secundarios de SubcomposeLayout (y los diseños como LazyColumn basados en ella) que se retienen para volver a usarse en el futuro se consideran desactivados. Se introdujo la nueva API de prueba assertIsDeactivated() para probar esos nodos. El resto de las APIs de prueba filtrarán los nodos desactivados de forma predeterminada. (I2ef84, b/187188981).

  • Se cambió el nombre del parámetro clippingEnabled de Modifier.magnifier a clip.

  • El parámetro magnifierCenter de Modifier.magnifier se convierte en anulable y mantiene el mismo comportamiento predeterminado (I6aa66).

  • 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 el código de muestra para ver ejemplos de cómo usar la nueva API. (Ia8943).

Correcciones de errores

  • Implementa equals y hashcode para PageSize.Fixed. (Ie3ede, b/300134276).
  • Se corrigió un error que hacía que el diseño de BasicText no se reducira cuando cambiaba minWidth y minWidth era inferior a las restricciones de medición iniciales maxWidth (Idb19c).
  • Se agregó compatibilidad con el procesador para el gradiente de barrido en ArcLine. (I4d5bb).
  • Se corrigió el problema de compatibilidad binaria con el cambio de la 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).

Versión 1.6.0-alpha08

18 de octubre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha08. La versión 1.6.0-alpha08 contiene estas confirmaciones.

Nuevas funciones

  • Modifier.draggable2D es el nuevo modificador que permite una compatibilidad sencilla de arrastre en 2D. Consulta la Muestra (Id95f5, b/214412658).

Cambios en la API

  • Se cambió el nombre de Modifier.dragAndDrawSource por la lambda onDrawDragShadow por drawDragDecoration, y se cambió el nombre del parámetro de tamaño a DragAndDropInfo por dragDecorationSize (Id0e30, b/303904810).
  • Se cambió el nombre del parámetro decorationBox de BasicTextField2 a decorator. Su tipo también se cambia por una interfaz divertida equivalente TextFieldDecorator. (I23c1c).

Correcciones de errores

  • Se mejoró la documentación en BasicTextField con respecto a los requisitos de onValueChange. (I90fc9, b/160257648).

Versión 1.6.0-alpha07

4 de octubre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha07. La versión 1.6.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo PlatformTextInputMethodTestOverride para escribir pruebas para editores de texto personalizados (Id159b).
  • Se cambió el nombre de GraphicsSurface a AndroidExternalSurface (I11680).
  • Se agregó la marca temporal DisableNonLinearFontScalingInCompose para inhabilitar el escalamiento de fuente no lineal Configura DisableNonLinearFontScalingInCompose = true en tus pruebas si necesitas tiempo para limpiarlas. Esta marca se quitará en Compose 1.6.0-beta01. (Ic9486).
  • Se agregaron las colecciones ColorList y ColorSet para evitar las asignaciones. (I744bd).
  • Este cambio quita shortSnapVelocityThreshold, que se convirtió en un detalle de implementación de las implementaciones de SnapLayoutInfoProvider. (I65f6d).
  • Se agregó el modificador dragAndDropSource para iniciar sesiones de arrastrar y soltar, y el modificador dragAndDropTarget para recibir de sesiones de arrastrar y soltar (Ib7828, b/286038936).
  • Se actualizaron la documentación de SnapPositionInLayout y el método de posición Incorpora los paddings de contenido al método de posición en SnapPositionInLayout. (Id7938, b/300116110).
  • Se agregó UndoState a TextFieldState, que permite deshacer y rehacer los cambios que realizó el usuario. (Icc024).

Correcciones de errores

  • Se corrigió basicMarquee que no animaba después del cambio de velocidad. (Id2e77, b/297974036).

Versión 1.6.0-alpha06

20 de septiembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha06. La versión 1.6.0-alpha06 contiene estas confirmaciones.

Nuevas funciones

  • Nuevos wrappers componibles para SurfaceView, TextureView: GraphicsSurface() y EmbeddedGraphicsSurface() Es una API experimental y está sujeta a cambios y modificaciones. (I9ddb2).
  • Modifier.magnifier() ahora es una API estable. Esto incluye quitar MagnifierStyle para priorizar los parámetros intercalados en el modificador. (I83bec, b/298381260, b/262367109, b/261438887).

Cambios en la API

  • Se introdujeron updateCurrentPage y updateTargetPage en ScrollScope. Estas son las últimas partes necesarias para permitir la personalización del desplazamiento animado por PagerState.scroll (I9cad5, b/267744105, b/243786897).
  • Quita la densidad de SnapFlingBehavior. Todas las implementaciones de SnapLayoutInfoProvider ya tienen una forma de acceder a la densidad. Se podría quitar el alcance del receptor, lo que generará una implementación menos compleja de SnapFlingBehavior y SnapLayoutInfoProviders. (I153c3).
  • Se marcaron más modificadores como estables. (I56af1, b/298046462).
  • Se quitó SnapStepSize de SnapLayoutInfoProvider El cálculo debe realizarse usando la información del diseño y provista a través del enfoque o de los desplazamientos de ajuste. (If320c).

Cambios en el comportamiento

  • Compose ahora usa el escalamiento de fuente no lineal para mejorar la legibilidad y accesibilidad Cuando la escala de fuente es superior al 100% en la configuración del sistema, el tamaño del texto pequeño aumentará normalmente, pero el texto grande solo aumentará un poco. Además, las alturas de línea definidas en SP se ajustarán automáticamente para permanecer proporcionales a la altura prevista de la escala del 100%. Consulta las prácticas recomendadas para el escalamiento de fuentes para obtener más información (I11518).

Correcciones de errores

  • Quita el uso de rememberSaveable para el cuadro de información. (Icc131, b/299500338).

Versión 1.6.0-alpha05

6 de septiembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha05. La versión 1.6.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • Agrega sobrecargas para BasicSecureTextField que acepten un valor inmutable y una devolución de llamada para cambiar ese valor, al igual que la API de BasicTextField actual. (Ia4882).
  • Se agregó Modifier.preferKeepClear() para marcar como elemento componible que prefiere no tener ventanas flotantes en el nivel de API 33 y superiores (Ib51d5, b/297260115).
  • Las velocidades de desplazamiento en los componentes View, como ScrollView y RecyclerView, se limitan a ViewConfiguration.ScaledMaximumFlingVelocity. Compose ahora contiene su propia versión de maximumFlingVelocity, que ahora se aplica a Draggable. (Ibf974).
  • Se quitaron las sobrecargas obsoletas de Pager y PagerState (Iea07e).
  • Se agregó BasicTooltipBox a compose.foundation y se actualizaron PlainTooltipBox y RichTooltipBox para usar TooltipBox con nuevos elementos componibles PlainTooltip y RichTooltip. (I79e1d).

Versión 1.6.0-alpha04

23 de agosto de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha04. La versión 1.6.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la interfaz ReusableComposition para administrar el ciclo de vida y la reutilización de subcomposiciones (I812d1, b/252846775).
  • Se promovió Modifier.focusGroup a APIs estables (I7ffa3).
  • Agrega sobrecargas para BasicTextField2 que acepten un valor inmutable y una devolución de llamada para cambiar ese valor, al igual que la API de BasicTextField actual. (I3f2b8).
  • GridItemSpan::currentLineSpan ahora es una API estable. (Icc29c).
  • El lienzo que acepta contentDescription ahora es una API estable. (Ib3d29).
  • Se introdujo viewportSize en ScrollState, una forma de conocer el tamaño de viewPort del componente que usa ScrollState después de la medición. (I8b85a, b/283102682).
  • Se solucionó un problema por el que la carga previa en Pager no coincidía con el comportamiento en Views. (I93352, b/289088847).
  • Modifier.consumeWindowInsets(PaddingValues) ahora es estable.
    • Se quitó la API de Deprecated Modifier.consumedWindowInsets. Se usa Modifier.consumeWindowInsets en su lugar. (Id72bb).

Versión 1.6.0-alpha03

9 de agosto de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha03. La versión 1.6.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una sobrecarga de LazyLayout, acepta una lambda de LazyLayoutItemProvider, no un objeto simple como estaba antes La sobrecarga anterior dejó de estar disponible. (I42a5a).
  • Se agregó compatibilidad para configurar privateImeOptions (Idb772).

Correcciones de errores

  • Se corrigieron los campos de texto que mostraban el teclado y se podían editar cuando readOnly era verdadero También se corrigió el teclado que no se mostraba cuando readOnly se cambiaba de verdadero a falso mientras se enfocaba (I34a19, b/246909589).

Versión 1.6.0-alpha02

26 de julio de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha02. La versión 1.6.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo PagerLayoutInfo con información recopilada después de que una medición pase Pager. También se introdujo PageInfo, la información sobre una sola página medida en Pager. (Iad003, b/283098900).
  • Anotaciones adicionales para especificar entradas permitidas a elementos componibles (I51109)
  • Se agregó SemanticsNodeInteraction.requestFocus como una forma más conveniente y detectable de solicitar el enfoque en las pruebas (Ie8722).
  • Se rediseñó por completo la API de PlatformTextInput*. (I6c93a, b/274661182, b/267235947, b/277380808).
  • SoftwareKeyboardController y LocalSoftwareKeyboardController dejaron de ser experimentales. Ahora, LocalSoftwareKeyboardController también es un CompositionLocal adecuado. (I4c364).
  • Modifier.transformable ahora proporciona el desplazamiento delta en el parámetro canPan para ayudar a determinar la dirección del desplazamiento lateral a fin de permitirlo o inhabilitarlo (I692aa, b/266829800).
  • Se actualizó el modificador consumeWindowInsets para extender la superclase AbstractComposeView (Iacd74, b/269479941).

Versión 1.6.0-alpha01

21 de junio de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.6.0-alpha01. La versión 1.6.0-alpha01 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva API de AnchoredDraggable en Foundation. Se puede usar para crear componentes que pueden arrastrarse entre estados discretos, como las hojas inferiores modales. Esta API reemplaza la API de Swipeable de Material. (I4a2ed).

Cambios en la API

  • Se agregó compatibilidad con InputConnection#requestCursorUpdates (I0c69b).
  • Se agregó scrollAnimationSpec para permitir las especificaciones de animación personalizada Se actualizó BringIntoViewCalculator a BringIntoViewScroller. (Idb741).
  • Se agregó el tipo ResourceResolutionException para unir los elementos throwables que se arrojan cuando se intenta cargar recursos 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).
  • Se agregaron acciones y propiedades semánticas para admitir la traducción de texto. (I4a6bc).
  • Se introdujo una API de BringIntoViewCalculator que se puede usar para personalizar el modo en que componentes como Scrollable responden a solicitudes bringIntoView Se cambió la sobrecarga del elemento desplazable para aceptar, de manera opcional, una instancia de BringIntoViewCalculator. (Iaf5af).

Correcciones de errores

  • Se agregó una comprobación de lint para advertir si creas un MutableInteractionSource en la composición sin recordarlo, de manera similar a las comprobaciones de lint para crear un estado mutable / Animatable. (I5daae).
  • Se agregó compatibilidad con la selección con el mouse. La selección táctil se expandirá por palabra y se reducirá por carácter. (Ic0c6c, b/180639271).
  • Se agregó la interfaz de FocusTargetModifierNode que se puede usar para crear un elemento FocusTarget personalizado (I9790e).

Versión 1.5

Versión 1.5.4

18 de octubre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*: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.foundation:foundation-*:1.5.3. Esta versión no tiene cambios.

Versión 1.5.2

27 de septiembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.2. La versión 1.5.2 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un error en el texto que producía fallas en ciertas circunstancias en las que se invalidaba la semántica

Versión 1.5.1

6 de septiembre de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.1. La versión 1.5.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigieron los campos de texto que mostraban el teclado y se podían editar cuando readOnly era verdadero También se corrigió el teclado que no se mostraba cuando readOnly se cambiaba de verdadero a falso mientras se enfocaba (I34a19, b/246909589).

Versión 1.5.0

9 de agosto de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.0. La versión 1.5.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.4.0

  • Muchos modificadores fundamentales, incluidos Modifier.clickable, Modifier.draggable, Modifier.scrollable y el modificador de diseño, entre otros, se migraron a la API de Modifier.Node, lo que redujo la sobrecarga en la composición inicial.
  • Mejoras en la estabilidad de los paginadores Se solucionaron muchos errores.
  • Los parámetros pageCount ahora se alojan en PagerState, en lugar del localizador en sí.

Versión 1.5.0-rc01

26 de julio de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.0-rc01. La versión 1.5.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Se ofrece una inspección opcional para recomendar migrar llamadas de mutableStateOf() a sus tipos especializados correspondientes para primitivas. Su ID de lint es AutoboxingStateCreation. Anteriormente, esta inspección estaba habilitada de forma predeterminada para todos los proyectos. Para ver esta advertencia en el editor de Android Studio y en los resultados de lint de tu proyecto, cambia su gravedad de informativa a advertencia (o superior) declarando warning "AutoboxingStateCreation" dentro de la configuración build.gradle o build.gradle.kts de tu módulo, como se muestra (I34f7e):

        android {
            lint {
                warning "AutoboxingStateCreation"
            }
            ...
        }
    

Versión 1.5.0-beta03

28 de junio de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.0-beta03. La versión 1.5.0-beta03 contiene estas confirmaciones.

Versión 1.5.0-beta02

7 de junio de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.0-beta02. La versión 1.5.0-beta02 contiene estas confirmaciones.

Versión 1.5.0-beta01

24 de mayo de 2023

Lanzamiento de androidx.compose.foundation:foundation-*:1.5.0-beta01. La versión 1.5.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Implementa PlatformDataProvider para proporcionar la frecuencia cardíaca y los pasos diarios. Se quitó la interfaz SensorGateway de la API pública. (I55b84).

Correcciones de errores

  • Se redujeron las asignaciones durante mediciones de listas diferidas, cuadrículas, etc. (Iaf9e2).
  • Se redujeron las asignaciones cuando se aplican instantáneas (I65c09).
  • Se quitaron las asignaciones de las animaciones de resorte (Ie9431).
  • Se quitó la asignación de TextLayout (I0fd11).
  • Se quitaron varias asignaciones en el seguimiento de velocidad del puntero (I26bae).

Versión 1.5.0-alpha04

10 de mayo de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.5.0-alpha04 y androidx.compose.foundation:foundation-layout:1.5.0-alpha04. La versión 1.5.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se agregó TextStyle.merge(...) optimizado con la lista completa de parámetros. (Iad234, b/246961787).
  • Ingresa un SnapLayoutInfoProvider que se pueda usar con LazyGridState. (I92134, b/269237141, b/260914964).
  • Se agregó el elemento experimental Modifier.animateItemPlacement() para el alcance del elemento de cuadrículas diferidas y escalonadas Puedes aplicarla en los elementos para lograr las animaciones de cambio de posición o reordenamiento de automatización. (I4b62d, b/257034719).
  • Se asciende GridCells.FixedSize a estable. FixedSize define un LazyGrid en el que cada celda toma el tamaño exacto en el eje cruzado, con el espacio restante distribuido por disposición de ejes cruzados. (I8542f).
  • Se introdujo el alcance del receptor PagerScope para Pager y una función de utilidad para el cálculo de un desplazamiento de página determinado. (If2577).
  • Introduce snapPositionalThreshold cuando crees un comportamiento de deslizamiento. Usa este parámetro para especificar un umbral posicional para el ajuste corto en el localizador. (If8f7f).
  • Se reemplazó SnapLayoutInfoProvider.calculateSnappingOffsetBounds con calculateSnappingOffset. En este método nuevo, simplemente solicitamos que se ajuste el siguiente desplazamiento. El cálculo de los límites se debe realizar a nivel de la implementación, ya que puede variar en función de cómo se necesite un ajuste. (I923a4).
  • Se ascendió la API de LazyStaggeredGrid a estable. (I633a5).
  • Se quita pageCount de Horizontal/VerticalPager. Se debe proporcionar durante la creación del estado. Se actualizaron PagerState y rememberPagerState para aceptar las pageCount. (Ieb52d, b/266965072).
  • Se quita pageCount de Horizontal/VerticalPager. Se debe proporcionar durante la creación del estado. Se actualizaron PagerState y rememberPagerState para aceptar las pageCount. (Ifa3cb, b/266965072).
  • Introduce shortSnapVelocityThreshold en el elemento SnapFlingBehavior de Pager. (I7379e, b/275579012).
  • Agrega un FlowRowScope y un FlowColumnScope (I54fe2).

Correcciones de errores

  • Las llamadas para obtener semánticas en Text cuando las restricciones tienen minWidth y minHeight ya no fallan (Ibd072).
  • Se corrigió la regresión por la que el teclado no se mostraba para los campos de texto dentro de diálogos que no creaba el elemento componible Dialog. (I82551, b/262140644).

Versión 1.5.0-alpha03

19 de abril de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.5.0-alpha03 y androidx.compose.foundation:foundation-layout:1.5.0-alpha03. La versión 1.5.0-alpha03 contiene estas confirmaciones.

Esta versión habilita la nueva pila de renderización de texto para Compose. La nueva pila está optimizada para el rendimiento, por lo que no deberías ver cambios visibles.

Si observas cambios en el texto renderizado, puedes depurar con la configuración de NewTextRendering1_5 = false para confirmar la diferencia de comportamiento. Si configuras este parámetro, se forzará la recomposición. Informa las diferencias de comportamiento como errores.

Se quitará la marca de depuración antes de la versión 1.5 beta01 (Iada23, b/246960758).

Cambios en la API

  • Ahora FlowColumn/FlowRow está intercalado. (Idab37).

Versión 1.5.0-alpha02

5 de abril de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.5.0-alpha02 y androidx.compose.foundation:foundation-layout:1.5.0-alpha02. La versión 1.5.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó compatibilidad con celdas de tamaño fijo en LazyGrid y se organizan con disposición de ejes cruzados. (I83ed9, b/235121277, b/267942510).
  • Se agregó compatibilidad con carriles de tamaño fijo en LazyStaggeredGrid y se organizan con disposición de ejes cruzados. (I7d519).
  • Ahora, los objetos UrlAnnotation en AnnotatedString se pueden abrir mediante servicios de accesibilidad, como TalkBack. (If4d82, b/253292081).
  • Se agregó la acción de 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).
  • Se agregó compatibilidad con el espaciado o la disposición de ejes cruzados mediante verticalArrangement en FlowRow y horizontalArrangement en FlowColumn. También se quitaron los elementos verticalAlignment y horizontalAlignment de nivel superior en FlowRow/FlowColumn. En su lugar, los desarrolladores pueden usar Modifier.align. Esto reduce la confusión entre las convenciones de nombres de verticalAlignment y verticalArrangement. (I87b60, b/268365538).

Versión 1.5.0-alpha01

22 de marzo de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.5.0-alpha01 y androidx.compose.foundation:foundation-layout:1.5.0-alpha01. La versión 1.5.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se refactorizaron el texto y BasicText para usar el nuevo sistema de modificadores Esto mejora notablemente el rendimiento en muchos casos. No debería verse ningún cambio. (If1d17, b/246961435).
  • Se agregó la acción de semántica PerformImeAction para invocar la acción del IME en nodos del editor de texto. (Ic606f, b/269633506).

Correcciones de errores

  • Se actualizaron los componentes internos de Modifier.hoverable. El modificador hoverable solo se mostrará en el inspector si está habilitado. (I82103).

Versión 1.4

Versión 1.4.3

3 de mayo de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.3 y androidx.compose.foundation:foundation-layout:1.4.3 sin cambios (solo una actualización de versión).

Versión 1.4.2

19 de abril de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.2 y androidx.compose.foundation:foundation-layout:1.4.2. La versión 1.4.2 contiene estas confirmaciones.

Versión 1.4.1

5 de abril de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.1 y androidx.compose.foundation:foundation-layout:1.4.1. La versión 1.4.1 contiene estas confirmaciones.

Versión 1.4.0

22 de marzo de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.0 y androidx.compose.foundation:foundation-layout:1.4.0. La versión 1.4.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.3.0

  • Se agregó la integración de compatibilidad de emojis a Text y TextField, así como el párrafo de nivel inferior. Esta opción se habilita de forma predeterminada cuando se configura emojicompat.
  • EmojiCompat se puede configurar en un texto específico mediante PlatformParagraphStyle.
  • Se agregó compatibilidad con el intervalo de línea completa a LazyStaggeredGrid(I28252).
  • Se agregó onHover experimental a ClickableText (I6938f).
  • Se introdujeron nuevas sobrecargas experimentales para la función runComposeUiTest y las funciones create*ComposeRule que aceptan parámetros CoroutineContext. El contexto se usará para la composición de prueba y cualquier llamada LaunchedEffect y rememberCoroutineScope() en la composición (I10614, b/265177763).
  • FlowRow y FlowColumn ahora están disponibles como @ExperimentalFoundationApi, que permiten un diseño más flexible basado en filas y columnas de componentes que se dividirán en una nueva línea si no hay suficiente espacio en el eje principal (I3a7b2).
  • Modifier.basicMarquee() está disponible como función experimental para mostrar contenido con un efecto de marquesina desplazable (I2df44, b/139321650).

Versión 1.4.0-rc01

8 de marzo de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-rc01 y androidx.compose.foundation:foundation-layout:1.4.0-rc01. La versión 1.4.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo 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ó compatibilidad con el diseño inverso a LazyStaggeredGrid (I3ef4a).

Correcciones de errores

  • La acción semántica SetText de BasicTextField 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 y performTextSelection ahora usan SemanticsActions. (I0807d, b/269633168, b/269624358).

Versión 1.4.0-beta02

22 de febrero de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-beta02 y androidx.compose.foundation:foundation-layout:1.4.0-beta02. La versión 1.4.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una nueva devolución de llamada Modifier.Node.onReset(), que permite restablecer un estado local para controlar correctamente el caso cuando Layout se vuelva a usar (por ejemplo, como un elemento de LazyColumn). Se corrigió FocusTargetModifierNode para restablecer correctamente el estado enfocado (I65495, b/265201972).
  • Se agregó el parámetro BlendMode a los métodos DrawScope.drawText, Paragraph.paint y MultiParagraph.paint para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508).
  • Se quitó la API de modifierElementOf(). En su lugar, extiende directamente desde ModifierNodeElement. (Ie6d21).

Correcciones de errores

  • Los controladores de selección ajustables ya no se puede usar para seleccionar un carácter parcial (Idedd1).
  • Se corrigió la falla que ocurría cuando se presionaba Ctrl + retroceso en un TextField vacío (I0427f, b/244185537).

Versión 1.4.0-beta01

8 de febrero de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-beta01 y androidx.compose.foundation:foundation-layout:1.4.0-beta01. La versión 1.4.0-beta01 contiene estas confirmaciones.

Nuevas funciones

  • A partir de la versión 1.3, se agregó la integración de compatibilidad de emojis a Text y TextField, así como el párrafo de nivel inferior. Esta opción se habilita de forma predeterminada cuando se configura emojicompat.
  • EmojiCompat se puede configurar en un texto específico mediante PlatformParagraphStyle.

Cambios en la API

  • Se agregó la implementación común de la API de PinnableContainer que se usa en todos los LazyLayouts para retener los elementos que salen de la composición, pero que aún deben estar activos (If45a4).
  • Se cambió el nombre de PinnableContainer.PinnedHandle.unpin() por release() (I4667a).

Contribución externa

  • Se agregó la propiedad mainAxisItemSpacing a LazyListLayoutInfo, LazyGridLayoutInfo y LazyStaggeredGridItemInfo (I52fad).

Versión 1.4.0-alpha05

25 de enero de 2023

Se lanzaron androidx.compose.foundation:foundation:1.4.0-alpha05 y androidx.compose.foundation:foundation-layout:1.4.0-alpha05. La versión 1.4.0-alpha05 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó compatibilidad con el intervalo de línea completa a LazyStaggeredGrid (I28252).
  • Se agregó onHover experimental a ClickableText (I6938f).
  • Se introdujeron nuevas sobrecargas experimentales para la función runComposeUiTest y las funciones create*ComposeRule que aceptan parámetros CoroutineContext. El contexto se usará para la composición de prueba y cualquier llamada LaunchedEffect y rememberCoroutineScope() en la composición (I10614, b/265177763).

Cambios en la API

  • Combina las APIs previas y posteriores de OverscrollEffect en las funciones combinadas "decorador" applyToScroll y applyToFling. Consulta los ejemplos actualizados en la documentación para ver ejemplos de cómo implementar un efecto de sobredesplazamiento con la nueva forma de API. (I8a9c4, b/255554340).
  • Se agregaron más funciones de tipo/nulabilidad de funciones ocultas intercaladas y obsoletas (I24f91).
  • Las APIs de LineBreak y Hyphens en TextStyle pasaron a ser estables. (Ic1e1d).

Correcciones de errores

  • El cursor de los campos de texto seguirá parpadeando, incluso cuando las animaciones estén inhabilitadas. (I95e70, b/265177763).
  • Ahora, se anima Modifier.basicMarquee, incluso cuando las animaciones están inhabilitadas en la configuración del sistema (I23389, b/262298306, b/265177763).

Contribución externa

  • Los métodos notifyFocusedRect de TextInputSession y TextInputService ya no son obsoletos (I23a04, b/262648050).

Versión 1.4.0-alpha04

11 de enero de 2023

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-alpha04 y androidx.compose.foundation:foundation-layout:1.4.0-alpha04. La versión 1.4.0-alpha04 contiene estas confirmaciones.

Nuevas funciones

  • FlowRow y FlowColumn ahora están disponibles como @ExperimentalFoundationApi, que permiten un diseño más flexible basado en filas y columnas de componentes que se dividirán en una nueva línea si no hay suficiente espacio en el eje principal (I3a7b2).
  • Modifier.basicMarquee() está disponible como función experimental para mostrar contenido con un efecto de marquesina desplazable (I2df44, b/139321650).

Cambios en la API

  • FocusRequesterModifier dejó de estar disponible y se reemplazó por FocusRequesterNode (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589).
  • El constructor de AndroidFont con variationSettings ahora es una API estable y se puede usar para crear nuevos tipos de descriptores de fuente (I5adcc, b/261565807).
  • Se introdujo la API de PinnableContainer propagada por listas diferidas a través de un elemento local de composición que permite fijar el elemento actual. Esto significa que el elemento no se desechará cuando se aleje de la vista. Por ejemplo, Modifier.focusable() fijará el elemento destacado actual con este mecanismo (Ib8881, b/259274257, b/195049010).
  • Se reescribió la forma en que los elementos desplazables responden a bringIntoViewRequesters. Además, se reescribieron los elementos enfocables para modelar mejor la complejidad de esas operaciones y manejar más casos extremos (I2e5fe, b/241591211, b/192043120, b/237190748, b/230756508, b/239451114).
  • Se agregó más nulabilidad del tipo de datos que se muestra de las funciones obsoletas y ocultas (Ibf7b0).
  • Se agregó TextMotion experimental a TextStyle para definir Text como Static(default) o Animated. Usa TextMotion.Animated si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).
  • Se agregó TextFieldFocusModifier para corregir el comportamiento de navegación de enfoque en la plataforma de Android (I00303).
  • Se reemplazó el argumento maxSize: IntSize en drawText con size: Size para intercalarlo con otras funciones DrawScope. size se establece en Size.Unspecified de forma predeterminada, lo que no debería cambiar el comportamiento predeterminado anterior (Icd27d).

Correcciones de errores

  • Se realizaron cambios en la física de ajuste en SnapFlingBehaviour para lograr mayor naturalidad.

Problema conocido

  • Cuando actualices de androidx.compose.foundation:1.4.0-alpha03 a androidx.compose.foundation:1.4.0-alpha04, es posible que experimentes un error java.lang.NoSuchFieldError. Aquí es donde originalmente se informó el problema. Se envió una solución, que estará disponible en la próxima actualización de Compose. Como solución, actualiza las bibliotecas androidx.compose.material y androidx.compose.material3 a la versión más reciente (1.1.0-alpha04) o cambia tu androidx.compose.foundation a la versión 1.4.0-alpha03 inferior.

Versión 1.4.0-alpha03

7 de diciembre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-alpha03 y androidx.compose.foundation:foundation-layout:1.4.0-alpha03. La versión 1.4.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • 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 a withFrameNanos o withFrameMillis 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 constructor TestMonotonicFrameClock y la función de fábrica para ejecutar el código después de las devoluciones de llamada de withFrameNanos, pero antes de reanudar las corrutinas de los emisores. (Idb413, b/254115946, b/222093277, b/255802670).
  • 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 introdujeron HorizontalPager y VerticalPager como formas de mostrar elementos componibles como paginadores. Se introdujo PagerState para controlar los paginadores y la información de consulta sobre el estado actual del paginador. Se introdujo PageSize, una forma de controlar el tamaño de la página de un paginador, que se puede usar para crear un carrusel como paginadores. Se introdujo PagerSnapDistance, una forma de controlar cómo funcionan los ajustes en el comportamiento de deslizamiento de los paginadores (I01120).
  • Se introdujo una sobrecarga en SnapFlingBehavior.performFling para ayudar a comprender dónde se estabilizará el deslizamiento (I569f6).
  • Se quitó OverscrollEffect#isEnabled. En lugar de tener que recordar y establecer esta marca, no despaches eventos al efecto de sobredesplazamiento en los casos en que no desees que se muestre el desplazamiento (por ejemplo, si ScrollableState#canScrollForward/backward muestran falso) (I1a4b0, b/255554340, b/255557085).
  • Se agregaron ScrollableState#canScrollForward y ScrollableState#canScrollBackward para consultar si un ScrollableState tiene espacio para desplazarse en cualquier dirección (si está dentro de los valores mínimo o máximo de su rango). El valor predeterminado es verdadero para retrocompatibilidad con implementaciones existentes de ScrollableState. Los consumidores pueden usar esto para mostrar al usuario que aún hay espacio para desplazarse. También se puede usar para evitar el envío del delta a ScrollableStates, que no tiene espacio para desplazarse en una dirección determinada, para reducir el trabajo innecesario (Idf1a0, b/255557085).
  • 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 un Scrollable 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 actualizó el nombre de snapStepSize para que sea coherente con otros métodos de SnapLayoutInfoProvider (Ife67c).
  • Se agregó EmojiCompat a Compose (Ibf6f9, b/139326806).
  • Se cambió el nombre de consumedWindowInsets() a consumeWindowInsets(), y el de withConsumedWindowInsets() a onConsumedWindowInsetsChanged(), y se cambiaron los modificadores para que sean públicos (Ie44e1).

Correcciones de errores

  • Se corrigió la falla de Modifier.animateItemPlacement() y cuadrículas diferidas. Sucedía en algunas condiciones en las que el recuento de elementos nuevos era menor que en el anterior (I0bcac, b/253195989).

Versión 1.4.0-alpha02

9 de noviembre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-alpha02 y androidx.compose.foundation:foundation-layout:1.4.0-alpha02. La versión 1.4.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • awaitFirstDown y waitForUpOrCancellation ahora aceptan un PointerEventPass para lograr mayor flexibilidad (I7579a, b/212091796).
  • Se revirtió la API de beyondBoundCount de las APIs Lazy* (I12197).
  • Se introdujo un parámetro en las APIs diferidas para componer y posicionar elementos de viewport (I69e89, b/172029355).
  • Se agregó el parámetro minLines a BasicText y BasicTextField. Permite establecer la altura mínima de estos elementos componibles en términos de cantidad de líneas (I24294, b/122476634).

Versión 1.4.0-alpha01

24 de octubre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.4.0-alpha01 y androidx.compose.foundation:foundation-layout: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 a forEachGesture(), pero la repetición de gestos funciona completamente dentro de AwaitPointerEventScope, por lo que no se pueden perder eventos entre iteraciones.
  • forEachGesture() dejó de estar disponible a favor de awaitEachGesture() porque permite que se pierdan eventos entre gestos (Iffc3f, b/251260206).
  • Se agregaron WindowInsets.imeAnimationSource y WindowInsets.imeAnimationTarget para determinar el progreso de la animación y saber dónde estará el IME después de que se complete la animación (I356f1, b/217770337).

Versión 1.3

Versión 1.3.1

9 de noviembre de 2022

Se lanzaron androidx.compose.foundation:foundation:1.3.1 y androidx.compose.foundation:foundation-layout:1.3.1. La versión 1.3.1 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó el problema de rendimiento en BeyondBoundsLayout (aosp/2255266).
  • ContentInViewModifier no leerá coordenadas de diseño a menos que se adjunten (aosp/2241316).

Versión 1.3.0

24 de octubre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0 y androidx.compose.foundation:foundation-layout:1.3.0. La versión 1.3.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.2.0

  • Se introdujeron versiones experimentales de LazyVerticalStaggeredGrid y LazyHorizontalStaggeredGrid.
  • Se agregaron SnapFlingBehavior, rememberSnapFlingBehavior y otras APIs correspondientes como experimentales.
  • Modifier.clickable, Modifier.toggleable y Modifier.selectable ahora muestran ondas si se hace clic con el teclado o el pad direccional en un control remoto.

Versión 1.3.0-rc01

5 de octubre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-rc01 y androidx.compose.foundation:foundation-layout:1.3.0-rc01. La versión 1.3.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo lowVelocityAnimationSpec, que se usa en el paso de enfoque cuando no hay suficiente velocidad de deslizamiento para decaer (Iaeb27).
  • Se agregaron nuevos guiones experimentales de API para admitir la separación silábica automática en Text (Iaa869).

Versión 1.3.0-beta03

21 de septiembre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-beta03 y androidx.compose.foundation:foundation-layout: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).
  • Los elementos BringIntoViewResponder ahora pueden obtener los límites más actualizados de una solicitud mientras la procesan (If86a5, b/241591211).
  • Se agregó compatibilidad con espaciado entre elementos a Staggered Grid experimental (I10b82).
  • Se introdujo el padding del contenido a Staggered Grid experimental (I342ea).
  • Se cambió el argumento size:IntSize con constraints: Constraints en el método TextMeasurer.measure para admitir restricciones de ancho mínimo (I37530, b/242707525).
  • Se agregó Modifier.withConsumedWindowInsets() a fin de consumir WindowInsets para usarlo fuera de windowInsetsPadding.
  • Se agregó MutableWindowInsets para permitir un cambio fácil de WindowInsets sin recomposición (I7fd28, b/237019262, b/243119659).

Versión 1.3.0-beta02

7 de septiembre de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-beta02 y androidx.compose.foundation:foundation-layout:1.3.0-beta02. La versión 1.3.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Versión inicial de StaggeredGrid experimental (Ia48be).
  • Se cambió el nombre de FocusDirection.In y FocusDirection.Out por FocusDirection.Enter y FocusDirection.Exit (Ia4262, b/183746982).
  • Se introdujo una sobrecarga de rememberSnapFlingBehavior que proporciona una forma rápida de habilitar el ajuste en LazyLists (Ifb48a).
  • Se reemplazó la fábrica snapFlingBehavior por una clase SnapFlingBehavior concreta. Los métodos SnapLayoutInfoProvider se limitaron a Density para facilitar las conversiones de Dp<->Px a los usuarios de la API (I54a11).
  • Actualiza LazyLayoutMeasureScope.measure para mostrar una lista de objetos que se puedan ubicar, donde se destaque la inmutabilidad deseada del valor que se muestra (I48b7c).
  • Se introdujo SnapLayoutInfoProvider, que toma un LazyListState a fin de crear una instancia de SnapLayoutInfoProvider que se puede usar a fin de habilitar un FlingBehavior de ajuste para LazyLists (I2dd10).

Correcciones de errores

  • Se refactoriza AwaitPointerEventScope#awaitLongPressOrCancellation para que coincida con otras funciones en espera (I646e6).

Versión 1.3.0-beta01

24 de agosto de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-beta01 y androidx.compose.foundation:foundation-layout:1.3.0-beta01. La versión 1.3.0-beta01 contiene estas confirmaciones.

Cambios en la API

  • Se quitó pointerPosition de OverscrollEffect. Los efectos que se preocupan por la posición del puntero pueden usar Modifier.pointerInput { } en effectModifier para obtener la posición actual (I9f606, b/241239306).
  • Se expuso AwaitPointerEventScope#awaitLongPressOrCancellation como un bloque de compilación adicional para la detección de gestos más compleja (I04374, b/181577176).
  • Se agregó lazyListSnapLayoutInfoProvider para habilitar el ajuste en listas diferidas (I3ecdf).
  • Se introdujo SnapFlingBehavior, un comportamiento de navegación que permite ajustar listas. Proporciona una instancia de SnapLayoutInfoProvider con información sobre tu diseño de ajuste (Ie754c).

Versión 1.3.0-alpha03

10 de agosto de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-alpha03 y androidx.compose.foundation:foundation-layout:1.3.0-alpha03. La versión 1.3.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Las fuentes de recursos ahora admiten la configuración de variaciones de fuentes (nivel de API 26 o versiones posteriores). (I900dd, b/143703328).
  • Agegamos compatibilidad con fuentes variables en DeviceFontFamilyNameFont (Ic1279, b/143703328).
  • Se quitó la anotación experimental de PlatformTextStyle y LineHeightStyle (I64bef).
  • Los campos de texto ahora arrojarán excepciones más detalladas cuando el elemento OffsetMapping proporcionado por un VisualTransformation muestre índices no válidos (Ie73f9, b/229378536).
  • Presentamos APIs experimentales para compartir la lógica del proveedor de elementos entre diseños diferidos (Ic891c).
  • ScrollableDefaults.reverseDirection() ya no es experimental (Iba646).
  • SemanticsModifier.id dejó de estar disponible y, en su lugar, se movió el ID de semántica a LayoutInfo.semanticsId (Iac808, b/203559524).
  • checkScrollableContainerConstraints() ya no es experimental (I2c290).
  • Modifier.clipScrollableContainer() ya no es experimental (Ia2b44).
  • TextInputService.show|hideSoftwareKeyboard dejó de estar disponible. En su lugar, usa SoftwareKeyboardController en el código de la app y TextInputSession en el código de administración de IME. (I14e4c, b/183448615).

Versión 1.3.0-alpha02

27 de julio de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-alpha02 y androidx.compose.foundation:foundation-layout:1.3.0-alpha02. La versión 1.3.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la función de extensión drawText en DrawScope para proporcionar una forma de dibujar texto multiestilo en elementos componibles y modificadores que funcionan en DrawScope, como Canvas y drawBehind (I16a62, b/190787898).

Correcciones de errores

  • El teclado en pantalla ahora estará oculto cuando un campo de texto esté inhabilitado mientras esté enfocado (I6e3e4, b/237308379).
  • Cuando se agreguen 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 (Icea9d, b/216582726, b/223440806, b/227709803).
  • Cuando un elemento con desplazamiento tiene un elemento secundario enfocado, ahora se desplaza correctamente para mantenerlo visible cuando se reduce su tamaño, incluso cuando el tamaño es animado (I80867, b/230756508, b/220119990).
  • Se corrigió una falla en la que se borraba y se rellenaba TextField mientras la selección estaba activa (I1235b, b/208655565, b/214253689).

Versión 1.3.0-alpha01

29 de junio de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.3.0-alpha01 y androidx.compose.foundation:foundation-layout:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se introdujo el tipo de anotación UrlAnnotation y los métodos asociados para admitir la compatibilidad con vínculos TalkBack en AnnotatedString (I1c754, b/231495122).

Correcciones de errores

  • Ahora se puede animar BasicTextField cursorBrush sin reiniciar el temporizador del cursor (I812e6, b/236383522).

Versión 1.2

Versión 1.2.1

10 de agosto de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.1 y androidx.compose.foundation:foundation-layout:1.2.1. La versión 1.2.1 contiene estas confirmaciones.

Versión 1.2.0

27 de julio de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0 y androidx.compose.foundation:foundation-layout:1.2.0. La versión 1.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.1.0

  • LazyVerticalGrid y LazyHorizontalGrid ahora son estables.
  • Ahora puedes especificar un tipo de contenido para los elementos de listas y cuadrículas diferidas. Esto permitirá que los componentes reutilicen los elementos de manera más eficiente.
  • Las listas y cuadrículas diferidas ahora tienen el parámetro userScrollEnabled, que permite inhabilitar el desplazamiento mediante los gestos del usuario.
  • Se agregó una nueva API experimental llamada LazyLayout. Es la API que usamos internamente para potenciar cuadrículas y listas diferidas.
  • Se introdujo la API de OverscrollEffect como experimental. Puedes definir efectos personalizados de sobredesplazamiento y agregar una plataforma estándar a contenedores personalizados con desplazamiento.
  • Se introdujeron las APIs de interoperabilidad de desplazamiento anidado para permitir la interoperabilidad entre vistas y actores de desplazamiento de Compose.
  • El desplazamiento del mouse y el panel táctil se agregó a todos los contenedores de desplazamiento.

Versión 1.2.0-rc03

29 de junio de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-rc03 y androidx.compose.foundation:foundation-layout: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 lanzaron androidx.compose.foundation:foundation:1.2.0-rc02 y androidx.compose.foundation:foundation-layout: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

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-rc01 y androidx.compose.foundation:foundation-layout:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Se agregó un elemento OverscrollEffect experimental que permite efectos de desplazamiento personalizados, junto con las sobrecargas de Modifier.scrollable que lo aceptan.
  • Se movió el elemento experimental LocalOverScrollConfiguration de foundation.gesture al paquete de base y se cambió su nombre por LocalOverscrollConfiguration (If19fb, b/204650733).
  • Las interfaces en las bibliotecas de Compose ahora se compilan con métodos de interfaz predeterminados de jdk8 (I5bcf1).
  • Se introdujo una API experimental checkScrollableContainerConstraints(), que permite verificar que no se aniden contenedores desplazables. Puedes usarla cuando creas tus propios diseños diferidos con desplazamiento a través de LazyLayout (Id6fab, b/233352497).
  • Se quitó el objeto LazyVerticalGrid obsoleto del paquete androidx.compose.foundation.lazy. La nueva API estable se encuentra en androidx.compose.foundation.lazy.grid (I73c76, b/225192009).

Versión 1.2.0-beta03

1 de junio de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-beta03 y androidx.compose.foundation:foundation-layout:1.2.0-beta03. La versión 1.2.0-beta03 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron nuevos IntervalList y MutableIntervalList experimentales. Permite representar una lista de valores mediante intervalos múltiples. Resulta útil cuando quieres definir tu propio DSL similar al que usa LazyColumn, en el que los elementos de lista se pueden definir mediante varias llamadas de elementos o elementos (I2d05e, b/228580728).

Correcciones de errores

  • Se aclaró la documentación de WindowInsets.ime para indicar que las inserciones de ime se informan desde el nivel de API 23, pero solo animadas en 30 o más (Ia7fc0, b/230756508).
  • Si presionas la tecla de borrar hacia adelante cuando el cursor se encuentra al final de un campo de texto, ya no fallará.
  • DeleteSurroundingTextCommand y DeleteSurroundingTextInCodePointsCommand 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.foundation:foundation:1.2.0-beta02 y androidx.compose.foundation:foundation-layout:1.2.0-beta02. La versión 1.2.0-beta02 contiene estas confirmaciones.

  • La resolución de la fuente descargable no cambia el tamaño del diseño de texto oTextField anteriormente no se volvía a dibujar, lo que provocaba que la fuente se volviera inactiva. Esta corrección de errores garantiza que el diseño de texto siempre active el rediseño (b/229727404). (l1d49e), b/229727404)

Versión 1.2.0-beta01

11 de mayo de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-beta01 y androidx.compose.foundation:foundation-layout: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 pueden usar las implementaciones personalizadas de LazyList cuando diseñan elementos más allá de los límites visibles. (Ifabfb, b/184670295)
  • Se cambió el nombre de LineHeightBehavior por LineHeightStyle.
  • Se cambió el nombre de LineVerticalAlignment por LineHeightStyle.Alignment.
  • LineHeightTrim cambia de nombre a LineHeightStyle.Trim.
  • Se quitaron los valores de constructor predeterminados de LineHeightStyle. (I582bf, b/181155707)
  • Se agregaron valores predeterminados para los miembros opcionales de la interfaz de LazyLayoutItemProvider. (Iba8a0)
  • En la API de LazyLayoutItemProvider, en lugar de que una fábrica muestre la lambda componible por índice, ahora tenemos una función de componibilidad más simple que acepta el índice. (Id2196)
  • Se cambió el nombre de LazyLayoutItemsProvider a LazyLayoutItemProvider. (I0638c)
  • Se cambió el nombre de LazyLayoutItemsProvider.itemsCount por itemCount. (Id409c)
  • Se agregó el pincel a los objetos TextStyle y SpanStyle para proporcionar un modo de dibujar texto con colores con gradientes. (I53869, b/187839528)
  • Los atributos trimFirstLineTop, trimLastLineBottom de LineHeightBehavior 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 a TextStyle, y ParagraphStyle. 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 por TextStyle(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 trimFirstLineTop y trimLastLineBottom funcionan correctamente solo cuando includeFontPadding es falso. (I97332, b/181155707)

  • Se agregó el modificador experimental imeNestedScroll() para que los desarrolladores puedan controlar el IME a través del desplazamiento. (I60759)

Correcciones de errores

  • Se corrigió la regresión por la que los campos de texto no ocultaban el teclado cuando se quitaba de la composición mientras se enfocaba. (I7a410, b/230536793, b/225541817)
  • Se admite elipsis cuando la altura es limitada y no cabe en todas las líneas de texto. (Ie528c, b/168720622)
  • Ahora, BringIntoViewRequester.bringIntoView siempre se suspenderá hasta que se complete la solicitud o se interrumpa por una solicitud más reciente y no superpuesta. Las solicitudes superpuestas se pondrán en fila. (I43e7f, b/216790855)
  • Las llamadas simultáneas de BringIntoViewRequester.bringIntoView para los rectángulos que se superponen completamente ahora solo cumplirán con la solicitud del rectángulo más grande. (I34be7, b/216790855, b/184760918)
  • includeFontPadding está activado de manera predeterminada. Es posible desactivar includeFontPadding con el atributo TextStyle.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 recorte TextField. (I01423, b/171394808)
  • Modifier.bringIntoViewRequester ya no usa onGloballyPositioned. (I630f5)

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

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha08 y androidx.compose.foundation:foundation-layout:1.2.0-alpha08. La versión 1.2.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • 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).
  • Paragraph y MultiParagraph ahora aceptan parámetros Constraints. Pasar Constraints.maxHeight es una no-ops en este momento, pero te permitirá realizar algunos cálculos en el futuro, como aplicar elipsis en función de la altura (I6afee, b/168720622).
  • SubcomposeSlotReusePolicy.getSlotsToRetain() ahora acepta una clase personalizada similar a MutableSet que no permite agregar elementos nuevos en ella (Icd314).
  • El consumo parcial (de posición abajo O) ya no está disponible en PointerInputChange. Puedes usar consume() para consumir el cambio por completo. También puedes usar isConsumed para determinar si otra persona ya consumió el cambio.
  • PointerInputChange::copy() ahora siempre hace una copia superficial. Significa que se consumirán copias de PointerInputChange una vez que se consuma una de las copias. Si quieres crear una PointerInputChange no vinculada, usa un constructor (Ie6be4, b/225669674).
  • Se agregó la nueva API experimental de LazyLayout, lo que te permite compilar tus propios componentes, como LazyColumn de LazyVerticalGrid. Ten en cuenta que la API se encuentra en una etapa inicial y se puede cambiar en versiones futuras (Iba2bc, b/166591700).
  • AndroidFont ahora toma typefaceLoader como parámetro de constructor (I2c971).
  • El elemento complementario WindowInsets ahora expone la visibilidad (si están en pantalla, independientemente de si se intersectan con la ventana) y el tamaño que podrían tener si estuvieran disponibles en el dispositivo, pero no están activos actualmente (I65182, b/217770337).

Versión 1.2.0-alpha07

6 de abril de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha07 y androidx.compose.foundation:foundation-layout:1.2.0-alpha07. La versión 1.2.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una API de PinnableParent que permite elementos secundarios de diseños diferidos para evitar que se borren los elementos compuestos actualmente (Ibbdd0, b/184670295).
  • LazyListLayoutInfo y LazyGridLayoutInfo ahora tienen campos beforeContentPadding y afterContentPadding (I3b628, b/200920410).
  • Se agregó KeyboardType.Decimal como alternativa a Keyboard.Number para incluir específicamente un separador decimal en IME (Iec4c8, b/209835363).
  • Se agregó un nuevo descriptor de fuente (DeviceFontFamilyName) para buscar fuentes instaladas en el sistema de forma opcional durante las cadenas de resguardo de fuentes (I30468, b/219754572).
  • PointerEventType.Scroll y PointerEvent.scrollDelta ahora son API estables (I574c5, b/225669674).
  • Se agregó una configuración de compatibilidad temporal para includeFontPadding en TextStyle/ParagraphStyle. includeFontPadding a través de TextStyle(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 actualizó FontFamily.Resolver para integrar la configuración de accesibilidad del texto en negrita en todo el sistema (I6c1e7)
  • La propiedad de extensión consumeWindowInsets de ComposeView permite a los desarrolladores inhabilitar el consumo de Android WindowInsets. Esto admite que ComposeViews independientes en la jerarquía apliquen WindowInsets sin interferir entre sí (I0ef08, b/220943142).

Versión 1.2.0-alpha06

23 de marzo de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha06 y androidx.compose.foundation:foundation-layout: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).
  • FocusOrder se combinó con FocusProperties, y focusProperties() ahora tiene todas las capacidades de focusOrder(). FocusOrder y focusOrder() ya no están disponibles. El focusOrder() que acepta una focusRequester se debe reemplazar por un modificador focusRequester() en combinación con focusProperties(). Esto permite que los modificadores tengan una separación más profunda de problemas (I601b7).
  • Se agregó WindowInsets.asPaddingValues(Density) para permitir que los desarrolladores realicen la conversión sin necesidad de estar en composición (I94c35).
  • 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).

Correcciones de errores

  • Los modificadores de desplazamiento (Modifier.verticalScroll(), Modifier.horizontalScroll() y Modifier.scrollable()) ahora se desplazarán para que el elemento enfocado que admite composición sea visible si el área de desplazamiento cambia de tamaño y el elemento enfocado anteriormente era visible.
  • TextFields ahora se mantendrá arriba del teclado cuando este se enfoque y se muestre, cuando esté dentro de un elemento desplazable no definido y el modo de entrada de software sea ADJUST_RESIZE (I4a485, b/190539358, b/192043120, b/216842427).

Versión 1.2.0-alpha05

9 de marzo de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha05 y androidx.compose.foundation:foundation-layout:1.2.0-alpha05. La versión 1.2.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • LazyVerticalGrid y LazyHorizontalGrid ahora son estables (I307c0).
  • Se reemplazó LazyGridItemInfo.Unknown con LazyGridItemInfo.UnknownRow y LazyGridItemInfo.UnknownColumn por separado (I56d51).
  • LazyVerticalGrid, LazyHorizontalGrid y todas las API relacionadas se migraron al subpaquete .grid. Actualiza las importaciones de androidx.compose.foundation.lazy a androidx.compose.foundation.lazy.grid (I2d446, b/219942574).
  • Texto: includeFontPadding ahora está desactivada 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).
  • La interfaz de Measured ahora expone la propiedad parentData (I3313f).
  • Se introdujo el elemento experimental Modifier.onFocusedBoundsChanged para permitir la observación de los límites de los elementos enfocables secundarios (I14283, b/220030968, b/190539358, b/192043120, b/216842427).
  • Se agregó LazyHorizontalGrid (I61ae7, b/191238807).
  • Se agregó una nueva API de LazyVerticalGrid para definir tamaños de ejes cruzados (I17723).
  • Se agregó el modificador FocusGroup (I64bc0, b/213508274, b/184670295).

Correcciones de errores

  • WindowInsets.toString() ahora mostrará los valores correctos (I1585d).

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.foundation:foundation:1.2.0-alpha04 y androidx.compose.foundation:foundation-layout:1.2.0-alpha04. La versión 1.2.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Las BringIntoViewResponders ya no necesitan pasar solicitudes de forma manual a las personas que responden principales, sino que deben mostrar de inmediato el rectángulo que desean que el elemento superior muestre a la vista. (I8e66a).
  • Compatibilidad con la carga de fuentes asíncrona en Text (I77057, b/214587005).
  • LazyVerticalGrid ahora admite line breaking antes de los elementos con intervalo que no caben dentro de la línea actual (I05c40, b/207462103).
  • Se cambió el nombre de excludeFromSystemGestures a systemGesturesExclusion (I19526).
  • LazyVerticalGrid ahora admite reverseLayout (I6d7d7, b/215572963, b/211753558).
  • Se agregó el método WindowInsets.only() para permitir que los desarrolladores incluyan solo dimensiones de WindowInsets (I14c94, b/217768486).
  • Se agregaron ComposableTarget, ComposableTargetMarker y ComposableOpenTarget, 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 o ReusableComposeNode deben agregar una anotación CompoableTarget 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ón ComposableTargetMarker y, luego, usar la anotación marcada en lugar de ComposableTarget directamente. Una anotación que admite composición marcada con ComposableTargetMarker es equivalente a una ComposbleTarget con el nombre completamente calificado de la clase de atributo como el parámetro aplicador. Para ver un ejemplo del uso de ComposableTargetMarker, consulta anroidx.compose.ui.UiComposable (I38f11).

Correcciones de errores

  • Ahora está permitido pasar desplazamientos negativos a LazyGridState.scrollToItem() y LazyGridState.animateScrollToItem() (I025c6, b/211753558).
  • Se agregó compatibilidad con la carga de fuentes asíncronas para TextField (Icc4bf, b/214587005).

Versión 1.2.0-alpha03

9 de febrero de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha03 y androidx.compose.foundation:foundation-layout:1.2.0-alpha03. La versión 1.2.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Los métodos notifyFocusedRect de TextInputSession y TextInputService dejaron de estar disponibles y no se los llamará. Usa BringIntoViewRequester en su lugar. (Ia4302, b/192043120, b/216842427, b/178211874).
  • Se habilitaron las animaciones para los elementos de cuadrículas diferidas con Modifier.animateItemPlacement() (Ib6621, b/211753218).
  • BringIntoViewRequester ahora propaga las solicitudes al hosting de la vista de Android (Ia7a51).
  • FontFamilyResolver ahora está disponible a través de LocalFontFamilyResolver.current.
    • Se agregaron createFontFamilyResolver(context) y createFontFamilyResolver(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 baja TextLayoutResult.layoutInput.resourceLoader, debido a que ya no se usa (Id5a45, 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 directamente. Para agregar nuevos tipos de fuentes, consulta AndroidFont.
    • La función de extensión Font.AndroidResourceLoader permite construir una Font.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, usa FontFamilyResolver.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, usa FontFamilyResolver.preload (If8e7c, b/174162090).
  • Ahora puedes especificar el tipo de contenido para los elementos de LazyVerticalGrid. Las funciones item/items en LazyGridScope ahora aceptan ese parámetro. Proporcionar esta información ayuda a reutilizar la composición del elemento para que sea más eficiente y solo se reutilice el contenido entre elementos de tipo similar (I7b355, b/215372836).
  • LazyListLayoutInfo y LazyGridLayoutInfo ahora tienen propiedades nuevas: viewportSize, orientation, reverseLayout (Ifc8ed, b/200920410).
  • Ahora puedes especificar el tipo de contenido para los elementos de LazyColumn/LazyRow. Las funciones de item/items en LazyListScope aceptan ese parámetro. Proporcionar esta información ayuda a reutilizar la composición del elemento para que sea más eficiente y solo se reutilice el contenido entre elementos de tipo similar (I26506).
  • El constructor SubcomposeLayoutState que acepta maxSlotsToRetainForReuse dejó de estar disponible. En su lugar, hay un nuevo constructor que acepta SubcomposeSlotReusePolicy: una nueva interfaz que permite un control más detallado sobre las ranuras que se deben retener para la reutilización futura. (I52c4d).
  • Agrega modificadores para WindowInsets, tanto para el relleno como para el tamaño. Esto permite que parte del contenido se extienda al área de inserción y que el contenido principal permanezca fuera de esta. Por ejemplo, se puede usar windowInsetsPadding para rellenar el área del contenido a fin de evitar áreas que puedan estar cubiertas total o parcialmente (Id0395, b/213942085).

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).
  • Los campos de texto ya no requieren presionar de nuevo cuando se muestra el controlador del cursor (Ideb4b, b/205726883).
  • Se mejoró el comportamiento de la lupa de selección de texto para que coincida con la lupa de la plataforma. (Idd918, b/206833278)

Versión 1.2.0-alpha02

26 de enero de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha02 y androidx.compose.foundation:foundation-layout:1.2.0-alpha02. La versión 1.2.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó NonRestartableComposable a los métodos que son sobrecargas de métodos existentes sin lógica compleja. De esta manera, se reducen las comprobaciones de memorización generadas por el compilador (es igual a) para todos los parámetros que se repiten en la función interna a la que se llama. (I90490)
  • Se agregaron modificadores de excludeFromSystemGesture para facilitar el acceso a setSystemGestureExclusionRects de Android. (I46f07)

Correcciones de errores

  • Se mejoró el comportamiento de la lupa de selección de texto para que coincida con la lupa de la plataforma. (Idd918, b/206833278)
  • LazyColumn, LazyRow, Modifier.verticalScroll y otros contenedores que usan Modifier.scrollable ahora admiten el desplazamiento de la rueda del mouse. (I2b5e1, b/198214718)

Versión 1.2.0-alpha01

12 de enero de 2022

Lanzamiento de androidx.compose.foundation:foundation:1.2.0-alpha01 y androidx.compose.foundation:foundation-layout:1.2.0-alpha01. La versión 1.2.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se agregó el nuevo parámetro userScrollEnabled a LazyColumn, LazyRow y LazyVerticalGrid para permitir que los usuarios puedan inhabilitar de manera temporal o permanente el desplazamiento que inicia el usuario mediante gestos táctiles o acciones de accesibilidad. Aún se permitirá el desplazamiento programático mediante los métodos del estado (I7eae9, b/201150093).
  • Se agregó la devolución de llamada onSizeChanged a la tecla modificadora de la lupa (I6879f).
  • El widget de la lupa ahora se muestra cuando se arrastran los controladores de selección en un SelectionContainer (I30b38, b/139320979).

Correcciones de errores

  • Se corrigió el controlador del cursor TextField que no se ocultaba cuando el usuario se desplazaba fuera de la vista (I14552, b/208883748).

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.foundation:foundation:1.1.1 y androidx.compose.foundation:foundation-layout:1.1.1. La versión 1.1.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió NullPointerException en androidx.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.foundation:foundation:1.1.0 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.1.0-rc03 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.1.0-rc01 y androidx.compose.foundation:foundation-layout:1.1.0-rc01. La versión 1.1.0-rc01 contiene estas confirmaciones.

Correcciones de errores

  • Ahora está permitido pasar desplazamientos negativos a LazyListState.scrollToItem() y LazyListState.animateScrollToItem() (Iceb90, b/184252837).
  • Se corrigió un error que causaba acciones de desplazamiento de accesibilidad faltantes (I7cbfb).

Versión 1.1.0-beta04

1 de diciembre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-beta04 y androidx.compose.foundation:foundation-layout: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 utilizar PointerInputchange en su totalidad o verificar si se consumió o no (I2e59d).
  • Se muestra un widget de lupa cuando se arrastra el cursor o los controladores de selección dentro de los campos de texto (I5391e, b/203781358).

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.foundation:foundation:1.1.0-beta03 y androidx.compose.foundation:foundation-layout:1.1.0-beta03. La versión 1.1.0-beta03 contiene estas confirmaciones.

Cambios en la API

  • Se agregó compatibilidad con los intervalos horizontales a LazyVerticalGrid (I7e2fa, b/176758183).
  • Se agregó la capacidad experimental para animar listas diferidas de posiciones de artículos. Dentro de LazyItemScope, hay un nuevo modificador disponible llamado Modifier.animateItemPlacement(). Ejemplo de uso:

      var list by remember { mutableStateOf(listOf("A", "B", "C")) }
      LazyColumn {
          item {
              Button(onClick = { list = list.shuffled() }) {
                  Text("Shuffle")
              }
          }
          items(list, key = { it }) {
              Text("Item $it", Modifier.animateItemPlacement())
          }
      }
    
    • Cuando proporciones una clave mediante LazyListScope.item o LazyListScope.items, este modificador habilitará las animaciones de reordenamiento de elementos. Además de reordenar los elementos, también se animarán todos los demás cambios de posición causados por eventos, como la organización o los cambios de alineación (I59e7b, b/150812265).

Versión 1.1.0-beta02

3 de noviembre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-beta02 y androidx.compose.foundation:foundation-layout:1.1.0-beta02. La versión 1.1.0-beta02 contiene estas confirmaciones.

Correcciones de errores

  • Las ondas y otros indicadores ahora se retrasarán solo si están dentro de un contenedor Modifier.scrollable(), en lugar de retrasarse siempre para un evento descendiente. (Ibefe0, b/203141462)
  • 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).

Contribución externa

  • Se agregó Modifier.pointerHoverIcon (I95f01).

Versión 1.1.0-beta01

27 de octubre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-beta01 y androidx.compose.foundation:foundation-layout:1.1.0-beta01. La versión 1.1.0-beta01 contiene estas confirmaciones.

Correcciones de errores

  • 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).

Versión 1.1.0-alpha06

13 de octubre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-alpha06 y androidx.compose.foundation:foundation-layout:1.1.0-alpha06. La versión 1.1.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una sobrecarga para Layout sin elemento secundario con eficiencia mejorada. (IB0d9a)
  • SemanticsNodeInteraction.performSemanticsAction ahora muestra la SemanticsNodeInteraction en la que se llamó a la función. (I9e5db)
  • Se agregó performScrollToNode(matcher: SemanticsMatcher), que desplaza un contenedor desplazable hasta el contenido que coincide con el comparador dado. (Ic1cb8)

Versión 1.1.0-alpha05

29 de septiembre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-alpha05 y androidx.compose.foundation:foundation-layout:1.1.0-alpha05. La versión 1.1.0-alpha05 contiene estas confirmaciones.

Cambios en la API

Correcciones de errores

  • Se corrigió la compatibilidad de la accesibilidad para elementos desplazables (diferidos y no diferidos) con respecto al desplazamiento (I6cdb0)

Versión 1.1.0-alpha04

15 de septiembre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-alpha04 y androidx.compose.foundation:foundation-layout:1.1.0-alpha04. La versión 1.1.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se dieron de baja performGesture y GestureScope, que se reemplazaron por performTouchInput y TouchInjectionScope. (Ia5f3f, b/190493367)
  • Se agregó touchBoundsInRoot a SemanticsNode, 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)

Correcciones de errores

  • 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.foundation:foundation:1.1.0-alpha03 y androidx.compose.foundation:foundation-layout: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 Kotlin 1.5.30. (I74545)

Cambios en la API

  • Se agregó el efecto de resplandor para el desplazamiento. Se agregó la nueva API experimental de OverScrollConfiguration para permitir la configuración del efecto visual de sobredesplazamiento. Se brindó un valor nulo para desactivar el efecto de sobredesplazamiento. (I0c304, b/171682480)
  • Ahora, AwaitPointerEventScope tiene withTimeout() y withTimeoutOrNull() (I507f0, b/179239764, b/182397793)
  • Se agregó un método de prueba para obtener los límites recortados. (I6b28e)
  • 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)

Versión 1.1.0-alpha02

18 de agosto de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-alpha02 y androidx.compose.foundation:foundation-layout:1.1.0-alpha02. La versión 1.1.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron versiones de DpSize para Modifier.size y requiredSize. (I3fc7e, b/194219828)

Versión 1.1.0-alpha01

4 de agosto de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.1.0-alpha01 y androidx.compose.foundation:foundation-layout:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • 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)
  • TextField ahora borra la selección cuando se presiona el botón Atrás, lo que coincide con el comportamiento de EditText de Android. (I3ca16, b/174173645)
  • Se agregó el controlador del cursor. (I07a82, b/173016579)

Correcciones de errores

  • El desplazamiento a través de acciones semánticas para listas diferidas y componentes de desplazamiento normales ahora tiene animación. (Id9066, b/190742024)

Contribución externa

  • LazyVerticalGrid ahora acepta parámetros de disposición horizontales y verticales. (If9c92)

Versión 1.0

Versión 1.0.5

3 de noviembre de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.5 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.4 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.3 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.2 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.1 y androidx.compose.foundation:foundation-layout: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.foundation:foundation:1.0.0 y androidx.compose.foundation:foundation-layout: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 AGP 7.1. (b/194289155)

Versión 1.0.0-rc02

14 de julio de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-rc02 y androidx.compose.foundation:foundation-layout:1.0.0-rc02. La versión 1.0.0-rc02 contiene estas confirmaciones.

  • Se actualizó el procesamiento de bordes para formas genéricas a fin de solucionar problemas con rutas definidas con dimensiones fijas. (aosp/1748871, b/191817116)

Versión 1.0.0-rc01

1 de julio de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-rc01 y androidx.compose.foundation:foundation-layout:1.0.0-rc01. La versión 1.0.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Canvas ahora admite un parámetro contentDescription para accesibilidad. (Ib547c)

Correcciones de errores

  • Los botones la tarjetas, las casillas de verificación y los Modifier.clickable(enabled=false) inhabilitados bloquearán los clics para ir al elemento principal. (Ic2c3b, b/183908811)

Versión 1.0.0-beta09

16 de junio de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta09 y androidx.compose.foundation:foundation-layout:1.0.0-beta09. La versión 1.0.0-beta09 contiene estas confirmaciones.

Cambios en la API

  • Se quitó ManualFrameClock. Si necesitas controlar animaciones, usa composeTestRule.mainClock en su lugar. (I3c3e8, b/189951065)
  • Cambia Role de enumeración y LiveRegionMode por clases intercaladas con un constructor privado. (Id1890)
  • KeyboardCapitalization se convirtió en una clase intercalada. (Id5a1c)
  • Se cambió TextOverflow a una clase intercalada. (I433af)

Correcciones de errores

  • Ahora, cuando especifiques las claves únicas para los elementos LazyColumn/Row, se mantendrá la posición de desplazamiento según la clave, lo que significa que, si agregas o quitas elementos antes del elemento visible actual, el elemento con la clave dada se conservará como el primero visible. (Id263f, b/184257857)
  • Por ahora, las constantes de clave son @ExperimentalComposeUiApi. El código de consumo puede declarar constantes privadas antes de la estabilización. (Ia5d48)
  • Se agregó IdlingStrategy a AndroidCompositTestRule. Los frameworks de prueba pueden usar este elemento para instalar un mecanismo alternativo de espera o alcanzar la inactividad. Usa AndroidComposeTestRule.setIdlingStrategyFactory() antes de que la prueba comience a fin de instalar tu propia estrategia. (I608fa)

Se agregaron reglas de perfiles

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 en src/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 implementa adb 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 caracteres H, S y P, 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 clase androidx.compose.runtime.SlotTable tendría un descriptor de Landroidx/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étodo fun isPlaced(): Boolean en LayoutNode tiene la firma isPlaced()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.foundation:foundation:1.0.0-beta08 y androidx.compose.foundation:foundation-layout: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 refactorizaron los usos de enumeración en clases intercaladas para evitar problemas con explicaciones exhaustivas cuando se agregan nuevos valores de enumeración. (I2b5eb)
  • Se agregó un tiempo de espera a los elementos en los que se puede hacer clic o se pueden activar a fin de mostrar un ripple durante el desplazamiento o arrastre. (Ia2704, b/168524931)
  • 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ó por Modifier.focusTarget(). (I6c860)
  • Se reemplazó la enumeración KeyboardType por una clase intercalada. (I73045, b/187055290)
  • Se reemplazó la enumeración FocusState por una interfaz FocusState. (Iccc1a, b/187055290)
  • Se reemplazó la enumeración ImeAction por una clase intercalada. (I18be5, b/187055290)
  • Las funciones AnnotatedString.withAnnotation ahora son ExperimentalTextApi en lugar de ExperimentalComposeApi. (I0cd0a)
    • El constructor TextUnit con TextUnitType ahora es ExperimentalTextApi en lugar de ExperimentalComposeApi.
  • PaddingValues ahora es @Stable en lugar de @Immutable. (I88c50)

Correcciones de errores

  • Corrige las fallas de mantener presionada el área en blanco en texto no vacío. (I33ab5, b/187437299)
  • Se muestra la Barra Google de SelectAll. (I495d9, b/185919613)
  • Se corrigió que los contenedores desplazables recortaran sus elementos secundarios en el eje cruzado. Era fácil de reproducir si tenía un elemento LazyRow con elementos de tarjeta. Ahora no se recortará la sombra. (Icb635, b/186318448)
  • Se corrigió un problema por el que, en ocasiones, el uso de ripple y otros indicadores hacía que se atascara en un clic largo cuando se usaba Modif.combineClickable. (I2298c, b/186223077)
  • Ahora detectDragGesures, detectVerticalGestures y detectHorizontalGestures 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 modificó Modifier.onGloballyPositioned() para informar las coordenadas de este modificador en la cadena de modificador, en lugar de 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.foundation:foundation:1.0.0-beta07 y androidx.compose.foundation:foundation-layout:1.0.0-beta07. La versión 1.0.0-beta07 contiene estas confirmaciones.

Cambios en la API

  • La siguiente lógica de carga previa de elementos visibles se introduce para LazyColumn/Row. (I8a4bc, b/184940225)
  • Se agregó el controlador de selección de clips. (Iff80d, b/183408447)

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 quitó paintBackground. (I38660)
  • Ahora es posible dibujar el fondo de selección con DrawScope. (I73c61, b/186674472)
  • Se corrigió una regresión beta06 que afectaba a Row/Column con arreglos slotedBy para diseñar elementos ponderados de diseño. (Ifaf8c, b/187326588)

Versión 1.0.0-beta06

5 de mayo de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta06 y androidx.compose.foundation:foundation-layout: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).
  • Se agregaron las APIs 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 y SemanticsProperties.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, y SemanticsNodeInteraction.performScrollToKey, que la desplaza hasta el elemento con la clave determinada (I4fe63, b/178483889, b/161584524).
  • AnnotatedString guarda la compatibilidad en TextFieldValue.Saver. Se incorporaron las funciones de utilidad addTtsAnnotation y withAnnotation a AnnotatedString.Builder (I8cbdc, b/178446304).
  • Se agregaron los valores predeterminados del parámetro 0.dp a PaddingValues(horizontal, vertical) (I05571, b/181336792).

Correcciones de errores

  • Los elementos secundarios de Fila y Columna con weight(fill = false) ya no hacen que el elemento superior rellene todo el espacio disponible del eje principal (Ied94d, b/186012444, b/184355105).

Versión 1.0.0-beta05

21 de abril de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta05 y androidx.compose.foundation:foundation-layout:1.0.0-beta05. La versión 1.0.0-beta05 contiene estas confirmaciones.

Cambios en la API

  • La interfaz de FlingBehavior ahora se marca como @Stable. Todas las implementaciones deben cumplir con el contrato de @Stable. (I93354, b/184830577)

Correcciones de errores

  • Se corrigieron las acciones de desplazamiento de accesibilidad ACTION_SCROLL_FORWARD, ACTION_SCROLL_BACKWARD, accessibilityActionScrollLeft, accessibilityActionScrollUp, accessibilityActionScrollRight y accessibilityActionScrollDown. 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.foundation:foundation:1.0.0-beta04 y androidx.compose.foundation:foundation-layout:1.0.0-beta04. La versión 1.0.0-beta04 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de hideSoftwareKeyboard y showSoftwareKeyboard de SoftwareKeyboardController a hide() y show(), respectivamente.
    • Se proporcionó la interfaz completa de ComposiciónLocal a LocalSoftwareKeyboardController, lo que permite configurarla (particularmente útil en pruebas) (I579a6).
  • Se agregó TextOverflow.Visible. (Ic8f89)
  • Se quitaron las instancias públicas de RowScope, ColumnScope, BoxScope y BoxWithConstraintsScope. (I4e83e, b/181869067)

Correcciones de errores

  • Se corrigió el problema por el que los elementos de LazyColumn y LazyRow ubicados en los bordes se posicionaban de forma incorrecta después de un lanzamiento rápido (Ie4d13, b/183877420).
  • Antes del cambio, se pueden omitir las funciones que admiten composición local según sus parámetros. Después del cambio, no se omitirán las funciones que admitan composiciones locales. Se realiza este cambio porque es común y esperado que las funciones locales capturen los parámetros superiores, y omitirlos es una fuente común de errores.

    En resumen, ten en cuenta el siguiente ejemplo:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    Antes del cambio, se omitía siempre la función que admite composición ShowCount, incluso después actualizar el parámetro count. Sin embargo, ya no es así. (I5648a)

Versión 1.0.0-beta03

24 de marzo de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta03 y androidx.compose.foundation:foundation-layout:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.

Cambios en la API

  • DefaultMonotonicFrameClock ya no está disponible. Cuando se llama a withFrameNanos o Recomposer.runRecomposeAndApplyChanges sin MonotonicFrameClock, ahora arrojará una excepción IllegalStateException. (I4eb0d)

Correcciones de errores

  • Ahora se llama FlingBehavior.performFling() incluso cuando la velocidad es 0 (I0b6e5, b/181237123)

Versión 1.0.0-beta02

10 de marzo de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta02 y androidx.compose.foundation:foundation-layout:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron varias optimizaciones pequeñas en la lógica de medición de LazyColumn. (Ic6889)
  • 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)

Correcciones de errores

  • Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)

Versión 1.0.0-beta01

24 de febrero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta01 y androidx.compose.foundation:foundation-layout: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 quitaron las aserciones de dp. (I798d2)
  • 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)
  • Se cambió el nombre de MeasureBlocks a MeasurePolicy, 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 como Button y Modifier.clickable(), usa el objeto interactionSource = 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)
  • 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 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)
  • Agrega LazyListState.animateScrollToItem.

    Este método se desplaza, de manera fluida, a un elemento específico de la lista. (I4bfd7)

  • Se cambió el nombre de ScrollableState.smoothScrollBy() a animateScrollBy() Se cambió el nombre de LazyListState.snapToItemIndex() a scrollToItem() Se cambió el nombre de ScrollState.smoothScrollTo() a animateScrollTo(). (I35ded)

  • Modifier.zoomable se reemplazó por Modifier.transformable. smoothPanBy, smoothRotationBy se agregó como función. (Ifc32b, b/175294473)

  • Ahora es obligatorio el uso de defaultFactory para compositionLocalOf y staticCompositionLocalOf 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 cambió Indication#createIndication() a Indication#rememberUpdatedIndication(InteractionState) y se quitó el parámetro InteractionState de IndicationInstance#drawIndication(). IndicationInstance solo debe ser responsable de generar efectos visuales, y no de iniciar animaciones o escribir estados en respuesta a cambios de InteractionState. En su lugar, estas animaciones y escrituras de estado deberían ocurrir dentro de rememberUpdatedIndication(). También se cambió el parámetro indication en Modifier.indication para que sea un parámetro obligatorio. (Ic1764, b/152525426)

  • Las acciones de texto ahora comprueban el enfoque de forma automática. (I13777, b/179648629).

  • Se quitó runBlockingWithManualClock. (I15cdc, b/179664814)

  • Ahora, la posición de desplazamiento en Modifier.verticalScroll()/horizontalScroll() se representa con Ints. (I81298).

  • Los paquetes de los métodos smoothScrollBy y scrollBy cambiaron aandroidx.compose.foundation.gestures.*. (I3f7c1, b/175294473)

  • Ahora, se cambió el nombre de FlingConfig a FlingBehavior para personalizar la animación de suspensión en lugar del elemento predefinido Decays. (I02b86, b/175294473)

  • 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 cambió el nombre de defaultMinSizeConstraints a defaultMinSize. (I4eaae)

  • Se quitó Modifier.tapGestureFilter. Usa Modifier.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)

  • Se quitó AnimationClockObservable, así como sus subclases. Se quitó AnimatedFloat. (Icde52, b/177457083)

  • Ahora, drawerState.open() y drawerState.close() son funciones de suspensión. Usa rememberCoroutineScope() a fin de obtener el alcance de la composición para llamarlas. (I16f60, b/175294473)

  • 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 modificó Modifier.scrollable. Ahora, usa la interfaz Scrollable en lugar de la clase ScrollableController. (I4f5a5, b/174485541, b/175294473)

  • Ahora, Modifier.draggable acepta DraggableState en lugar de una expresión lambda simple. Para obtener el mismo comportamiento que antes, puedes crear un estado a través de rememberDraggableState { delta -> }. (Ica70f, b/175294473)

  • Se agregaron los modificadores requiredWidth(IntrinsSize) y requiredHeight(IntrinsSize) para el tamaño requerido para tamaños intrínsecos. (I0a6b4)

  • Se quitó emptyContent() obsoleto. Usa {} en su lugar. (Idb33f, b/179432510)

  • Se borraron algunas API que ya eran obsoletas. (Ice5da, b/178633932)

Correcciones de errores

  • 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.foundation:foundation:1.0.0-alpha12 y androidx.compose.foundation:foundation-layout:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • 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)
  • Actualización de prueba: hasText() verificará los textos de entrada y label/hint/placeholder en el campo del texto. (Iab803)
  • Se agregó PaddingValues.Absolute y se puede usar en las API que acepten PaddingValues. (Ia5f30)
  • onImeActionPerformed dejó de estar disponible. En su lugar, usa KeyboardActions. (If0bbd, b/179071523)
  • Para que las convenciones de nombre coincidan mejor con ImageBitmap e ImageVector, se cambió el nombre de ImagePainter a BitmapPainter, a fin de que sea paralelo con VectorPainter. (Iba381, b/174565889)
  • Se mejoraron las API de prueba de substring con una substring como argumento. (Icbe78)
  • 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 con ComposeTestRule. (I50ec4, b/151940543)
  • Animatable.snapTo y Animatable.stop ahora son funciones de suspensión. (If4288)
  • 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 agregaron claves personalizadas compatibles con LazyColumn/LazyRow. Esto nos permite controlar de manera más inteligente el reordenamiento de los elementos. Por lo tanto, el estado almacenado en los bloques {} de recuerdo se moverá junto con el elemento cuando se reordenan los elementos o se quita el del medio.

    LazyColumn {
        items(users, key = { user -> user.id }) { ... }
    }
    
  • Se cambió Indication#createInstance para que sea @Composable y también se cambió LocalIndication para que contenga Indication y no () -> Indication. (I5eeea, b/157150564)

  • Se reemplazó Constraints.enforce por Constraints.constrain. (I8b8ea)

  • loadFontResource dejó de estar disponible. En su lugar, usa fontResource. De lo contrario, 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)

  • Modifier.clickable no es compatible con clics dobles y largos. Para lograr esa función, usa Modifier.combinedClickable. (Iafad1)

  • 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)

  • 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 movió la selección a la base. (I7892b)

  • Se quitará el objeto componible savedInstanceState { 0 }, de forma similar a como se quitó el objeto componible state { 0 }, y ahora se promociona el uso de remember { mutableStateOf(0) }, por ejemplo. En su lugar, se debe usar rememberSaveable { mutableStateOf(0) }, que se guardará y se 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ámetro stateSaver. 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)

  • Ahora, el tiempo de reproducción en la animación se extiende a nanosegundos. (If776a)

  • @ComposableContract dejó de estar disponible y se lo reemplazó por tres anotaciones más específicas.

    @ComposableContract(restartable = false) se convirtió en @NonRestartableComposable @ComposableContract(readonly = true) se convirtió en @ReadOnlyComposable @ComposableContract(preventCapture = true) se convirtió en @DisallowComposableCalls Se quitó @ComposableContract(tracked = true). (I60a9d)

  • Dejaron de estar disponibles las utilidades emptyContent() y (@Composable () -> Unit).orEmpty(), dado que ya no tienen un valor ni impacto de rendimiento positivos. (I0484d)

  • 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)

  • Las API relacionadas con LazyVerticalGrid se marcaron como experimentales. (Ia53e3, b/178519862)

  • Se cambió el nombre de rememberSavedInstanceState() a rememberSaveable() y se movieron al paquete androidx.compose.runtime.saveable. (I1366e, b/177338004)

  • Se cambió el nombre de RerestableStateHolder a SaveableStateHolder y se movió al paquete androidx.compose.runtime.saveable. Se cambió el nombre del método interno RerestableStateProvider a SaveableStateProvider. Se quitó el tipo genérico para que cualquiera pueda pasar como clave. Ya no se necesita la anotación experimental. (I0902e, b/174598702)

  • Se movieron Saver, listSaver(), mapSaver(), autoSaver de androidx.compose.runtime.savedinstancestate a androidx.compose.runtime.saveable. (I77fe6)

  • Se cambió el nombre del artefacto androidx:compose:runtime:runtime-saved-instance-state a 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)

  • Se cambió el nombre de los parámetros en RounderCorrShape, CuperCrShape y CornerBasedShape de izquierda a derecha, de principio a fin, para admitir la duplicación automática de la forma en la dirección RTL. 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 quitó el elemento canDrag de Modifier.scrollable. (Id66e7, b/175294473)

  • Se refactorizó la API a la que se 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ó Modifier.scaleGestureFilter. En su lugar, usa Modifier.zoomable. También, se puede usar Modifier.pointerInput { detectMultitouchGestures { ... }} (Id5da1, b/175294473)

  • AnimatedValue/Float dejó de estar disponible. En su lugar, usa Animatable. (I71345, b/177457083)

    • Se quitaron CoreText y CoreTextField de la API pública.
    • Se quitó la sobrecarga de SelectContainer, que dejó de estar disponible. (I99c19)
  • Se quitaron las funciones de desplazamiento sin suspensión que dejaron de estar disponibles. Con los cambios de la última versión, las funciones de desplazamiento sin suspensión se quitaron por completo. Convierte las funciones de suspensión con los mismos nombres. El alcance de una corrutina se puede obtener a través de rememberCoroutineScope(). (I3d39c, b/178169563)

  • androidx.compose.foundation.layout.ConstraintLayout dejó de estar disponible y se reemplazó por androidx.constraintlayout.compose.ConstraintLayout. Es necesario agregar una dependencia en androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01. (I87adc)

  • tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter y pressIndicititGestureFilter dejaron de estar disponibles. En su lugar, usa Modifier.clickable o Modifier.pointerInput con la función detectTapGestures. (I6baf9, b/175294473)

  • 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)

Versión 1.0.0-alpha11

28 de enero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha11 y androidx.compose.foundation:foundation-layout:1.0.0-alpha11. La versión 1.0.0-alpha11 contiene estas confirmaciones.

Cambios en la API

  • scrollBy sin suspensión dejó de estar disponible y se quitó scrollTo sin suspensión.

    Ahora, recomendamos el uso de funciones de suspensión para controlar el desplazamiento y esperar a que este finalice. Como parte de esta transición, daremos de baja y/o quitaremos las versiones sin suspensión. (Ie9ced)

  • Dejó de estar disponible smoothScrollBy sin suspensión, por lo que recomendamos el uso de funciones de suspensión para controlar el desplazamiento y esperar a que este finalice. Como parte de esta transición, daremos de baja a las versiones sin suspensión. (I12880)

  • 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)

  • BasicTextField recibió un parámetro nuevo llamado "decorationBox". Permite agregar decoraciones, como íconos, marcadores de posición, etiquetas y otros, al campo de texto y aumentar el área de destino en la que se encuentra. (I16996)

  • Se quitó el parámetro canDrag de Modifier.draggable. (Ic4bec, b/175294473)

  • Se quitó el elemento AnimatedFloat.fling que acepta FlingConfig. Usa la suspensión Animatable.animateDecay. (I4659b, b/177457083)

  • Se quitó data class de las siguientes clases:

    • InlineTextContent
    • LocaleList
    • (I605c7)
  • Ahora, clickable, toggleable and selectable pueden crearse fuera de la composición. (I0a130, b/172938345, b/175294473)

  • 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. A fin de evitar que los usuarios sufran esta ineficiencia, decidimos dar de baja a 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) y itemsIndexed(items: List) ahora son funciones de extensión, asíque debes importarlas manualmente cuando las uses. Se agregaron sobrecargas de extensiones para Arrays: items(items: Array) and itemsIndexed(Array). (I803fc, b/175562574)

  • Se quitó el AcatedArmostat que dejó de estar disponible. (Iffa96, b/177641870)

  • El parámetro propagateMinConstraints se agregó a Box para especificar si las restricciones mínimas entrantes se deben pasar al contenido de Box o no. El valor predeterminado es falso. (I0125b, b/152613457)

Correcciones de errores

  • onCommit, onDispose y onActive dejaron de estar disponibles y se los reemplazó con las API de SideEffect y DisposableEffect. (If760e)
  • WithConstraints se rediseñó y nombró BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
  • 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 por Font.toFontFamily.
    • (I42aa7)
  • Se agregó ComposeContentTestRule, que extiende ComposeTestRule y define setContent, que se quitó de ComposeTestRule. Se agregó un método createEmptyComposeRule() de fábrica que muestra un ComposeTestRule y no inicia una Activity para ti. Usa este método cuando quieras iniciar tu Activity durante una prueba, p. ej., con ActivityScenario.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)

  • Density ahora es el alcance del receptor para las interfaces de Arrangement. (I18aad)

  • 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)
  • 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)

  • Duration y Uptime se reemplazarán con Long en milisegundos, y este paso quitará la dependencia de entrada del puntero en esas clases. (Ia33b2, b/175142755, b/177420019)

  • ComposiciónLifecycleObserver dejó de estar disponible y se reemplazó con RememberObserver.

    RememberObserver es un reemplazo de CompositionLifecycleObserver 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 a onRemembered para cada referencia en la que onEnter solo se llama una vez. Antes, se llamaba a onEnter varias veces si el objeto se usaba en subcomposiciones, como WithConstraints y Scaffold, por lo que la garantía de la única llamada a onEnter no era confiable. Por lo tanto, se quitó de RememberObserver.

    RememberObserver agrega onAbandoned, que se llama si la devolución de llamada pasada a remember muestra la instancia RememberObserver, pero como esta no se recuerda en el estado de composición, nunca se llamará a onRemembered. 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 de RememberObserver que sigue a la recomendación de referencia única anterior realiza el seguimiento de un recurso externo, tanto onForgotten como onAbandoned indicarán que el recurso ya no es necesario. Si el objeto realiza un seguimiento del trabajo que se inició o los recursos asignados en onRemembered, se puede ignorar a onAbandoned, ya que no se llamará si se llama a onRemembered. (I02c36)

  • Se cambió el nombre de TransformedText.transformedText a TransformedText.text.

    • TransformedText ya no es una clase de datos. (Ie672a)
  • Las siguientes clases ya no son clases de datos:

    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • Se quitaron los métodos experimentales de monotonicFrameAnimationClockOf. (Ib753f, b/170708374)

  • Los métodos de coordenadas globales dejaron de estar disponibles y se crearon nuevos métodos de coordenadas basados en ventanas. (Iee284)

  • Usa ImeAction.None en lugar de ImeAction.NoAction.

    • Usa ImeAction.Default en lugar de ImeAction.Unspecified. (Ie1bcc)
  • 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 cambió VisualTransformation para que sea una interfaz funcional. (I3bba4)

  • Se implementó TestCoroutineDispatcher en pruebas. (I532b6)

  • 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 cambió el nombre de TextInputService.onStateUpdated a updateState. (Id4853)

  • 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)

Versión 1.0.0-alpha10

13 de enero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha10 y androidx.compose.foundation:foundation-layout:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • 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 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 modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
  • Se cambió el nombre de @ExperimentalTesting a @ExperimentalTestApi para que fuera coherente con anotaciones de API experimentales similares. (Ia4502, b/171464963)
  • Se agregó el método experimental stickerHeader para LazyColumn/LazyRow. (I0a81d)
  • Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
  • TestUiDispatcher dejó de estar disponible. En su lugar, usa Dispatchers.Main. (Ic171f, b/175385255)
  • Se agregó la opción de activar o desactivar el elemento 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 equals para usar "is MyClass" en su lugar. (I4f734)
  • FlowRow y FlowColumn dejaron de estar disponibles. En su lugar, usa un diseño personalizado. (I09027)
  • 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 cambió fun Dp.isFinite() a val Dp.isFinite. (I50e00)
  • Se cambió el nombre de Constraints#satisfiedBy a isSatisfiedBy. (I9cf5c)
  • Se agregó isSpecified, isUnspecified y useOrElse para las clases intercaladas con una constante Unspecified. (I93f7b, b/174310811)

Correcciones de errores

  • 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)
  • Se agregó compatibilidad para campos de texto inhabilitados y de solo lectura. (I35279, b/171040474, b/166478534)
  • Se reemplazó animate() con animateAsState(), que muestra State<T>, en lugar de T. 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)
  • Ahora se puede acceder al keyEvent nativo a través de keyEvent.nativeKeyEvent. (I87c57 o b/173086397)

Versión 1.0.0-alpha09

16 de diciembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha09 y androidx.compose.foundation:foundation-layout:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • Agrega una interfaz Scrollable

    Esto permite que ScrollState y LazyListState se consideren tipos comunes, lo que a su vez permite implementar desplazamiento personalizado en ambos elementos.

    Esto también traslada smoothScrollBy a una función de extensión en Scrollable, lo que permite aprovechar esta funcionalidad. (I2153b)

  • Se agregó LazyVerticalGrid. (I17267, b/162213211)

  • LazyColumnFor, LazyRowFor, LazyColumnForIndexed y LazyRowForIndexed dejaron de estar disponibles. En su lugar, usa LazyColumn y LazyRow. (I5b48c)

  • Para las API de entrada de puntero de suspensión, se cambió el nombre de HandlePointerInputScope a AwaitPointerEventScope, y el de handlePointerInput() a awaitPointerEventScope() (Idf0a1, b/175142755).

  • Se agregó LazyListState.layoutInfo, que expone la lista de tamaños y compensaciones de los elementos visibles en el momento. (If8678, b/170472532)

  • Se quitó la anotación ExperimentalPointerInput. (Ia7a24)

  • Se agregó compatibilidad con InteractionState para TextFields. (I61d91)

  • Se agregó el parámetro revertLayout para LazyColumn/Row. cuando los elementos true se componen de abajo hacia arriba y LazyListState.firstVisibleItemIndex == 0 significa que el primer elemento se ubica en la parte inferior. (I552ae, b/166589935)

  • Se agregó el parámetro verticalArrangement para LazyColumn. Se agregó el parámetro horizontalArrangement para LazyRow. Arrangement permite agregar un espacio entre los elementos y especificar su disposición si no tenemos suficientes para alcanzar el tamaño mínimo. (Icf79a, b/170394300)

  • detectMultitouchGestures ahora usa una devolución de llamada con una combinación de parámetros centroides, de desplazamiento y de zoom. (Ie6e1c)

  • Se trasladó ContentDrawScope al módulo ui-graphics para que se encontrara junto a DrawScope. (Iee043, b/173832789)

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)

  • Modifier.focusObserver dejó de estar disponible. Usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)

  • Ahora la API de Autofill es una API experimental y requiere habilitación (I0a1ec).

  • Se agregaron declaraciones de desestructuración para crear instancias de FocusRequester. (I35d84, b/174817008)

  • Se cambió el nombre de accessibilityLabel a "descriptionDescription". Se cambió el nombre de accessibilityValue a stateDescription. (I250f2)

  • Se introdujeron varias funciones nuevas en SelectionRegistrar y se cambió el nombre de onPositionChange a notifyPositionChange. (Ifbaf7)

  • AndroidOwner se hizo interno. (Ibcad0, b/170296980)

  • Se agregó una función infiniteRepeatable para crear InfiniteRepetableSpec. (I668e5)

  • Se modificó la interfaz 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() por insertTopDown().

    Se agregó un método nuevo: insertBottomUp().

    Un aplicador inserta cualquiera de los nodos en el árbol que edita con insertTopDown() o insertBottomUp() según el que tenga mejor rendimiento.

    Algunos árboles, como LayoutNode y View, 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 elemento Applier anula insertBottomUp() para compilar un árbol de abajo hacia arriba y insertTopDown() para compilar el árbol de arriba hacia abajo. (Icbdc2)

  • Se agregó la API de painterResource para controlar objetos 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ó la función de fábrica buildAnnotatedString para compilar un elemento AnnotatedString. Dejó de estar disponible la función del compilador de annotatedString. (Idfe0b)

Versión 1.0.0-alpha08

2 de diciembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha08 y androidx.compose.foundation:foundation-layout:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Se quitó el parámetro maxLines de CoreTextField. Si deseas restringir la altura del campo de texto por el número de líneas, usa BasicTextField. (Iec002)
  • Se cambiaron los métodos await*TouchSlop() para que no detectaran el desplazamiento del puntero hacia abajo y se les cambió el nombre a *OrCancellation. También se quitó la necesidad del parámetro orientationLock. (Ie96e1)
  • Se agregó la comprobación de lint para el nombre y la posición del parámetro lambda que se pueden componer a fin de verificar la coherencia con los lineamientos de Compose. También se migraron algunas API que usaban children como nombre de su lambda al final a content, según la comprobación y orientación de lint. (Iec48e)
  • Se movieron las API de foundation:foundation-text a foundation:foundation. La estructura del paquete sigue siendo la misma. (Id3eb2)
  • Se agregó un nuevo detector de gestos multitáctil que incluye asistentes para detectar acciones de rotación, zoom y desplazamiento. (Ic459d)
  • 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 a ImageVector y se movió VectorAsset a Builder para que fuera una clase de ImageVector de acuerdo con los lineamientos acordados de la API. Se agregó un typealias de VectorAssetBuilder para vincular ImageVector.Builder con fines de compatibilidad. (Icfdc8)
  • Se cambió el nombre de ImageAsset y los métodos relacionados a ImageBitmap. (Ia2d99)
  • Se movieron las propiedades semánticas básicas de Foundation a la IU. (I6f05c)
  • Se agregaron API 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ó un parámetro singeLine a BasicTextField, TextField y OutlinedTextField. Establece este parámetro en verdadero para que el campo de texto tenga una sola línea horizontal en la que el usuario pueda desplazarse. (I57004, b/168187755)

  • 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 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 quitaron las API que dejaron de estar disponibles anteriormente, y también Border, así que deberás usar BorderStroke. Se quitó Modifier.drawBorder. En su lugar, usa Modifier.border. Se quitó Modifier.gravity. En su lugar, usa Modifier.align. Se quitó Stack. En su lugar, usa Box. (I32c2b, b/172470874)

  • Se cambió el nombre de AbsoluteArrangement a Arrangement.Absolute. (If26f2)

Correcciones de errores

  • 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 acordados de la API. (I0bd29, b/173834241)
  • Se quitó <T> de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8)
  • Los campos de posición y tiempo de actividad de PointerInputData se volvieron 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 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ó 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 agregó el parámetro resetInput a TextInputService#onStateUpdated. (I3e8f5, b/172239032, b/171860947)
  • 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)
  • 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 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 de typefaceFromFontFamily() a typeface(). (I52ab7)
  • Se agregó una comprobación de lint para revisar que las fábricas de Modifier usen androidx.compose.ui.composed {} internamente, en lugar de marcarse como @Composable. (I3c4bc)
  • 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 cambió el nombre del argumento de semántica mergeAllDescendants a mergeDescendants. (Ib6250)
  • El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
  • Se quitó el módulo ui-tests y sus stubs. (I3a7cb)
  • Se cambió el nombre de TextUnit.Inherit a TextUnit.Unspecified para mantener la coherencia con otras unidades. (Ifce19)
  • Se actualizó la interfaz de Alignment y se hizo funcional. (I46a07, b/172311734)
  • Se combinó el módulo foundation:foundation-text con foundation:foundation. (Idac0f)
  • Dejaron de estar disponibles place(Offset) y placeRelative(Offset). En su lugar, usa sobrecargas con compensaciones de Int. (I4c5e7).
  • Se cambió el nombre de id a layoutId para LayoutIdParentData. Se cambió el nombre de Measurable.id a Measurable.layoutId. (Iadbcb, b/172449643)

Versión 1.0.0-alpha07

11 de noviembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha07, androidx.compose.foundation:foundation-layout:1.0.0-alpha07 y androidx.compose.foundation:foundation-text:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Del mismo modo que ocurre con Modifier.fillMaxSize[Width|Height], ahora se admiten fracciones en Modifier.fillParentMaxSize[Width|Height] dentro del alcance de LazyColumn/Row. (I797e2, b/166586426)
  • Se quitó KeyboardOptions.toImeOptions de la API pública. (Ic2e45)
  • Las bases AmbientTextStyle, ProvideTextStyle y AmbientContentColor ya no están disponibles. En su lugar, utiliza las nuevas versiones que se proporcionan en la biblioteca de Material. En el caso de las aplicaciones que no son de Material, deberás crear tus propios ambientes de temas específicos de sistemas de diseño que se puedan consumir en tus componentes. (I74acc, b/172067770)
  • 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 agregó maxLines a TextFields. (Ib2a5b)
  • Se actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
  • Se agregó KeyboardOptions para su uso en TextFields. (I9ca32)
  • Se agregó BasicText como una API para texto sin tendencias en el diseño, similar a BasicTextField. (I28268)
  • Se quitó la anotación ExperimentalLazyDsl. Ahora se puede usar LazyColumn/LazyRow sin agregar @OptIn. (Idab7a, b/166584730)
  • BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
  • Se agregó BasicTextField como reemplazo de CoreTextField y BaseTextField. (Id4cea)
  • Se quitó LazyColumnItems/LazyRowItems, que dejó de estar disponible. (I1d8a8)
  • Se quitaron los elementos obsoletos que admiten composición encargados de definir el tamaño en mediciones intrínsecas. (I18537, b/171811496)
  • Se cambió el nombre de relativePaddingFrom a paddingFrom. Se agregó el modificador paddingFromBaseline para especificar distancias de límites de diseño a las líneas de base del texto. (I0440a, b/170633813)
  • Se agregó el parámetro matchHeightConstraintsFirst al modificador aspectRatio, que se puede usar para especificar el modificador de tamaño en función de las restricciones de altura antes de probar los correspondientes al ancho. (Ie7c43, b/155290593)
  • Se quitó el objeto DpConstraints obsoleto. (I87884, b/171702471)

Correcciones de errores

  • 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 movió captureToBitmap a captureToImage. (I86385)
  • Se marcó CoreText como @InternalTextApi. En su lugar, usa BasicText. (I6aaeb)
  • Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
  • Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
  • Se marcó CoreTextField como @InternalTextApi. En su lugar, usa BasicTextField. (Ie2469)
  • Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
  • Se introdujo el módulo ui-test-junit4. (Ib91f8)
  • Se actualizó la API de íconos para que acepte Color.Unspecified como un tono posible que dibujará el elemento o Painter proporcionados sin ColorFilter. Anteriormente, cuando se intentaba ignorar el ajuste de tono con Color.Unspecified, se aplicaba un color transparente, lo que provocaba que no se renderizara nada. (I049e2, b/171624632)
  • 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 movió androidx.ui.test a androidx.compose.ui.test. (I9ffdb)
  • Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
  • Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
  • Se agregaron pruebas para las posiciones de SelectionHandle en SelectionContainer. (Ie93db)
  • Se agregó la opción IME de corrección automática del teclado. (I57b8d)

Versión 1.0.0-alpha06

28 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha06, androidx.compose.foundation:foundation-layout:1.0.0-alpha06 y androidx.compose.foundation:foundation-text:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Se movió androidx.compose.foundation.Icon a androidx.compose.material.Icon. También puedes usar el componente de Image o Modifier.paint() con un objeto Painter si no quieres usar la biblioteca de Material. (I9f622)
  • Se agregó interactionState a Modifier.scrollable, ScrollableColumn y LazyColumnFor. (I81566, b/169509805)
  • Se agregó alignByBaseline a RowScope, y se cambió el nombre de alignWithSiblings a alignBy. (I06503, b/170628732)
  • Se creó Box como función intercalada. (Ibce0c, b/155056091)
  • Se agregó maxLines a CoreTextField. (Ibee58, b/143687793)
  • Se agregó softwrap a CoreTextField. (I21a4b)

Correcciones de errores

  • VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter para indicar mejor que la API de composición aprovecha internamente "remember" para conservar datos en las composiciones (Ifda43)
  • 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 teclado de una sola línea a CoreTextField. (I72e6d)
  • 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 agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
  • Se agregó la opción de IME KeyboardCapitalization. (I8ac38)
  • Se corrigió la posición del controlador Rtl. (I6e1e0)
  • 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 de PointerInputFilter.onPointerEvent(…), ahora puedes mutar los datos de consumo de los objetos PointerEvents pasados. (I6acd0)
  • Se agregó la opción SelectAll al menú de selección. (Ief02b)

Versión 1.0.0-alpha05

14 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha05, androidx.compose.foundation:foundation-layout:1.0.0-alpha05 y androidx.compose.foundation:foundation-text:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • CoreTextField ahora es compatible con la funcionalidad del cursor. (Id23aa)
  • Las API contentColor() y currentTextStyle() dejan de estar disponibles, y se reemplazan por AmbientContentColor y AmbientTextStyle, respectivamente. Puedes acceder al valor actual usando .current en la propiedad de los ambientes, como en cualquier otro ambiente. Este cambio se realizó para mantener la coherencia y evitar tener varias formas de lograr el mismo resultado. Además, se cambia el nombre de algunas propiedades de ambientes para describir mejor sus propósitos, de la siguiente manera:

    • ContentColorAmbient -> AmbientContentColor
    • TextStyleAmbient -> AmbientTextStyle
    • IndicationAmbient -> AmbientIndication
    • EmphasisAmbient -> AmbientEmphasisLevels
    • RippleThemeAmbient -> AmbientRippleTheme (I37b6d)

Correcciones de errores

  • Como parte de la estandarización de los valores sentinela para las clases intercaladas, se cambió el nombre de Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas (I97611, b/169797763).
  • Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
  • Se introdujo TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)
  • 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)
  • Se agregó el módulo Paging Compose y la integración de paginación. (Ib85da)
  • Se modificó LazyListScope para recibir valores nulos. (I1765b)
  • Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y el de onPositioned() a onGloballyPositioned() (I587e8, b/169083903).
  • Se agregaron muestras para LazyColumn/Row. (Idc16d)
  • Se corrigieron los métodos items y itemsIndexed para permitir emptyList. (I06647)
  • Se agregó un DSL para especificar la información del inspector. (Ic9a22)
  • Se movió LongPress a Text. (Iff2bc)
  • Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)
  • Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
  • Se quitó PointerInputFilter.onPointerInput(...). PointerInputFilter.onPointerEvent(...) debe usarse en su lugar. (I6f04a)

Versión 1.0.0-alpha04

1 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha04, androidx.compose.foundation:foundation-layout:1.0.0-alpha04 y androidx.compose.foundation:foundation-text:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de Stack a Box. foundation.Box 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 padding en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding) (Ibae92, b/167680279).
  • Agrega una nueva clase LazyListState. Esto permite la observación y el control de la posición de desplazamiento de los componentes de LazyRow y LazyColumn. Es posible crear las instancias con rememberLazyListState() y pasarlas al parámetro de estado del componente. Actualmente, se pueden observar en esta versión inicial el primer elemento visible y las compensaciones. (Ic7cb7, b/159307669)
  • La posición de la lista Lazy y la compensación de desplazamiento ahora se guardan y se restablecen en la creación de Activity. (Ie045f, b/166589058)
  • Se agregó la acción de semántica de clics largos. (I6281b, b/156468846)
  • Se agregó la utilidad MutatorMutex para mantener un solo mutador del estado compartido en el tiempo y cancelar mutadores en conflicto por prioridad. (I3f975)
  • 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).
  • Se quitó el parámetro inlineContent de Text con entrada de string. No se utilizará porque inlineContent debe funcionar con AnnotatedString. (Ief403)
  • Se quitaron las API de organización personalizada que eran obsoletas. (Ic576d, b/168297922, b/168297923)
  • Se agregó el parámetro unbounded a los modificadores wrapContentSize, lo que permite medir el elemento de diseño con limitaciones máximas infinitas. (I77951, b/158559319)
  • Evitamos las importaciones estáticas de contenido de alcances de diseño (p. ej., alignWithSiblings en RowScope). En su lugar, se debe usar la alternativa a un alcance explícito: with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }. (I216be, b/166760797)

Correcciones de errores

  • Se actualizaron varias APIs 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)
  • Optimizaciones de rendimiento para el desplazamiento LazyColumnFor/LazyRowFor mediante la anulación de recomposiciones innecesarias durante cada desplazamiento. (I64f65, b/168293643, b/167972292, b/165028371)
  • Se corrigió una falla en LazyColumnFor/LazyRowFor después del desplazamiento, se cambiaron elementos y se implementó el desplazamiento automático hacia arriba cuando el elemento visible anteriormente se haya quitado, de manera que ya no se verán espacios vacíos al final (I220ab, b/161480164, b/167855468).
  • Ya no se permite el anidado desplazable en los mismos contenedores de dirección, como ScrollableContainer y LazyColumnFor. Esa función nunca era compatible y, además, provocaba un error en el desplazamiento y el comportamiento diferido al componer los elementos de LazyColumnFor. (I6e101)
  • Se actualizaron varias APIs 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 agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)
  • Se creó el intercalado de TextRange para evitar la creación de objetos. (Id034b)
  • Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)

Versión 1.0.0-alpha03

16 de septiembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha03, androidx.compose.foundation:foundation-layout:1.0.0-alpha03 y androidx.compose.foundation:foundation-text:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)
  • Se cambiaron de manera coherente los nombres de los usos de Gravity a Align o Alignment en las API de diseño. (I2421a, b/164077038)
  • Se agregó un parámetro de alineación a Stack que permite especificar la alineación predeterminada para todos los elementos secundarios de Stack. (Ie80ca, b/164085265)

Correcciones de errores

  • Dejaron de estar disponibles DpConstraints y las API que usaban esas restricciones. (I90cdb, b/167389835)
  • Se cambió el nombre de los parámetros minWidth y maxWidth de widthIn a min y max. Del mismo modo que para preferredWidthIn, heightIn y preferredHeightIn. (I0e5e1, b/167389544)
  • Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
  • Se corrigieron los cálculos de tamaño y posición en GestureScope que generaban gestos de deslizamiento no válidos, entre otros (Iaf358, b/166589947).
  • Se trasladó createAndroidComposeRule y AndroidInputDispatcher de androidx.ui.test.android a androidx.ui.test (Idef08, b/164060572).

Versión 1.0.0-alpha02

2 de septiembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha02, androidx.compose.foundation:foundation-layout:1.0.0-alpha02 y androidx.compose.foundation:foundation-text:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Correcciones de errores

  • Se marcó TestUiDispatcher como experimental. (Iae99d, b/161247083)
  • Se agregó ManualFrameClock.hasAwaiters para ver si hay algo que espera un marco de ese reloj; runWithManualClock como un reemplazo para runBlocking cuando se ejecutan pruebas que necesitan un ManualFrameClock, y TestUiDispatcher.Main, que brinda un acceso fácil al despachador de IU principal en tus pruebas.

    Por ejemplo:

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

    (I0a85b, b/161247083)

Versión 1.0.0-alpha01

26 de agosto de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha01, androidx.compose.foundation:foundation-layout:1.0.0-alpha01 y androidx.compose.foundation:foundation-text: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.foundation:foundation:0.1.0-dev17, androidx.compose.foundation:foundation-layout:0.1.0-dev17 y androidx.compose.foundation:foundation-text:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la disposición spacedBy para filas y columnas a fin de habilitar el posicionamiento de los elementos secundarios de diseño con un espaciado fijo. También se agregó la disposición alineada, de forma que puedan posicionarse esos elementos unos junto a otros y alineados en la fila y columna según la Alineación establecida. Los métodos anteriores Arrangement.Vertical#arrange y Arrangement.Horizontal#arrange dejaron de estar disponibles, y ya no se admitirán las disposiciones personalizadas en el futuro. (I6733d, b/161985975)
  • Offset se convirtió en una clase intercalada. (Iaec70)
  • 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.Border. Se reemplazó la clase de datos Border por BorderStroke. (I4257d, b/158160576)
  • Se quitaron VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Se usa Modifier.background. (I73b0d, b/163019183)
  • Se quitaron los modificadores fillMax* marcados como obsoletos de LazyItemScope, ya que dificultan la inclusión correcta de esos modificadores para los elementos que no sean secundarios directos de LazyColumnFor. (Ifa78d)
  • Se agregó la implementación de LazyColumn/LazyRow como DSL. (I93cc6)
  • Constraints ahora es una clase intercalada. (I88736)
  • Se agregó la capacidad de ajustar el tamaño de un diseño a una fracción del espacio disponible usando los modificadores fillMaxWidth, fillMaxHeight y fillMaxSize. (I945bb, b/161562591)

Correcciones de errores

  • Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)
  • Se agregó la lambda mergePolicy a SemanticsPropertyKey. 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)
  • Se cambió el nombre de PlacementScope.placeAbsolute() a PlacementScope.place(), y el del objeto PlacementScope.place() anterior a PlacementScope.placeRelative(). Como resultado, el método PlacementScope.place() ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usa PlacementScope.placeRelative() en su lugar. (I873ac, b/162916675)
  • Se quitó el componente FilledTextField obsoleto. En su lugar, usa TextField para obtener la implementación de Material Design del campo de texto relleno. (I5e889)
  • Se agregó el parámetro backgroundColor a LinearProgressIndicator y se quitó el padding interno de CircularProgressIndicator. Se agregó el nuevo ProgressIndicatorConstants.DefaultProgressAnimationSpec, que se puede usar como AnimationSpec predeterminado en la animación del progreso entre valores. (If38b5, b/161809914, b/161804677)
  • El elemento state { ... } que admite composición dejó de estar disponible en favor de cualquier llamada explícita a remember { 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ón by 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)
  • Se quitaron onChildPositioned y OnChildPositionedModifier. En su lugar, los desarrolladores deberán usar onPositioned y OnPositionedModifier en el diseño secundario. (I4522e, b/162109766)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • Se utiliza la función LongPress para editar el área en blanco. (Ib1e5b)
  • FloatingToolbar se oculta después de presionar el texto. (If4525)
  • FloatingToolbar se oculta cuando se actualiza la selección. (I8444c)
  • Se anula la selección cuando se activa Desenfoque. (I781a2)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.compose.foundation:foundation:0.1.0-dev16, androidx.compose.foundation:foundation-layout:0.1.0-dev16 y androidx.compose.foundation:foundation-text:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

Cambios en la API

  • 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 movió diálogo a la IU. (I47fa6)
  • Se agregó LazyColumnForIndexed/LazyRowForIndexed, versiones de LazyColumnFor/LazyRowFor que brindan un índice y un elemento en itemCallback. Resulta útil cuando, además de un elemento actual, necesitas conocer un índice actual. (I65ff3)
  • Se cambió el nombre de Modifier.determinateProgress a Modifier.progressSemantics. (I9c0b4)
  • Se cambió el nombre de LazyColumnItems a LazyColumnFor. Se cambió el nombre de LazyRowItems a LazyRowFor. (I84f84)
  • Se agregaron algunas marcas/anotaciones a fin de aplicar prácticas recomendadas. (I66b20)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Se agregó el parámetro crossaxis de Gravity a LazyRowItems/LazyColumnItems. LazyRowItems/LazyColumnItems ahora son compatibles con el comportamiento de ajuste de contenido. (Ib39fc)
  • Se cambió el nombre de ZoomableState a ZoomableController. Se agregó compatibilidad con curvas personalizadas en smoothScale. Se agregaron las funcionalidades enabled y onZoomStarted. (If8b8f)
  • Se cambió el nombre de FilledTextField de Material a TextField, y el del TextField principal se cambió a BaseTextField para que la API deseada resulte más fácil de encontrar y usar (Ia6242, b/155482676).
  • Se quitó AdapterList, que anteriormente había quedado obsoleto. En su lugar, usa LazyColumnItems. (I12b9b)
  • Se cambió el nombre de Modifier.drawBackground a Modifier.background. (I13677)
  • Se quitó el antiguo DSL de ConstraintLayout. Se cambió el nombre de ConstraintSet2 por ConstraintSet. (If58d1, b/162450908)
  • Se agregaron Modifier.absoluteOffset() y Modifier.absoluteOffsetPx(). A diferencia de los modificadores de desplazamiento, los de desplazamiento absoluto no se duplicarán automáticamente en el contexto de derecha a izquierda. (I3aa21)
  • Row y Column ahora son funciones intercaladas, lo que reduce de manera significativa la sobrecarga asociada a su uso. (I75c10)

Correcciones de errores

  • Se abordaron correcciones amplias de API (I077bc).
    1. Se quitó la interfaz OffsetBase sin usar.
    2. Se alinearon las clases Offset y IntOffset a fin de tener una superficie de API coherente.
    3. Se cambió el nombre de IntOffset.Origin por IntOffset.Zero para que sea coherente con la API de Offset.
    4. 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.
    5. 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.
    6. Se cambió el nombre de las enumeraciones ClipOp para que lleven mayúsculas en la primera letra de cada palabra.
    7. Se cambió el nombre de las enumeraciones FilterQuality para que lleven mayúsculas en la primera letra de cada palabra.
    8. Se cambió el nombre de las enumeraciones StrokeJoin para que lleven mayúsculas en la primera letra de cada palabra.
    9. Se cambió el nombre de las enumeraciones PointMode para que lleven mayúsculas en la primera letra de cada palabra.
    10. Se cambió el nombre de las enumeraciones PaintingStyle para que lleven mayúsculas en la primera letra de cada palabra.
    11. Se cambió el nombre de las enumeraciones PathFillType para que lleven mayúsculas en la primera letra de cada palabra.
    12. Se cambió el nombre de las enumeraciones StrokeCap para que lleven mayúsculas en la primera letra de cada palabra.
    13. Se actualizó la implementación de DrawCache para que deje de usar parámetros lateinit.
    14. Se actualizó DrawScope a fin de que deje de usar la delegación lazy para los parámetros internos fillPaint y strokePaint.
    15. Se actualizó el objeto Image que admite composición a fin de evitar el uso de Box y lograr una sobrecarga menor.
    16. Se actualizó la clase Outline para que tenga anotaciones @Immutable.
    17. Se actualizó PathNode para que tenga anotaciones @Immutable en cada instrucción de la ruta de acceso.
    18. Se actualizó la subcomposición de Vector a fin de quitar verificaciones condicionales redundantes de igualdad dado que compose ya las administra.
    19. Los métodos de construcción complementarios de Rect dejaron de estar disponibles y se los reemplazó por constructores de funciones.
    20. Se actualizaron las clases Brush y los constructores de funciones con las API de @Immutable y @Stable.
    21. Se actualizaron las enumeraciones VertexMode para que lleven mayúsculas en la primera letra de cada palabra.
    22. Se actualizó el método selectPaint de DrawScope a fin de reemplazar condicionalmente los parámetros de trazo en la pintura si estos cambiaron.
    23. 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 agregó MonotonicFrameAnimationClock, que permite usar un objeto MonotonicFrameClock como AnimationClockObservable para cerrar la brecha entre los nuevos relojes basados en corrutinas y las APIs que aún usan los relojes antiguos basados en la devolución de llamada.

    El MonotonicFrameClock equivalente de ManualAnimationClock ahora es ManualFrameClock. (I111c7, b/161247083)

  • Se quitó SemanticsNodeInteraction.performPartialGesture. Se usa SemanticsNodeInteraction.performGesture en su lugar. (Id9b62)

  • Se cambió el nombre de SemanticsNodeInteraction.getBoundsInRoot() a SemanticsNodeInteraction.getUnclippedBoundsInRoot(). (Icafdf, b/161336532)

  • 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)

  • Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte y prohíbe la escritura de Modifier.padding().background() + anotherModifier, lo que interrumpe la cadena y se vuelve más difícil de leer (Iedd58, b/161529964).

  • Se agregaron los SemanticsMatcher isFocused() y isNotFocused(). (I0b760)

  • Se agregó RemeasurementModifier. Permite a los usuarios volver a medir el diseño de forma sincrónica. 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)

  • isSystemInDarkTheme ahora tiene siempre la configuración del tema oscuro en todo el sistema e ignora el estado de ahorro de energía antes de Q, en virtud de las indicaciones más recientes. (I0c10c)

  • OnChildPositioned dejó de estar disponible. En su lugar, usa OnPositioned en el elemento secundario. (I87f95, b/162109766)

  • Se cambió el nombre de AndroidComposeTestRule a createAndroidComposeRule. (I70aaf)

  • Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.compose.foundation:foundation:0.1.0-dev15, androidx.compose.foundation:foundation-layout:0.1.0-dev15 y androidx.compose.foundation:foundation-text:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

Para usar la versión 0.1.0-dev15 de Compose, deberás hacer lo siguiente:

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

  • De manera similar al nuevo parámetro en ScrollableColumn/ScrollableRow, LazyColumnItems/LazyRowItems ahora tienen el parámetro contentPadding, que permite agregar padding al contenido recortado, lo cual no es posible mediante un parámetro de modificación. También permite agregar espaciado antes del primer elemento o después del último solamente. (Ibc24e)
  • 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 rediseñaron las API de Modifier.draggable y Modifier.scrollable. Se eliminó el objeto DragDirection y se reemplazó por el elemento Orientation. Se simplificó el objeto State que se requiere para el elemento scrollable. Se cambió el nombre de ScollableState a ScrollableController. (Iab63c, b/149460415)
  • 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)
  • Los tamaños de esquina que usan RoundedCornerShape y CutCornerShape ahora pueden superar el 50%. (Id2340, b/160400213)
  • Se cambió de Inside a Fit la configuración predeterminada del parámetro ContentScale del elemento Image que admite composición. Esto se hizo a fin de que el comportamiento escale verticalmente el elemento Painter subyacente si el tamaño del diseño es más grande que el tamaño intrínseco de ese elemento sin afectar la relación de aspecto. Este comportamiento se ajusta mejor a las expectativas a fin de brindar tamaños fijos para el elemento Image sin afectar el comportamiento predeterminado cuando solo se use el tamaño intrínseco para procesar el tamaño de la composición. (I40ae3, b/159838006)
  • Se usa el objeto AnimationSpec en lugar del elemento AnimationBuilder en las APIs de nivel superior para aclarar el concepto de especificación de animación estática. Mejora el DSL de transición al quitar el requisito lambda para crear el objeto AnimationSpecs, como tween, spring. Estas toman parámetros de constructor en forma directa. -Mejora la facilidad de uso general del elemento AnimationSpec para abrir constructores en lugar de depender de compiladores. -Cambia la duración y la demora de los objetos KeyFrames y Tween al elemento Int. De esta manera, se eliminan las conversiones de tipos y los métodos de sobrecarga innecesarios (para admitir tanto los objetos Long como Int). (Ica0b4)
  • Se quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)
  • Se agregó LazyRowItems: desplazamiento horizontal similar a LazyColumnItems. (Ibbcf7)
  • Se introdujeron las API de animación sin estado de bajo nivel. Estas API (I63bf7)
  • Dejaron de estar disponibles androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue. 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 reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
  • Se quitó androidx.ui.foundation.shape.RectangleShape. Usa androidx.ui.graphics.RectangleShape. (I94939, b/154507984)
  • 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 agregó Modifier.zoomable para la funcionalidad de pellizcar para hacer zoom. (Id5d63)
  • El componente Toggleable dejó de estar disponible. En su lugar, usa Modifier.toggleable. (I35220, b/157642842)
  • El objeto MutuallyExclusiveSetItem dejó de estar disponible. En su lugar, usa Modifier.selectable. (I02b47, b/157642842)
  • El componente TestTag dejó de estar disponible. En su lugar, usa Modifier.testTag. (If5110, b/157173105)
  • Se agregó el parámetro fontWeight a Text, que no se agregó anteriormente por accidente. (I56937)
  • 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)
  • El objeto VerticalScroller ahora proporciona el elemento Column listo para usar. El objeto HorizontalScroller ahora proporciona el elemento Row listo para usar. (Ieca5d, b/157020670)
  • 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)
  • Se agregó el objeto Modifier.indication al paquete de base. Úsalo para mostrar la función de presionar/arrastrar/otra indicación en tus elementos interactivos personalizados. (I8425f, b/155287131)
  • VerticalScroller y HorizontalScroller ahora admiten el desplazamiento invertido cuando se configura isReversed en ScrollerPosition. (I953bd)
  • Se agregó compatibilidad con elementos que se pueden compilar en el diseño de texto. (I1373c)
  • 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).
  • Se quitó la API obsoleta de DrawBackground y se reemplazó por las API de la extensión drawBackground en Modifier. Implementaciones refactorizadas de color, pincel y pintura del objeto drawBackground para reducir las rutas de código y quitar el requisito de crear Modifier como parte de la composición. (I0343a)
  • 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)
  • HorizontalScroller y VerticalScroller ahora restablecen su posición de desplazamiento usando el estado de instancia guardado. (Ia0fae, b/155075048)
  • Se quitó el objeto FocusManagerAmbient. Usa el elemento FocusModifier.requestFocus para obtener enfoque. (Ic4826)
  • Se quitó temporalmente el diseño de la tabla hasta que vuelva a estar disponible con una API actualizada. (Id88a7)
  • Se creó la API de CanvasScope que une un objeto de Canvas a fin de 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ó ColoredRect. En su lugar, usa Box con el modificador drawBackground, (I983c7, b/152753731)

  • Se agregó personalización del color del cursor a TextField. (I6e33f)

  • 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)

  • TextFieldValue usado con TextField ahora puede ser una recreación de una actividad que permanece vigente cuando se usa de la siguiente manera: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }. (I5c3ce, b/155075724)

  • Se agregaron los parámetros que se usan con frecuencia a 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 puedes proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)

  • Se reemplazó el parámetro CoreTextField/TextField focusIdentifier con el objeto FocusNode a fin de integrarlo con el subsistema de enfoque. (I7ea48)

  • Actualización de TextField: en dimensión horizontal, ocupará todo el espacio disponible. (IB08df, b/154638552)

  • Se agregaron InteractionState y Interaction, lo que facilita la compilación de componentes que reaccionan a los cambios de estado de la IU, como presionar y arrastrar. (Icfe25, b/152525426)

  • 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 un valor nulo. (Iabaa7)

  • Actualización de la API de TextField: se combinaron las devoluciones de llamada onFocus y onBlur en una sola devolución de llamada de onFocusChange con un parámetro booleano. (I66cd3)

  • Se cambió el nombre de ScaleFit a ContentScale. Se trasladó el valor ContentScale del módulo ui-graphics al módulo ui-core para que quede en el mismo módulo que la API de alineación. Se cambió el nombre de FillMaxDimension a Crop, el de FillMinDimension a Fit y el de Fit a Inside para que coincida mejor con los equivalentes de ImageView.ScaleType. Se agregó documentación donde se indica que con la combinación de Crop y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_CROP, que con Fit y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.FIT_CENTER, y que con Inside y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_INSIDE (I45f09, b/152842521).

  • Se quitó ProvideContentColor; en su lugar, usa directamente ContentColorAmbient con Providers. (Iee942)

  • Se agregó un parámetro de color al texto, lo que permite anular el color del estilo del texto sin necesidad de combinarlo manualmente con el estilo proporcionado en un tema. (I41a66)

  • Se mejoró 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)
  • ColoredRect quedó obsoleto. Usa Box(Modifier.preferredSize(width, height).drawBackground(color)) en su lugar. (I499fa, b/152753731)

  • El sistema de temas de formas se actualiza según la especificación de Material Design. Ahora puedes proporcionar formas pequeñas, medianas y grandes para que las use la mayoría de los componentes. (Ifb4d1)

  • Se reemplazaron el modificador y el operador por funciones de extensión (I225e4).

  • Se movió el elemento arrastrable al modificador. (Id9b16, b/151959544)

  • Se trasladó el objeto Text de androidx.ui.core al paquete androidx.ui.foundation. (I87ce5)

  • Se agregó el parámetro enabled a Checkbox, Switch y Toggleable. (I41c16)

  • Ripple ahora es un modificador. Mientras que Clickable aún no se convirtió al uso recomendado, que es Clickable(onClick = { ... }, modifier = ripple()). (Ie5200, b/151331852, b/150060763)

  • Se agregó la API de VectorPainter para reemplazar la API de subcomposición existente por 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). Se creó el elemento Vector que admite composición y que se comporta como el elemento Image, pero con un VectorAsset en lugar de un ImageAsset. (I9af9a , b/149030271)

  • Se creó un elemento Image que admite composición para controlar el tamaño y el diseño, además de dibujar un ImageAsset determinado en la pantalla. Este elemento también admite el dibujo de cualquier instancia arbitraria de Painter que respete su tamaño intrínseco, así como un tamaño fijo determinado o un tamaño mínimo. (Ibcc8f)

  • 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 cambió el nombre de Image a ImageAsset para destacar mejor la diferencia entre los datos de Image y el próximo elemento Image que admite composición, que se utiliza para participar en el diseño y dibujar contenido.

    Se creó un método de extensión en android.graphics.Bitmap, Bitmap.asImageAsset(), a fin de crear una instancia útil de ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el marco de trabajo de Compose. (Id5bbd)

  • Se quitó el elemento DrawImage que admite composición. Usa ImagePainter para dibujar una imagen en un diseño existente o SimpleImage para introducir un elemento Image que ocupe espacio. (I595e1, b/149827027)

  • El componente de pila admite la dirección de derecha a izquierda. (Ic9e00)

  • Se agregaron Icon, IconButton y IconToggleButton, y se quitó AppBarIcon. Puedes reemplazar directamente los usos existentes de AppBarIcon con IconButton, y tendrán el objetivo táctil correcto. Consulta las muestras para obtener información de uso y consulta Íconos para conocer los íconos de material que puedes usar directamente con estos componentes. (I96849)

  • Se quitó el elemento DrawShape que admite composición. En su lugar, usa el modificador DrawBackground. (I7ceb2)

  • 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)

  • Se agregó el componente Scrollable, que permite crear desplazadores y listas de forma personalizada. (I5fd37)

  • Se cambió el nombre de background a DrawBackground y se lo estableció para memorizar de forma predeterminada. (Ia0bd3)

  • Agrega los parámetros paddings, border, shape y background al objeto Box. (I05027, b/148147281)

  • Se agregó el componente Canvas. Este elemento que admite composición ocupa cierto tamaño (proporcionado por el usuario) y te permite dibujar con CanvasScope. (I0d622)

  • Se cambió el nombre del modificador Border por DrawBorder. (I8ffcc)

  • Se agregó el componente Box para combinar la función común de dibujo y diseño. (I6e2a7)

  • Los desplazadores ahora muestran el comportamiento nativo de Android. (I922af, b/147493715)

  • Se reemplazó DrawBorder con el modificador Border. (Id335a)

  • Se cambió el nombre del objeto Modifier.tag a Modifier.layoutId para evitar confusiones con el elemento Modifier.testTag. (I995f0)

  • Se cambió el nombre del parámetro de porcentaje a fracción al crear los lineamientos de ConstraintLayout. (Ida2db)

  • Se agregó compatibilidad con los márgenes de las barreras de ConstraintLayout. (I47ffe)

  • Se corrigió la compatibilidad con lectura de derecha a izquierda en ConstraintLayout. Se agregaron unas API que no admiten lectura de derecha a izquierda. (I3b1c7)

  • Se agregó un nuevo DSL de ConstraintLayout. Consulta las muestras para obtener más detalles. (Icaa9a)

  • Se agregó la anotación @ExperimentalLayout. ConstraintLayout, FlowRow y FlowColumn ahora contienen esa etiqueta para indicar que sus API cambiarán. (I412a8)

  • Se agregó Modifier.padding(InnerPadding). (I94985, b/157133803)

  • Se quitaron los objetos obsoletos RowAlign y ColumnAlign de Row y Column. (If60d4, b/155858731)

  • 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 agregó el modificador de diseño offsetPx, que se puede usar para definir desplazamientos (dinámicos) en px. (I5af57)

  • El elemento que admite composición AlignmentLineOffset dejó de estar disponible. En su lugar, usa el modificador relativePaddingFrom(). Se quitó el elemento componible CenterAlignmentLine. (I60107)

  • Se agregó el modificador de diseño defaultMinSizeConstraints, que establece restricciones de tamaño en el diseño unido solo cuando las restricciones entrantes correspondientes no están especificadas (0 como restricción mínima e infinito como la máxima). (I311ea, b/150460257)

  • Se quitó el elemento Container. En su lugar, usa Box. (Ibbc2b, b/151407926)

  • Se quitaron los modificadores obsoletos LayoutWidth, Height y Size. (Ib0bc1)

  • Se agregaron valores de parámetros predeterminados al modificador de desplazamiento. (I37f06)

  • Se agregó un modificador de padding simétrico. (I39840)

  • Se quitó el modificador obsoleto LayoutAspectRatio. (I65a74)

  • Se quitaron los modificadores obsoletos LayoutAlign. (I10877)

  • Se corrigió un error en los modificadores de ancho y altura que hacía que se midiera el diseño unido sin restricciones de eje opuesto. (I210b8, b/154797971)

  • Se agregaron los parámetros verticalGravity y horizontalGravity a los elementos Row y Column, respectivamente. (I7dc5a)

  • Se actualizaron wrapContentWidth y wrapContentHeight para incluir Alignment vertical u horizontal en lugar de cualquier alineación. Se actualizó el modificador de gravedad para aceptar el elemento Alignment vertical u horizontal. Se actualizaron los objetos Row, Column y Stack para admitir el elementos Alignments continuos personalizados. (Ib0728)

  • Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)

  • Se cambió el nombre del objeto EdgeInsets a InnerPadding. Se cambió el nombre del parámetro innerPadding de los botones de Material por padding. (I66165)

  • El objeto alignToSiblings ahora acepta un elemento Measured en lugar del parámetro Placeable. (I5788d)

  • Se agregaron modificadores para la definición de tamaño en mediciones intrínsecas y dejaron de estar disponibles los componentes que cumplían esta función. (I8295d)

  • Se agregó compatibilidad con dimensiones personalizadas de elementos secundarios de ConstraintLayout. (Idb1a5)

  • Se quitaron los elementos obsoletos Wrap y Center que admiten composición. (I29e23)

  • Se agregó LayoutModifier2, una nueva API para definir modificadores de diseño; LayoutModifier dejó de estar disponible (If32ac).

  • Ahora se puede acceder a los miembros RowScope y ColumnScope desde afuera de la fila y la columna. (I3a641)

  • Dejó de estar disponible el elemento Container. En su lugar, usa Box. (I675ce, b/151407926)

  • Se agregó el modificador LayoutOffset para compensar la posición del diseño. (I0b8a3)

  • Asistencia inicial para lectura de derecha a izquierda en el diseño de Compose. (Ia5519)

  • Se actualizó LayoutAlign para que ya no ocupe todo el espacio disponible. (I2b14f)

  • Se quitó el elemento AspectRatio que admite composición y se reemplazó por el modificador. Se borraron el elemento FlexColumn obsoleto, los elementos que admiten composición de FlexRow y el modificador de Spacing. (Iec8a7)

  • Se quitó el modificador LayoutInflexible para la fila y columna. (I0d820)

  • Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField. (I27032)

  • Se implementó el objeto LongPressAndDrag para la selección del elemento TextField. (I17919)

Correcciones de errores

  • El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester y Modifier.focusObserver. FocusState y FocusDetailedState quedaron obsoletos y se los reemplazó por FocusState2. (I46919, b/160822875, b/160922136)
  • Se cambió el nombre de runOnIdleCompose por runOnIdle. (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)
  • Se quitó el objeto Modifier.ripple que dejó de estar disponible previamente. El elemento Clickable ahora usa ripple como indicación predeterminada (si tienes un objeto MaterialTheme {} configurado en tu aplicación), por lo que, en la mayoría de los casos, puedes usar los elementos clickable y get ripple de forma gratuita. Para personalizar el parámetro de color/tamaño/límites para ripple, puedes crear manualmente un RippleIndication y pasarlo a clickable como parámetro de indicación. (I663b2, b/155375067)
  • Se quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
  • Se creó la API experimental LayoutNode. (I4f2e9)
  • Se implementó en Compose la versión 1 del bloqueo de orientación de desplazamiento. (I1ce7a, b/150289741)
  • Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)
  • 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)
  • Se agregó AbsoluteArrangement, que permite la organización de los elementos secundarios dentro de la fila sin duplicación automática de derecha a izquierda. (I3a1df)
  • La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)
  • 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 agregó el objeto viewModel() que admite composición y permite crear u obtener un elemento ViewModel ya creado de manera similar a como funciona en las clases Activity o Fragment. (I5fdd1)
  • 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).

  • 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 cursor de TextField tiene una animación intermitente. (Id10a7)

  • Los gestos parciales ya no requieren pasar un objeto GestureToken. (Id7ae5)

  • 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 cambió el nombre del objeto AnnotatedString.Builder.addAnnotationString a addStringAnnotation. (I5059e)

  • 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 pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)

  • Se ingresaron parámetros rect opcionales adicionales en ImagePainter para admitir el dibujo de una subsección de ImageAsset subyacente. (I0ea9e)

  • Se corrigió una falla en AdapterList que se producía cuando se quitaban elementos. (Ic64b0, b/153195921)

  • Cambiamos la forma en que medimos el primer diseño que colocas dentro del bloque activity.setContent { }. Antes, llenaba toda la pantalla de la actividad, mientras que ahora se comporta como si colocaras el diseño dentro de una pila: puede ser más pequeño que una pantalla y se ubica en la pantalla superior izquierda. Si deseas usar el comportamiento anterior, puedes aplicar Modifier.fillMaxSize() para tu diseño. (Ie88a7, b/153453714)

  • Se cambió el nombre del módulo ui-text-compose a ui-text. El objeto ui-text ahora contiene los elementos CoreText y CoreTextField que admiten composición. (IB7d47)

  • Se cambió el nombre del módulo ui-text a ui-text-core. (I57dec)

  • Se trasladaron los elementos componibles ui-framework/CoreText y CoreTextField al objeto ui-text-compose. Te recomendamos incluir el objeto ui-text-compose en tu proyecto. (I32042)

  • Los objetos runOnIdleCompose y runOnUiThread ahora son funciones globales en lugar de métodos en ComposeTestRule. (Icbe8f).

  • Los operadores delegados de la propiedad [Mutable]State se movieron a extensiones a fin de admitir optimizaciones delegadas de propiedad de Kotlin 1.4. Los llamadres deben agregar importaciones para continuar usando by state { ... } o by mutableStateOf(...). (I5312c)

  • 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)

  • El elemento Center que admite composición quedó obsoleto. Debe reemplazarse con el modificador LayoutSize.Fill + LayoutAlign.Center o con una de las funciones que admiten composición Box o Stack con los modificadores adecuados aplicados (Idf5e0).

  • Se cambió el nombre de LayoutFlexible a LayoutWeight. Se cambió el nombre del parámetro estricto para rellenar. (If4738)

  • Se cambió el comportamiento de DrawVector, que dejó de ser una función que admite composición normal para mostrar un modificador drawVector() que dibujará el vector como fondo de un diseño. (I7b8e0)

  • Se reemplazó la función de componibilidad Clip con el modificador drawClip(). El objeto DrawClipToBounds es un modificador conveniente para usar cuando solo necesitas recortar los límites de la capa con una forma rectangular. (If28eb)

  • Se reemplazó la función de componibilidad DrawShadow con el modificador drawShadow(). Las sombras ahora se dibujan como parte de LayerModifier. (I0317a)

  • Se trasladó el objeto androidx.compose.ViewComposer al elemento androidx.ui.node.UiComposer. Se quitó el parámetro androidx.compose.Emittable. Era redundante con el objeto ComponentNode. Se quitó el elemento androidx.compose.ViewAdapters. Ya no es un caso práctico admitido. Compose.composeInto quedó obsoleto. En su lugar, usa los elementos setContent o setViewContent. El componente Compose.disposeComposition dejó de estar disponible. En su lugar, usa el método dispose en el Composition que muestra setContent. Se movió androidx.compose.Compose.subcomposeInto a androidx.ui.core.subcomposeInto. Se cambió el nombre de ComponentNode#emitInsertAt a ComponentNode#insertAt, el de ComponentNode#emitRemoveAt a ComponentNode#removeAt y el de ComponentNode#emitMode a ComponentNode#move. (Idef00)

  • La función Wrap que admite composición dejó de estar disponible. Se puede reemplazar con el modificador LayoutAlign o con la función Stack que admite composición. (IB237F)

  • 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)

  • Se cambió el nombre de Painter.toModifier a Painter.asModifier debido a que el modificador recientemente creado tiene una referencia al Painter original que se puede compartir en varias instancias del modificador. (I7195b)

  • .
  • Compatibilidad con lectura de derecha a izquierda en el modificador LayoutPadding. (I9e8da)

  • 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 quitó la clase ValueHolder. Se reestructuraron las clases AnimatedValue y AnimatedFloat para que el campo de valor de animación sea abstracto a fin de que las subclases puedan ver la actualización del valor.

    • Se agregaron clases de modelos para AnimatedValue, AnimatedFloat, etc.
    • Se agregó un nuevo conjunto de API liviana de @Composable para realizar animaciones entre valores.
    • (I79530)
  • 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).

  • 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 corrigió un error de ConstraintLayout que causaba una falla en las recomposiciones. (Ibee5a, b/158164341)

  • 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)

  • 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)

  • Dejó de estar disponible LayoutDirectionAmbient. Para leer la dirección del diseño definida por la configuración regional, usa localeLayoutDirection en ConfigurationAmbient. (I851b1)

  • Se agregaron los objetos positionInParent y boundsInParent para el elemento LayoutCoordinates. (Icacdd, b/152735784)

  • El elemento ParentData que admite composición dejó de estar disponible. Debes crear un modificador que implemente la interfaz ParentDataModifier o usar el modificador LayoutTag si solo necesitas etiquetar elementos secundarios de diseño para reconocerlos dentro del bloque de medición. (I51368, b/150953183)

  • Se agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones OnPositioned y OnChildPositioned que admiten composición. (I2ec8f)

  • Ya no se permite el padding negativo en LayoutPadding. En su lugar, se debería usar LayoutOffset para las compensaciones de posición negativa. (Ifb5b1)

  • WithConstraints tiene el parámetro LayoutDirection (I6d6f7).

  • Se actualizó la marca ComposeFlags.COMPOSER_PARAM para que sea true, lo que cambiará la estrategia de generación de código para el complemento de composición. En un nivel alto, esto provoca que las funciones @Composable se generen con un parámetro sintético adicional, que se pasa a través de llamadas @Composable posteriores para que el entorno de ejecución administre la ejecución correctamente. Este es un cambio rotundo el objeto binario; sin embargo, debería preservar la compatibilidad a nivel de la fuente en todo uso sancionado de la composición. (I7971c)

  • 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)

  • Se incluyeron mejoras en la superficie de la API de Constraints (I0fd15).

  • Se agregó el objeto TextDirection.Content. (I48f36)

  • Se ajustó el menú de la barra de herramientas para mostrar los botones Copiar, Cortar y Pegar de forma correcta. (Id3955)

  • Se agregó el objeto FloatingToolbar para la selección del elemento TextField. (Ie8b07)

  • Se cambió el nombre de TextDirectionAlgorithm a TextDirection. (I75ce8)

  • Se cambió el nombre de TextDirection a ResolvedTextDirection. (I3ff38)

  • Se agregó el objeto HapticFeedback para la selección del elemento TextField. (I58050)

  • Se agregaron los métodos Copiar, Cortar y Pegar para la selección del elemento TextField. (Idb70b)

  • Se borraron los objetos TestTag y Semantics. En su lugar, usa Modifier.testTag y Modifier.semantics. (I15ff0, b/158841414)

  • Se cambió el nombre del paquete de androidx.ui.text a androidx.ui.intl dentro de Locale y LocaleList. (I8132c)

  • Cambio en la API: se cambió el nombre de AnnotatedString(builder: Builder) a annotatedString(builder: Builder). (Ia6377)

  • Cambio en la API: se cambió el nombre de AnnotatedString.Item a AnnotatedString.Range. (I2d44d)

  • Se agregó una barra de herramientas para operaciones relacionadas con texto. (I49d53)

  • El nuevo LifecycleOwnerAmbient ya está disponible. Ahora, una actividad que usas con la IU de Compose debería extender androidx.activity.ComponentActivity (o AppCompatActivity). setContent en android.app.Activity quedó obsoleto. (Idb25a, b/153141084)

  • Se reemplazó el nombre del paquete ui-android-text (androidx.text) por androidx.ui.text.platform a fin de cumplir con la política de androidx. (I42711)