IU de Compose

Son los componentes fundamentales de la IU de Compose necesarios para interactuar con el dispositivo, incluidos el diseño, el dibujo y la entrada.
Actualización más reciente Versión estable Versión potencial Versión beta Versión alfa
4 de septiembre de 2024 1.7.0 - - 1.8.0-alpha01

Estructura

Compose es una combinación de 7 IDs de grupo de Maven en androidx. Cada grupo contiene un subconjunto de funcionalidades objetivo, cada uno con su propio conjunto de notas de la versión.

En esta tabla, se explican los grupos y vínculos correspondientes a cada conjunto de notas de la versión.

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.ui:ui:1.7.1"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.7.1")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.5.15"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo clic en el botón de la estrella.

Crear un error nuevo

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

Versión 1.8

Versión 1.8.0-alpha01

4 de septiembre de 2024

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

Versión 1.7

Versión 1.7.0

4 de septiembre de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.7.0.

Cambios importantes desde la versión 1.6.0

Los cambios importantes en la versión 1.7.0 se describen en esta entrada de blog.

Versión 1.7.0-rc01

21 de agosto de 2024

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

Cambios notables

  • El módulo ui:ui ahora fuerza el requisito de una versión mínima de Foundation:foundation para que sea, al menos, 1.7.0-rc01 o posterior. Esto se aplica para solucionar un comportamiento incompatible entre la IU y la base con respecto a los cambios de NestedScrollSource que ocurrieron a principios de 1.7.0-alpha01.

Versión 1.7.0-beta07

7 de agosto de 2024

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

Correcciones de errores

  • Las funciones SemanticsNodeInteraction relacionadas con la entrada de texto performTextReplacement, performTextInput y performTextClearance ahora arrojarán errores de aserción cuando se llamen en TextFields de solo lectura. (I4ae8f).

Versión 1.7.0-beta06

24 de julio de 2024

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

Versión 1.7.0-beta05

10 de julio de 2024

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

Correcciones de errores

  • Se corrigió un error por el que cambiar el teclado en pantalla hacía que TextField no aceptara entradas del teclado nuevo hasta que se perdiera y se recuperara el enfoque.
  • Se corrigió un problema por el que los intentos de persistencia del contenido de la capa causaban efectos secundarios no deseados cuando se procesaba con contenido de SurfaceView.

Versión 1.7.0-beta04

26 de junio de 2024

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

Correcciones de errores

  • Evita fallas cuando se miden líneas de texto muy grandes (p. ej., 10,000 caracteres) (8157ab).
  • Inhabilita la compatibilidad con la renderización de software para la API de GraphicsLayer. (35ddd8).
  • Se corrigió una falla en la lógica de persistencia de capas. (70b13e).
  • Se revirtió la reutilización de la optimización de objetos de capas, ya que esto causó problemas de renderización. (70b13e).

Versión 1.7.0-beta03

12 de junio de 2024

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

Versión 1.7.0-beta02

29 de mayo de 2024

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

Cambios en la API

  • Se cambió el nombre de SemanticsProperties.Editable a IsEditable y se cambió SemanticsPropertyReceiver.editable a un valor isEditable. Ahora, la propiedad es booleana y siempre se especifica mediante campos de texto. (I8acd8).
  • Se cambió el nombre del parámetro de comparativas de accesibilidad. (I3d440).
  • Se actualizó la API para definir el estilo de los vínculos: TextLinkStyles ahora es parte del constructor LinkAnnotation y el método AnnotatedString.fromHtml (I90b2b). También se quitó el objeto TextDefaults del material. (I5477b)

Correcciones de errores

  • Se cambió el nombre de LayoutCoordinates.introducesFrameOfReference por LayoutCoordinates.introducesMotionFrameOfReference para reflejar mejor su propósito. Se cambió el nombre de la función relacionada para calcular coordenadas basadas en esa marca. (I3a330).

Versión 1.7.0-beta01

14 de mayo de 2024

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

Cambios en la API

  • Se cambió el nombre de performCustomAccessibilityActionLabelled por performCustomAccessibilityActionWithLabel y el de performCustomAccessibilityActionWhere por performCustomAccessibilityActionWithLabelMatching (I5387f).
  • AnnotatedString.hasEqualsAnnotations ahora es hasEqualAnnotations. (I685c0)
  • Se actualizó la API para obtener vínculos con temas de Material en el texto. Específicamente, se quitaron los métodos de TextDefaults para construir LinkAnnotations con temas y analizar HTML con vínculos temáticos. En su lugar, se agregó una clase TextLinkStyles que permite diseñar los vínculos como un parámetro en el elemento Text componible. (I31b93).

Correcciones de errores

  • Se corrigieron casos de uso adicionales cuando se agregan de forma dinámica modificadores de entrada de puntero durante eventos. 63e1504

Versión 1.7.0-alpha08

1 de mayo de 2024

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

Cambios en la API

  • Se agregó compatibilidad para implementaciones de formas mutables. Ahora se observa Shape#createOutline dentro de las capas de gráficos, por lo que la lectura de los valores de estado dentro de ellas causará invalidaciones cuando cambie el estado, lo que permitirá animaciones de formas con mejor rendimiento. (Id1629, b/326070216).
  • Se cambió el nombre de isPositionedByParentWithDirectManipulation a introducesFrameOfReference. Ten en cuenta que ahora tiene el efecto inverso, lo que significa que, de forma predeterminada, la mayoría de los LayoutCoordinates introduce un marco de referencia y, solo cuando se coloca bajo manipulación directa, la propiedad será falsa. Para consultar la posición con solo aquellos que ingresan un marco de referencia, usa positionInLocalFrameOfReference(...). O bien positionInLocalLookaheadFrameOfReference desde un LookaheadScope. (Ifc5f7).
  • Se volvieron estables las APIs de LookaheadScope. (I21507)
  • Se cambió la lambda de acción para getScrollViewportLength según los comentarios del consejo de la API. (Ibc74a).
  • Se actualizaron las GraphicsLayer APIs de outline para consumir parámetros de número de punto flotante en lugar de int. Se quitaron los valores centinela UnsetOffset/UnsetSize IntSize existentes en favor de las constantes no especificadas ya existentes en las clases intercaladas Offset y Size basadas en números de punto flotante (I2fb03, b/333863462).
  • Cuando se inserta la entrada del mouse durante las pruebas, MouseInjectionScope.click(), MouseInjectionScope.doubleClick(), MouseInjectionScope.tripleClick() y MouseInjectionScope.longClick() ahora aceptan un parámetro button: MouseButton para que se puedan aplicar a nivel universal. El valor predeterminado es MouseButton.Primary para todos los métodos. (I31a23, b/190493367, b/261439695).
  • Se cambió el nombre de onClicked a onClick dentro de LinkInteractionListener (Iaa35c).
  • Se cambió el nombre de TextInclusionStrategy.isInside por isIncluded. Hace que el tipo de datos que se muestra de Paragraph/MultiParagraph#getRangeForRect() no admita valores nulos. (I51f26).

Correcciones de errores

  • Se corrigió la captura de pantalla larga para desplazar contenedores con reverseScrolling=true. (I7c59c).

Contribución externa

  • Se agregó compatibilidad para la carga previa de elementos en LazyLists anidados (p.ej., un LazyColumn que renderiza LazyRows anidados). Se espera que este cambio reduzca las caídas de fotogramas durante el desplazamiento para estos LazyLists El valor predeterminado de implementación es la carga previa de los primeros 2 elementos anidados; sin embargo, este comportamiento se puede controlar con las nuevas APIs de LazyLayoutPrefetchStrategy(nestedPrefetchItemCount) y LazyListPrefetchStrategy#onNestedPrefetch. (I51952).

Versión 1.7.0-alpha07

17 de abril de 2024

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

Cambios en la API

  • ClickableText se marcó como obsoleto. Para agregar vínculos al texto, crea un AnnotatedString con un LinkAnnotation correspondiente a tu vínculo y pasa este AnnotatedString al elemento componible Text. (I34d4b, b/323346994).
  • Se introdujo ViewConfiguration.HandwritingGestureLineMargin para los gestos de escritura a mano. Se agregó compatibilidad con el gesto JoinOrSplit para BasicTextField. (Ie6e13, b/325660505)
  • FocusProperties.enter y FocusProperties.exit dejaron de ser experimentales. FocusDirection.Enter y FocusDirection.Exit ya no son experimentales. FocusRequester.Cancel ya no es experimental. (I461a1, b/261564106)
  • Cuando consultes coordenadas de diseño, ahora puedes usar el argumento excludeDirectManipulationOffset para excluir el desplazamiento configurado por los diseños superiores que colocaron a sus elementos secundarios con Placeable.PlacementScope.withDirectManipulationPlacement. Del mismo modo, un diseño que cambia la posición de sus elementos secundarios con frecuencia ahora puede ubicarlos con withDirectManipulationPlacement (como el desplazamiento, implementado de forma predeterminada). Esto ayuda a que las animaciones basadas en approachLayout sean más intuitivas, ya que ahora tiene la oportunidad de diferenciar qué desplazamiento se animará y qué aplicar directamente cuando se decida animar su enfoque. (I60ec7).
  • Se quitó la marca de función para las capturas de pantalla largas. (I28648, b/329128246).
  • LazyColumn ahora renderizará correctamente los encabezados fijos en las capturas de pantalla largas (I8d239, b/329296635).
  • Se reemplazarán los elementos Drag y Fling de NestedScroll por UserInput y SideEffect para adaptarse a la definición extendida de estas fuentes, que ahora incluyen animaciones (Efecto lateral), Rueda del mouse y Teclado (UserInput). (I40579).
  • ApproachLayoutModifierNode y Modifier.approachLayout ahora son estables, con los nuevos isMeasurementApproachInProgress() y isPlacementApproachInProgress() para reemplazar a los antiguos isMeasurementApproachComplete() y isPlacementApproachComplete(), respectivamente.
  • Se quitó el modificador intermediateLayout obsoleto. (I3e91c).
  • Cambia el nombre de GraphicsLayer#buildLayer para grabar y así duplicar los métodos de start/endRecording de las APIs respaldadas por Displaylist, como RenderNode y Picture.
  • Se actualizó rememberGraphicsLayer para aprovechar rememberObserver. (I312c1, b/288494724, b/330758155).
  • UrlAnnotation dejó de estar disponible; en su lugar, usa LinkAnnotation.Url. Si usas temas de Material, usa el objeto TextDefaults para crear la anotación con los temas de Material aplicados (I8d180, b/323346545).
  • Los vínculos de texto tienen la opción de estilo de estado presionado, además del estilo normal, se colocan sobre ellos y se enfocan. (I5f864, b/139312671)
  • Se cambió el nombre de String.parseAsHtml por AnnotatedString.Companion.fromHtml. (I43dcd).
  • Se agregaron argumentos de estilo (linkStyle, focusedLinkStyle, hoveredLinkStyle) y un objeto de escucha de interacción de vínculos al método parseAsHtml. Cuando analices la cadena etiquetada con HTML con etiquetas <a>, el método construirá una LinkAnnotation.Url para cada etiqueta y pasará los objetos de estilo y el objeto de escucha de interacción de vínculos a cada anotación. (I7c977).
  • LinkAnnotation ahora toma los argumentos de diseño basados en el estado y un LinkInteractionListener. Agrega esta anotación a AnnotatedString para obtener un hipervínculo. Si pasas los valores focusedState o hoveredState, podrás definir la configuration visual para los vínculos cuando se enfoquen o se coloquen el cursor sobre ellos. (I81ce4, b/139312671).
  • ImeOptions.hintLocales ya no es anulable. Si deseas pasar una lista de configuración regional vacía, usa LocaleList.Empty. (Ic5bc4).

Correcciones de errores

  • Administra de manera óptima los datos de eventos de entrada históricos dañados o incorrectos (ignora los datos de desplazamiento incorrectos).
  • Corrige los eventos inesperados del puntero cuando se agrega de forma dinámica un modificador de entrada del puntero antes de otro modificador de entrada del puntero durante una transmisión de eventos de entrada de un puntero activo (por ejemplo, entre una entrada al colocar el cursor sobre un elemento y una salida cuando se coloca el cursor sobre un elemento [mouse/pluma stylus]).

Versión 1.7.0-alpha06

3 de abril de 2024

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

Nuevas funciones

  • Se agregó el método parseAsHtml para cadenas con estilo: permite convertir una cadena marcada con etiquetas HTML en AnnotatedString. Ten en cuenta que no todas las etiquetas son compatibles; por ejemplo, todavía no podrás mostrar listas con viñetas. (I84d3d, I30626, b/139326648).
  • Se implementó la compatibilidad experimental para capturas de pantalla largas en contenedores de desplazamiento de Compose con la API oficial de Android (ScrollCaptureCallback). Esta función es experimental y es posible que actualmente no maneje correctamente todos los casos. Por esa razón, está inhabilitado de forma predeterminada. Para habilitarlo, establece la marca ComposeFeatureFlag_LongScreenshotsEnabled como verdadera. (I2b055, b/329296471).

Cambios en la API

  • fun ClipEntry.getMetadata() se cambió a val ClipEntry.clipMetadata. (I50155).
  • Se quitaron las funciones ClipboardManager.getClipMetadata y ClipboardManager.hasClip. Usa clipEntry.getMetadata() para leer los metadatos de la entrada del clip actual. Además, revisa el resultado de ClipboardManager.getClip, si es nulo o no, para comprender si el Portapapeles tiene un clip actual. (I50498).
  • Ahora puedes pasar objetos GraphicsLayer a funciones placeable.placeWithLayer(). (I1b22f)
  • ClipboardManager.setClip ahora acepta valores nulos para poder borrar el portapapeles. (I7d2e9).
  • Se agregaron IDs de recursos para ayudar a ocultar las vistas usadas como detalles de implementación dentro de las herramientas de compilación (I99531).
  • Se agregó el método de suspensión GraphicsLayer#toImageBitmap para admitir la renderización de contenido de un mapa de bits en un GraphicsLayer. Esta es una operación de renderización acelerada por hardware en el nivel de API 22 o versiones posteriores (inclusive) que admite más del 99% de todos los dispositivos Android. En el nivel de API 21 de Android, esto recurre a la renderización de software. (I9e114).
  • Método de ayuda para convertir un RectF de Android en ComposeRect. (I39925, b/325660505)
  • Todos los parámetros KeyboardOptions ahora tienen un valor no especificado de forma predeterminada. Se agregó el método KeyboardOptions.merge.
  • Se cambió el nombre de KeyboardOptions.autoCorrect a autoCorrectEnabled y se hizo anulable, donde nulo indica que no se especificó ningún valor. (Ia8ba0, b/295951492).
  • La variante BasicTextField(state) y BasicSecureTextField ahora usan KeyboardActionHandler en lugar de KeyboardActions para procesar las acciones realizadas por el teclado en pantalla (I58dda).

Versión 1.7.0-alpha05

20 de marzo de 2024

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

Nuevas funciones

  • Incorpora una nueva API de GraphicsLayer para registrar comandos de dibujo en una lista de visualización, así como propiedades adicionales que afectan la renderización de la lista. Esto proporciona un límite de aislamiento para dividir una escena compleja en partes más pequeñas que pueden actualizarse individualmente sin recrear toda la escena. Las transformaciones realizadas en un GraphicsLayer se pueden realizar sin volver a grabar la lista de visualización. A diferencia de Modifier.graphicsLayer, GraphicsLayer permite renderizar contenido de componibilidad en otro lugar y es útil en casos de uso animados en los que se espera que el contenido se renderice en diferentes escenas.

Cambios en la API

  • GraphicsLayer.draw(Canvas) ya no es una API pública. En su lugar, usa la función de extensión DrawScope.drawLayer(GraphicsLayer) para dibujar la capa. (I7a7c0).
  • Se dividió restrictedConstraints() en dos métodos: fitPrioritizingWidth() y fitPrioritizingHeight() (I6d7fd).
  • Se agregó el stub de HardwareCanvas para el uso de Android L. (I1c3b5, b/288494724)
  • Actualiza el framework de Compose para exponer un elemento GraphicsContext de composición local junto con la actualización de las implementaciones de propietario, DelegateableNode y modificador drawWithCache para exponer el acceso al GraphicsContext para un acceso específico que limpiará automáticamente las instancias de GraphicsLayer cuando se eliminen los modificadores. (I64a2f, b/288494724).
  • Se agregó InterceptPlatformTextInput para ayudar a escribir pruebas relacionadas con el IME de bajo nivel y otros casos de uso de IME de bajo nivel. El elemento PlatformTextInputTestOverride dejó de estar disponible. (I862ed, b/322680547).
  • Se agregó la función de extensión GraphicsLayer.setOutline(Outline). (Ib81f4).
  • Se introdujo el constructor de la función GraphicsContext para crear una fábrica y crear instancias de GraphicsLayer. (Ib98d6, b/288494724)
  • Se expuso la API de GraphicsLayer para proporcionar una flexibilidad definida por el desarrollador en la captura de comandos de dibujo que se pueden usar para dibujar en otro lugar y también aplicar diferentes efectos visuales al resultado final. (I80245, b/288494724).
  • Introduce el objeto Paragraph#getRangeForRect, que muestra un rango de texto cubierto por un área rectangular determinada. (Iee516, b/325660505).
  • Se quitó la anulación experimental de BasicText con el argumento onLinkClicked. En el futuro, tendremos una API de reemplazo para admitir hipervínculos. (I107d5).

Correcciones de errores

  • Se agregó la definición GraphicsLayer esperada/real de la API para admitir la captura y repetición de comandos de dibujo con transformaciones y efectos visuales de composición opcionales. Se introdujo la interfaz de GraphicsContext para que contenga dependencias de gráficos, incluida la creación y administración de instancias de GraphicsLayer. (I4a8d6, b/288494724).
  • Se corrigió un problema de interoperabilidad con la búsqueda de enfoque 1D en el que el foco se bloqueaba dentro de un ComposeView que estaba incorporado entre otras vistas. (I08fd4).

Contribución externa

  • Se movió LocalLifecycleOwner de la IU de Compose a lifecycle-runtime-compose para que sus APIs auxiliares basadas en Compose se puedan usar fuera de la IU de Compose. Gracias, Jake Wharton por la contribución. (I6c41b, b/328263448).
  • Expón de manera coherente propiedades de número de punto flotante de sesgo en todos los subtipos de alineación basados en sesgo. (I69f0f, b/328088992).

Versión 1.7.0-alpha04

6 de marzo de 2024

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

Cambios en la API

  • Se agregó compatibilidad con la función de escritura a mano con la pluma stylus para BasicTextField2 en dispositivos con Android U. (I002e4).
  • En este CL, agregamos la acción semántica GetScrollViewportLength para canalizar información sobre los componentes que se desplazan en Compose al sistema a11y. Esta CL también aplica el uso de dicha propiedad en las listas desplazables básicas. (Ic5fa2).
  • FocusRequester.createRefs ahora es estable. (I4d92c, b/261436820)
  • Se agregó DelegatableNode.requireView() para permitir que los nodos modificadores obtengan el View de Android actual sin leer un elemento local de composición. (I40768).
  • Se agregó una nueva API de Path.reverse() para revertir la dirección de una ruta (I36348).
  • Se agregó hintLocales a KeyboardOptions para que TextFields pueda sugerir a los IME con configuraciones regionales específicas que preestablezcan un idioma preferido.
  • Expón la propiedad platformLocale de Locale que muestra el objeto de plataforma subyacente, p.ej., java.util.Locale (I921c6).

Versión 1.7.0-alpha03

21 de febrero de 2024

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

Cambios en la API

  • Presentamos ContextualFlowRow y FlowRow/Column mejorados con MaxLines y Overflow. Nos complace anunciar mejoras en los FlowRow y FlowColumn experimentales, que ahora incluyen maxLines y compatibilidad con overflow, junto con el debut de ContextualFlowRow y ContextualFlowColumn. Esta actualización está diseñada para proporcionar componentes de rendimiento óptimo, en los que ContextualFlow* es perfecto para una gran cantidad de elementos que usan una configuración pequeña de maxLines y botones para ver más dinámicos +N, y FlowRow y FlowColumn son perfectos para una cantidad pequeña de elementos, menos de 100. Importante: Para mantener el comportamiento existente en FlowRow o FlowColumn, donde se componen todos los elementos, 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).
  • Agrega la propiedad semántica maxTextLength que debe establecerse en los campos de texto que filtren la cantidad máxima permitida de caracteres. (I24d9f, b/170648072).
  • El wrapper Modifier.inspectable dejó de estar disponible. Esta API creará más invalidaciones de tu modificador que las necesarias, por lo que no se recomienda su uso. Se recomienda a los desarrolladores que implementen el método inspectableProperties() en ModifierNodeElement si desean exponer las propiedades del modificador a las herramientas. (Ib3236).
  • Nuevo constructor para PopupProperties, que permite un control total sobre las marcas WindowManager.LayoutParams (Ibb33e, b/312485503).
  • Se introdujo DelegatableNode.requireLayoutCoordinates() como una forma de obtener el LayoutCoordinates actual de Modifier.Node sin necesidad de anular onPlaced y almacenar las coordenadas en una propiedad. (Ia8657).
  • Se introdujo DelegatableNode.currentLayoutCoordinates como una forma de obtener el LayoutCoordinates actual de Modifier.Node sin necesidad de anular onPlaced y almacenar las coordenadas en una propiedad. (Iaebaa).
  • BasicTextField2 y las APIs relacionadas en el paquete androidx.compose.foundation.text2 se movieron a androidx.compose.foundation.text. (I9f635).
  • Se agregó una nueva API de ApproachLayoutModifierNode para admitir la creación de lógica de enfoque personalizado en un nodo modificador explícito. También se agregó una nueva API experimental de DeferredTargetAnimation para animaciones cuyo destino se desconoce en la creación de la instancia. (I60745).
  • Se agregaron nuevas APIs de Path para consultar la dirección de una ruta de acceso y extraer contornos de una Path. (I63d04).
  • Se agregaron PathHitTest y Path.contains(Offset) para verificar si un Path contiene un punto específico. (I3b218).
  • TextLayoutResult ahora expone el método getLineBaseline(lineIndex). Esto permite leer la línea de base de una línea arbitraria del texto, además de las propiedades de conveniencia firstBaseline y lastBaseline existentes. (Ide4e8, b/237428541).
  • Se agregó un método para comparar solo las anotaciones de dos AnnotatedStrings. (I32659).

Correcciones de errores

  • Se corrigió un problema de retrocompatibilidad con SemanticsPropertyReceiver.performImeAction y SemanticsActions.PerformImeAction. (Id0528, b/322269946).

Versión 1.7.0-alpha02

7 de febrero de 2024

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

Cambios en la API

  • Se corrigió un problema de compatibilidad binaria con SemanticsPropertyReceiver.performImeAction. (I65865, b/322269946).
  • El constructor PopupProperties que toma un parámetro usePlatformDefaultWidth ya no es experimental. (I8f8d2).
  • Se agregó una sobrecarga de ComposeTestRule.waitUntil, que toma una descripción de cadena de la condición para incluir en el mensaje de tiempo de espera. (I9413e).
  • Se agregó una nueva API de semántica unset() para quitar las propiedades semánticas que se agregan en la misma cadena de modificadores. Nueva propiedad semántica isOpaque. (I8c583, b/317966058, b/246056649).
  • Se quitó originalEventPosition del método de copia en la API pública de PointerInputChange. (I7bead).

Correcciones de errores

  • Se corrigió un error de a11y que permite que se pueda hacer clic en botones que no son de pestaña ni de radio cuando se seleccionan. (I2181c).
  • Ahora, VelocityTracker tendrá la solución para agregar puntos de forma predeterminada. Aun así, si se produce algún problema, se puede desactivar la corrección. Para ello, se debe configurar VelocityTrackerAddPointsFix como falso. (Ib3877, b/269487059).
  • Se corrigió la incompatibilidad binaria con versiones anteriores en TextStyle y ParagraphStyle. (I179f0, b/320819734).

Contribución externa

  • Se agregó un nuevo constructor DialogProperties sin parámetros específicos de la plataforma. (I45829).
  • Se agregó un nuevo constructor PopupProperties sin parámetros específicos de la plataforma. (I9a038).

Versión 1.7.0-alpha01

24 de enero de 2024

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

Cambios en la API

  • Se expandió ClipboardManager agregando ClipEntry y ClipMetadata para admitir contenido arbitrario, como imágenes.
  • Agrega la API de DeviceConfigurationOverride a ui-test para permitirlo de forma local anulando el comportamiento del contenido que se prueba, como especificar una política el tamaño, la configuración regional, la dirección del diseño, la escala de la fuente o el tema.

Versión 1.6

Versión 1.6.8

12 de junio de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.8. La versión 1.6.8 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigieron las inconsistencias en el escalamiento de fuente cuando esta es menor que la tabla más baja definida. En este caso, interpolamos la escala lineal de 1x y la tabla más baja definida para que el tamaño de la fuente aumente de forma monotónica a medida que aumentan las escalas. (Icbae3).

Versión 1.6.7

1 de mayo de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.7. La versión 1.6.7 contiene estas confirmaciones.

Versión 1.6.6

17 de abril de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.6. La versión 1.6.6 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió una falla inusual de BasicTextField.

Versión 1.6.5

3 de abril de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.5. La versión 1.6.5 contiene estas confirmaciones.

Versión 1.6.4

20 de marzo de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.4. La versión 1.6.4 contiene estas confirmaciones.

Versión 1.6.3

6 de marzo de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.3. La versión 1.6.3 contiene estas confirmaciones.

Versión 1.6.2

21 de febrero de 2024

Lanzamiento de androidx.compose.ui:ui-*:1.6.2. La versión 1.6.2 contiene estas confirmaciones.

Versión 1.6.1

7 de febrero de 2024 Lanzamiento de androidx.compose.ui:ui-*:1.6.1. La versión 1.6.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema de retrocompatibilidad con SemanticsPropertyReceiver.performImeAction y SemanticsActions.PerformImeAction. (Ie0bb2, b/322269946).
  • Los diseños ahora emiten un error mientras miden cuando uno muestra un tamaño anormalmente grande. Por lo general, este tipo de error ocurre cuando la medición usa restricciones máximas directamente sin verificar la Constraints.Infinity. La verificación ayudará a los desarrolladores a encontrar problemas con el tamaño incorrecto del diseño en lugar de en un diseño que lo contiene. (I339a9).

Versión 1.6.0

24 de enero de 2024

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

Versión 1.6.0-rc01

10 de enero de 2024

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

Correcciones de errores

  • Se optimizó la implementación de gráficos vectoriales para mejorar el rendimiento minimizando las recomposiciones adicionales.

Versión 1.6.0-beta03

13 de diciembre de 2023

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

Nuevas funciones

  • Ahora es posible desconectar un LayoutCoordinates sin desconectar el nodo. Protégete contra eso en el Inspector de diseño de Compose (If693).

Correcciones de errores

  • Ahora, PlatformImeOptions es una clase concreta en lugar de una interfaz. (If40a4).
  • Se corrigieron las recomposiciones descendentes adicionales causadas por las que LocalSoftwareKeyboardController y LocalTextInputService recibían valores nuevos cada vez que se recompone una raíz. (I42190, b/310510985).

Versión 1.6.0-beta02

29 de noviembre de 2023

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

Versión 1.6.0-beta01

15 de noviembre de 2023

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

Cambios en la API

  • El modificador DragAndDropTarget ahora toma el DragAndDropTarget receptor de manera explícita y tiene una lambda para habilitar una sesión de arrastrar y soltar. Ahora hay dos funciones de fábrica para un objeto 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 ser más claro sobre la unidad maximumFlingVelocity. (I8adc7).
  • Se cambió el nombre de onDragAndDropStart de la fábrica DragAndDropModifierNode a acceptDragAndDropTransfer.Se agregó acceptsDragAndDropTransfer al modificador dragAndDropTarget para aceptar 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 datos de sesiones de arrastrar y soltar. (Iebf3a)
  • Se quitó DragAndDropInfo como tipo DragAndDropModifierNode.drag ahora toma parámetros para la lambda transferData, tamaño de la decoración y arrastre de la decoración DrawScope.

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

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

    Se quitó DragAndDropEventType. (I645b1)

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

  • Mejora los nombres de API de nodo transversales para que sean más comprensibles. (Ia4474).

  • 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 él) que se retienen para volver a usarse en el futuro se consideran desactivados. Se introdujo la nueva API de prueba de assertIsDeactivated() para probar esos nodos. El resto de las APIs de prueba filtrarán los nodos desactivados de forma predeterminada. (I2ef84, b/187188981).

  • Se quitaron FocusDirection.In y FocusDirection.Out, y usan FocusDirection.Enter y FocusDirection.Exit en su lugar. (I2f660)

  • Las APIs de SwipeToReveal de Material (para tarjetas y chips) ahora dependen de una API basada en ranuras (como recomienda Compose) en lugar de instancias basadas en clases de datos para crear esas ranuras. Este es un cambio rotundo. Consulta la demostración y la muestra de código para ver ejemplos de cómo usar la nueva API. (Ia8943).

  • El constructor FontStyle(int) dejó de estar disponible. En su lugar, usa FontStyle.Normal o FontStyle.Italic. (I66610).

  • Se cambió el nombre de la interfaz FontScalable a FontScaling. (Ie804a)

Correcciones de errores

  • SoftwareKeyboardController.show() ya no mostrará el teclado en pantalla si no se enfoca ningún editor de texto. (I2165a, b/301477279).
  • Ahora se ignorarán los eventos de tecla de hardware hacia arriba para las teclas que no hayan recibido un evento Down en la misma vista de Compose. (Ib37b4, b/305518328).
  • Se agregó compatibilidad con el procesador para el gradiente de barrido en ArcLine. (I4d5bb).
  • Implementa equals y hashcode para PageSize.Fixed. (Ie3ede, b/300134276).
  • Se corrigió un problema de compatibilidad binaria con el cambio de inserción de ventana (Iee695).
  • Se quitó la capa principal de Material para el chip o botón de Material 3, ya que las microcomparativas muestran un mejor rendimiento sin ella. (I55555).
  • Los objetos TestDispatcher pasados como effectContext para las pruebas de Compose ahora se usarán para crear los relojes de prueba y de fotogramas. (Ia7178).

Versión 1.6.0-alpha08

18 de octubre de 2023

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

Cambios en la API

  • A Modifier.dragAndDrawSource se le cambió el nombre de la lambda onDrawDragShadow por drawDragDecoration y se cambió el nombre del parámetro de tamaño a dragDecorationSize a DragAndDropInfo. (Id0e30, b/303904810).
  • Introduce SemanticsNodeInteraction.isDisplayed() y SemanticsNodeInteraction.isNotDisplayed() para verificar si un nodo coincidente es visible o no sin confirmarlo también. (I2c196, b/302100809).
  • Se agregó un valor Unspecified especial para los campos TextAlign, TextDirection, Hyphens y LineBreak de ParagraphTextStyle para reemplazar null. Debido a que estas clases son clases intercaladas, cuando se reemplaza el valor anulable con No especificado, evitamos el empaquetado de tipos primitivos. Se actualizaron los constructores, métodos get y otros métodos en TextStyle y el estilo de párrafo para aceptar los parámetros mencionados como tipos no nulos. (I4197e, b/299490814).
  • Se agregó una sobrecarga de GoogleFont para leer un GoogleFont desde XML. (If8f59).
  • Se convirtió a LoremIpsum PreviewParameterProvider en una clase abierta. (I41bf5, b/266918816, b/300116360).

Correcciones de errores

  • FontFamilyResolver ahora usa Dispatchers.Main para las corrutinas de administración de caché. (Ie8dd9).
  • Ahora, AndroidViewBinding quita de forma síncrona las instancias aumentadas de Fragment cuando incluyes un FragmentContainerView en tu diseño como parte de su onRelease usando commitNow (en lugar de commit que usaba antes), lo que soluciona los problemas con el método de Ediciones en vivo con el reemplazo de la composición ante los cambios. (I58fbf).

Versión 1.6.0-alpha07

4 de octubre de 2023

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

Cambios en la API

  • Se agregó PlatformTextInputMethodTestOverride, que permite escribir pruebas para editores de texto personalizados. (Id159b).
  • Agrega el modificador dragAndDropSource para iniciar sesiones de arrastrar y soltar, y el modificador dragAndDropTarget para recibir de sesiones de arrastrar y soltar. (Ib7828, b/286038936).
  • Se agregaron colecciones ColorList y ColorSet que evitan las asignaciones. (I744bd).
  • Se agregó la marca temporal DisableNonLinearFontScalingInCompose para inhabilitar el escalamiento de fuente no lineal. Establece DisableNonLinearFontScalingInCompose = true en las pruebas si necesitas tiempo para realizar una limpieza. Esta marca se quitará en Compose 1.6.0-beta01. (Ic9486).

Correcciones de errores

  • Análisis optimizado de elementos de diseño vectoriales XML (Ibb015).

Versión 1.6.0-alpha06

20 de septiembre de 2023

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

Cambios en la API

  • Optimizaciones adicionales para los íconos de Material. (I3e08d).
  • Se agregó la capacidad de atravesar el árbol de modificadores hacia arriba y abajo para encontrar nodos similares. (I2d234).
  • Se agregó una devolución de llamada onRestoreFailed() al modificador focusRestorer(). (Ie1d43)
  • Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar ColorInt, FloatRange, IntRange, Size y más. (Id65c8, b/290950582).
  • Se agregó showSystemUi=true a la definición de PreviewScreenSizes. (Ib61d3)

Cambios en el comportamiento

  • Compose ahora usa el escalamiento de fuente no lineal para mejorar la legibilidad y accesibilidad. Cuando la fuente se adapta > 100% en la configuración del sistema. Por lo general, el texto pequeño aumentará de tamaño, pero el texto que ya es grande solo lo hará un poco. Además, las alturas de línea definidas en PS se ajustarán automáticamente para mantenerse proporcionales a la altura deseada de la escala del 100%. Consulta las prácticas recomendadas para el ajuste de tamaño de las fuentes a fin de obtener más información. (I11518).

Versión 1.6.0-alpha05

6 de septiembre de 2023

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

Cambios en la API

  • Habilitar la captura de contenido en AndroidComposeViewAccessibilityDelegateCompat. (Ib2969).
  • Las velocidades de envío en los componentes de View, como ScrollView y RecyclerView, se limitan a ViewConfiguration.ScaledMaximumFlingVelocity. Compose ahora contiene su propia versión de maximumFlingVelocity, que ahora se aplica a Draggable. (Ibf974).
  • Se agregó una estructura inicial para admitir las APIs de arrastrar y soltar de la plataforma. (If84ce).
  • Se agregó deviceId a RotaryScrollEvent. (Iba3bf)
  • Se actualizó la API de ui-tooling Devices para incluir dispositivos más nuevos (Ib25b4).

Versión 1.6.0-alpha04

23 de agosto de 2023

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

Cambios en la API

  • Se agregó un método para desactivar ReusableComposition, lo que quita las observaciones, pero mantiene los nodos en su lugar. La composición desactivada se puede volver a activar llamando a setContent. (Ib7f31).
  • Se agregó la interfaz ReusableComposition para administrar el ciclo de vida y la reutilización de subcomposiciones (I812d1, b/252846775).
  • Se ascendió Modifier.focusGroup a APIs estables. (I7ffa3).
  • Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar ColorInt, FloatRange, IntRange, Size y más. (I70487, b/290950582).
  • Se actualizó la API de ColorFilter para tener tipos de subclases concretos y mejorar la inspección de los parámetros. (I5fe29).
  • Se introdujo la biblioteca wear-tooling-preview para enumerar los dispositivos Wear válidos que se pueden usar para vistas previas de la IU. (Ib036e)
  • Se creó la interfaz FontScalable para controlar la parte del escalamiento de fuentes de la interfaz Density. (I2cf3f).

Versión 1.6.0-alpha03

9 de agosto de 2023

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

Cambios en la API

  • Nuevo tipo de transición de entrada y salida que escala el contenido según el tamaño del contenedor de la animación durante las operaciones de entrada y de salida. animación de salida. LookaheadScope La interfaz y la diversión de componibilidad ahora son estables. (Ifb2ce).
  • Se agregó compatibilidad para configurar privateImeOptions (Idb772).

Correcciones de errores

  • PopupPositionProvider.calculatePosition ahora actualizará automáticamente la posición de la ventana emergente cuando se cambie el estado de lectura en el cálculo. (I676a1, b/292257547).
  • Se corrigieron los campos de texto que muestran el teclado y se pueden editar cuando readOnly es verdadero También se corrigió el teclado que no se mostraba cuando readOnly se cambiaba de verdadero a falso mientras estaba enfocado (I34a19, b/246909589).
  • Se amplió la aplicación de aserciones globales en las pruebas de IU. (I1f90d).

Versión 1.6.0-alpha02

26 de julio de 2023

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

Cambios en la API

  • Se agregó una interfaz de localizador de servicios que los implementadores de Composition pueden implementar y que permite una implementación de ella que se delega a la composición original otras búsquedas del servicio delegado de composición. No se debe llamar directamente y se usa para habilitar la creación de APIs experimentales en el tiempo de ejecución que se pueden encontrar en versiones unidas del compositor, como lo hace el módulo de la IU. (I296b9).
  • API de PlatformTextInput* completamente rediseñada. (I6c93a, b/274661182, b/267235947, b/277380808).
  • SoftwareKeyboardController y LocalSoftwareKeyboardController dejaron de ser experimentales. LocalSoftwareKeyboardController ahora también es un CompositionLocal adecuado. (I4c364).
  • LookaheadLayout y LookaheadLayoutScope dejaron de estar disponibles para algunas versiones y ahora se quitaron. Las APIs de reemplazo son LookaheadScope que pueden funcionar con cualquier diseño. (I12ac3).
  • Se agregó SemanticsNodeInteraction.requestFocus como una forma más conveniente y detectable de solicitar el enfoque en las pruebas. (Ie8722).
  • Se agregaron APIs experimentales para registrar aserciones globales para usarlas en frameworks de prueba en el futuro. (I12d77).

Correcciones de errores

  • La primera invocación de la devolución de llamada update de AndroidView ahora se aplazará hasta que se adjunte la vista, en lugar de ejecutarse cuando se aplique la composición que presenta el AndroidView. Esto corrige un error por el que la devolución de llamada update no se invalidaba si un efecto cambiaba de inmediato un estado que leyía. (Ie9438, b/291094055).

Versión 1.6.0-alpha01

21 de junio de 2023

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

Nuevas funciones

  • Se admite el elemento anticipado en LazyList. Esto permite que LazyList en el pase anticipado omita cualquier animación (p. ej., animación de posición de elementos, AnimatedVisibility, etc.) y calcule el tamaño y la posición del elemento anticipado para todos los elementos secundarios. Después del pase anticipado, los elementos secundarios de LazyList podrían animarse independientemente de la realidad, como se ve en el pase anticipado.

Cambio de comportamiento: includeFontPadding ahora es falso de forma predeterminada en Compose

Ahora, includeFontPadding es falso de forma predeterminada (21d806) en Compose.

includeFontPadding es un atributo heredado que controla si se incluyen o no rellenos adicionales en la parte superior de la primera línea y la última línea del texto para adaptarse a los caracteres que se puedan extender por encima o por debajo de los modelos de referencia del texto.

Si actualizas esta versión de Compose, se modificará la forma en que se renderizan todos los textos en tu IU, ya que se quitará el padding adicional sobre la primera y la última línea de cada texto que muestres.

Según los requisitos de la IU y las métricas de fuentes que utilices, los cambios deberían ser mínimos. Sin embargo, puedes encontrar obstáculos como los siguientes: - Pruebas de capturas de pantalla rotas. Corrige la IU si es necesario y vuelve a generar las imágenes doradas. - El texto está ligeramente desalineado. Quita los rellenos negativos personalizados o agrega padding si es necesario.

Puedes habilitar includeFontPadding usando PlatformTextStyle para cada texto:

Text(
 text = myText,
 style = TextStyle(
   lineHeight = 2.5.em,
   platformStyle = PlatformTextStyle(
     includeFontPadding = true/false
   )
   /* … */
  )
)

Puedes habilitar includeFontPadding para todos tus textos configurando tus estilos de Material. Ten en cuenta que los nombres de los parámetros variarán entre M2 y M3.

val Typography = Typography(
   body1 = TextStyle(
       fontFamily =    /* … */,
       fontSize =    /* … */,
       platformStyle = PlatformTextStyle(
           includeFontPadding = false
       )
   /* … */
   )
)

MaterialTheme(
   typography = Typography,
   /* … */
)

Puedes obtener más información sobre Compose includeFontPadding en la documentación para desarrolladores y en esta entrada de blog.

Si experimentas problemas o errores relacionados con este cambio, envía un informe de error con la Herramienta de seguimiento de errores.

Cambios en la API

  • Se admite InputConnection#requestCursorUpdates. (I0c69b)
  • Se agregaron FocusRequester.saveFocusedChild y FocusRequester.restoreFocusedChild. (Ic557e, b/272302679, b/275157318)
  • Agrega el tipo ResourceResolutionException para unir los throwables que se arrojan cuando se intentan cargar elementos de mapas de bits con una descripción de la ruta de acceso del recurso que no se pudo cargar. (I19f44, b/230166331, b/278424788).
  • Accesibilidad optimizada para asignaciones de rendimiento y memoria. (Iede48).
  • Se agregaron propiedades y acciones semánticas para admitir la traducción de texto. (I4a6bc).
  • Nueva propiedad en IntrinsincMeasureScope y sus implementaciones (p.ej., MeasureScope) para indicar si el pase de medición actual es un pase anticipado. (I7a812).
  • Se actualizó la API de DrawScope para incorporar la capacidad de reorientar la renderización en un lienzo diferente con densidad/dirección de diseño y tamaño alternativos.
  • Se actualizó DrawContext para admitir la configuración de densidad y dirección del diseño, además de hacer que el lienzo sea configurable. (Ie1f9b, b/225408150).
  • Se agregó Paragraph#fillBoundingBoxes para calcular cuadros de límite de caracteres. (If30ee).
  • Se agregó un conjunto de MultiPreviews comunes (Ia5a27).

Correcciones de errores

  • Se agregó la interfaz de FocusTargetModifierNode que se puede usar para crear un FocusTarget personalizado. (I9790e).
  • Se cambió el nombre de los parámetros fallback* en el constructor TextMeasurer a default*. (I940a5).
  • Se cambió el nombre de SemanticsPropertyReceiver.performImeAction por onImeAction y el de SemanticsActions.PerformImeAction por OnImeAction (I8e841).
  • Se agregó la rueda para diferenciar un desplazamiento del mouse de un arrastre en un desplazamiento anidado (específicamente, en NestedScrollConnection). (Ie57e4).
  • Se agregó la API de asComposePaint para reemplazar toComposePaint, ya que el objeto que se muestra une la android.graphics.Paint original (I22b4c).
  • SemanticsProperties.imeAction dejó de estar disponible y reemplázalo por un parámetro nuevo para SemanticsActions.performImeAction. (I4a587).
  • Se agregó compatibilidad con la selección con mouse. La selección táctil se expandirá por palabra y se reducirá por carácter. (Ic0c6c, b/180639271).
  • Los métodos Paragraph que solían arrojar AssertionError para desplazamientos fuera de los límites ahora arrojan IllegalArgumentException como lo hace MultiParagraph. (I549d3, b/243338896).

Versión 1.5

Versión 1.5.4

18 de octubre de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.5.4. La versión 1.5.4 contiene estas confirmaciones.

Versión 1.5.3

4 de octubre de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.5.3. La versión 1.5.3 contiene estas confirmaciones.

Correcciones de errores

  • (b/301209788) En ocasiones, TextField aplicaba incorrectamente comandos anteriores cuando se enfocaba e ingresaba entradas coreanas, lo que provocaba la pérdida de caracteres.

Versión 1.5.2

27 de septiembre de 2023

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

Correcciones de errores

  • Se agregó una solución alternativa para las fallas cuando se accede a la API de Accessibility Desplazamiento desde el subproceso en segundo plano.
  • Se corrigieron los nodos no conectados que se agregaban al árbol semántico.

Versión 1.5.1

6 de septiembre de 2023

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

Correcciones de errores

  • Se corrigieron los campos de texto que muestran el teclado y se pueden editar cuando readOnly es verdadero También se corrigió el teclado que no se mostraba cuando readOnly se cambiaba de verdadero a falso mientras estaba enfocado (I34a19, b/246909589).

Versión 1.5.0

9 de agosto de 2023

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

Versión 1.5.0-rc01

26 de julio de 2023

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

Correcciones de errores

  • Se corrigió una falla que se producía cuando se usaba SubcomposeLayout dentro de movableContentOf().

Versión 1.5.0-beta03

28 de junio de 2023

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

Correcciones de errores

  • Se agregó la interfaz de FocusTargetModifierNode, que se puede usar para crear un FocusTarget personalizado. (Ifb1d6).
  • Se corrigió un problema con los elementos componibles Dialog y Popup que podían hacer que la ventana secundaria no cambiara el tamaño como se esperaba cuando usePlatformDefaultWidth=true. (I112ee).

Versión 1.5.0-beta02

7 de junio de 2023

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

Cambios en la API

  • Se agregó la API de asComposePaint para habilitar el consumo de una instancia de android.graphics.Paint que se usará en Compose.

Correcciones de errores

  • Se agregó la API de asComposePaint para reemplazar toComposePaint, ya que el objeto que se muestra une la android.graphics.Paint original (I22b4c).

Versión 1.5.0-beta01

24 de mayo de 2023

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

Cambios en la API

  • Se quitaron las asignaciones de la recomposición, las animaciones de color y AndroidComposeView. (Ib2bfa)
  • Se agregó la diversión auxiliar CacheDrawModifierNode() para permitir la delegación. (Icf8f9)
  • Presentamos la propiedad isLookingAhead, a la que se puede acceder desde MeasureScope, para observar resultados anticipados e influir en el pase principal si lo deseas. (Ibf4c3).
  • Nueva propiedad semántica traversalIndex, un número de punto flotante que se usa para reordenar los nodos en el recorrido TalkBack (los valores más bajos vienen antes). (I9a81b, b/186443263).
  • Se cambió el nombre de la propiedad semántica isContainer a isTraversalGroup. (I121f6)
  • ColorProducer ahora tiene un operator fun invoke en lugar de produce. (I4a9a2)
  • Se agregó la API de transformación Path para aplicar transformaciones de traducción, ajuste de escala y rotación a los objetos de ruta de acceso. (I23434, b/233772232).
  • El método de ColorProducer se llama produce. (I78bde).
  • Se cambió el nombre de toFrameworkColorSpace por toAndroidColorSpace. (I4f547)
  • Se cambió el nombre de ColorLambda por ColorProducer. (I73b1a).
  • Incorporar las APIs para realizar conversiones entre tipos de espacio de color de Android y Compose (Ie7db4, b/279979665).
  • Se agregó un parámetro de color a BasicText para permitir animar o establecer el color del texto de manera eficiente. (Iffd88, b/246961787).
  • Se cambió el nombre de TextRange.constrain a TextRange.coerceIn. (I31be2).
  • Se agregó TextStyle.merge(...) optimizado con la lista completa de parámetros. (Iad234, b/246961787).
  • Se estabilizaron muchas APIs de Text que incluyen Brush, DrawStyle, TextMotion, DrawScope.drawText, Paragraph.paint(Brush) y MultiParagraph.paint(Brush). (I2f740, b/261581564, b/261581931, b/261561245).
  • PlatformTextStyle.includeFontPadding no está obsoleto. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo. (I98e96, b/277703184)
  • Se agregó el método público TextRange.constrain. (I97912).
  • Los objetos UrlAnnotation en AnnotatedString ahora se pueden abrir a través de servicios de accesibilidad como TalkBack. (If4d82, b/253292081).
  • Se agregó la acción semántica InsertTextAtCursor para los campos de texto. (I11ed5).
  • El constructor LineHeightStyle.Alignment(topRatio) asciende a una API estable. (I79c32, b/261565383).
  • TextMeasurer y las APIs relacionadas ya no son experimentales. (I74647, b/261581753).
  • Se agregó la acción semántica PerformImeAction para invocar la acción del IME en los nodos del editor de texto. (Ic606f, b/269633506).
  • Las APIs de PlatformTextInput ya no son experimentales para Android. (I668eb).
  • Se cambió el nombre del parámetro de valor de Enum.valueOf. (Ia9b89)
  • Se arrojaron más excepciones de enum valueOf. (I818fe)
  • Se agregó una nueva API de PlatformTextInputAdapter de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4).
  • Se agregó el parámetro BlendMode a los métodos DrawScope.drawText, Paragraph.paint y MultiParagraph.paint para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508).
  • Se cambió el nombre de Font.MaximumAsyncTimeout por Font.MaximumAsyncTimeoutMillis. Solo cambiar el nombre. (I07af5).
  • Se actualizaron los valores de DPI de los dispositivos de referencia @Preview (Id6151, b/254528382).
  • Agrega los parámetros brush y alpha a BasicText para permitir animar o configurar de manera eficiente el pincel de texto.
  • Se definen los tipos de lambda sin cuadros para Float, Double, Long, Int, Short en :ui:ui-unit. (I6f18d, b/246961787)

Correcciones de errores

  • Se quitaron varias asignaciones del seguimiento de velocidad del puntero. (I26bae)
  • Se redujeron las asignaciones en la administración de entradas de diseño y puntero. (I5333a)
  • Optimiza el uso de memoria vectorial y la renderización de primeros fotogramas. (I2f3c6)
  • Se quitaron las asignaciones cuando se dibujaban líneas y puntos con Canvas. (I9f535)
  • Se agregaron documentos para AndroidFont.fontVariationSettings (I7d9e2).

Contribución externa

  • Se mejoró el rendimiento y se reducen las asignaciones en las APIs de Vector. (I906cb)

Versión 1.5.0-alpha04

10 de mayo de 2023

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

Nuevas funciones

  • Modifier.Node Mejoras en la delegación Se agregó una capacidad mejorada para delegar a otras instancias de Modifier.Node desde un DelegatingNode. Esto se puede hacer con las APIs de delegate y undelegate. Antes de este cambio, cada API del nodo delegante debía delegarse explícitamente al nodo delegado. Después de este cambio, las interfaces del nodo se delegarán de forma implícita, a menos que DelegatingNode las anule de forma explícita. (67352bc).

Cambios en la API

  • Presenta NestedScrollModifierNode, un objeto NestedScroll Modifier.Node al que se puede delegar. (I69513).
  • Se agregaron los parámetros onReset y onRelease al elemento AndroidViewBinding componible, lo que duplica el elemento AndroidView y habilita la compatibilidad con la reutilización de objetos View con ViewBinding. (I00b1e, b/276802519).
  • Se actualizó la API de Compose Path para admitir operaciones de retroceso para admitir casos de uso de manipulación frecuente de rutas con una reutilización más rápida. (I7b797).
  • Se agregó TextStyle.merge(...) optimizado con la lista completa de parámetros. (Iad234, b/246961787).
  • Se estabilizaron muchas APIs de Text que incluyen Brush, DrawStyle, TextMotion, DrawScope.drawText, Paragraph.paint(Brush) y MultiParagraph.paint(Brush). (I2f740, b/261581564, b/261581931, b/261561245).
  • PlatformTextStyle.includeFontPadding no está obsoleto. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo. (I98e96, b/277703184)

Correcciones de errores

  • Se corrigió la regresión en la que el teclado no se mostraba para los campos de texto dentro de diálogos no creados por el elemento componible Dialog. (I82551, b/262140644).

Versión 1.5.0-alpha03

19 de abril de 2023

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

Nuevas funciones

  • Nuevo comportamiento predeterminado para SubcomposeLayout en LookaheadScope: Los SubcomposeLayouts que no tienen ranuras condicionales (p. ej., TabRow, Scaffold, BoxWithConstraints, etc.) ahora funcionan bien con las animaciones anticipadas.

Cambios en la API

  • El nuevo intermediateMeasurePolicy predeterminado que reutiliza la política de medición del pase anticipado permite que los subtipos de SubcomposeLayout sin ranuras condicionales, como Scaffold, TabRow y BoxWithConstraints, funcionen con el parámetro anticipado de forma predeterminada. (Id84c8).
  • El recompositor creado para una ventana de Android ahora solo bloqueará las llamadas a withFrameNanos en lugar de toda la composición cuando reciba una notificación ON_STOP. Esto significa que las ventanas asociadas con las actividades detenidas se seguirán recomponiendo para los cambios en los datos, pero se bloquearán las animaciones o cualquier otro llamador de withFrameNanos. (Id9e7f, b/240975572).
  • Cambia motionEventSpy a estable. (Ic5ec4, b/261560988).
  • Se agregó el método público TextRange.constrain. (I97912).
  • PlatformTextStyle.includeFontPadding ya no está obsoleto para alentar a los desarrolladores a usar esta API de compatibilidad para cambiar y probar el parámetro de configuración includeFontPadding como falso. (I98e96, b/277703184).

Versión 1.5.0-alpha02

5 de abril de 2023

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

Cambios en la API

  • Se agregó la nueva API de SubcomposeLayout, que toma una política de medición intermedia adicional para controlar la lógica de medición y diseño durante las animaciones basadas en la visualización anticipada. (I017d3).
  • PointerInput ahora es diferida y usa Modifier.Node para mejorar el rendimiento (obtén más información sobre los cambios menores en el comportamiento). (15dab9).
  • Se cambiaron las APIs experimentales a estables con eventos de tecla (I9c7d8, b/261566839, b/261567368).
  • Se cambiaron las APIs experimentales a estables en PointerInputChange. (I1b543, b/261560988, b/261565762, b/261565749).
  • Agrega una forma de crear una instancia de SuspendingPointerInputModifierNode para implementaciones de Modifier.Node más complejas. (Ic4933).
  • Los objetos UrlAnnotation en AnnotatedString ahora se pueden abrir a través de servicios de accesibilidad como TalkBack. (If4d82, b/253292081).
  • Se agregó una API para interceptar teclas de hardware antes de que se envíen al teclado en pantalla (I4f4c6, b/186800395).
  • Se agregó la acción semántica InsertTextAtCursor para los campos de texto. (I11ed5).
  • Las acciones de prueba relacionadas con el texto (p.ej., performTextInput) ahora solicitarán el enfoque directamente mediante la acción semántica en lugar de hacer clic en el campo. (I6ed05).

Correcciones de errores

  • Las acciones de prueba de texto ahora requieren que se habiliten los campos de texto. (Iab328).

Versión 1.5.0-alpha01

22 de marzo de 2023

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

Cambios en la API

  • Modifier.intermediateLayout ahora no requiere un LookaheadScope explícito. El bloque de medición en internalLayout tiene el objeto InterMeasurementScope como receptor, que proporciona los objetos CoroutineScope, LookaheadScope y MeasureScope convenientes.(Ibe2e5)
  • Se reemplazó LookaheadLayout por LookaheadScope, que ya no es un diseño. Esto permite que la MeasurePolicy superior controle directamente el contenido de chid en LookaheadScope. (Ibe2e5).
  • Agrega Modifier.Node#coroutineScope para permitir que Modifier.Nodes inicie corrutinas. (I76ef9).
  • Permite que Modifier.Nodes lea CompositionLocals implementando la interfaz CompositionLocalConsumerModifierNode. (Ib44df).
  • Propagación de la clase @Required a la propiedad. (I882d1).

Versión 1.4

Versión 1.4.3

3 de mayo de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.4.3. La versión 1.4.3 contiene estas confirmaciones.

Correcciones de errores

  • Se solucionó un problema por el que AndroidView no se mostraba correctamente cuando se usaba con ciertos modificadores (I4dc77, b/274797771).
  • Se corrigió un error en 2D Focus Search que afectaba los menús de DropDown (b/276811828).
  • Se corrigió un error en las propiedades de entrada/salida del enfoque personalizado que solo ejecutaba el bloque de entrada/salida la primera vez que se invocaba la lambda (b/277234245).
  • Se corrigió una regresión en el sistema de enfoque que causaba una falla durante la lectura de focusProperties. (b/271324781, b/274897776).

Versión 1.4.2

19 de abril de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.4.2. La versión 1.4.2 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema por el que AndroidView no reutilizaba correctamente sus modificadores, lo que podía provocar fallas y comportamientos inesperados. (Ib67ee, b/275919849).
  • Se corrigió la regresión en la que el teclado no se mostraba para los campos de texto dentro de diálogos no creados por el elemento componible Dialog (I82551, b/262140644).

Versión 1.4.1

5 de abril de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.4.1. La versión 1.4.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un problema con ParentDataModifier que no afectaba a AndroidView (b/274797771).

Versión 1.4.0

22 de marzo de 2023

Lanzamiento de androidx.compose.ui:ui-*:1.4.0. La versión 1.4.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.3.0

  • Se agregó una nueva API de PinnableContainer que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo, Modifier.focusable() usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010).
  • El sistema de enfoque se reescribe con las nuevas APIs experimentales de Modifier.Node (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589).
  • Se agregó en la propiedad semántica IsContainer en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379).
  • Se agregó un nuevo rol de accesibilidad DropdownList. Se puede usar para replicar el comportamiento de TalkBack cuando se enfoca android.widget.Spinner. (I177e5, b/236159001).
  • Ahora puedes usar PlatformTextStyle(emojiSupportMatch) para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806).
  • Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de waitForIdle). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277).
  • Se agregó TextMotion experimental a TextStyle para definir texto como Static(default) o animado. Usa TextMotion.Animated si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).

Versión 1.4.0-rc01

8 de marzo de 2023

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

Cambios en la API

  • Se agregó una sobrecarga de la función de componibilidad AndroidView, que acepta el parámetro onReset. Permite volver a usar las instancias de View cuando su nodo en la composición se descarta y se vuelve a usar de una manera compatible. Esto es especialmente útil para LazyRows y LazyColumns de Views. (I3f10d, b/230099236).
  • Se agregó una nueva API de PlatformTextInputAdapter de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4).

Correcciones de errores

  • La acción semántica SetText 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.ui:ui-*:1.4.0-beta02. La versión 1.4.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se quitó la API de modifierElementOf(). En su lugar, extiende desde ModifierNodeElement directamente. (I2256b).
  • 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).

Correcciones de errores

  • Se mejoró el algoritmo de orden de enfoque de accesibilidad; por ejemplo, las barras superiores y inferiores se leen al principio y al último, respectivamente. (74e9c5)

Versión 1.4.0-beta01

8 de febrero de 2023

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

Cambios en la API

  • Se cambió el nombre de PinnableContainer.PinnedHandle.unpin() por release() (I4667a).
  • Se agregaron waitUntilNodeCount, waitUntilAtLeastOneExists, waitUntilExactlyOneExists y waitUntilDoesNotExist como APIs experimentales a ComposeTestRule, que extiende la API de waitUntil para aceptar cualquier comparador y cualquier recuento de nodos. Consulta ComposeTestRule para obtener más documentación (Ifa1b9, b/226934294).
  • Se cambió el nombre de Font.MaximumAsyncTimeout a Font.MaximumAsyncTimeoutMillis (I07af5).
  • Se quitó GoogleFont.Provider.AllFontsListUri y se vinculó a él en ktdoc. (I16f29)

Correcciones de errores

  • Se agregaron documentos para AndroidFont.fontVariationSettings (I7d9e2).

Versión 1.4.0-alpha05

25 de enero de 2023

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

Cambios en la API

  • Se introdujeron nuevas sobrecargas experimentales para la función runComposeUiTest y las 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).
  • Se agregó una nueva API para realizar el seguimiento de 1 velocidad dimensional (If5a82).
  • FocusRequester ahora está marcado como @Stable (I580ee).
  • Se quitó una anotación experimental del constructor DialogProperties que toma un parámetro usePlatformDefaultWidth (Ic4048).
  • Se agregó la función a la posición del cálculo y la tangente a distancia en una ruta, con PathMeasure.getPosition() y PathMeasure.getTangent() (I3b47c).
  • Se quitó un método set público expuesto de forma accidental en PlatformParagraphStyle (I07f47).
  • Se agregaron más funciones de tipo/nulabilidad de funciones ocultas intercaladas y obsoletas (I24f91).
  • Se agregó AnnotatedString.hasStringAnnotations para consultar anotaciones con cero asignaciones (I94dfe, b/246960758).
  • Se agregó una nueva sobrecarga para la función TextMeasurer.measure que toma una String como texto (I47b2d, b/242705342).
  • Las APIs de LineBreak y Hyphens en TextStyle se cambiaron a la versión estable (Ic1e1d).

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

Se lanzó androidx.compose.ui:ui-*:1.4.0-alpha04. La versión 1.4.0-alpha04 contiene estas confirmaciones.

Nuevas funciones

  • Se agregó una nueva API de PinnableContainer que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo, Modifier.focusable() usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010).
  • El sistema de enfoque se reescribe con las nuevas APIs experimentales de Modifier.Node (I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589).
  • Se agregó en la propiedad semántica IsContainer en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379).
  • Se agregó el nuevo rol de accesibilidad DropdownList. Se puede usar para replicar el comportamiento de TalkBack's cuando se enfoca android.widget.Spinner (I177e5, b/236159001).
  • Ahora puedes usar PlatformTextStyle(emojiSupportMatch) para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806).
  • Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de waitForIdle). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277).
  • Se agregó TextMotion experimental a TextStyle para definir texto como Static(default) o animado. Usa TextMotion.Animated si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).

Cambios en la API

  • Se reemplazó el argumento maxSize: IntSize 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).
  • Se quitó el constructor de fuentes experimentales obsoleto (I8a724, b/261435386).
  • La clase de datos de herramientas de IU Group ahora tiene un campo, isInline, que indica si el grupo es para una llamada a una función de componibilidad intercalada. Si isInline es true, la llamada se realiza a una función de componibilidad intercalada. Sin embargo, el valor puede ser falso para llamadas a funciones de componibilidad intercaladas que provienen de módulos que se compilan con una versión del complemento del compilador de Compose que no genera la información de la función intercalada (Idb846).
  • Varias APIs que antes eran experimentales pasaron a niveles estables.
  • La API de Rotary Scroll Event ahora es estable (I42ad3, b/261561229).
  • La API de FontVariation ahora es estable (I8779f, b/241016309).
  • Todos los constructores Font() ahora son APIs estables (I5948b, b/261435386).
  • DeviceFontFamilyName ahora es estable (I8b640, b/261435386).
  • El constructor de AndroidFont con variationSettings ahora es una API estable y se puede usar para crear nuevos tipos de descriptores de fuente (I5adcc, b/261565807).
  • La API de createFontFamilyResolver ahora es estable. Se puede usar para detectar excepciones no detectadas durante la carga asíncrona de fuentes (Ibb481, b/261435386).
  • La API de Font.loadingStrategy ahora es estable (I5937c, b/261435386).
  • La API de GoogleFont ahora es estable (Ic90b0, b/261435386).
  • TextUnit(float, TextUnitType) ahora es una API estable (I90c84, b/261561612).
  • pluralStringResource ahora es una API estable (I09849, b/261439703).

Versión 1.4.0-alpha03

7 de diciembre de 2022

Se lanzó androidx.compose.ui:ui-*:1.4.0-alpha03. La versión 1.4.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se quitó ExperimentalComposeUiApi de PointerIcon (I23af8).
  • Se introdujeron las acciones de accesibilidad de la página: PageUp, PageDown, PageLeft, PageRight. Ten en cuenta que solo están disponibles a partir de la API 29 (Ida4ab).
  • Se actualizó la vista del parámetro rememberNestedScrollConnection de la vista raíz a la vista de host (Ia5200).
  • Se agregó una API de modificador para consultar información de desplazamiento de principales (I2ba9d, b/203141462).
  • Se usa en Clickable para retrasar correctamente las interacciones de presionar, cuando los gestos pueden convertirse en eventos de desplazamiento.
  • Se corrigió un error donde Clickables no retrasaba correctamente las ondas, cuando se usa dentro de 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 cambió el nombre de CompositingStrategy.Always por Offscreen para indicar que graphicsLayer siempre se renderizará en un búfer intermedio (I47dc1).
  • Se estabilizó la sobrecarga de diseño con varias ranuras de contenido (I10566, b/248294649).
  • Se agregaron las nuevas APIs experimentales PerfettoTrace.record {} y PerfettoTraceRule para capturar los registros de Perfetto (también conocidos como Registros del sistema) como parte de una prueba, para inspeccionar el comportamiento y el rendimiento de la misma (I3ba16).
  • En las pruebas de IU que usan una regla de Compose, no se despacharán las continuaciones reanudadas durante las devoluciones de llamada de withFrameNanos hasta que todas las devoluciones de llamada de marco terminen de ejecutarse. Esto coincide con el comportamiento de Compose cuando se ejecuta normalmente. Sin embargo, las pruebas que dependen del comportamiento anterior pueden fallar. Esto solo debería afectar al código que llama 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 agregó EmojiCompat a Compose (Ibf6f9, b/139326806).
  • Se agregó un nuevo parámetro de fondo de pantalla a @Preview para admitir colores dinámicos (I9f512).

Correcciones de errores

  • Las notificaciones de aplicación de instantáneas ahora se envían después de que Recomposer termina de aplicar los cambios (Iad6c0, b/222093277).
  • Se introdujeron cambios en captureToImage para permitir la captura de pantalla multiventana. Esto es útil para las pruebas de captura de pantalla que usan ventanas emergentes de Compose (I169c5).

Actualizaciones de dependencias

  • La IU de Compose y Compose Material ahora dependen de Lifecycle 2.5.1. (I05ab0, b/258038814).

Versión 1.4.0-alpha02

9 de noviembre de 2022

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

Cambios en la API

  • Se actualizó GraphicsLayerScope para exponer el tamaño actual de graphicsLayer. Esto es útil para calcular las transformaciones graphicsLayer como una función del tamaño componible. (If8c43,b/181387080)
  • Se agregó CompositingStrategy para determinar cuándo aprovechar una capa de composición fuera de la pantalla para procesar contenido graphicsLayer. Mantiene automáticamente el comportamiento predeterminado que aprovecha internamente una capa si se aplica alfa o RenderEffect/Overscroll Siempre introducirá un búfer fuera de pantalla, en el que ModulateAlpha evitará aprovechar un búfer fuera de pantalla y, en su lugar, modulará cada una de las instrucciones de dibujo grabadas dentro de graphicsLayer. El uso de ModulateAlpha seguirá aprovechando un búfer fuera de la pantalla para usos de RenderEffect/Overscroll. (I25e82, b/256382834)
  • Se agregó invalidateSubtree() a Modifier.Node para permitir la invalidación de jerarquías completas para el diseño y el dibujo. (I4bd90)
  • Se asciende rememberNestedScrollInteropConnection a estable. Se introdujo la capacidad de pasar una vista raíz a rememberNestedScrollInteropConnection. Esto puede ayudar a que la vista personalizada reaccione mejor a las restricciones de desplazamiento, especialmente en las vistas no estándar (p. ej., ModalBottomSheetDialog). (I9e107)
  • Se agregó la interfaz de ObserverNode que se pueden usar las implementaciones de Modifier.Node que deben notificarse cuando haya cambiado un valor que hayan leído anteriormente. (I5728b, b/247716483)
  • Se agregó un nuevo constructor a Paint que acepta un android.graphics.Paint nativo. También se agregó una función de extensión toComposePaint() que convierte un objeto Paint nativo existente en Compose Paint. (Ica91b)
  • Se agregó un FontFamily.Resolver.resolveAsTypeface nuevo para usar en Android. (I8950b)
  • Se agregó ToolingState para permitir que las herramientas cambien los estados internos de Compose (Ie6614).
  • Se refactorizaron las herramientas para tener una mejor compatibilidad con las nuevas animaciones agregadas. (I8677b)
  • Se agregó el parámetro minLines al texto de Material y Material 3, TextField y OutlinedTextField, que permiten establecer la altura mínima del componente en términos de cantidad de líneas (I4af1d).

Versión 1.4.0-alpha01

24 de octubre de 2022

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

Cambios en la API

  • Se agregó un nuevo método, awaitEachGesture(), para los detectores de gestos. Funciona de manera similar 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 dio de baja el reciclaje de objetos de accesibilidad en AndroidX. Detectamos que los cambios en el rendimiento son insignificantes, incluso en las versiones compatibles más antiguas. (I0a961)
  • Se agregó DrawStyle como atributo experimental a TextStyle y SpanStyle para habilitar el dibujo de texto con contorno. (If24b8, b/155421273)
  • AnnotatedString.Builder ahora implementa kotlin.text.Appendable. (I1a061, b/231030444)
  • AnnotatedString.Builder ahora tiene un método append(AnnotatedString, start: Int, end: Int) para agregar una substring de un AnnotatedString y los estilos de intersección.
  • Se agregó el parámetro DrawStyle a las funciones de pintura Paragraph y MultiParagraph que habilita el dibujo de texto con contorno. (Ic8102, b/155421273)

Contribución externa

  • Gracias por vighnesh, por agregar dispositivos de TV a las vistas previas (Ie15cd).

Versión 1.3

Versión 1.3.3

11 de enero de 2023

Se lanzó androidx.compose.ui:ui-*:1.3.3. La versión 1.3.3 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió una falla que a veces se producía en Android 9 cuando Activity guardaba el estado de Compose View (I0b755, b/260322832).

Versión 1.3.2

7 de diciembre de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.3.2. La versión 1.3.2 contiene estas confirmaciones.

Correcciones de errores

  • Se actualizó para usar Profobuf 3.21.8, lo que evita una alerta de seguridad en protobuf-javalite:3.19.4 (CVE-2022-3171) (b/255545055).

Versión 1.3.1

9 de noviembre de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.3.1. La versión 1.3.1 contiene estas confirmaciones.

Versión 1.3.0

24 de octubre de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.3.0. La versión 1.3.0 contiene estas confirmaciones.

Cambios importantes desde 1.2.0

  • Nuevo paquete de API experimental LookaheadLayout (que habilita comportamientos de animación que antes eran imposibles)
  • Nuevo paquete de API experimental Modifier.Node (alternativa de mayor rendimiento en comparación con Modifier.composed)
  • Compatibilidad con las inserciones de ventana mejorada
  • Enfoque en la compatibilidad con pads direccionales y teclados de hardware en LazyLists
  • La elevación máxima admitida en diálogos y ventanas emergentes se redujo a 8 dp (cambio rotundo en el comportamiento para algunos sistemas de diseño personalizados; lógica en las notas de la versión beta01)
  • Muchas mejoras menores y continuas en la API
  • Varias correcciones de errores y mejoras de rendimiento

Versión 1.3.0-rc01

5 de octubre de 2022

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

Cambios en la API

  • Se agregaron nuevos guiones experimentales de API para admitir la separación silábica automática en Text (Iaa869).

Correcciones de errores

  • Las fuentes DeviceFontFamilyName no configurarán wght ni hará variaciones en ital de los parámetros predeterminados, sino que usarán la configuración de la plataforma para Typeface cargados (Ia7a6d, b/246989332).
  • Se corrigió la fuga de memoria de LazyColumn en la que no se llamaba a onModifierLocalsUpdated con el valor predeterminado cuando se reutilizaban los modificadores (b/230168389).

Versión 1.3.0-beta03

21 de septiembre de 2022

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

Cambios en la API

  • Se agregaron opciones para personalizar el salto de línea en el texto (I86907).
  • Se cambió el argumento size:IntSize con constraints: Constraints en el método TextMeasurer.measure para admitir restricciones de ancho mínimo (I37530, b/242707525).

Correcciones de errores

  • La API de BackHandler de AndroidX Activity ahora funciona dentro de un elemento Dialog componible (I35342).

Versión 1.3.0-beta02

7 de septiembre de 2022

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

Cambios en la API

  • Se agregó una sobrecarga experimental para Layout que acepta una lista de varias lambdas de contenido componible. Esto permite vincular mediciones en diferentes lambdas de contenido (Ic1b4e).

Cambios en las APIs experimentales de Focus:

  • FocusDirection.In y FocusDirection.Out dejaron de estar disponibles y se reemplazaron por FocusDirection.Enter y FocusDirection.Exit (Ia4262, b/183746982).
  • Se agregaron dos nuevas propiedades de enfoque de entrada y salida para especificar un comportamiento personalizado para FocusManager.moveFocus(Enter) y FocusManager.moveFocus(Exit) (I5f3f9, b/183746982).
  • Ahora puedes usar FocusRequester.Cancel para cancelar un movimiento de enfoque. FocusRequester.Cancel se puede usar en cualquiera de las siguientes propiedades de enfoque: arriba, abajo, izquierda, derecha, siguiente, anterior, inicio, finalización, entrada y salida (Ib300f).

Versión 1.3.0-beta01

24 de agosto de 2022

Se lanzó androidx.compose.ui:ui-*:1.3.0-beta01. La versión 1.3.0-beta01 contiene estas confirmaciones.

Refactorización del nodo modificador

Se refactorizó en gran medida la capa que controla las instancias de Modifier/Modifier.Element y coordina su comportamiento en LayoutNodes. Tal como está, esta fue una refactorización que no afectó a la API pública de ninguno de los numerosos modificadores de Compose y se puede considerar un cambio solo de implementación. A pesar de eso, este es un cambio importante por varios motivos (Ie4313).

Resumen de cambios

Las APIs experimentales de Modifier.Node agregadas proporcionan una abstracción que permite mantener el estado en una instancia que se conservará con el ciclo de vida del nodo de diseño y se asignará por nodo de diseño y por uso del Modifier.Element correspondiente que lo produjo.

En términos generales, esta abstracción proporciona un mecanismo alternativo para producir modificadores con estado sin depender de la mecánica de la API de Modifier.composed.

Riesgo

Este cambio es estrictamente binario y compatible con versiones anteriores, y está pensado para ser retrocompatible en términos de comportamiento observable tanto como sea práctico y razonable. Dicho esto, hay pocos subsistemas de Compose que esta refactorización no tocó y es probable que el comportamiento haya cambiado de maneras que no fueron cubiertas por nuestras pruebas y que aún no se han encontrado ni corregido.

Actualiza a esta versión con precaución. Si crees que esto haya producido fallas en tu caso, avísanos.

APIs experimentales

Se agregaron varias APIs experimentales que se relacionan con el concepto nuevo de "nodo modificador". Los Modifier.Node se crean como resultado de lo siguiente:

  • fun modifierElementOf(…): Modifier
  • abstract class ModifierNodeElement
  • abstract class Modifier.Node
  • abstract class DelegatingNode
  • interface LayoutModifierNode
  • interface DrawModifierNode
  • interface SemanticsNode
  • interface PointerInputNode
  • interface ModifierLocalNode
  • interface ParentDataModifierNode
  • interface LayoutAwareModifierNode
  • interface GlobalPositionAwareModifierNode
  • interface IntermediateLayoutModifierNode

Cambio rotundo de comportamiento

La elevación máxima admitida en los diálogos y las ventanas emergentes se redujo a 8 dp.

La elevación máxima admitida para los diálogos y las ventanas emergentes de Compose se redujo de 30 dp a 8 dp. Este cambio afecta a los diálogos personalizados y a las ventanas emergentes de IU y Material. Este cambio se realiza para mitigar un error de accesibilidad en las versiones de Android anteriores a S y garantizar que los servicios de accesibilidad de esas ventanas puedan interactuar con el contenido dentro del diálogo o la ventana emergente.

Este cambio solo te afectará si creas un diálogo personalizado o una implementación de ventana emergente con una elevación establecida en niveles superiores a 8 dp. Puedes bajar la elevación del diálogo o la ventana emergente. Si quieres rechazar este nuevo comportamiento, bifurca tu propio diálogo o ventana emergente con la configuración de elevación deseada. Esto no se recomienda, ya que la accesibilidad podría verse afectada negativamente y es responsabilidad del desarrollador asegurarse de que la parte inferior del diálogo o la ventana emergente sea interactiva y legible con los servicios de accesibilidad.

Cambios en la API

  • Se solucionó un problema por el que painterResource no se actualizaba con los cambios de configuración (I58e73, b/228862715).
  • rememberTextMeasurer ya no toma los parámetros FontFamily.Resolver, Density ni LayoutDirection. Usa el constructor TextMeasurer a fin de proporcionar valores personalizados para estos parámetros (Ia1da3).
  • Se agregó la propiedad DialogProperties.decorFitsSystemWindows para permitir que Dialogs sea compatible con WindowInsets (I57742, b/229378542).
  • Se revirtieron los constructores de fuente al archivo Kotlin original para conservar la compatibilidad binaria. Sin cambios desde la última versión estable (Ieb2f3).
  • Se quitó el operador innecesario de varias definiciones de igualdad; esto no tiene efecto (I6c309).
  • FontVariation.Setting es una interfaz sellada para permitir futuras APIs de restricciones (I11021, b/143703328).
  • Se agregó CompositionGroup.findParameters a SlotTree.kt. Esto permite que las herramientas recuperen parámetros para un CompositionGroup sin tener que analizar toda la tabla de ranuras (I124fe).

Versión 1.3.0-alpha03

10 de agosto de 2022

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

Cambios en la API

  • LayoutCoordinates.findRootCoordinates() ahora es público (I7fa37, b/204723384).
  • Se agregó una API experimental para obtener LayoutCoordinates en PlacementScope. Esto permite a los desarrolladores saber dónde se encuentra el diseño actual para colocar los elementos secundarios en relación con su posición (I5482b, b/238632578).
  • Se agregó LayoutCoordinates.transformFrom para obtener la transformación de Matrix de una LayoutCoordinates a otra (Ic5ab1, b/238632578).
  • SemanticsModifier.id dejó de estar disponible y, en su lugar, se movió el ID de semántica a LayoutInfo.semanticsId (Iac808, b/203559524).
  • Las fuentes de recursos ahora admiten la configuración de variaciones de fuentes (nivel de API 26 o versiones posteriores) (I900dd, b/143703328).
  • Compatibilidad con fuentes variables en DeviceFontFamilyNameFont (Ic1279, b/143703328).
  • Los constructores de fuentes ahora aceptan una lista de FontVariation.Setting para configurar fuentes variables en dispositivos O+ (I11a9d, b/143703328).
  • Se agregó la API de FontVariation para definir y usar fuentes variables (I3c40c, b/143703328).
  • El constructor LineHeightStyle.Alignment ahora es público (experimental) (I4bbbe, b/235876330).
  • Ahora, el párrafo es esperado|real y se define para Android y computadoras de escritorio (Id387e, b/239962983).
  • Ahora, el párrafo de interfaz es una interfaz sellada de Paragarph. No existe un caso de uso para la creación de subclases de párrafos, y te recomendamos que te comuniques con nosotros si este cambio te afecta (If5247, b/239962983).
  • Se quitó la anotación experimental de PlatformTextStyle y LineHeightStyle (I64bef).
  • 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).
  • Se agregó una API nueva para los tipos de animación existentes (I26179).

Correcciones de errores

  • Se agregó @RequiresPermission a las APIs que requieren que se otorgue el permiso POST_NOTIFICATIONS en SDK 33 y versiones posteriores (Ie542e, b/238790278).

Versión 1.3.0-alpha02

27 de julio de 2022

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

Cambios en la API

  • Se agregó una nueva propiedad PointerInputChange#pressure para recuperar la presión (I45a5e, b/205164819).
  • Se agregó rememberTextMeasurer para crear y recordar instancias de TextMeasurer con facilidad en la composición (I8d66e).
  • Rect, RoundRect y MutableRect ahora admiten la sintaxis in de Kotlin para llamar a la función contains (Ie42b0, b/238642990).
  • Se quitaron las funciones innecesarias de KeyInjectionScope, ya que se pueden implementar fácilmente con partes más simples de la API. Las funciones que se quitaron incluyen pressKeys, keysDown y keysUp (I81d77).
  • Se refactorizaron nombres de constantes y parámetros de KeyInjectionScope para incluir el sufijo "Millis", donde las unidades de esos parámetros y constantes son milisegundos (Iabef5).
  • Se agregó el método toStringForLog() a EditCommand para ayudar a solucionar problemas de edición de texto (I53354, b/228862731).
  • 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).
  • Presentamos una nueva API experimental llamada TextMeasurer que habilita el cálculo de diseño de texto arbitrario que crea resultados idénticos a BasicText, independientemente del entorno de ejecución de Compose (I17101).
  • Se agregó mapTree a SlotTree.kt Esto permite que las herramientas inspeccionen el SlotTree sin hacer primero una copia en la memoria, como lo hace asTree. Para el Inspector de diseño, esto mejora el rendimiento en aproximadamente un factor 10 (I5e113).
  • Se cambió la vista previa de Compose para que se almacene en archivos de salida binarios para permitir que los desarrolladores escriban y reutilicen anotaciones MultiPreview de bibliotecas (I85699, b/233511976).

Correcciones de errores

  • Cuando se agreguen eventos InputEventChange 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).
  • Se corrigió la NPE generada por AnnotatedString.toUpperCase cuando hay anotaciones (I0aca2, b/210899140).

Versión 1.3.0-alpha01

29 de junio de 2022

Se lanzó androidx.compose.ui:ui-*:1.3.0-alpha01. La versión 1.3.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Nuevo objeto LookaheadLayout que admite un pase anticipado antes del diseño o la medición real. Esto permite realizar un cálculo previo del diseño cuando cambia y, al mismo tiempo, permite que la medición o el diseño posvisualización use el tamaño o la posición previamente calculados para animar el tamaño y las posiciones hacia el objetivo. SubcomposeLayouts todavía no son compatibles, pero lo serán en una próxima versión (I477f5).
  • Se agregó el parámetro alfa opcional al tipo de pincel de TextStyle y SpanStyle para modificar la opacidad de todo el elemento Text (Ic2fac, b/234117635).
  • 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).
  • Se migró la funcionalidad de la utilidad al entorno de ejecución (I4f729).

Correcciones de errores

Contribución externa

  • Se agregó una nueva API de WindowInfo.keyboardModifiers para observar su estado dentro de funciones de componibilidad o a través de snapshotFlow (Icdb8a).

Versión 1.2

Versión 1.2.1

10 de agosto de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.2.1. La versión 1.2.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió un valor nulo en el inspector (b/237987764).
  • Se corrigió la excepción de transmisión de clase durante la recuperación en el inspector (b/235526153).

Versión 1.2.0

27 de julio de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.2.0. La versión 1.2.0 contiene estas confirmaciones.

Cambios importantes desde la versión 1.1.0

  • Mejoras en el recorrido del foco:

    • El desplazamiento basado en el foco de las listas diferidas ahora funciona con la nueva API principal de BeyondBoundsLayout
    • Nuevas APIs de personalización de comportamiento en FocusOrder y FocusProperties
    • Comportamiento mejorado con el teclado físico o el control remoto de la TV
  • Nuevas APIs para lo siguiente:

    • Inserción de ventana
    • Primitivas básicas para animaciones infinitas, de diseño y controladas por gestos
    • Capacidades de GraphicsLayer, lo que incluye RenderEffect
  • Varias correcciones de errores y mejoras de rendimiento

Versión 1.2.0-rc03

29 de junio de 2022

Se lanzó androidx.compose.ui:ui-*:1.2.0-rc03. La versión 1.2.0-rc03 contiene estas confirmaciones.

  • No hay cambios desde la versión 1.2.0-rc02.

Versión 1.2.0-rc02

22 de junio de 2022

Se lanzó androidx.compose.ui:ui-*:1.2.0-rc02. La versión 1.2.0-rc02 contiene estas confirmaciones.

Versión 1.2.0-rc01

15 de junio de 2022

Se lanzó androidx.compose.ui:ui-*:1.2.0-rc01. La versión 1.2.0-rc01 contiene estas confirmaciones.

Cambios en la API

  • Las interfaces en las bibliotecas de Compose ahora se compilan con métodos de interfaz predeterminados de jdk8 (I5bcf1).
  • Se agregaron funciones de orden superior a KeyInjectionScope para insertar pulsaciones de teclas mientras otras teclas se mantienen presionadas o activadas. Estas funciones incluyen withKeysDown, withKeysToggled, etc. También se agregaron propiedades para comprobar si una tecla meta específica está inactiva (por ejemplo, isCtrlDown) para verificar si se dejó de presionar alguna de las teclas de control. Consulta KeyInjectionScope para ver la documentación de cada función (I9f6cd, b/229831515).
  • Se agregó un elemento OverscrollEffect experimental que permite efectos de desplazamiento personalizados, junto con las sobrecargas 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).
  • Se cambió el nombre de runComposeUiTestWithoutActivity {} por runEmptyComposeUiTest {}, para que quede alineado con createEmptyComposeRule() (I6fed7).

Versión 1.2.0-beta03

1 de junio de 2022

Se lanzó androidx.compose.ui:ui-*:1.2.0-beta03. La versión 1.2.0-beta03 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron pressKeyTimes, isCapsLockOn y amigos a KeyInjectionScope. Además, la API ahora admite patrones de inyección combinados del mouse y el teclado, como hacer clic con el botón del mouse y presionar una tecla meta a la vez (I4c8da, b/229831515).
  • Se agregó compatibilidad experimental para insertar eventos clave. Usa performKeyInput para enviar eventos clave o envíalos a través de la propiedad key de MultiModalInjectionScope durante un gesto de entrada multimodal con performMultiModalInput. Consulta KeyInjectionScope para ver la documentación disponible de la API (Ic5000, b/229831515).
  • Se agregó un nuevo GoogleFont.Provider.AllFontsListUri para recuperar la fuente de Internet canónica de Google Fonts compatible con Android.
  • Se mejoraron los mensajes de error que se producían cuando Google Fonts no se cargaba en Compose (I0416c).

Correcciones de errores

  • Cuando se agregan eventos InputEventChangea Velocity Tracker, consideraremos los deltas en lugar de las posiciones, lo que garantizará que la velocidad se calcule correctamente en todos los casos, incluso si se mueve el elemento objetivo (I51ec3, b/216582726, b/223440806, b/227709803).
  • Ahora, el parámetro de configuración Show Layout Bounds se aplicará a los elementos componibles inmediatamente después de activar o desactivar la tarjeta de configuración rápida, sin tener que salir de la actividad y volver a ingresar. (I843d5, b/225937688).
  • La búsqueda de strings de accesibilidad no activa la carga de fuentes. Antes, intentaba cargar fuentes para StyleSpans, lo que provocaba fallas si se reemplazaba FontFamily.Resolver (I4609d).
  • Si presionas la tecla de borrar hacia adelante cuando el cursor se encuentra al final de un campo de texto, ya no fallará.
  • DeleteSurroundingTextCommand 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.ui:ui-*:1.2.0-beta02. La versión 1.2.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se volvió a implementar la funcionalidad en otros tipos de vista previa (I19f39).

Correcciones de errores

  • Se cambió el nombre de ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer por DisposeOnDetachedFromWindowOrReleasedFromPool para reflejar mejor cuando se producen las eliminaciones, en lugar de solo cuando no se producen (If15ca).

Versión 1.2.0-beta01

11 de mayo de 2022

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

Nuevas funciones

  • Esta es la primera versión beta de 1.2.

Cambios en la API

  • Se agregó el objeto BeyondBoundsInterval experimental que las implementaciones personalizadas de LazyList pueden utilizar cuando diseñan elementos que superan los límites visibles (Ifabfb, b/184670295).
  • Las versiones con clave de Modifier.composed ahora son una API estable (Ie65e4, b/229988420).
  • Se simplificó la API de rememberNestedScrollConnection para usar configuraciones regionales de composición y adquirir información sobre la vista actual (I67ca7).
  • La anotación @ComposableTarget y las anotaciones marcadas por @ComposableTargetMarker ahora se pueden usar en el alcance del archivo con el prefijo @file. El uso de una anotación de destino en el alcance del archivo hará que el compilador asuma que todas las funciones que admiten composición en el archivo deben orientarse al aplicador asociado. Por ejemplo, el uso de @file:UiComposable declara que todas las funciones @Composable están orientadas al aplicador de la IU de Compose. Una función que necesita orientarse a otro aplicador debe proporcionar explícitamente la anotación del marcador de destino para el aplicador deseado (I40804).
  • Agregamos una nueva API experimental, independiente de la plataforma, de prueba: una interface ComposeUiTest y una fun runComposeUiTest(block: ComposeUiTest.() -> Unit), que se pueden usar para ejecutar pruebas de IU de Compose sin la necesidad de usar TestRule. Para ejecutar una prueba sin una ComposeTestRule, pasa la prueba como una lambda a runComposeUiTest y usa los métodos y los miembros en la ComposeUiTest del alcance del receptor, que son los mismos que en ComposeContentTestRule.

    Se agregan interface AndroidComposeUiTest y fun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit) específicos de Android para brindar acceso a la actividad subyacente, similar a AndroidComposeTestRule. Para obtener aún más control, puedes crear una instancia de class AndroidComposeUiTestEnvironment.

    La implementación para computadoras de escritorio es la class DesktopComposeUiTest, pero, por el momento, no se ofrecen funciones de ejecución específicas para computadoras.

    La migración de una prueba de ComposeTestRule a ComposeUiTest se puede hacer de esta manera (ejemplo de Android). De:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @get:Rule val rule = createComposeRule()
        @Test
        fun test() {
            rule.setContent {
                Text("Hello Compose!")
            }
            rule.onNodeWithText("Hello Compose!").assertExists()
        }
    }
    

    A:

    @RunWith(AndroidJUnit4::class)
    class MyTest {
        @Test
        @OptIn(ExperimentalTestApi::class)
        fun test() = runComposeUiTest {
            setContent {
                Text("Hello Compose!")
            }
            onNodeWithText("Hello Compose!").assertExists()
        }
    }
    
  • Por ahora, ComposeContentTestRule y ComposeTestRule no se extienden desde ComposeUiTest, lo que significa que aún no se puede llamar a las funciones de extensión en ComposeUiTest en la interfaz TestRule. Cuando ComposeUiTest cambie a una API estable, se cambiarán ComposeContentTestRule y ComposeTestRule para extenderse de ComposeUiTest (Ib4e90).

  • 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 agregó Brush a TextStyle y SpanStyle para proporcionar una manera 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 de trimFirstLineTop y trimLastLineBottom funcionan correctamente solo cuando includeFontPadding es falso (I97332, b/181155707).

  • Se cambiaron las funciones PlatformParagraphStyle.lerp y PlatformSpanStyle.lerp para que sean de nivel superior (I9a268).

Correcciones de errores

  • La documentación de PointerInputChange::copy ahora indica correctamente que es una copia superficial (I182f5).
  • Se admite elipsis cuando la altura es limitada y no cabe en todas las líneas de texto (Ie528c, b/168720622).
  • includeFontPadding está activado de manera predeterminada. Es posible 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).

Contribución externa

  • MouseInjectionScope.scroll(delta = someDelta) ahora se invierte en Android si nos desplazamos verticalmente (si someDelta es positivo, se desplazará hacia abajo) (Ifb697, b/224992993).

Versión 1.2.0-alpha08

20 de abril de 2022

Se lanzó androidx.compose.ui:ui-*:1.2.0-alpha08. La versión 1.2.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Las funciones pluralStringResource se marcaron como experimentales para permitir que la evolución apoye una mejor internacionalización en el futuro (If24e4).
  • Paragraph y MultiParagraph ahora aceptan el parámetro Constraints. Pasar Constraints.maxHeight es una no-op en este momento, pero te permitirá hacer algunos cálculos en el futuro, como la elipsis según la altura (I6afee, b/168720622).
  • SubcomposeSlotReusePolicy.getSlotsToRetain() ahora acepta una clase personalizada similar a MutableSet que no permite agregar elementos nuevos en ella (Icd314).
  • PointerIcon ahora es una interfaz @Stable (I9dafe).
  • El consumo parcial (de posición abajo O) ya no está disponible en PointerInputChange. Puedes 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).
  • Habilita la interoperabilidad de desplazamiento anidada entre Compose y View en la dirección Compose > View. Esto significa que un elemento superior de composición podrá recibir deltas de desplazamiento anidados desde una vista de desplazamiento anidada (If7949, b/174348612).
  • Se agregó el nuevo SemanticsProperty testTagsAsResourceId, que se puede usar para que Compose cumpla con las pruebas de UIAutomator diseñadas para el sistema de View (I39c20).
  • Se muestran todos los grosores disponibles para las fuentes del sistema en Android cuando se use FontFamily.SansSerif. Para ello, se usarán nombres de fuentes de resguardo como sans-serif-medium internamente en los niveles de API 21 a 28. Este es un cambio de comportamiento, ya que anteriormente solo se admitían los grosores 400 y 700 en los niveles de API 21 a 28 (I380fe, b/156048036, b/226441992).
  • Los instructores de Paragraph y Multiparagraph reordenaron los argumentos de posición antes de los argumentos opcionales (Idafaa).
  • AndroidFont ahora toma typefaceLoader como parámetro de constructor (I2c971).

Versión 1.2.0-alpha07

6 de abril de 2022

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

Cambios en la API

  • Se agregó la nueva función Snapshot.withoutReadObservation { ... }. Permite que los usuarios ejecuten la lambda pasada sin suscribirse a los cambios de los valores de estado leídos durante este bloque. Puede resultarte útil en los casos de uso en los que quieres aprovechar las escrituras y lecturas con protección de subprocesos basadas en instantáneas, pero también deseas poder leer el valor sin causar nuevas composiciones o mediciones innecesarias (I9f365, b/214054486).
  • La propiedad de extensión consumeWindowInsets de ComposeView permite a los desarrolladores inhabilitar el consumo de Android WindowInsets. Esto permite que ComposeViews independientes en la jerarquía apliquen WindowInsets sin interferir entre sí (I0ef08, b/220943142).
  • Se agregó KeyboardType.Decimal como alternativa a Keyboard.Number para incluir específicamente un separador decimal en IME (Iec4c8, b/209835363).
  • PointerEventType.Scroll y PointerEvent.scrollDelta ahora son API estables (I574c5, b/225669674).
  • Se habilitó la interoperabilidad de desplazamiento anidado entre View y Compose para clases de View que cooperan. Esto significa que Compose ahora puede despachar deltas de desplazamiento a un elemento superior de View (que coopera) (I5d1ac, b/174348612).
  • Se actualizó FontFamily.Resolver para integrar la configuración de accesibilidad de texto en negrita en todo el sistema (I6c1e7).
  • Font(AssetManager, String, ...) dejó de estar disponible y se reemplazó por Font(String, AssetManager, ...). Esta es una API experimental (I1c7a4).
  • Se agregó un nuevo descriptor de fuente Font(DeviceFontFamilyName) para buscar fuentes instaladas en el sistema de forma opcional durante las cadenas de resguardo de fuentes (I30468, b/219754572).
  • Se agregó una configuración de compatibilidad temporal para includeFontPadding en TextStyle/ParagraphStyle. includeFontPadding se puede cambiar mediante 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 agregó la extensión GoogleFont.Provider.isAvailableOnDevice para ayudar con la depuración (I64e31).
  • Se agregó el constructor GoogleFont.Provider para su uso con @ArrayRes (Ic5ee1, b/225984280).
  • Compose GoogleFont ahora se llama Font(GoogleFont); de lo contrario, la API permanece estable (I125f2).

Correcciones de errores

  • Se agregó una comprobación de lint a material/Scaffold para garantizar que se use el padding interno (Ifb111).

Versión 1.2.0-alpha06

23 de marzo de 2022

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

Cambios en la API

  • Se agregó la acción semántica de RequestFocus para solicitar el enfoque en el objetivo enfocable (I17b71).
  • Se actualizó el análisis de elementos de diseño vectoriales para admitir la duplicación automática a fin de girar el contenido de un VectorPainter si la dirección de diseño actual es RTL (I79cd9, b/185760237).
  • Se actualizaron los colores de sombras y ambientes con el objetivo de que sean parámetros finales de Modifier.graphicsLayer para la compatibilidad de la API (I3f864, b/160665122).

  • Se agregaron implementaciones predeterminadas al color de sombra o ambiente en GraphicsLayerScope para garantizar que no se produzcan cambios de API rotundos.

  • Se agregó la hora del evento a eventos RSB (Ief8ae).

  • FocusOrder se combinó 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).

  • La actualización de RecyclerView y Compose ahora dará como resultado un rendimiento de desplazamiento mucho mejor para RecyclerViews con vistas de Compose como elementos secundarios.

  • Se agregó ViewCompositionStrategy.Default como medio para recuperar la estrategia predeterminada integrada.

  • Se agregó ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer, que es la nueva estrategia predeterminada y controla de forma correcta los contenedores de agrupación, como RecyclerView (If7282).

  • Se agregó compatibilidad para anotar clases de anotaciones con @Preview como primer paso para incorporar la función de vista previa. Estas anotaciones se pueden usar para anotar métodos componibles u otras clases de anotaciones, que luego se podrían considerar anotaciones indirectas con el objeto @Preview determinado (I12eff).

  • Se agregaron dispositivos de referencia a la lista Dispositivos de @Preview (I071c9).

Correcciones de errores

  • Se actualizaron las APIs de gráficos vectoriales para usar la anotación componible correcta @VectorComposable en lugar de @UiComposable (I942bc).
  • Se quitó crossinline de AnnotatedString.Builder.withStyle (If84d5).

Contribución externa

  • compose-ui: Se agregaron las propiedades ambientShadowColor y spotShadowColor a GraphicsLayerScope+ (I1ba1a, b/160665122).
  • Los recursos plurales ahora son compatibles con las funciones pluralStringResource (Ib2f23, b/191375123).

Versión 1.2.0-alpha05

9 de marzo de 2022

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

Cambios en la API

  • TextToolbar ahora toma argumentos lambda en lugar de ActionCallback (Ib2eb9, b/197950089).
  • Se actualizó la nulabilidad en core y appcompat para que coincida con Tiramisu DP2 (I0cbb7).
  • La interfaz de Measured ahora expone la propiedad parentData (I3313f).
  • Modifier.onPlaced y la interfaz OnPlacedModifier ahora son estables (Ib5482).
  • ¡Hip, hip, hurra! La animación de Compose ahora permite configurar la "Escala de duración de animador" desde las Opciones para desarrolladores (I5a4fc, b/161675988).
  • Se agregó un modificador BeyondBoundsLayout local (If8b51, b/184670295).
  • Texto: El elemento includeFontPadding está desactivado de forma predeterminada. Se controlaron los problemas de recorte como resultado de includeFontPadding=false y no se deberían producir recortes para secuencias de comandos altas (I31c84, b/171394808).

Correcciones de errores

  • ComposeContentTestRule.setContent ahora arrojará una IllegalStateException si intentas configurar contenido cuando ya existe contenido (I888a5, b/199631334).
  • Se corrigió la falla que causaba el contenido del portapapeles mientras se leía desde el portapapeles en Android (I06020, b/197769306).
  • Se realizaron mejoras en las muestras de desplazamiento de RSB (I6a596).

Contribución externa

  • Se actualizó para usar corrutinas de Kotlinx 1.6.0 (I3366d).

Versión 1.2.0-alpha04

23 de febrero de 2022

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

Cambios en la API

  • Se agregaron ComposableTarget, ComposableTargetMarker 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 ComposableTarget 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).

  • Font(resId, ...) ahora toma loadStrategy en una API estable (Ief3d2).

  • FontLoadingStrategy ahora es una API estable (I1ee35, b/174162090).

  • Compatibilidad con la carga de fuentes asíncrona en Text (I77057, b/214587005).

  • Se agregó una API de puente para convertir Font.ResourceLoader personalizados en FontFamily.Resolver (Ia0060).

Correcciones de errores

  • Los FontFamily.Resolver proporcionados se pasan a subcomposiciones, como Popup.
  • Los Font.ResourceLoader proporcionados se pasan a subcomposiciones, como Popup (I48fa5).

Versión 1.2.0-alpha03

9 de febrero de 2022

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

Cambios en la API

  • Los métodos notifyFocusedRect 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 agregó el método destroyDisplayListData en la clase stub de RenderNode (I1e659, b/216660268).
  • Se agregó una nueva API que permite realizar una medición previa de los elementos secundarios de SubcomposeLayout que ya creaste (I857ea).
  • Se agregó movableContentOf, que convierte una lambda componible en una que mueve su estado y los nodos correspondientes a cualquier ubicación nueva a la que se la llame. Cuando la llamada anterior sale de la composición, el estado se conserva de forma temporal y, si una llamada nueva a la lambda ingresa a la composición, el estado y los nodos asociados se mueven a la ubicación de la llamada nueva. Si no se agrega una llamada nueva, se quitará el estado de forma permanente y se notificará a los observadores.

    Si se llama a una lambda de movableContentOf varias veces en la misma composición, se crean nuevos estados y nodos para cada llamada. Además, a medida que las llamadas dejan la composición y entran en una nueva llamada, el estado se mueve desde las primeras llamadas salientes hasta las entrantes en el orden en que se llaman. Todo el estado que las llamadas nuevas no reclamen se quitarán permanentemente (Ib4850).

  • FontFamilyResolver ahora está disponible a través 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ó compatibilidad con la carga de fuentes asíncronas y opcionales, con comportamiento de resguardo. Text y TextField usan esta ruta, y se expone mediante FontFamilyResolver.

  • Se agregó compatibilidad con la carga previa de fuentes mediante FontFamilyResolver.preload.

  • FontFamilyResolver.setAsyncLoadContext permite configurar el contexto de corrutinas global que se usa para cargar fuentes asíncronas (I87fe8, b/174162090).

  • Se agregó AndroidFont, una nueva API de bajo nivel que proporciona nuevos tipos de descriptores de recursos de fuentes en Android. Por ejemplo, cargar fuentes de un backend específico de la app, ubicar de forma opcional fuentes preinstaladas en el dispositivo o cargar una fuente de un recurso que no proporcionan las fábricas de fuentes actuales.

  • Se amplió la API de Font.ResourceLoaded para admitir la carga de fuentes opcional y asíncrona. No se recomienda que los desarrolladores de aplicaciones usen esta API de forma directa. Para agregar nuevos tipos de fuentes, 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).

  • 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 los espacios publicitarios que se deben conservar para volver a usarlos en el futuro. (I52c4d).

  • Se expuso la función HSV y HSL en Color como API no experimental. El espacio de color de Oklab ahora es una API pública (I08fb6, b/180731008).

  • El objeto AndroidComposeTestRule.AndroidComposeStatement dejó de estar disponible, ya que no estaba destinado a estar disponible en una API pública y no era de utilidad (Ibc46b).

  • Se cambió el nombre de la clase kt que se genera internamente (Ia0b9e, b/174162090).

  • Se quitó FontLoadingStrategy.values (I42a9d, b/174162090).

  • El cargador de fuentes global ahora se llama FontFamilyResolver (I4f773, b/174162090).

  • Se usa el nuevo sistema de carga de fuentes para computadoras de escritorio (I9ce5c, b/174162090).

  • FontFamily.Resolver.resolve muestra State<Any> (I4406c, b/174162090).

Correcciones de errores

  • TextFields ahora se mantendrá arriba del teclado cuando este se enfoque y se muestre, y cuando el modo de entrada de software sea ADJUST_PAN (I8eaeb, b/190539358, b/192043120).
  • En computadoras, se usa la composición local para FontFamily.Resolver.
  • La versión de escritorio de FontLoader dejó de estar disponible.
  • Nueva fábrica de createFontFamilyResolver para computadoras (I6bbbb, b/174162090).
  • El tipo de entrada de teclado en pantalla ya no gira cuando se cambia el enfoque entre los campos de texto (I1bf50, b/187746439).

Versión 1.2.0-alpha02

26 de enero de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha02. La Versión 1.2.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron Modifier.onRotaryScrollEvent() y Modifier.onPreRotaryScrollEvent() para dispositivos Wear con un botón lateral que rota. (I18bf5, b/210748686)
  • Se agregó la extensión experimental View.createLifecycleAwareRecomposer. (I0cde6)

Contribución externa

  • Ahora, PointerEvent.scrollDelta.y se invierte en Android (muestra 1 en lugar de -1 si se inclina la rueda del mouse hacia la derecha). (Ia9811)

Versión 1.2.0-alpha01

12 de enero de 2022

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

Cambios en la API

  • FontFamily.canLoadSynchronously quedó obsoleto. Esta propiedad no tiene significado semántico. (Ica5ef)
  • Se agregó el campo de identidad a CompositionData para generar IDs que no varían en el Inspector de diseño (Ic116e)
  • Se agregaron los IDs de dispositivos de Wear OS a la lista de dispositivos de vista previa (I93232).

Actualizaciones de dependencias

  • Ahora depende de Kotlin versión 1.6.10.

Versión 1.1

Versión 1.1.1

23 de febrero de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.1.1. La versión 1.1.1 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió NullPointerException 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.ui:ui-*:1.1.0. La versión 1.1.0 contiene estas confirmaciones.

Cambios importantes desde 1.0.0

  • Se agregó compatibilidad estable con el efecto de desplazamiento de Android 12.
  • Se agregaron mejoras en el tamaño de los objetivos táctiles.
    • Ten en cuenta que, con respecto a Compose 1.0, los componentes de Material expandirán su espacio de diseño para cumplir con los lineamientos de accesibilidad de Material relativos al tamaño del objetivo táctil. Por ejemplo, el objetivo táctil del botón se expandirá hasta un tamaño mínimo de 48 x 48 dp, incluso si configuras el tamaño del botón para que sea más pequeño. Esto alinea Compose Material con el mismo comportamiento de los componentes de Material Design y proporciona un comportamiento coherente si combinas View y Compose. Este cambio también garantiza que, cuando crees tu IU mediante componentes de Compose Material, se cumplan los requisitos mínimos de la accesibilidad de objetivos táctiles.
  • Se agregó compatibilidad estable con Navigation Rail.
  • Varias API que antes eran experimentales se pasaron a niveles estables.
  • Se agregó compatibilidad con versiones más recientes de Kotlin.

Versión 1.1.0-rc03

26 de enero de 2022

Lanzamiento de androidx.compose.ui:ui-*:1.1.0-rc03. La versión 1.1.0-rc03 contiene estas confirmaciones.

Correcciones de errores

  • Se actualizó para admitir Compose Material 1.1.0-rc03.

Versión 1.1.0-rc01

15 de diciembre de 2021

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

Correcciones de errores

  • Se corrigió un error que causaba acciones de desplazamiento de accesibilidad faltantes (I7cbfb).
  • SemanticsNodeInteraction.captureToImage() ahora también funcionará si HardwareRenderer.isDrawingEnabled() es false, por lo que se habilitará durante la llamada. (Idf3d0)

Versión 1.1.0-beta04

1 de diciembre de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta04. La versión 1.1.0-beta04 contiene estas confirmaciones.

Nuevas funciones

  • Se actualizó para que sea compatible con Kotlin 1.6.0.

Cambios en la API

  • Se corrigió la nulabilidad en androidx.core.view (I7078a, b/204917439).
  • Se agregaron API experimentales que permiten a los usuarios utilizar PointerInputchange en su totalidad o verificar si se consumió o no (I2e59d).
  • Se agregó compatibilidad con eventos de rueda del mouse en la capa de IU (Ia14eb, b/198214718).
  • Se agregaron sobrecargas experimentales de Modifier.composed que aceptan claves para comparar la igualdad y calificar en la optimización de omisión (Ice799, b/205851704).
  • ComposeNotIdleException ahora se extiende desde Exception, en lugar de hacerlo directamente desde Throwable. Ten en cuenta que esto significa que las cláusulas de captura que capturaban Exception es posible que ahora detecten elementos ComposeNotIdleException, cuando antes no lo hacían (I9c217).

Correcciones de errores

  • Se corrigieron los controladores de texto que no se movían cuando se cambiaba la visibilidad del IME (I25f2e).

Versión 1.1.0-beta03

17 de noviembre de 2021

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

Cambios en la API

  • Se agregó el nuevo modificador Modifier.onPlaced para permitir que se observe el cambio de posición. Por lo tanto, se pueden realizar cambios adicionales en la compensación del modificador secundario a partir del cambio de posición observado (I558fd).
  • Se quitaron InjectionScope.flush() y InjectionScope.dispose(). El vaciamiento de todos los eventos y la eliminación del alcance ahora ocurren al final del método perform*Input() method al que se llama, como antes (I2bed8).
  • Se quitaron MultiModalInjectionScope.Touch y MultiModalInjectionScope.Mouse. A fin de incorporar eventos táctiles y del mouse para los gestos multimodales, ahora puedes usar MultiModalInjectionScope.touch() y MultiModalInjectionScope.mouse(). Ambos aceptan una lambda que tiene el alcance del receptor de esa modalidad (Idde18).

Correcciones de errores

  • El valor predeterminado para durationMillis en TouchInjectionScope.swipeWithVelocity ahora se calcula de modo que el deslizamiento sea posible (I19deb).

Versión 1.1.0-beta02

3 de noviembre de 2021

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

Cambios en la API

  • Se agregó la API experimental de BringIntoView que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459).
  • Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).

Contribución externa

  • Se agregó Modifier.pointerHoverIcon. (I95f01)

Versión 1.1.0-beta01

27 de octubre de 2021

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

Cambios en la API

  • Se agregó la API experimental de BringIntoView que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459).
  • Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).

Versión 1.1.0-alpha06

13 de octubre de 2021

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

Cambios en la API

  • Se quitó ExperimentalComposeUiApi de ViewRootForInspector y LayoutInfo.ownerViewId. (I5c2e3)
  • Se agregó una sobrecarga para Layout sin elemento secundario con eficiencia mejorada. (IB0d9a)
  • Se quitó InternalCompilerApi de los métodos de Composer que deben llamarse entre módulos. (I1aa0b)
  • SemanticsNodeInteraction.performSemanticsAction ahora muestra la SemanticsNodeInteraction en la que se llamó a la función. (I9e5db)
  • Se agregó LocalInputModeManager CompositionLocal para detectar TouchMode/NonTouchMode. (I6a83c, b/175899786)
  • Se agregó viewConfiguration: ViewConfiguration a LayoutInfo para permitir que los consumidores obtengan el valor correcto de cosas como el tiempo de espera de presión prolongada. (I76ca6)
    • Se agregó viewConfiguration: ViewConfiguration a InjectionScope para permitir que las pruebas ajusten la inserción de entrada en función de parámetros como el tiempo de espera de presión prolongada o la inclinación táctil.
    • Se cambió la duración predeterminada de mantener presionado y presionar dos veces para la entrada táctil y del mouse, según los valores en InjectionScope.viewConfiguration.
  • Se implementó ExposedDropdownMenu basado en ExposedDropdownMenuBox con TextField y DropdownMenu dentro. (If60b2)
  • Se agregó descarteOnOnsideClick a PopupProperties para reemplazar a descarteOnClickOutside, que dejó de estar disponible. La nueva propiedad recibe la posición del clic y los límites de anclaje, lo que brinda un control más preciso sobre si se debe invocar onDismissRequest o no. Por ejemplo, esto puede ser útil para evitar el descarte de anclajes al tocarlos.
    • Se agregó updateAndroidWindowManagerFlags a PopupProperties, y ofrece un control de bajo nivel sobre las marcas que pasa la ventana emergente a WindowManager de Android. El parámetro de la lambda será las marcas calculadas a partir de los valores de PopupProperties que generen marcas de WindowManager (p. ej., enfocables). El resultado de la expresión lambda serán las marcas finales que se pasarán a Android WindowManager. De manera predeterminada, updateAndroidWindowManagerFlags dejará las marcas calculadas a partir de los parámetros sin modificar. Esta API se debe utilizar con precaución, solo en los casos en que la ventana emergente tenga requisitos de comportamiento muy específicos. (I6e9f9)
  • Recomposer.state dejó de estar disponible y se reemplazó por Recomposer.currentState para cambiar su tipo a StateFlow. (Ic2ab3, b/197773820)
  • Se agregaron flush() y dispose() a InjectionScope Úsalas cuando quieras limpiar todos los eventos en fila de inmediato y cuando quieras eliminar el alcance, respectivamente. (Ifb73a)
  • Se agregó performScrollToNode(matcher: SemanticsMatcher), que desplaza un contenedor desplazable hasta el contenido que coincide con el comparador dado. (Ic1cb8)
  • InjectionScope ahora implementa Density, lo que te permite convertir fácilmente entre px y dp en performTouchInput y amigos. (I8fe1f)

Correcciones de errores

  • AndroidView ahora propaga LocalLifecycleOwner y LocalSavedStateRegistryOwner a su vista a través de ViewTreeLifecycleOwner y ViewTreeSavedStateRegistryOwner. (I38f96, b/179708470)
  • Se corrigió el problema por el que WearOS SwipeToDismissBox no controlaba los deslizamientos. (I9387e)
  • El tiempo predeterminado entre los eventos de entrada inyectados cambió de 10 ms a 16 ms. Esto puede cambiar el resultado de las pruebas que realizan gestos de entrada, como un deslizamiento específico. (I829fd)

Versión 1.1.0-alpha05

29 de septiembre de 2021

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

Cambios en la API

  • Se agregó compatibilidad con la comunicación entre modificadores (Id5467, b/198826874).
  • Se agregaron punteros históricos experimentales a PointerEventChange (Ic1fd8, b/197553056, b/199921305)
  • Se agregaron density: Density y layoutDirection: LayoutDirection a LayoutInfo Esto permite que los consumidores de LayoutInfo interpreten correctamente las dimensiones y posiciones expuestas en LayoutInfo. (I002f1)
  • Se agregó compatibilidad experimental para insertar eventos del mouse. Usa performMouseInput para comenzar a enviar eventos del mouse, o envía eventos de este mediante la propiedad Mouse de MultiModalInjectionScope durante un gesto de entrada multimodal con performMultiModalInput. Consulta MouseInjectionScope para ver la documentación de la API disponible. (Iaa4a8, b/190493367)

Correcciones de errores

  • Se corrigió la compatibilidad de la accesibilidad para elementos desplazables (diferidos y no diferidos) con respecto al desplazamiento (I6cdb0).
  • Se mejoró TouchInjectionScope.swipeWithVelocity. Ahora acepta un rango más amplio de variables de entrada y sugerirá cambios en la entrada si no se puede crear un deslizamiento. (I40fbe, b/182477143)

Versión 1.1.0-alpha04

15 de septiembre de 2021

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

Cambios en la API

  • PointerEvent ahora tiene un PointerEventType para admitir eventos de colocamiento del cursor sobre elementos. (I091fa)
  • Permite que los elementos secundarios acepten entradas de puntero fuera de los límites de entrada del elemento superior. Los elementos superiores pueden interceptar esas llamadas con una propiedad PointerInputScope.alwaysInterceptChildEventss. (I9eae3, b/192479655)
  • performGesture y GestureScope dejar de estar disponibles y se reemplazaron con 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)
  • Se rehizo la implementación del objeto inspectable. (I927bc, b/191017532)
  • Se cambió el nombre de un parámetro de inspectable para que coincida con el compuesto. (I3a482, b/191017532)
  • Se introdujeron performTouchInput y TouchInjectionScope como reemplazo de performTouchInput y TouchInjectionScope, lo que prepara el camino para otras modalidades (como el mouse).

    TouchInjectionScope tiene los mismos métodos que GestureScope, con excepción de movePointerTo y movePointerBy, que cambiaron de nombre a updatePointerTo y updatePointerBy. Todos los demás métodos son iguales.

    El comportamiento de TouchInjectionScope es casi idéntico al de GestureScope, con dos pequeñas diferencias:

    1. Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (en otras palabras, se usaba updatePointerTo(), pero no move(), y, luego, se llamaba a down()), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación sigue enviando el evento de movimiento, pero no avanza el tiempo del evento en esta situación específica.
    2. Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (similar al anterior), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación no realiza ninguna de las dos acciones: las nuevas posiciones de los punteros solo se reflejarán a través del evento ascendente.

    Por último, TouchInjectionScope presenta un nuevo método currentPosition(pointerId: Int) para obtener la posición actual del puntero determinado. (If1191, b/190493367)

Correcciones de errores

  • Permite que el clip extienda los límites del objetivo táctil más allá de la región del clip para los fines mínimos del objetivo táctil. (I43e10, b/171509422)
  • Se agregó compatibilidad con el sobredesplazamiento expandido en dispositivos con Android 12. (Iccf3c, b/171682480)

Versión 1.1.0-alpha03

1 de septiembre de 2021

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

Nuevas funciones

  • Se actualizó Compose 1.1.0-alpha03 para que dependa de Kotlin 1.5.30. (I74545)

Cambios en la API

  • Se agregó Modifier.inspectable para unir otros modificadores. (I1909b, b/191017532)
  • Se agregó la API de BlurredEdgeTreatment para simplificar los casos de uso de desenfoque a combinaciones de uso general de marcas de clips y TileModes. La mayoría de los casos de uso implican dejar que el contenido difuminado se renderice fuera de los límites del contenido original y difuminar las regiones fuera de estos límites con negro transparente, o bien recortar el contenido a los límites del contenido muestreando el borde más cercano para los kernels de desenfoque que se extienden más allá de los límites del contenido. (I6b4b7, b/166927547)
  • Se agregó compatibilidad con RenderEffect en el escritorio de Compose. Se introdujeron OffsetEffect y el modificador de desenfoque como una manera sencilla de ingresar efectos visuales de desenfoque en una parte de la jerarquía de composición. (I0f6aa, b/166927547)
  • Se introdujo la API de RenderEffect que se puede configurar de forma opcional en una Modifier.graphicsLayer para alterar el contenido de la capa. Se puede usar para desenfocar el contenido de un elemento componible y sus elementos secundarios dentro de una jerarquía de composición (I47c4d, b/166927547)
  • Ahora, AwaitPointerEventScope tiene withTimeout() y withTimeoutOrNull(). (I507f0, b/179239764, b/182397793)
  • Se agregó un tamaño mínimo de objetivo táctil a ViewConfiguration para usarlo en la semántica y la entrada de puntero a fin de garantizar la accesibilidad. (Ie861c)
  • Se agregó compatibilidad con TileMode.Decal, que sirve para definir el comportamiento de borde para RenderEffects basados en desenfoques. (I7e8ed, b/166927547)
  • performScrollToIndex, performScrollToKey, hasScrollToIndexAction y hasScrollToKeyAction ahora son API estables. (I142ae, b/178483889)
  • Se agregó un método de prueba para obtener los límites recortados. (I6b28e)

Correcciones de errores

  • Se quitó el método isBounded de BlurredEdgeTreatment a fin de verificar de forma explícita si el parámetro de forma es nulo. (I85d68)

Versión 1.1.0-alpha02

18 de agosto de 2021

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

Cambios en la API

  • PointerEvent ahora es compatible con la lectura del estado del botón del mouse y del estado del modificador del teclado (I6310c, b/180075467).
  • Los gestos inyectados ahora usan el tiempo de MainTestClock como fuente de información de tiempo. La hora actual de los eventos inyectados en performGesture se inicializará en la hora actual de MainTestClock. (Ifb364, b/192064452)
  • Se agregó el constructor DpRect(DpOffset, DpSize). (I2cf16, b/194219828)
  • Se agregó la clase DpSize. (I7abb1, b/194219828)

Correcciones de errores

  • Se actualizó el análisis de XML de gráficos vectoriales para admitir ColorStateLists como propiedades de tono de color raíz en VectorDrawables (I86915, b/195668138)

Versión 1.1.0-alpha01

4 de agosto de 2021

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

Cambios en la API

  • Ahora RelocationRequester.bringIntoView acepta un rectángulo como parámetro que nos permite poner en la vista una parte de un elemento que admite composición. (Ice2c5, b/194330245)
  • AnimatedImageVector y las API relacionadas ahora están en el nuevo módulo androidx.compose.animation:animation-graphics. (I60873)
  • Se agregó un modificador experimental para controlar las solicitudes de reubicación. (I65a97, b/178211874)
  • Se introdujo la API de BrushPainter para admitir el dibujo de un Brush arbitrario dentro de un Painer, similar a ColorPainter.

    Se actualizó la API de Brush para tener un parámetro de tamaño intrínseco que se consulta dentro de BrushPainter. (Ia2752, b/189466433)

  • Se actualizó el método DrawScope#drawImage que consume los rects de origen y destino para consumir un parámetro opcional FilterFilter. Esto es útil para el arte de píxeles que se pixela cuando se escala verticalmente para el arte basado en píxeles. Se actualizó el objeto BitmapPainter + Image que admite composición para que también consuma un parámetro opcional FilterQuality. (Ie4fb0, b/180311607)

  • Se agregó el método GestureScope.advanceEventTime para proporcionar más control sobre el tiempo de los eventos en un gesto. (Ibf3e2)

Correcciones de errores

  • A fin de admitir mejor el encadenamiento de modificadores de dibujo, asegúrate de que la implementación de Modifier.Paint llame a drawsContent. Anteriormente, se esperaba que Modifier.Paint se utilizara en un nodo de hoja del conjunto de modificadores. Sin embargo, esto evita que se configure en un contenedor que admita composición (p. ej., un cuadro) o que se agreguen decoraciones adicionales arriba como Modifier.paint().border(). Al hacer que el objeto Modifier.Paint llame a drawContent después de dibujar los contenidos del pintor determinado, logramos una mejor coherencia de comportamiento en el comportamiento con el patrón modificador. (Ibb2a7, b/178201337, b/186213275)
  • Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece usePlatformDefaultWidth como falso para anular este comportamiento. (Iffaed, b/192682388)
  • Se movió InfiniteAnimationPolicy a :compose:ui. (I5eb09, b/160602714)
  • El desplazamiento a través de acciones semánticas para listas diferidas y componentes de desplazamiento normales ahora tiene animación. (Id9066, b/190742024)

Versión 1.0

Versión 1.0.5

3 de noviembre de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.5. La versión 1.0.5 contiene estas confirmaciones.

Correcciones de errores

  • Se corrigió una falla en el seguimiento de las instancias de derivedStateOf (aosp/1792247).

Versión 1.0.4

13 de octubre de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.4. La versión 1.0.4 contiene estas confirmaciones.

Actualizaciones de dependencias

  • Se actualizó para depender de Kotlin 1.5.31

Versión 1.0.3

29 de septiembre de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.3. La versión 1.0.3 contiene estas confirmaciones.

Actualizaciones de dependencias

  • Se actualizó para depender de Kotlin 1.5.30

Versión 1.0.2

1 de septiembre de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.2. La versión 1.0.2 contiene estas confirmaciones.

Se actualizó para que sea compatible con la versión 1.0.2 de Compose. Compose 1.0.2 continúa siendo compatible con Kotlin 1.5.21.

Versión 1.0.1

4 de agosto de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.1. La versión 1.0.1 contiene estas confirmaciones.

Actualizaciones de dependencias

  • Se actualizó para depender de Kotlin 1.5.21.

Versión 1.0.0

28 de julio de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0. La versión 1.0.0 contiene estas confirmaciones.

Funciones principales de la versión 1.0.0

Esta es la primera versión estable de Compose. Consulta el blog oficial de Lanzamientos de Compose para obtener más información.

Errores conocidos

  • Si usas Android Studio Bumblebee Canary 4 o AGP 7.1.0-alpha04/7.1.0-alpha05, es posible que se produzca la siguiente falla:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Para sortear el problema, aumenta temporalmente tu minSdkVersion a más de 24 en el archivo build.gradle. Este error se solucionará en la próxima versión de Android Studio Bumblebee y en el AGP 7.1. (b/194289155)

Versión 1.0.0-rc02

14 de julio de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-rc02. La versión 1.0.0-rc02 contiene estas confirmaciones.

Correcciones de errores

  • Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece usePlatformDefaultWidth como falso para anular este comportamiento. (Iffaed, b/192682388)

Versión 1.0.0-rc01

1 de julio de 2021

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

Nuevas funciones

  • Se dividió el módulo ui-tooling en ui-tooling y ui-tooling-preview. (Iefa28, b/190649014)

Cambios en la API

  • Se quitaron las funciones experimentales FocusManager#moveFocusIn y FocusManager#moveFocusOut obsoletas. (I227d7, b/170154986, b/186567354, b/168510304))
  • Canvas ahora admite un parámetro contentDescription para accesibilidad. (Ib547c)
  • Se cambió el nombre de useDefaultMaxWidth en PopupProperties por usePlatformDefaultWidth. (I05710)
  • Ahora se pueden usar los diálogos en todo el ancho de la pantalla. (I83929, b/190810877)
  • Se agregó compatibilidad experimental para las representaciones de color HSV y HSL. (Id7cf8, b/180731008)

Cambios en el comportamiento

  • Compose @Preview ahora proporciona un LocalActivityResultRegistryOwner que te permite obtener una vista previa de elementos componibles que usan API como rememberLauncherForActivityResult() que dependen de que exista ese propietario. (Ib13d1, b/185693006)
  • Compose @Preview ahora proporciona un LocalOnBackPressedDispatcherOwner que te permite obtener una vista previa de elementos componibles que usan API como BackHandler que dependen de que exista ese propietario. (Ia1c05, b/185693006)

Correcciones de errores

  • Se movió InfiniteAnimationPolicy a androidx.compose.ui:ui. (I5eb09, b/160602714)
  • Se quitó temporalmente AnimatedImageVector para cambiar la estructura del módulo. (I41906, b/160602714)

Versión 1.0.0-beta09

16 de junio de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta09. La versión 1.0.0-beta09 contiene estas confirmaciones.

Cambios en la API

  • Se cambió Role de enumeración y LiveRegionMode por clases intercaladas con un constructor privado. (Id1890)
  • KeyboardCapitalization se convierte en una clase intercalada. (Id5a1c)
  • Se cambió HapticFeedbackType a una clase intercalada. (I255ec)
  • Modifier.pointerInteropFilter es @ExperimentalComposeUiApi. (Iede6c)
  • TextAlign, FontSynthesis y TextDirection ahora son clases intercaladas. (I212fe)
  • Se cambió TextOverflow a una clase intercalada. (I433af)
  • Ahora, FontStyle es una clase intercalada. (I9e48b)

Correcciones de errores

  • Por el momento, las constantes de clave son @ExperimentalComposeUiApi. El código de consumo puede declarar constantes privadas antes de la estabilización. (Ia5d48)
  • Ahora, las pruebas de Compose se pueden ejecutar en Robolectric. Hasta ahora, se identificaron las siguientes limitaciones:
    • No hay un mapa de bits nativo, por lo que ImageBitmap() dirige a una NullPointerException.
    • No hay un dibujo, por lo que captureToImage() esperará de forma indefinida al próximo pase de dibujos (es decir, se produce un interbloqueo).
    • No se cargó ninguna fuente, por lo que se medirá todo el texto de forma incorrecta. Todos los caracteres tienen una altura fija de alrededor de 20 px y un ancho de 1 px.
    • ComposeTestRule.waitUntil {} no ejecuta el subproceso principal mientras espera, por lo que es prácticamente igual que ComposeTestRule.mainClock.advanceTimeUntil {}. Se espera identificar más limitaciones en el futuro. (I284fa)

Reglas de perfiles agregadas

En esta versión, se agregaron reglas de perfiles a los siguientes módulos de Compose (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

¿Qué son las reglas de perfiles?

  • Las reglas de perfiles de una biblioteca se especifican en un archivo de texto baseline-prof.txt, ubicado 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.ui:ui-*:1.0.0-beta08. La versión 1.0.0-beta08 contiene estas confirmaciones.

Cambios en la API

  • Se reemplazó la enumeración NestedScrollSource por una clase intercalada. (Ie321b, b/187055290)
  • Se cambió el nombre de FocusManager.clearFocus(forcedClear = true) por FocusManager.clearFocus(force = true). (Ia0c41)
  • Se refactorizaron los usos de enumeración en clases intercaladas para evitar problemas con explicaciones exhaustivas cuando se agregan nuevos valores de enumeración. (I2b5eb)
  • Quitar @ExperimentalComposeUiApi de PopupProperties. (I01fa6)
  • Se cambió PointerType de una enumeración a una clase intercalada (If5058)
  • Las propiedades semánticas de ContentDescription y Text ya no son valores individuales, sino listas. Esto permite fusionarlas como aparecen en lugar de concatenaciones. También se proporcionaron mejores API de prueba para usar estos cambios. (Ica6bf, b/184825850)
  • Modifier.focusModifier() dejó de estar disponible y se reemplazó por Modifier.focusTarget(). (I6c860)
  • Modifier.onSizeChanged() y Modifier.onGloballyPositioned() ya no son funciones intercaladas. (I727f6, b/186109675)
  • Se reemplazó la enumeración KeyboardType por una clase intercalada. (I73045, b/187055290)
  • Se reemplazó la enumeración FocusState por una interfaz FocusState. (Iccc1a, b/187055290)
  • Se reemplazó la enumeración ImeAction por una clase intercalada. (I18be5, b/187055290)
  • PlaceholderVerticalAlign se convierte en una clase intercalada. (If6290)
  • TextUnitType ahora es una clase intercalada. (I4cba9)
  • Las funciones AnnotatedString.withAnnotation ahora son ExperimentalTextApi en lugar de ExperimentalComposeApi. (I0cd0a)
    • El constructor TextUnit con TextUnitType ahora es ExperimentalTextApi en lugar de ExperimentalComposeApi.

Correcciones de errores

  • Se corrigió el error que se introdujo en la versión beta07, en la que los elementos LazyColumn/Row se mostraban parcialmente después del desplazamiento. (I8c9ac, b/188566058).
  • Ahora detectDragGesures, detectVerticalGestures 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 corrigieron los LayoutModifiers que proporcionaban líneas de alineación. También se solucionó un error que provocaba que no se volviera a medir el elemento principal cuando se cambiaban las líneas de alineación de los elementos secundarios. (I4401f, b/174315652)
  • Se modificó Modifier.onGloballyPositioned() para informar las coordenadas de este modificador en la cadena correspondiente, no las coordenadas de diseño después de aplicar todos los modificadores. Es decir, ahora el orden de los modificadores afecta las coordenadas que se informarán. (Ieb67d, b/177926591)

Versión 1.0.0-beta07

18 de mayo de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta07. La versión 1.0.0-beta07 contiene estas confirmaciones.

Cambios en la API

  • Se agregó la interfaz ViewRootForInspector para usar en inspector. (Ib70df)
  • SubcomposeLayoutState ahora admite la configuración de recuento de ranuras reutilizables. El diseño mantendrá estos recuentos de ranuras activos, en lugar de desecharlos para reutilizar la ranura la próxima vez que necesite una nueva. (Ieb981)
  • Se reemplazó la enumeración KeyEventType por una clase intercalada. (Id670a, b/187055290)
  • Se reemplazó la enumeración FocusDirection por una clase intercalada. (Ib6d03, b/187055290, b/184086802)
  • Se introdujo la capacidad de elevar el estado de SubcomposeLayout que te permite componer previamente el contenido en un slotID obligatorio, lo que agilizará la siguiente medición, ya que una vez que se realice la subcomposición con el slotID determinado, la próxima vez, no será necesaria la composición. (I42580, b/184940225)
  • Se agregó el controlador de selección de clips. (Iff80d, b/183408447)
  • Se quitaron las API relacionadas con la compatibilidad con LayoutInspector que ya no se usaban. (I2ac78)

Correcciones de errores

  • LazyColumn/Row ahora mantendrá activos hasta 2 elementos previamente visibles (no se desechan), incluso cuando ya se desplazaron. Esto permite que el componente vuelva a usar las subcomposiciones activas cuando necesitemos componer un elemento nuevo que mejore el rendimiento del desplazamiento. (Ie5555)
  • Se aplicarán TextGeomerticTransform y TextDecoration en AnnotatedString como se indica. (I61900, b/184760917)

Versión 1.0.0-beta06

5 de mayo de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta06. La versión 1.0.0-beta06 contiene estas confirmaciones.

Cambios en la API

  • Se solucionó el problema con la navegación por gestos (I1145e).
  • @ComposeCompilerApi ya no admite @RequiresOptIn. (Iab690)
  • Se agregaron las API de accesibilidad CollectionInfo y CollectionItemInfo, que permiten marcar la colección y sus elementos para los servicios de accesibilidad. (Id54ef, b/180479017)
  • Se añadió SemanticsActions.ScrollToIndex a fin de desplazar una lista con elementos indexados hasta aquel que tenga un índice determinado 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)
  • Se agregó ownerViewId a GraphLayerLayerInfo. (I19f62)
  • Se agregaron sobrecargas de Font() a fin de cargar fuentes desde recursos (File y FileDescriptor). (I5d382)
  • Se agregó la API de accesibilidad error que permite marcar un nodo que contiene entradas no válidas. (I12997, b/180584804, b/182142737)
  • Se agregaron sobrecargas de Font() a fin de cargar fuentes desde recursos (File y FileDescriptor). (I43007)
  • Se agregó compatibilidad con AnnotatedString a TextFieldValue.Saver. Se agregaron las funciones de utilidad addTtsAnnotation y withAnnotation a AnnotatedString.Builder. (I8cbdc, b/178446304)
  • Se agregó la función de constructor TextUnit TextUnit(value: Float, type: TextUnitType) (I7ecce, b/178446304).

Versión 1.0.0-beta05

21 de abril de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta05. La versión 1.0.0-beta05 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron FocusManager.moveFocus(In) y FocusManager.moveFocus(Out) experimentales. (Ic5534, b/183746743)
  • Se agregó la API experimental de performTextInputSelection. (I2dcbb, b/178510628)
  • La interfaz de InputEventCallback dejó de estar disponible. No se podía usar en ninguna API pública y tampoco se utilizaba en el código. (I34a02, b/184003208)
  • Se dio de baja TextLayoutResult/createTextLayoutResult, una función pública sin uso que se había agregado para el proceso de prueba. La función no realiza ninguna acción útil en las API de texto de Compose, por lo que dejó de estar disponible y se quitará más adelante. (I80413)

Correcciones de errores

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

Cambios en la API

  • Cambia el nombre de hideSoftwareKeyboard y showSoftwareKeyboard en SoftwareKeyboardController por hide() y show(), respectivamente.
    • Proporciona la interfaz completa de CompositionLocal para LocalSoftwareKeyboardController, que permite que se configure (especialmente útil en pruebas). (I579a6).
  • Se agregó la API de accesibilidad LiveRegion. Si el nodo está marcado como una región live, los servicios de accesibilidad notificarán automáticamente al usuario sobre los cambios. (Idcf6f, b/172590946)
  • Se introdujo TextOverflow.Visible. (Ic8f89)

Correcciones de errores

  • Se corrigió el problema cuando los elementos de LazyColumn/LazyRow ubicados en los bordes se encontraban posicionados de forma incorrecta después de un lanzamiento rápido. (Ie4d13, b/183877420)
  • Ahora AndroidViewBinding quita correctamente los fragmentos aumentados a través de FragmentContainerView cuando se quita el AndroidViewBinding de la jerarquía de composición. (Ib0248, b/179915946)
  • Ahora AndroidViewBinding anida correctamente los fragmentos aumentados a través de FragmentContainerView cuando tu ComposeView se encuentra dentro de un Fragment, lo que corrige problemas al guardar y restablecer el estado de esos fragmentos. (I70eb0, b/179915946)
  • Ahora, Compose ViewBinding depende del Fragmento 1.3.2 y muestra fragmentos aumentados de forma coherente a través de FragmentContainerView después de los cambios en la configuración. (I0743d, b/179915946)

Versión 1.0.0-beta03

24 de marzo de 2021

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

Cambios en la API

  • Se realizó la verificación diferida para las dependencias de ViewTree de ComposeView. (I8dbbf, b/182466548)
  • Se agregaron los parámetros opcionales startX/endX y startY/endY a las funciones swipeUp/swipeDown/swipeLeft/swipeRight en GestureScope. (I49e2d, b/182063305)

Versión 1.0.0-beta02

10 de marzo de 2021

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

Cambios en la API

  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I5951e, b/168778053)
  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I84472, b/168778053)
  • Se quitaron los siguientes elementos SemanticsMatcher:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (If16bd)
  • Se marcó el elemento SemanticsMatchers como @ExperimentalTestApi:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (Ia600c)
  • Se agregaron los siguientes elementos SemanticsMatcher:
    • hasWidth(width, tolerance)
    • hasHeight(height, tolerance)
    • hasLeftPosition(left, tolerance)
    • hasTopPosition(top, tolerance)
    • hasRightPosition(right, tolerance)
    • hasBottomPosition(bottom, tolerance) (I2f502)

Correcciones de errores

  • Se aplicaron restricciones sobre el uso público de las API experimentales (I6aa29, b/174531520)
  • androidx.compose.ui:ui ya no depende de AppCompat ni Fragment. Si usas ComposeView en tu aplicación y usas Fragment o AppCompat, asegúrate de usar AppCompat 1.3+ o Fragment 1.3+. Se necesitan estas versiones para establecer correctamente el ciclo de vida y los estados guardados del propietario que se requieren para ComposeView. (I1d6fa, b/161814404)
  • Se corrigió la falla de rememberSaveable { mutableStateOf(0) } cuando se usaba dentro de un destino de navigation-compose. (I1312b, b/180042685, b/180701630)
  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053)
  • Se corrigió el error NoSuchElementException en tearDownRegistry() de ComposeRootRegistry. (Iddce1)

Versión 1.0.0-beta01

24 de febrero de 2021

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

Esta es la primera versión de Compose 1.0.0 Beta.

Cambios en la API

  • Se agregó la devolución de llamada onStart a detectDragGestures. (I67269, b/179995594)
  • Ya no son experimentales los modificadores para cambiar el tamaño de las funciones intrínsecas. (I15744)
  • Se cambió el nombre de MeasurementBlocks por MeasurementPolicy, que se convirtió en una interfaz divertida. Se actualizaron o simplificaron las API de diseño para que usen MeasurePolicy. (Icab48, b/167662468, b/156751158)
  • Se reemplazó InteractionState por [Mutable]InteractionSource.
    • Las interfaces son responsables de emitir o recopilar eventos de interacción.
    • En lugar de pasar el elemento interactionState = remember { InteractionState() } a componentes 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)
  • Agrega la interfaz AccessibilityMananger y LocalAccessibilityMananger en CompositionLocals. (I53520)
  • Se quitaron los métodos obsoletos de LayoutCoordinates; usa la función en lugar de la propiedad para positionInParent y boundsInParent. (I580ed, b/169874631, b/175142755)
  • Se reemplazó el método typealiases por tipos subyacentes:
    • ColorStop ahora es Pair<Float, Color>.
    • SpanStyleRange ahora es AnnotatedString.Range
    • ParagraphStyleRange ahora es AnnotatedString.Range<ParagraphStyle>.
    • StringAnnotation ahora es AnnotatedString.Range<String>.
    • (I8dd1a)
  • Se creó un nuevo elemento TextInputSession para sesiones de entrada a partir de componentes de texto de bajo nivel, como CoreTextField. (I8817f, b/177662148)
  • Placeable ahora expone measuredSize, que representa el tamaño hasta el cual se mide realmente el diseño secundario. Es posible que este tamaño no respete las restricciones de medición. (Ib2729, b/172560206, b/172338608)
  • Agrega un modificador selectionGroup que permite marcar la colección de Tabs o RadioButtons con fines de accesibilidad. (Ie5c29)
  • Ahora es obligatorio el uso de defaultFactory 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 quitaron los métodos obsoletos de módulos de IU. (I646f6)

  • Se cambiaron los nombres de los modificadores de tamaño. Se cambió el nombre de modifier.width a requiredWidth, de modifier.height a requiredHeight y de modifier.size a requiredSize. Se cambió el nombre de modifier.preferredWidth a width, de preferredHeight a height y de preferredSize a size. (I5b414)

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

  • Ahora imageResource y vectorResource son funciones de extensión en las complementarias de ImageBitmap y ImageVector, respectivamente. Se borraron funciones load{Image,Vector,Font}Resource. (I89130)

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

  • Se cambió el nombre de Providers a CompositionLocalProvider.

    • El constructor Composition ya no acepta ningún parámetro clave y es obsoleto.
    • Se convirtió currentCompositeKeyHash en una propiedad de nivel superior que admite composición en lugar de una función de nivel superior que admite composición.
    • Se migraron CompositionData y CompositionGroup al espacio de nombres androidx.compose.runtime.tooling
    • Se convirtió ComposableLambda en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
    • Se convirtió ComposableLambdaN en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
    • Se migró la función snapshotFlow al espacio de nombres androidx.compose.runtime
    • Ya no es experimental el método de combinación de SnapshotMutationPolicy.
    • Se quitó la función clearRoots de nivel superior de @TestOnly. Ya no es necesaria.
    • Se quitaron las funciones keySourceInfoOf y resetSourceInfo. Ya no son necesarias.
    • Se quitó el elemento Composer.collectKeySourceInformation. Ya no es necesario.
    • Se quitaron los métodos joinedKeyRight, isJoinedKey y joinedKeyLeft. Ya no son necesarios.
    • Se migraron y reorganizaron varias API de nivel superior en archivos diferentes. Debido a la semántica de la clase de archivos de Kotlin, se romperá la compatibilidad binaria, pero no la compatibilidad de origen, por lo que no debería ser un problema para la mayoría de los usuarios.
    • (I99b7d, b/177245490)
  • Se quitó ComponentActivity.setContent() de Compose:ui. Usa la de androidx.activity:activity-compose:1.3.0-alpha01. Se quitaron viewModel() y LocalViewModelStoreOwner de Compose:ui. Usa las de androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01. (I6f36b)

  • Se modificó Modifier.scrollable. Ahora, usa la interfaz Scrollable en lugar de la clase ScrollableController. (I4f5a5, b/174485541, b/175294473)

  • Se quitó la compatibilidad con CustomUniforms de PointerInputModifier. (I02707, b/175294473)

  • SnapshotStateObserver dejó de ser experimental (Id2e6a).

  • Se borraron algunas APIs obsoletas (Ice5da, b/178633932).

  • Se quitaron longPressGestureFilter y doubleClickGestureFilter. Usa modificador.pointerInput con funciones auxiliares, como detectTapGestures. (I2fedf, b/175294473)

  • Se quitó la API de String.format que refactorizó los usos en varios métodos toString para no aprovechar internamente el formato String.format. (Id1290)

  • Se quitaron las aserciones de dp. (I798d2)

  • Se quitó androidx.compose.runtime:runtime-dispatch (I55feb).

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

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

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

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

  • Se agregó una función auxiliar que es útil para configurar la misma acción para todas las devoluciones de llamada de ImeAction (I63447, b/179226323).

  • Se quitó la devolución de llamada de SoftwareKeyboardController de todos los campos de texto que, en breve, se reemplazarán por una nueva API (Iae869, b/168778053)

  • Dejó de usarse FontSpan y FontWeigthStyleSpan y, por lo tanto, se quitaron. (Ie5b56, b/177423444)

  • Se realizaron los siguientes cambios en la API de Material:

    • Se agregó el parámetro contentPadding a Top/BottomAppBar para permitir personalizar el relleno predeterminado.
    • Se reorganizaron los parámetros en BackdropScaffold a fin de cumplir con los lineamientos de las API para los parámetros obligatorios antes de los parámetros opcionales.
    • Se migró el parámetro icon en BottomNavigationItem para que sea posterior a selected y onClick.
    • Se cambió el nombre del parámetro alwaysShowLabels en BottomNavigationItem a alwaysShowLabel.
    • Se cambiaron los nombres de los parámetros bodyContent en algunos componentes a solo content.
    • Se reorganizaron los parámetros en ButtonDefaults.buttonColors(). Ten en cuenta que, debido a que no cambió el tipo de parámetros, no se producirá un error en tu código. Asegúrate de estar usando parámetros con nombre o actualiza el orden de manera manual; de lo contrario, tu código no funcionará como antes.
    • Se agregó el parámetro secondaryVariant a darkColors(). Por lo general, este color es el mismo que el de secondary en el tema oscuro, pero agrega coherencia y mayor personalización.
    • Se quitó ElevationDefaults y animateElevation() de la superficie de la API pública, ya que no se usaban con frecuencia ni eran útiles.
    • Se cambió el nombre de onValueChangeEnd en Slider a onValueChangeFinished y se hizo nulo.
    • Se cambió el nombre del parámetro text en Snackbar a content para brindar coherencia.
    • Se agregó el parámetro contentPadding a DropdownMenuItem para permitir la personalización del relleno predeterminado y se convirtió content en una extensión en RowScope.
    • Se cambió el nombre de ModalDrawerLayout a ModalDrawer.
    • Se cambió el nombre de BottomDrawerLayout a BottomDrawer.
    • (I1cc66)

Correcciones de errores

  • Se agregó una API para usar recursos AnimatedVectorDrawable en Compose. Usa animatedVectorResource para cargar un XML <animated-vector> como AnimatedImageVector y anímalo con pintorFor. (I8ea91)
  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053)

Versión 1.0.0-alpha12

10 de febrero de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • Se quitó la compatibilidad con ViewGroups de UiApplier. Se quitaron los elementos emitView obsoletos que admiten composición. (Ifb214)
  • Modifier.pointerInput ahora requiere claves de memoria para indicar cuándo se debe reiniciar la corrutina de detección de la entrada del puntero para las dependencias nuevas. (I849cd)
  • El nombre de CompositionReference cambió a CompositionContext. (I53fcb)
  • El nombre de Bounds se cambió a DpRect. (I4b32a)
  • Actualización de pruebas: hasText() verificará los textos de entrada y label/hint/placeholder en el campo de texto (Iab803).
  • Se movieron viewModel(), que es componible, y LocalViewModelStoreOwner a androidx.lifecycle.viewmodel.compose. Para su uso, deberás agregar una nueva dependencia androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 por separado (I7a374)
  • Se permite utilizar acciones anulables en AccessibilityAction, etiquetas de cambio de acción en AccessibilityAction y CustomAccessibilityAction de CharSequence a String (I0dc82).
  • Para que las convenciones de nombre coincidan mejor con ImageBitmap y con ImageVector, se cambió el nombre de ImagePainter por BitmapPainter para que sea paralelo a VectorPainter (Iba381, b/174565889)
  • Se mejoraron las APIs de prueba de substring con una substring como argumento (Icbe78).
  • Se agregó un objeto Modifier.focusOrder() que acepta un elemento FocusRequester sin especificar el orden de foco personalizado para una expresión lambda. Esto es útil cuando solo se necesita especificar una referencia en lugar de un orden de foco personalizado para un objeto componible (I4f52a, b/179180978).
  • Se movió ComponentActivity.setContent a androidx.activity.compose.setContent en el módulo androidx.activity:activity-compose. (Icf416)
  • Se quitaron los métodos copy() y de desestructuración de varias clases en las que se usaban con muy poca frecuencia. (I26702, b/178659281)
  • Se movió el elemento Popup para que sea específico de plataformas. Se cambió el nombre de AndroidPopupProperties a PopupProperties, y se movió isFocusable a un parámetro focusable en PopupProperties. (Ieeea5)
  • Se movió el elemento Dialog para que sea específico de plataformas. Se cambió el nombre de AndroidDialogProperties a DialogProperties. (I4ef69, b/179138130)
  • LayoutNode ahora es un elemento interno. (I8a7b1, b/175103944)
  • Se reemplazó Constraints.enforce con Constraints.constrain. (I8b8ea)
  • loadFontResource dejó de estar disponible. En su lugar, usa fontResource. imageResource, loadImageResource, vectorResource y loadVectorResource dejaron de estar disponibles. o painterResource. (I6b809)
  • Por motivos de rendimiento, la semántica de ScrollAxisRange ahora toma expresiones lambda que muestran objetos Float en lugar de valores Float directos. (If4a35, b/178657186)
  • Se agregaron una semántica de EditableText para marcar texto de entrada editable del campo de texto con fines de accesibilidad y los métodos de prueba correspondientes para verificar la semántica (I8e07a).
  • Ahora OwnerLayer/OwnerScope/OwnerSnapshotObserver es un elemento interno. (I4ffaf, b/175103944)
  • Se cambió el nombre de toIntPx() a roundToPx(). (I9b7e4, b/173502290)
  • Se cambió el nombre de IntBounds a IntRect y se mejoró la API. (I1f6ff)
  • Se actualizó la API de Snapshot para que sea más coherente con los lineamientos de API y para ocultar las clases de implementación interna en la API pública (Id9e32)
  • Se agregaron las acciones de semántica para expandir y contraer. Se agregaron los elementos expand y halfExpand en ModalBottomSheetState (Ib5064).
  • Modifier.dragGestureFilter dejó de estar disponible. Usa Modifier.pointerInput { detectDragGestures (...)} en su lugar. De forma alternativa, puedes usar Modifier.draggable para arrastrar un eje. (I0ba93, b/175294473)
  • Se cambió el nombre de Ambients para que coincida con Ambient -> CompositionLocal. Los elementos Ambients se solían llamar AmbientFoo; ahora los elementos CompositionLocals se llaman LocalFoo. (I2d55d)
  • Se quitó el objeto BaseTextField que dejó de estar disponible. En su lugar, usa BasicTextField. (I71368)
  • Se movió la selección a la base. (I7892b)
  • Se quitará el objeto componible savedInstanceState { 0 }, de forma similar a como se quitó el objeto 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 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)
  • Dejaron de estar disponibles las utilidades emptyContent() y (@Composable () -> Unit).orEmpty(), dado que ya no tienen un valor ni impacto de rendimiento positivos. (I0484d)
  • snapshotFlow y withMutableSnapshot dejaron de ser experimentales. (I6a45f)
  • Ahora se pueden cerrar los elementos Recomposer. Si se cierran, continuarán componiendo hasta que se completen las corrutinas de elementos secundarios de composición. Se cambió el nombre de Recomposer.shutDown a cancel para que haya una diferencia con la acción de cerrar. (Ib6d76)
  • Se cambió el nombre de UiSavedStateRegistry por SaveableStateRegistry y el de AmbientUiSavedStateRegistry por AmbientSaveableStateRegistry, y se movieron los dos elementos al paquete androidx.compose.runtime.saveable (I30224)
  • Se cambió el nombre de androidx:compose:runtime:runtime-saved-instance-state por androidx:compose:runtime:runtime-saveable (I6dcac).
  • Se borraron muchas API que dejaron de estar disponibles en el paquete de IU. (I2f2dc)
  • El artefacto compose:runtime-dispatch dejó de estar disponible. Ahora se puede encontrar MonotonicFrameClock en compose:runtime y AndroidUiDispatcher en compose:ui. (Ib5c36)
  • Las clases Outline.* ya no son clases de datos. (I4879e, b/178001427)
  • Se quitó view.captureToImage(), pero no tiene reemplazo. (I7fcd2)
  • Se introdujo la API de ColorMatrix para modificar valores RGB de contenido fuente y se refactorizó la API de ColorFilter para que sea una interfaz y coincida con la implementación de PathEffect. (Ica1e8)
  • Se agregó el parámetro layoutDirection al objeto createOutline del elemento Shape. Esto permite crear formas que reconozcan la dirección en el diseño. (I57c20, b/152756983)
  • onImeActionPerformed dejó de estar disponible. En su lugar, usa KeyboardActions. (If0bbd, b/179071523)
  • Se introdujo un elemento de contexto de corrutinas InfiniteAnimationPolicy que se aplicará en animaciones infinitas. No se instala ninguna política de forma predeterminada, excepto cuando se ejecutan pruebas con ComposeTestRule. (I50ec4, b/151940543)
  • Se quitó el elemento canDrag de Modifier.scrollable. (Id66e7, b/175294473)
  • Se cambió el nombre de LayoutCoordinates.parentCoordinates por LayoutCoordinates.parentLayoutCoordinates para habilitar una propiedad parentCoordinates nueva. Ahora, la propiedad parentCoordinates ofrece el elemento superior LayoutCoordinates del modificador. Esto permitirá crear casos de uso más completos para onSizeChanged() y onGloballyPositioned() (Idfbfd, b/177926591).
  • Los elementos tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter y pressIndicaitonGestureFilter dejaron de estar disponibles. En su lugar, usa Modifier.clickable o Modifier.pointerInput con la función detectTapGestures. (I6baf9, b/175294473)
  • Se quitó el elemento unregisterProvider de SaveableStateRegistry. Ahora, registerProvider() muestra el objeto SaveableStateRegistry.Entry, que se puede usar para cancelar un registro. (Ic4274, b/178583739)
  • Se cambió el nombre de rememberSavedInstanceState() a rememberSaveable() y se movió al paquete androidx.compose.runtime.saveable. (I1366e, b/177338004)
  • Se quitaron los elementos CoreText y CoreTextField de la API pública.
    • Se quitó la sobrecarga SelectionContainer que dejó de estar disponible.
    • (I99c19)
  • Las pruebas en las que se usa Compose en jerarquías que directamente se agregan a WindowManager o se quitan de allí ahora son más estables (Ie81ed, b/175765614)
  • Se quitó Recomposer.current(). Ahora [Abstract]ComposeView es la opción predeterminada para los elementos Recomposer aplicados a ventanas y creados de forma diferida que controla ViewTreeLifecycleOwner para la ventana. La recomposición y las marcas de animación basadas en withFrameNanos-based se pausan cuando se detiene el ciclo de vida del host. (I38e11)
  • Recomposer.runningRecomposers ahora ofrece un StateFlow global de RecomposerInfo de solo lectura para observar el estado de la composición en proceso. Se prefiere esta API en lugar de Recomposer.current(), que dejó de estar disponible. (If8ebe)
  • Se movieron a androidx.compose.runtime.saveable los elementos Saver, listSaver(), mapSaver() y autoSaver de androidx.compose.runtime.savedinstancestate (I77fe6).
  • El objeto EditCommands acepta AnnotatedString. Sin embargo, este cambio es solo para la API, y la edición de texto multiestilo aún no se implementó (I4c3ea)
  • Se quitaron los elementos Uptime y Duration. (Ib9bf4, b/177420019)
  • Se movió CompositionData.asTree() y las APIs relacionadas al módulo independiente ui-tooling-data, y se marcaron como experimentales (Ic95b8).
  • Se cambió el nombre de los parámetros en RounderCornerShape, CutCornerShape y CornerBasedShape de left/right a start/end para admitir la duplicación automática de la forma en la dirección de derecha a izquierda. Se introdujeron los objetos AbsoluteRounderCornerShape y AbsoluteCutCornerShape para los casos en los que no se prefiere la duplicación automática. (I61040, b/152756983)
  • Se refactorizó la API a la que orienta el complemento de compilador de Compose para usar una interfaz en lugar de una clase concreta. La interfaz ya dejó de usar un parámetro de tipo.

    Este es un cambio interno que no debería afectar la compatibilidad del código fuente, pero es un cambio rotundo del objeto binario. (I3b922, b/169406779)

  • Se quitó la función StringBuilder.deleteAt, que se volvió pública de forma no intencional. (Id6ed9)

Correcciones de errores

  • Los objetos ComposeView ubicados en jerarquías de vistas que son elementos secundarios de otra composición ahora alojan composiciones secundarias de sus entidades principales (I92883).
  • Se actualizó la API de imageFromResource de Compose para volver a utilizar la caché del elemento de diseño del recurso cuando se cargan objetos ImageBitmap. (If3627, b/178751994)

Versión 1.0.0-alpha11

28 de enero de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha11. La versión 1.0.0-alpha11 contiene estas confirmaciones.

Cambios en la API

  • WithConstraints se rediseñó y nombró BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
  • Key.DPadUp dejó de estar disponible. En su lugar, usa Key.DirectionUp. (Iab335, b/177954892)
  • A partir de ahora, la interfaz de propietario es interna. (If8e35)
  • Se agregó la API de FocusManager.moveFocus() para mover el enfoque de manera programática. (I045cb, b/177681839)
  • Se cambió PopupPositionProvider para usar coordenadas relativas de ventana, no coordenadas globales. Se cambió el nombre de parentGlobalBounds a anchorBounds y se modificó windowGlobalBounds para que sea windowSize: IntSize. (I2994a)
  • Duration y Uptime se reemplazarán por Long en milisegundos, y este paso quitará la dependencia de entrada del puntero en esas clases (Ia33b2, b/175142755, b/177420019)
  • Se agregó AmbientSavedStateRegistryOwner de manera similar al AmbientLifecycleOwner y AmbientViewModelStoreOwner existentes. (I9a3e8, b/176756365)
  • Se actualizó la API de gráficos vectoriales para admitir el análisis del tono aplicado a la raíz de los gráficos vectoriales (Id9d53, b/177210509)
  • Se agregó toolType a PointerInputChange para diferenciar dispositivos. (Iac787, b/175142755)
  • Se cambió el nombre de AmbientWindowManager por AmbientWindowInfo (I2686a, b/177084714, b/177084983).
  • Los métodos de coordenadas globales dejaron de estar disponibles y se crearon nuevos métodos de coordenadas basados en ventanas. (Iee284)
  • Se agregó Modifier.toolingGraphicsLayer, que agrega un modificador de capas de gráficos cuando se activa la inspección. (I315df)
  • Ahora, FocusRequester.createRefs se marca como experimental, ya que podría sufrir cambios. (I2d898, b/177000821)
  • Se cambió el nombre de SemanticsPropertyReceiver.hidden a invisibleToUser y se marcó como @ExperimentalComposeUiApi. Se cambió el nombre de AccessibilityRangeInfo a ProgressBarRangeInfo, y el de stateDescriptionRange a progressBarRangeInfo. Se cambió el nombre de AccessibilityScrollState a ScrollAxisRange, el de horizontalAccessibilityScrollState a horizontalScrollAxisRange, y el de verticalAccessibilityScrollState a verticalScrollAxisRange. (Id3148)
  • Se quitó PointerInputData y se modificó el PointerInputChange para otorgarle todos los campos de PointerInputData. Se convirtieron en internos los elementos PointerInputEvent y PointerInputEventData debido a que no se usan en ninguna API pública. (Ifff97, b/175142755)
  • Se actualizó GraphicsLayerScope para implementar la densidad a fin de admitir las conversiones de dp en píxeles sin procesar. (Ied528, b/176819695)
  • Se actualizó la API de Matrix para seguir el orden de las filas principales y proporcionar constantes de índice para ayudar con las conversiones entre diferentes representaciones de matrices y hacer coincidir la lógica de conversión de framework entre SkMatrix y Matrix4 de forma interna. (I432e6)
  • Se quitaron los métodos experimentales de monotonicFrameAnimationClockOf (Ib753f, b/170708374).
  • Se traslada String.fintPrecedingBreak y String.fingFollowingBreak a InternalTextApi. (I657c4)
  • Se quitó androidx.compose.ui.util.isSurrogatePair de la API pública. (Ia9494)
  • Se cambió el nombre de TransformedText.transformedText a TransformedText.text.
    • TransformedText ya no es una clase de datos. (Ie672a)
  • Se quitó data class de las siguientes clases:
    • InlineTextContent
    • LocaleList (I605c7)
  • Las siguientes clases ya no son clases de datos:
    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • Se cambió VisualTransformation para que sea una interfaz funcional. (I3bba4)
  • Se agregó un tipo de parámetro de referencia de función. (I5e1bd)
  • Se agregaron límites transformados a InspectorNode. (Ice42f)

Correcciones de errores

  • onCommit, onDispose y onActive dejaron de estar disponibles, y se los reemplazó por las APIs de SideEffect y DisposableEffect (If760e).
  • Se realizaron cambios en las funciones de fábrica de Font/FontFamily/Typeface.

    • Se agregaron funciones de fábrica que comienzan con mayúscula.
    • Las funciones anteriores con letra minúscula dejaron de estar disponibles.
    • Las nuevas funciones de fábrica muestran la FontFamily en lugar de subclases.
    • Se ocultaron los constructores de las subclases, por lo que solo se pueden construir mediante funciones de fábrica.
    • Se cambió el nombre de Font.asFontFamily a Font.toFontFamily. (I42aa7)
  • Se agregó ComposeContentTestRule, que 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)

  • Se agregó un parámetro de descripción de contenido a Image y Icon. Este se usa para proporcionar una descripción a los servicios de accesibilidad. (I2ac4c)

  • Como debe evitarse displaySize, este debe quitarse. En general, es mejor usar el tamaño de onRoot() o, al menos, el tamaño de la ventana. (I62db4)

  • OnSizeChanged informó el tamaño del contenido del diseño. Ahora informa el tamaño en su posición dentro de la cadena de modificador. (I36b78, b/177562900)

  • La API de emit() y todas las sobrecargas dejaron de estar disponibles y cambiaron de nombre a ComposeNode. Las API son idénticas; solo tienen un nombre diferente para seguir las convenciones de nomenclatura de Compose. (I4137b)

  • TextFieldValue acepta AnnotatedString. Sin embargo, este cambio es solo para la API y la edición de texto multiestilo todavía no se implementó.

    • Se quitó initial de los parámetros del constructor EditingBuffer. (I326d5)
  • invalidate y compositionReference() dejaron de estar disponibles y se reemplazaron con currentRecomposeScope y rememberCompositionReference, respectivamente. (I583a8)

  • AnnotatedString se modificó para que se extendiera de kotlin.CharSequence. Por lo tanto, la longitud y subSequence ahora son funciones de instancia, y se quitaron las funciones de extensión. (Iaf429)

  • CompositionLifecycleObserver dejó de estar disponible y se reemplazó por RememberObserver.

    RememberObserver es un reemplazo 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)

  • Las operaciones aritméticas entre 2 o más TextUnits dejaron de estar disponibles. Las funciones TextUnit.Sp y TextUnit.Em dejaron de estar disponibles antes que las funciones de extensión, como Int.sp y Int.em. (I48369)

  • De forma predeterminada, los recursos de las bibliotecas sin recursos públicos declarados de manera explícita (p. ej., a través de public.xml) son privados. (Ia1dcc, b/170882230)

  • ScrollableColumn y Row dejaron de estar disponibles. El uso de ScrollableColumn es menos eficiente en comparación con LazyColumn cuando tienes contenido que lleva mucho desplazamiento, ya que con LazyColumn solo se podía componer, medir o dibujar elementos visibles. Para evitar que los usuarios sufran la ineficiencia, decidimos dar de baja ScrollableColumn y ScrollableRow para promover el uso de LazyColumn y LazyRow. Los usuarios aún pueden decidir no usar el comportamiento diferido y recurrir a los modificadores directamente de la siguiente manera: Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083).

  • Se agregó un método de fábrica items(count: Int) nuevo para el alcance de LazyColumn/LazyRow/LazyVerticalGrid. items(items: List) y itemsIndexed(items: List) ahora son funciones de extensión, así que debes importarlas manualmente cuando las uses. Se agregaron sobrecargas de extensiones nuevas para Arrays: items(items: Array) y itemsIndexed(Array). (I803fc, b/175562574)

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

    • Usa ImeAction.Default en lugar de ImeAction.Unspecified. (Ie1bcc)
  • Se implementó TestCoroutineDispatcher en pruebas. (I532b6)

  • Se cambió el nombre de TextInputService.onStateUpdated a updateState. (Id4853)

  • La transición TransitionDefinition-based dejó de estar disponible. (I0ac57)

  • Se quitó TextUnitType.Inherit. En su lugar, usa TextUnitType.Unspecified. (I9ff64)

Versión 1.0.0-alpha10

13 de enero de 2021

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambio rotundo

  • La reestructuración del compilador interno de la API permite realizar cambios por lote en los nodos que se generan a partir de la composición a la fase "aplicar cambios", después de que se completan todas las funciones @Composable.

    Este es un cambio rotundo de comportamiento que podría afectar el código de la aplicación, dado que los nodos ya no estarán disponibles en las API internas ni en las experimentales hasta que se hayan aplicado los cambios. Por lo general, se puede evitar si se envuelve el código con esas dependencias en un elemento componible SideEffect para diferir la ejecución del código hasta que se hayan creado e inicializado los nodos. (I018da)

Cambios en la API

  • Se agregó Modifier.focusOrder(), que se puede usar para especificar un orden de recorrido de foco personalizado (I90cf5, b/175899543, b/170155556, b/170155429).
  • Se quitó focusObserver, que era obsoleto. En su lugar, utiliza onFocusChanged o onFocusEvent. (I3ecb9, b/175156387)
  • Se realizaron cambios en la API de EditOperations.
    • Se cambió el nombre de EditOperation a EditCommand.
    • Se agregó el sufijo Command para implementaciones concretas de EditOperation.
    • Las EditCommand ya no son clases de datos.
    • Se cambió el nombre de la función EditOperation.process a applyTo.
    • Se cambió el nombre de InputEventListener a InputEventCallback.
    • (I0a366)
  • Se quitaron PxSquared, PxCubed y PxInverse sin usar. Se modificó Size.center() para que sea una propiedad. (I973f7)
  • El módulo ui-test ahora podrá configurar la creación de Recomposer para las IUs que se están probando (Ibebd8).
  • Se modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
  • Se cambió el nombre de @ExperimentalTesting por @ExperimentalTestApi para que sea coherente con anotaciones de API experimentales similares (Ia4502, b/171464963).
  • Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
  • Se quitaron las clases DpInverse, DpSquared y DpCubed sin usar. (I4d62b)
  • Se cambió el nombre de Constraints#satisfiedBy a isSatisfiedBy. (I9cf5c)
  • Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (I72fd1)
  • Se agregó isSpecified, isUnspecified y useOrElse para las clases intercaladas con una constante Unspecified. (I93f7b, b/174310811)
  • Se expandieron las APIs de [Abstract]ComposeView para permitir el reciclado de las vistas basadas en Compose, ya que se dispone la composición para volver a recrearla más adelante. Se agregaron API para instalar y descubrir elementos Recomposer y CompositionReferences aplicados a ventanas, con el objetivo de crear composiciones secundarias.

    Se agregó ViewCompositionStrategy para configurar la estrategia de descarte de composición de [Abstract]ComposeViews; el comportamiento predeterminado es que se descarta cuando se desconecta la ventana. (I860ab)

  • Se quitó la API pública de Any.identityHashCode(). (I025d7)

  • Se quitó la API de toStringAsFix para dar lugar al uso de String.format directamente. (Iaba6b)

  • Se agregó la opción de activar o desactivar el Strings.kt de Foundation. (I4a5b7, b 172366489)

  • Se trasladó nativeClass al módulo de IU y se la convirtió en clase interna. Se actualizaron los usos de nativeClass en implementaciones iguales a usar “es MyClass” en su lugar. (I4f734)

  • Modifier.focus() y Modifier.focusRequester() dejaron de estar disponibles. En su lugar, usa Modifier.focusModifier() y Modifier.focusReference(). (I75a48, b/175160751, b/175160532, b/175077829)

  • Se agregó SelectionRegistry.notifySelectableChange para notificar a SelectableManager las actualizaciones de Selectable. (I6ff30, b/173215242)

  • Se introdujo la propiedad Outline.bounds para obtener el rectángulo delimitador de varias implementaciones de contorno. (I16e74, b/175093504)

  • TestUiDispatcher dejó de estar disponible. En su lugar, usa Dispatchers.Main. (Ic171f, b/175385255)

  • ImeOptions y KeyboardOptions ya no son clases de datos. (I3c898, b/168684531)

  • Se realizaron cambios en la API de VisualTransformation.

    • Se cambió el nombre de OffsetMap a OffsetMapping.
    • Se cambió el nombre de OffsetMapping.identityOffsetMap a OffsetMapping.Identity.
    • PasswordTransformation ya no es una clase de datos.
    • Se movió OffsetMapping a su propio archivo.
    • (I0bdf3)
  • Se cambió el nombre de Position a DpOffset y se quitó getDistance(). (Ib2dfd)

  • Se cambió la función Dp.isFinite() a un valor Dp.isFinite. (I50e00)

Correcciones de errores

  • Recomposer ahora muestra un flujo de estado actual, lo que permite supervisar su actividad y la actividad de los efectos asociados. (Ifb2b9)
  • Ahora se puede acceder al keyEvent nativo a través de keyEvent.nativeKeyEvent (I87c57 o b/173086397).
  • Se reemplazó animate() 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)
  • Se agregó la nueva API de Animatable basada en corrutinas que garantiza la exclusividad mutua entre sus animaciones.
    • Se agregó DecayAnimationSpec para admitir animaciones de disminución multidimensionales.
    • (I820f2, b/168014930)

Versión 1.0.0-alpha09

16 de diciembre de 2020

Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • Se quitó el elemento KeyEvent.Alt obsoleto. Ahora, en su lugar, usa KeyEvent.isAltPressed. (Idd695)
  • Modifier.keyInputFilter y Modifier.previewKeyInputFilter dejaron de estar disponibles, por lo que se debe usar Modifier.onKeyEvent y Modifier.onPreviewKeyEvent en su lugar. (Idbf1b, b/175156384)
  • Dejó de estar disponible el elemento Modifier.focusObserver. En su lugar, usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)
  • Se cambió el nombre de HandlePointerInputScope por AwaitPointerEventScope y el de handlePointerInput() por awaitPointerEventScope() para las APIs de entrada de puntero de suspensión (Idf0a1, b/175142755).
  • Ahora la API de autocompletado es una experimental y requiere que la habilites (I0a1ec).
  • Se agregaron declaraciones de desestructuración para crear instancias de FocuSRequester (I35d84, b/174817008).
  • Se cambió el nombre de accessibilityLabel por contentDescription y el de accessibilityValue por stateDescription (I250f2)
  • Se quitaron los eventos personalizados de la API de entrada de puntero de suspensión (Ia54d5, b/175142755).
  • Se introdujeron varias funciones nuevas en SelectionRegistrar y también se cambió el nombre de onPositionChange por notifyPositionChange (Ifbaf7)
  • Se marcaron más miembros de LayoutNode como internos. (I443c6)
  • Se introdujo LayoutInfo para usarlo con herramientas y pruebas. (I9b190)
  • AndroidOwner se hizo interno. (Ibcad0, b/170296980)
  • Se quitó la anotación ExperimentalPointerInput. (Ia7a24)
  • Se agregó el sistema de desplazamiento anidado. Consulta Modifier.nestedScroll para obtener más detalles. (I36e15, b/162408885)
  • subcomposeInto(LayoutNode) se hizo interno. (Id724a)
  • Se modificó la interfaz de Applier para simplificar la creación de árboles de abajo hacia arriba en lugar de arriba hacia abajo.

    Se cambió el nombre del método insert() 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 agregaron las propiedades dismissOnBackPress y dismissOnClickOutside s AndroidDialogProperties. Estas permiten configurar el momento en el que se invocará el método onDismissRequest lambda del diálogo. (If5e17)

  • Se agregó la API de painterResource para controlar objetos de Painter que se cargan de manera opaca desde formatos de recursos en trama (como PNG) o VectorDrawable. Los usuarios ya no tienen que determinar el tipo de recurso por adelantado y pueden llamar a este método para obtener un objeto Painter que se pueda usar en los elementos de Image que admiten composición o los modificadores de Painter. (I2c703, b/173818471)

  • Se agregó Modifier.clearAndSetSemantics para borrar la semántica de los derivados y establecer nuevas. (I277ca)

  • Se movió ContentDrawScope al módulo ui-graphics para que esté con DrawScope. (Iee043, b/173832789)

  • Se introdujo la API de gráficos de PathEffect para proporcionar diferentes patrones a las formas con trazos. Se dejó de usar NativePathEffect y se reemplazó por la implementación real o esperada de PathEffect. (I5e976, b/171072166)

  • Se agregaron interfaces de IdlingResource a Compose como variantes admitidas de los recursos inactivos de Espresso para Compose. Se pueden registrar y cancelar su registro mediante ComposeTestRule. (I433f3)

  • Se quitó el registro global de ComposeIdlingResource y de los relojes en ComposeIdlingResource, o bien la cancelación de sus registros (I32660).

Correcciones de errores

  • Las expresiones lambda en los modificadores de compensación ahora muestran IntOffset en lugar de Float. (Ic9ee5, b/174137212, b/174146755)
  • Se quitó SlotTable, SlotReader y SlotWriter de la API pública. Anteriormente, se marcaban como InternalComposeAPI. Ahora, son elementos internos del módulo de Compose.

    Se agregaron ComposiciónData y ComposiciónGroup como reemplazo de la API de ui-tooling para que se usen con el fin de extraer información de composición. Son públicos, pero no están destinados para su uso fuera de la API de ui-tooling, ya que proporcionan la información sin procesar que interpreta la API de ui-tooling. (I31a9c)

  • Se refactorizó ShaderBrush para crear de forma diferida una instancia de sombreador cuando está disponible la información sobre el tamaño del entorno de dibujo. Esto es útil para definir gradientes que ocupan todos los límites de dibujo de un elemento componible en el momento de la composición, sin tener que llevar a cabo implementaciones personalizadas de DrawModifier.

    Dejaron de estar disponibles las API del constructor de la función de gradiente y se reemplazaron por los métodos de fábrica en un objeto de gradiente. (I511fc, b/173066799)

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

  • Dejó de estar disponible BuildCompat.isAtLeastR. (Idb37e)

  • Se agregó la función de fábrica buildAnnotatedString para compilar un elemento AnnotatedString. Dejó de estar disponible la función del compilador de annotatedString. (Idfe0b)

  • Se quitaron métodos de extensión en los elementos Float y Double para convertir valores a radianes. Se movieron a una función privada dentro de la implementación de PathParser, que es el único lugar en el que se usaban (I25f52).

Versión 1.0.0-alpha08

2 de diciembre de 2020

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

Cambios en la API

  • Se agregó la acción de semántica Descartar. (I2b706)
  • Se movieron las API de DrawModifier del paquete androidx.compose.ui a androidx.compose.ui.draw. Se creó el archivo DrawModifierDeprecated.kt para que incluya los métodos typealiases/helper para asistir en la migración de las APIs que dejaron de estar disponibles a las actuales. (Id6044, b/173834241)
  • Se cambió el nombre de Modifier.drawLayer a Modifier.graphicsLayer y se actualizaron las clases relacionadas con GraphicsLayer según los comentarios de la API. (I0bd29, b/173834241)
  • Se agregaron los métodos nuevos placeable.placeWithLayer() y placeable.placeRelativeWithLayer() que permiten que los diseños personalizados y los modificadores de diseño ubiquen un elemento secundario introduciendo una capa de gráficos como dibujo. En consecuencia, podemos primero optimizar los diseños nuevos de modo que, cuando se necesite trasladar un elemento secundario, no haya que volver a dibujar su contenido. Luego, se podrán aplicar transformaciones de dibujo para un elemento secundario (Ibd8f6, b/170296989, b/171493718, b/173030831).
  • Se quitó <T> de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8)
  • Se agregaron APIs de Modifier.scale/rotate como convenientes para drawLayer.
    • Se cambió el nombre de Modifier.drawOpacity a Modifier.alpha.
    • Se cambió el nombre de Modifier.drawShadow a Modifier.shadow. (I264ca, b/173208140)
  • Los campos de posición y tiempo de actividad de PointerInputData se hicieron no nulos. (Id468a)
  • MaterialTheme ahora configura los colores correctos para los controladores y el fondo de selección. Las apps que no son de Material pueden usar AmbientTextSelectionColors de forma manual para personalizar los colores usados para la selección. (I1e6f4, b/139320372, b/139320907)
  • Se agregó WindowManager.isWindowFocused para comprobar si la ventana del host está enfocada y un objeto WindowFocusObserver que proporciona una devolución de llamada onWindowFocusChanged. (I53b2a, b/170932874)
  • Se actualizó la API de TransformOrigin para obtener una sintaxis de desestructuración que muestre pivotFractionX y pivotFractionY como component1 y component2. (If43c4, b/173586560)
  • Se agregó la comprobación de lint para el nombre y la posición del parámetro lambda componibles para verificar la coherencia con los lineamientos de Compose. También se migraron algunas API que usaban children como nombre de su lambda al final a content, según la comprobación y orientación de lint. (Iec48e)
  • Se agregó una API para verificar si se habían presionado las teclas modificadoras Alt, Ctrl, Meta o Mayúsculas cuando se enviaba KeyEvent. (I50ed9)
  • Se agregó una nueva sobrecarga de Modifier.drawLayer(). Toma un bloqueo de lambda en un objeto GraphicsLayerScope nuevo donde se definen los parámetros de la capa de una forma que permita omitir la recomposición y la creación de un diseño nuevo cuando se produce el cambio de estado. DrawLayerModifier ahora es un elemento interno en la preparación para migrar su lógica al método placeable.placeWithLayer() de LayoutModifier (I15e9f, b/173030831).
  • Los entornos Ambient con el nombre Ambient como sufijo dejaron de estar disponibles, y se los reemplazó por nuevas propiedades con el prefijo Ambient, en función de otros lineamientos de la API de Compose y Ambients. (I33440)
  • Se trasladó androidx.compose.ui.text.Typeface a androidx.compose.ui.text.font.Typeface. (Ic2b81)
  • Se cambió el nombre del argumento de semántica mergeAllDescendants a mergeDescendants. (Ib6250)
  • Se incluyó un nuevo detector del gesto arrastrar en la API de entrada de puntero de suspensión, que también admite el bloqueo de orientación. (Icef25)
  • Se cambió el nombre de VectorAsset por ImageVector y se movió VectorAsset a Builder para que sea una clase de ImageVector de acuerdo con los lineamientos de la API. Se agregó un typealias de VectorAssetBuilder para vincularlo a ImageVector.Builder por motivos de compatibilidad (Icfdc8)
  • Se cambió el nombre de ImageAsset y los métodos relacionados a ImageBitmap. (Ia2d99)
  • Se agregó el parámetro zIndex para el objeto place() de PlacementScope, de modo que Modifier.zIndex() ahora funciona como LayoutModifier y cualquier diseño personalizado puede establecer parámetros zIndex para sus elementos secundarios en el bloque de posición. (I711f7, b/171493718)
  • Se trasladaron las propiedades de semántica básica a la IU (I6f05c).
  • Dejaron de estar disponibles place(Offset) y placeRelative(Offset). En su lugar, usa sobrecargas con compensaciones de Int. (I4c5e7).
  • Se quitaron APIs que dejaron de estar disponibles, como Modifier.onPositioned. En su lugar, usa Modifier.onGloballyPositioned. Se quitó Modifier.onDraw y se debe usar Modifier.onDrawBehind. Se quitó Modifier.plus y se debe usar Modifier.then. Se quitó Color.Unset y se debe usar Color.Unspecified. Se quitó la clase PxBounds. En su lugar, usa Rect. (Ie9d02, b/172562222)
  • Se actualizó la interfaz de Alignment y se hizo funcional. (I46a07, b/172311734)
  • Se agregó el detector de gestos para presionar, presionar dos veces, mantener presionado y la indicación de presión mediante la nueva entrada de puntero suspendida. También se agregaron algunas utilidades que facilitan la tarea de los desarrolladores para escribir sus propios detectores de gestos. (I00807)
  • Se cambió el nombre de id a layoutId para LayoutIdParentData. Se cambió el nombre de Measurable.id a Measurable.layoutId. (Iadbcb, b/172449643)
  • Se agregó un nuevo detector de gestos multitáctil que incluye asistentes para detectar acciones de rotación, zoom y desplazamiento. (Ic459d)
  • Se introdujeron las APIs de SweepGradientShader y SweepGradientBrush (Ia22c1)
  • El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
  • Se agregaron APIs de desplazamiento basadas en corrutinas:

    Se agregaron LazyListState.snapToItem y LazyListState.smoothScrollBy, al igual que API de niveles inferiores para controlar el desplazamiento. Estas API proporcionan una interfaz de suspensión para controlar el desplazamiento que espera hasta que la acción finalice antes de mostrar el resultado. (Ie5642)

  • Se agregó Modifier.focusable en Foundation. Usa este elemento para agregar comportamiento enfocable a un componente con semántica y accesibilidad correctas. (I41eb9, b/152525426, b/162865824)

  • Se proporcionaron implementaciones predeterminadas de métodos y propiedades en AnimationClockTestRule que se pueden delegar a su clock (I7ea3d, b/173399709).

  • AndroidComposeTestRule ahora puede aceptar selectores de actividad personalizados. (Ib8288, b/153623653, b/154135019)

  • Dejó de estar disponible TextLayoutResult.getLineVisibleEnd. Como reemplazo, TextLayoutResult.getLineEnd ahora tiene un parámetro visibleEnd nuevo. (I73282)

  • Se actualizó la API de TextFieldValue.

    • TextFieldValue.composition se hizo de solo lectura.
    • Se quitó la excepción que se arrojaba para el rango de selección no válido. (I4a675, b/172239032)
  • Se agregó compatibilidad con TtsAnnotation para el motor de texto a voz. (I54cc6)

  • Se agregaron APIs nuevas para las animaciones que se ejecutan en corrutinas (Ied662).

Correcciones de errores

  • Se cambió el nombre del parámetro de alineación de Box a contentAlignment. (I2c957)
  • Se cambiaron los nombres de los modificadores de offsetPx a offset. Ahora toman parámetros lambda en lugar de State. (Ic3021, b/173594846)
  • Se agregó el parámetro resetInput a TextInputService#onStateUpdated. (I3e8f5, b/172239032, b/171860947)
  • Se agregó una comprobación de lint para los parámetros de modificación en funciones de componibilidad. Esta comprobación de lint verifica el nombre, el tipo de datos que se muestra, el valor predeterminado y el orden del parámetro para mantener la coherencia con los lineamientos de Compose. (If493b)
  • Se agregó una opción temporal para permitir que MonotonicFrameClock controle a TestAnimationClock. (I1403b, b/173402197)
  • Se agregó el wrapper Typeface de Android. Puedes cargar un Typeface de Android mediante la función typeface; es decir, typeface(Typeface.DEFAULT). También se cambió el nombre de typefaceFromFontFamily() a typeface(). (I52ab7)
  • Se agregó una comprobación de lint para verificar que las funciones de fábrica de Modifier se definan como extensiones en Modifier, de modo que se puedan encadenar con fluidez (I07981)
  • Se quitó el módulo ui-tests y sus stubs. (I3a7cb)
  • Recomposer ya no acepta EmbeddingContext. Las dependencias de programación requeridas se obtienen de effectCoroutineContext. FrameManager dejó de estar disponible. Las integraciones de plataforma deben inicializar su propio manejo global de instantáneas. (I02369)
  • Se pasa la información de estilo al nodo de accesibilidad. (If5e8d)
  • Se cambió el nombre de TextUnit.Inherit a TextUnit.Unspecified para mantener la coherencia con otras unidades. (Ifce19)

Compose UI versión 1.0.0-alpha07

11 de noviembre de 2020

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

Cambios en la API

  • Se introdujo la clase intercalada ScaleFactor para representar factores de escala de los ejes horizontales y verticales independientes para admitir casos de uso de escalamiento no uniforme.
    • Se agregó el método computeScaleFactor a ContentScale.
    • Se agregó ContentScale.FillBounds para realizar escalamientos no uniformes a fin de estirar los límites de src y completar el destino.
    • Se agregaron métodos de operador para calcular los parámetros de ScaleFactor con los parámetros Size.
    • (Ic96a6, b/172291582)
  • Se agregaron las fábricas BiasAlignment y BiasAbsoluteAlignment para crear alineaciones. (Iac836, b/169406772)
  • El desarrollador puede eliminar el enfoque de manera forzada. (I90372)
  • Se corrigió un error que provocaba que no se dibujara la elevación para vistas dentro de Compose. (If7782)
  • Se creó la API de onDrawBehind dentro de ContentDrawScope para que la convención de nombres coincida con Modifier.drawBehind. (I4fc3a, b/171955269)
  • Se agregó compatibilidad con la distancia de la cámara para complementar las transformaciones 3D rotationX/rotationY en las API de Layers. (I40213, b/171492100)
  • Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
  • Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
  • Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
  • Se quitó la opacidad del modificador drawShadow(), ya que era confusa. (I82c62, b/171624638)
  • Se quitó MeasureResult de MeasureScope. (Ibf96d, b/171184002)
  • Varios símbolos relacionados con el diseño se movieron de androidx.compose.ui a androidx.compose.layout.ui. (I0fa98, b/170475424)
  • Se quitó FocusState2, que era obsoleto. (I686cb, b/168686446)
  • ZIndexModifier ahora es un objeto interno. (I1808b, b/171493718)
  • Se actualizó el tipo de datos que se muestra del método lerp en los parámetros Size para mostrar un parámetro Size no nulo a fin de evitar cuadros innecesarios. (Ib0044)
  • Se agregó TestMonotonicFrameClock para probar el código que se basa en MonotonicFrameClock de Compose para esperar eventos de fotogramas de composición con runBlockingTest de kotlinx-coroutines-test (I4402f).
  • Se quitó GestureScope.localToGlobal (I15299, b/171462785).
  • Se agregó el buscador onAllNodesWithSubstring. (I81dd7, b/171462889)
  • androidx.ui.test dejó de estar disponible. Migra a androidx.compose.ui.test y androidx.compose.ui.test.junit4 (I452e8).

Correcciones de errores

  • Se movió captureToBitmap a captureToImage. (I86385)
  • foundation.Text dejó de estar disponible y se reemplazó por material.Text. Para ver una API de texto básica y sin tendencias que no consuma valores de un tema, consulta androidx.compose.foundation.BasicText. (If64cb)
  • Se actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
  • Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
  • Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
  • Se agregó provideDefault como alternativa para proporcionar ambientes y se puede usar a fin de especificar valores ambientales que solo se establecerán cuando no se haya proporcionado ningún valor ambiental. (Id6635, b/171024925)
  • BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
  • Se introdujo el módulo ui-test-junit4. (Ib91f8)
  • Se cambió el nombre de relativePaddingFrom a paddingFrom. Se agregó el modificador paddingFromBaseline para especificar distancias de límites de diseño a la línea de base del texto. (I0440a, b/170633813)
  • Se cambió el nombre de LaunchedTask a LaunchedEffect para conservar la coherencia con las API de SideEffect y DisposableEffect. No se permite el uso de LaunchedEffect sin parámetros de asunto para fomentar las prácticas recomendadas. (Ifd3d4)
  • Se incorporaron recursos componibles que se reescriben cuando se actualiza la configuración (I6387c, b/167352819)
  • Recomposer ahora requiere CoroutineContext en la construcción. (Ic4610)
  • Se suman valores zIndex cuando se aplican varios Modifier.zIndex(). Anteriormente, ganaba el primero. (Ic514c, b/170623936)
  • Se realizaron cambios en la implementación interna de SlotTable que no deberían afectar a la API pública (If9828)
  • Se agregó la opción IME de corrección automática del teclado. (I57b8d)
  • Se movió androidx.ui.test a androidx.compose.ui.test (I9ffdb).
  • Se quitó TKeyboardOptions.toImeOptions de la API pública. (Ic2e45)

Contribución externa

  • Se inhabilitó la publicación del artefacto interno androidx.compose.ui:ui-text-android. (Ib93fa)

Versión 1.0.0-alpha06

28 de octubre de 2020

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

Cambios en la API

  • Recomposer ahora es CompositionReference y es un elemento superior de composición válido. El Recomposer explícito ahora es obligatorio en menos lugares. (I4036f)
  • VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter para indicar mejor que la API componible aprovecha internamente "remember" para conservar datos entre las composiciones (Ifda43)
  • Se actualizó la API de Modifier.drawWithCache para exponer ContentDrawScope como alcance del receptor en lugar de DrawScope para proporcionar a las implementaciones la capacidad de reordenar los comandos de dibujo. Esto sirve para combinar o ajustar casos de uso en los que los píxeles de contenido deben procesarse primero para que el algoritmo del modo de variación correspondiente se aplique de forma correcta (Ie7ec8)
  • Se movió SimpleContainer a PopupTestUtils.kt. (I78c57)
  • ConsumedData ya no es una clase de datos. Para obtener más información, consulta https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219. (I1737f)
  • Se corrigió la posición del controlador Rtl. (I6e1e0)
  • Se refactorizaron DrawScope y ContentDrawScope para que sean interfaces en lugar de clases abstractas.
    • Se creó la implementación de CanvasDrawScope de DrawScope.
    • Se refactorizaron implementaciones de DrawScope para usar CanvasScope.
    • Se creó DrawContext para unir dependencias de DrawScope.
    • Se quitaron los métodos obsoletos de DrawScope. (I56f5e)
  • Cambio rotundo: se quitó el valor que se mostraba de PointerInputFilter.onPointerEvent(...), dado que el único valor que se puede modificar en los eventos del puntero es el de los datos de consumo. En lugar de mostrar datos de PointerInputFilter.onPointerEvent(...), ahora puedes mutar los datos de consumo de los objetos PointerEvents pasados. (I6acd0)
  • IntrinsicMeasureScope y MeasureScope se convirtieron en interfaces. (I1a087, b/170461665)
  • Se ocultó la función de combinación para AlignmentLine. (I9da1a, b/170612900, b/170611568)
  • Se agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
  • Se agregó la opción SelectAll al menú de selección. (Ief02b)
  • Se actualizó DrawTransform.rotate para tomar un parámetro dinámico predeterminado del centro que coincida con la documentación.
    • Se actualizó DrawScope.rotateRad a fin de consumir un Offset para que el punto dinámico coincida con otros métodos de transformación.
    • La sobrecarga de DrawScope.rotateRad que consumía números de punto flotantes para la coordenada x e y del valor dinámico dejó de estar disponible
    • (Iffcbb, b/170434992)

Correcciones de errores

  • Se habilitó la comprobación de lint de API para MissingGetterMatchingBuilder en androidx. (I4bbea, b/138602561)
  • Se agregó una prueba. (I6b8ae)
  • Se habilitaron transiciones en ComposeTestRule y se quitó la opción que permitía habilitar el cursor intermitente desde ComposeTestRule. (If0de3)
  • Se agregó la opción de IME KeyboardCapitalization. (I8ac38)
  • Se agregó la opción de teclado de una sola línea a CoreTextField. (I72e6d)
  • Se movió SimpleContainer a PopupTestUtils.kt (I65c3e).
  • Se cambió el nombre de la API de Radius por CornerRadius para expresar mejor la manera en que se usa en Compose. Se actualizó la documentación para indicar que la esquina negativa radii se fijará en cero. (I130c7, b/168762961)
  • Se mejoró la interoperabilidad de Android al continuar enviando MotionEvents a vistas secundarias de Android que muestran un resultado falso para onTouchEvent en todas las acciones excepto ACTION_DOWN. (I94c5a, b/170320973)
  • Se creó Box como función intercalada. (Ibce0c, b/155056091)

Contribución externa

  • Compatibilidad con diferentes configuraciones regionales para AnnotatedString.capitalize y AnnotatedString.decapitalize. (I4aa7f)

Versión 1.0.0-alpha05

14 de octubre de 2020

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

Cambios en la API

  • Se agregó una DSL para especificar la información de inspección. (Ic9a22)
  • Se movió LongPress a Text. (Iff2bc)
  • El objeto experimental Modifier.pointerInput suspende la entrada del modificador. (Ia77d2)
  • Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
  • Se quitó el constructor público para AndroidOwner. (Iacaef)
  • Las ventanas emergentes y los diálogos ahora heredan FLAG_SECURE desde la ventana superior. También se agregó la opción de configurar esto explícitamente. (I64966, b/143778148, b/143778149)
  • Los datos de consumo ahora son mutables. Además, las llamadas a funciones de extensión que generan consumo ahora no muestran un nuevo objeto PointerInputChange, sino que modifican el objeto PuinterInputChange proporcionado.

    Este es el primero de 2 pasos para hacer que los datos de PointerEvent sean mutables y que el código de usuario no pueda editar otros datos del puntero. El segundo paso es quitar el tipo de datos que se muestra de List<PointerInputChange> de PointerInputFilter.onPointerEvent(...). (Id067e)

  • Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)

  • Ahora, onGloballyPositioned es una función intercalada (I15830).

  • Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)

  • Se agregó la propiedad hasPendingMeasureOrLayout a Owner para indicarle al propietario si tiene derechos de diseño pendientes (I3d9f8, b/169038599)

  • Se agregó una API para que borre el enfoque de manera programática (Ie1dc2, b/161487952).

  • Se quitó PointerInputFilter.onPointerInput(...). PointerInputFilter.onPointerEvent(...) debe usarse en su lugar. (I6f04a)

  • Cambios a Size

    • Se quitó Size.getFliped.
    • Se quitó Size.rem.
    • Se quitó Size.truncDiv. (Ief44d, b/169790720)
  • Como parte de la estandarización de los valores sentinela para las clases intercaladas, se cambia el nombre a Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas. (I97611, b/169797763)

  • Se agregó TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)

  • Se cambió el nombre del parámetro scope dentro de AnnotatedString.Builder.addStringAnnotation a tag para mantener la coherencia de la API. (I7c8cb)

Correcciones de errores

  • Se mejoró el rendimiento de desplazamiento de LazyColumn/Row al hacer menos trabajo de subcomposición en cada desplazamiento. Se agregó el nuevo método hasInvalidations() para la clase Composición. Se cambió el nombre del método hasPendingChanges() de Recomposer por hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
  • Se actualizaron los parámetros de Size.Unspecified a Float.NaN en lugar de Float.POSITIVE_INFINITY. Se actualizaron las implementaciones de Painter para verificar con Size.Unspecified, así como Sizes no finitos. (I95a7e)
  • El orden de las llamadas a place() en los diseños personalizados ahora define el orden de dibujo para los elementos secundarios. (Ibc9f6)
  • Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
  • Se agregaron stubs para las clases de Android que se encuentran en plataformas anteriores a fin de evitar el uso de reflejo cuando sea posible. (Ia1790)
  • Error corregido: Si el teclado en pantalla hacía que la app tradujera, las coordenadas de entrada del puntero se convertían en errores (Ic4cec, b/163077821)

Versión 1.0.0-alpha04

1 de octubre de 2020

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

Cambios en la API

  • Se agregó OwnerScope para permitir la recopilación de alcances de observación de diseños y dibujos cuando ya no son válidos. (Ic4cf8)
  • Se agregó OnRemeasuredModifier y onSizeChanged() para recibir una devolución de llamada cuando cambió la medida y el tamaño del diseño del contenido, respectivamente. (I657cf, b/154108792)
  • Se agregó la acción de semántica de clics largos. (I6281b, b/156468846)
  • FocusManager ahora es privado. (I7872f)
  • Se actualizó la implementación para crear una implementación dedicada de DrawCacheModifier en lugar de agregar propiedades opcionales en DrawModifier.

    Se actualizó la documentación para varios métodos. (Ibd166)

  • Se creó el intercalado de TextRange para evitar la creación de objetos. (Id034b)

  • Ya no se pueden leer PlacementScope#parentWidth ni PlacementScope#parentLayoutDirection desde el bloque de ubicación de un diseño personalizado. (Icc1ae, b/168295623)

  • Se agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)

  • Se introdujo Modifier.drawWithCache para admitir la creación de un objeto de dibujo que recree condicionalmente dependencias que dependan de información de tamaño/estado. (I376dc)

  • Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)

Correcciones de errores

  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de transformación de escalamiento y rotación a fin de consumir un solo parámetro de compensación para representar la coordenada dinámica, en lugar de parámetros flotantes separados para las coordenadas x/y en DrawScope y DrawTransform.
    • Se quitaron los métodos Rect.expandToInclude y Rect.join.
    • Se actualizó la documentación de Radius para indicar el óvalo además del elíptico.
    • Se agregó documentación para indicar que el constructor público para la clase de Radius intercalado no se debe llamar directamente, sino que se debe crear una instancia de los objetos Radius a través de sus constructores de funciones.
    • Se quitaron las API de RoundRect para consultar topRight, bottomRight, bottomCenter, etc.
    • Rect.shift dejó de estar disponible y se reemplazó por Rect.translate.
    • Se quitaron las API de RoundRect.grow y Rect.shrink.
    • Se cambió el nombre de RoundRect.outerRect a Rect.boundingRect.
    • Se quitaron los métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect y Rect.isStadium.
    • Se cambió el nombre de RoundRect.longestSide a RoundRect.maxDimension.
    • Se cambió el nombre de RoundRect.shortestSide a RoundRect.minDimension.
    • Se modificó RoundRect.center para que sea una propiedad en lugar de una función.
    • Se actualizó el constructor RoundRect para consumir propiedades de Radius en lugar de parámetros individuales para valores de radio x/y.
    • Se quitaron las API de tamaño que asumían que se trataba de un rectángulo con el origen en 0,0.
    • Se agregó una API destructiva a Radius.
    • Se migraron varias funciones de extensión de RoundRect para que sean propiedades.
    • (I8f5c7, b/168762961)
  • foundation.Box dejó de estar disponible. Usa foundation.layout.Box en su lugar. (Ie5950, b/167680279)
  • Se cambió el nombre de Stack a Box. La función Box anterior dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
  • Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de DrawScope con métodos de transformación con alcance para indicar que la transformación solo se aplica dentro de la devolución de llamada y se quita una vez invocada la devolución de llamada.
    • Se actualizó la documentación de clipPath para hacer referencia a Path en lugar del rectángulo redondeado.
    • Se corrigió el espaciado en la documentación del parámetro en clipPath.
    • Se cambió el nombre de DrawScope.drawCanvas a drawIntoCanvas y se quitó el parámetro de tamaño.
    • Se cambió el nombre de los parámetros dx/dy en el método de inserción a horizontal y vertical.
    • Se agregó una sobrecarga de inserción que proporciona el mismo valor de inserción a los 4 límites.
    • Se quitó la documentación del método de inserción que indicaba que la inserción se aplicaba a los 4 lados.
    • Se actualizó la documentación de la clase Rect.
    • Se actualizaron los comentarios en los parámetros Rect para que coincidan con el estilo de KDoc.
    • Se quitaron Rect.join and Rect.expandToInclude.
    • Se creó una sobrecarga para Rect.translate (desplazamiento), y Rect.shift dejó de estar disponible.
    • (If086a, b/167737376)
  • Se agregaron las anotaciones rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled y textInputServiceFactory con @VisibleForTesting, se las convirtió en internas para la API y se ocultó su KDoc (I554eb, b/168308412).
  • Quita SelectionContainer de Top para inhabilitar la selección predeterminada y evitar un comportamiento inesperado. Se puede usar SelectionContainer específicamente para ajustar el contenido que debe seleccionarse. (I8dfe0, b/158459594)

Versión 1.0.0-alpha03

16 de septiembre de 2020

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

Cambios en la API

  • Se quitaron las acciones de semántica de desplazamiento hacia adelante y hacia atrás. Se agregaron pasos a AccessibilityRangeInfo. (Ia47b0)
  • Se quitó onInvalidate() de Owner. OwnedLayer ahora controla la invalidación. (Ica72b, b/162061312)
  • Se quitaron métodos de operadores de la API de Size que consumen parámetros Offset. El resultado de estas operaciones no es claro y el tipo de resultado es inesperado. Por ejemplo, no es claro si el parámetro Offset de Size debería mostrar un desplazamiento o un resultado de tamaño con la diferencia.

    También se quitaron los métodos obsoletos de la clase Size. (Iec902, b/166514214)

Correcciones de errores

  • Se implementó una corrección para los elementos de LazyColumn que, a veces, se presentaban de forma incorrecta y provocaban fallas en algunas condiciones (Ibcf17, b/163066980, b/165921895)
  • DpConstraints y las API que usaban esas restricciones dejaron de estar disponibles. (I90cdb, b/167389835)
  • Se trasladó createAndroidComposeRule y AndroidInputDispatcher desde androidx.ui.test.android a androidx.ui.test. (Idef08, b/164060572)
  • Se cambiaron de manera coherente los nombres de los usos de Gravity por Align o Alignment en las APIs de diseño (I2421a, b/164077038)
  • Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)

Versión 1.0.0-alpha02

2 de septiembre de 2020

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

Cambios en la API

  • Quita la devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (If654e, b/166106882)
  • Se agregó compatibilidad con parámetros de tipo de relleno en rutas de acceso de gráficos vectoriales para admitir recortes de formas según las reglas de relleno de la ruta de acceso pares, impares o distintas de cero. (I43dd2)
  • El tiempo de actividad y la velocidad ahora son clases intercaladas. (I48f4a)
  • Ahora la duración es una clase intercalada. (I565eb)
  • Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (Ic40b3)
  • Se corrigió el error por el que el constructor de la función Rect con desplazamiento y radio creaba el Rect en el orden de izquierda, derecha, arriba, abajo en lugar de izquierda, arriba, derecha, abajo.

    Se quitaron los métodos complementarios obsoletos en Rect y se reemplazaron por los constructores de funciones.

    Se agregaron pruebas para verificar los métodos en Rect.kt (I08460, b/165822356).

Correcciones de errores

  • Se agregó MutableRect, un rectángulo que se puede modificar. (I71bd2, b/160140398)
  • Se reemplazó Matrix4 con Matrix. Se quitaron todas las otras partes del paquete de vectormath. (Ibd665, b/160140398)
  • La convención de llamada para función de componibilidad cambió. Este es un cambio rotundo del objeto binario. Se deben volver a compilar todas las bibliotecas para que funcionen con esta versión del complemento del compilador de Compose.

    Esta modificación no crea un cambio rotundo a nivel de la fuente, ya que las únicas API que cambiaron son las API del compilador que tienen una participación explícita. (I7afd2, b/158123185)

  • Se corrigió la falla que se producía cuando se enviaba a un PointerInputFilter que provocaba que el PointerInputFilter se quitara de forma síncrona (I58f25)

Versión 1.0.0-alpha01

26 de agosto de 2020

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

Versión 0.1.0-dev

Versión 0.1.0-dev17

19 de agosto de 2020

Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Cambios en la API

  • El objeto emitView dejó de estar disponible. En su lugar, si fuera posible, usa AndroidView para emitir objetos Views dentro de Compose. Ten en cuenta que la composición directa de objetos Views y ViewGroups no se admitirá en el futuro, a menos que estos sean hojas en el árbol de la composición. En ese caso, esto se logra mediante AndroidView. (I29b1e, b/163871221)
  • FocusState2 dejó de estar disponible y se reemplazó por FocusState. (Ia8b79, b/160822876, b/160923332)
  • Se quitaron las sobrecargas de AndroidView obsoletas. (I946b9, b/163802393)
  • Las emisiones personalizadas ahora pueden declarar que uno o más de sus métodos set pueden omitirse y reescribirse de forma independiente de la emisión. (Ibbd13)
  • Se cambiaron las clases de Vector para que ya no sean clases de datos, dado que se usa la misma instancia de objeto para la composición.

    Se agregó la marca mutableStateOf en VectorPainter para volver a dibujar condicionalmente si cambia el contenido del vector.

    Se refactorizó la instancia de VectorComponent para que forme parte de VectorPainter, ya que se vuelve a usar en todas las composiciones.

    Se actualizaron GroupComponent y PathComponent para que sus campos de nombre puedan mutar (Ieae45, b/151378808).

  • Se quitaron onChildPositioned y OnChildPositionedModifier. Los desarrolladores deben usar onPositioned y OnPositionedModifier en el diseño secundario. (I4522e, b/162109766)

  • Offset se convirtió en una clase intercalada. (Iaec70)

  • Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)

  • Se quitó el elemento obsoleto FocusModifier. (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)

  • Se agregó la lambda mergePolicy 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)

  • Constraints ahora es una clase intercalada. (I88736)

  • Se agregó FocusManager, que quita la lógica de enfoque común de AndroidComposeView. (I528ef, b/161487952, b/162206799)

  • Se actualizaron los nombres de PointerEventPass para la versión alfa. (Ifda6f)

  • IntOffset ahora es una clase intercalada. (Iac0bf)

  • IntSize ahora es una clase intercalada. (I2bf42)

  • Se cambió el nombre de PlacementScope.placeAbsolute() a PlacementScope.place(), y el del 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)

  • AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)

  • Algunas herramientas de prueba ya no son públicas porque no están en el lugar correspondiente. Se harán públicas en el futuro. (I32ab1)

  • Se refactorizó la organización del código de entrada del puntero. (Ie3f45)

  • PxBounds dejó de estar disponible y se reemplazó por Rect. Se actualizaron todos los usos de PxBounds con rect y se agregaron la baja y reemplazo adecuados, con anotaciones para ayudar con la migración. (I37038, b/162627058)

  • Se quitó KeyEvent2 porque era obsoleto. En su lugar, usa KeyEvent. (Ied2d0, b/162097587)

  • KeyEvent tiene una propiedad Unicode que se puede usar para obtener el carácter Unicode generado por la combinación especificada de tecla y estado de la tecla meta. (If3afc)

  • Se hizo una API de habilitación con el evento personalizado DelayUp y las clases relacionadas, ya que es muy probable que se modifiquen (I56d6f)

  • Se quitaron 2 PointerEventPasses que ya no son necesarios. (I3dd9d)

  • Se agregaron los parámetros color, shadow y TextDecoration a Paragraph.paint. Esta función sirve para evitar la recreación innecesaria de Paragraph (I81689)

Correcciones de errores

  • Se quitaron las devoluciones de llamada onFocusChanged de TextField. En su lugar, usa Modifier.focusObserver. (I51089, b/161297615)
  • Modifier.drawBorder dejó de estar disponible. En su lugar, usa Modifier.borde. Se reemplazó la clase de datos Border por BorderStroke. (I4257d, b/158160576)
  • Se quitaron las llamadas a FrameManager obsoletas.

    Se modificaron las APIs de composición interna para reducir la sobrecarga para realizar el seguimiento de los objetos de estado, como mutableStateof() (I80ba6).

  • Se quitaron VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Usa Modifier.background. (I73b0d, b/163019183)

  • Se corrigió la falla que ocurría cuando se utilizaba dentro del bucle algo que guardaba el estado. Ahora se permite tener la misma clave en savedInstanceState(), y ya se ajustó la API de UiSavedStateRegistry en virtud de este requisito nuevo (I4ab76, (b/160042650), b/156853976, b/159026663, b/154920561).

  • El elemento componible state { ... } dejó de estar disponible y se reemplazó por cualquier llamada explícita 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)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

Cambios en la API

  • OnChildPositioned dejó de estar disponible. Usa OnPositioned en el elemento secundario. (I87f95, b/162109766)
  • SetViewContent dejó de estar disponible. En su lugar, usa setContent. (I7e497, b/160335130)
  • Se agregó la API de AndroidViewBinding para aumentar y componer los recursos de diseño según ViewBinding. (I081c6)
  • KeyEvent reemplazó a KeyEvent2. (I2d770, b/162097585)
  • Se agregó compatibilidad con la tecla de hardware Alt. (I9036b)
  • FocusManager ya no está disponible. En su lugar, usa Modifier.focus(), Modifier.focusObserver() y Modifier.FocusRequester(). (I74ae4, b/162211322)
  • loadVectorResource admite atributos trimPath. (I808fe)
  • Se movió diálogo a la IU. (I47fa6)
  • Se quitaron 2 PointerEventPasses que ya no son necesarios. (I33ca7)
  • Se implementó PointerInteropModifier, que permite recibir MotionEvents e interactuar con Compose como si se tratara de la implementación de una vista de Android. (Ieb08c)
  • Se quitó el modificador de etiquetas obsoleto. En su lugar, usa layoutId. (Idaa05, b/162023919)
  • Se actualizaron las APIs correspondientes a la compatibilidad de orientación de derecha a izquierda. Se agregó LayoutDirectionAmbient, que puede usarse para leer y cambiar la dirección del diseño. Se quitaron Modifier.rtl y Modifier.ltr. (I080b3)
  • Compatibilidad con el recorte de ruta de acceso en gráficos vectoriales. (Ie16c9, b/158188351)
  • Se agregó Modifier.layout(), que permite crear un modificador de diseño personalizado de forma práctica (I73b69, b/161355194).
  • Se agregó una nueva API de AndroidView, y las que ya existen dejaron de estar disponibles. (I5bcfd)
  • Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte, a la vez que prohíbe la escritura de Modifier.padding().background() + anotherModifier, el cual interrumpe la cadena y es más difícil de leer (Iedd58, b/161529964).
  • Se agregaron subclases View de [Abstract]ComposeView para alojar contenido de Compose en una jerarquía de vistas (I46357)
  • Row y Column ahora son funciones intercaladas, lo que reduce en forma significativa la sobrecarga asociada a su uso. (I75c10)
  • Se agregó SubcomposeLayout. Se trata de un elemento primitivo de bajo nivel que permite componer los elementos secundarios durante la medición si queremos usar algunos valores disponibles más adelante durante la medición de la composición del subárbol. Por ejemplo, WithConstraints no se implementa mediante SubcomposeLayout. (I25cc8)
  • Se agregó SemanticsNode.positionInRoot para obtener la posición de un SemanticsNode en relación con la raíz de la jerarquía de Compose. (Icdf26, b/161336532)
  • Los MotionEvents se pasaron de Android a Compose y nuevamente a Android. (I14be8, b/158034713)
  • Se quitó dropdownPopup. (I00430)
  • Se corrigió la posición de la ventana emergente en las pantallas cortadas. (Idd7dd)
  • Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)
  • Se agregó remeasurementModifier, que permite volver a medir el diseño de forma síncrona. En general, no lo necesitas, ya que la nueva medición o el rediseño se realizan automáticamente, pero lo usamos dentro de LazyColumnItems durante el desplazamiento (I5f331, b/160791058)
  • Se quitó getLineEllipsisOffset/getLineEllipsisCount. En su lugar, usa getLineVisibleEnd/getLineEnd/isLineEllipsized. (I85aa2)
  • Se agregaron algunas marcas/anotaciones a fin de aplicar prácticas recomendadas. (I66b20)
  • Se expusieron más APIs de líneas en TextLayoutResult (I79bd2)
  • Ahora se puede acceder mediante Foo.VectorConverter a los convertidores vectoriales para convertir unidades integradas (p. ej., Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter, etc.) (I3e273).

Correcciones de errores

  • Se abordaron correcciones amplias de API. (I077bc)
    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 actualizó el consumo de la API de BlendMode de Compose para asignar correctamente entre los modos PorterDuff y BlendModes del framework de Android, según el nivel de API. Se introdujo la API de BlendMode#isSupported con el objeto de que funcione como una consulta de capacidad para determinar si BlendMode es compatible con el dispositivo antes de que se lo utilice (I0ef42)
  • Se agregó LazyItemScope para el parámetro itemContent de las listas Lazy. Esto proporciona modificadores para rellenar el tamaño máximo del elemento superior, lo cual resuelve el caso de uso en el que el elemento debía rellenar viewport, pero el Modifier.fillMaxSize() normal no funcionaba debido a que el elemento se mide con restricciones infinitas. (Ibd3b2, b/162248854)
  • Se quitó SemanticsNodeInteraction.performPartialGesture. Se usa SemanticsNodeInteraction.performGesture en su lugar. (Id9b62)
  • Se cambió el nombre de LazyColumnItems a LazyColumnFor. Se cambió el nombre de LazyRowItems a LazyRowFor. (I84f84)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Se cambió el nombre de AndroidComposeTestRule por createAndroidComposeRule (I70aaf)
  • Se agregaron más APIs a TextLayoutResult. (Id7e04)
  • Se cambió el nombre de FilledTextField de Material por TextField, y el del TextField principal por BaseTextField para que la API deseada resulte más fácil de encontrar y usar (Ia6242, b/155482676).
  • Se cambió el nombre de Modifier.drawBackground por Modifier.background (I13677).

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

Actualización de dependencias

  • Para usar la versión 0.1.0-dev15 de Compose, deberás actualizar tus dependencias de acuerdo con los nuevos fragmentos de código que se muestran más arriba en Cómo declarar dependencias.

Cambios en la API

  • El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester y Modifier.focusObserver. FocusState y FocusDetailedState dejaron de estar disponibles y se los reemplazó por FocusState2 (I46919, b/160822875, b/160922136).
  • Se agregó un modificador para observar el cambio de estado del enfoque. (I05866, b/160924455, b/160923326)
  • Se agregó un modificador para solicitar cambios de enfoque (I8dd73, b/161182057, b/160924778).
  • Se ajustó el menú de la barra de herramientas para mostrar los botones Copiar, Cortar y Pegar de forma correcta. (Id3955)
  • Las propiedades semánticas de valor único ahora usan un estilo de llamada. Por ejemplo, "semantics { hidden = true }" ahora se escribe como: semantics { hidden() }. (Ic1afd, b/145951226, b/145955412)
  • Se agregó el objeto Modifier.focus que reemplaza al elemento FocusModifier. (Ib852a, b/160924778)
  • Se agregó el objeto FloatingToolbar para la selección del elemento TextField. (Ie8b07)
  • Se agregó una anotación de API experimental para las API relacionadas con entradas clave. (I53c0a)
  • Se agregó una anotación de API experimental para todas las APIs relacionadas con el enfoque (I53b24, b/160903352).
  • Se agregó el objeto FocusState2 que reemplazará al elemento FocusDetailedState. (I0a3ba, b/160822595)
  • Se agregó el elemento ExperimentalFocus, que es una anotación @OptIn para la API de Focus (I1544b, b/160820961)
  • Se agregó una clase de unidad IntBounds, que representa los límites de píxeles enteros del diseño. Se actualizó la API de PopupPositionProvider para usarla. (I0d8d0, b/159596546)
  • El aplicador ahora requiere un método clear() para desechar las composiciones. (Ibe697)
  • KeyEvent dejó de estar disponible y se reemplazó por KeyEvent2. (I68730)
  • Se agregó una nueva marca opcional useUnmergedTree a fin de probar los buscadores. (I2ce48)
  • Se creó la API experimental LayoutNode. (I4f2e9)
  • Se agregaron métodos de copia a varios tipos de clases intercaladas, que incluye lo siguiente:

    • Desplazamiento
    • Tamaño
    • Radio
    • Movimiento
    • TransformOrigin

    • El método del objeto complementario Size.copy dejó de estar disponible para el método de copia de instancias (Ife290, b/159905651).

  • Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)

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

  • Del bloque de medición de la función Layout(), se quitó el parámetro de dirección del diseño. Sin embargo, la dirección de diseño está disponible dentro de la devolución de llamada a través del objeto de alcance de medición (Ic7d9d).

  • Refactoriza el objeto SelectionHandles para reutilizar. (I420e0)

  • Se quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)

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

  • Antes del cambio, el complemento del compilador de Compose interceptaría llamadas no triviales a los constructores dentro de una función @Composable si hubiese una. (I5205a, b/158123804)

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

  • El objeto Placeable#get(AlignmentLine) ya no muestra las posiciones Int de la línea de alineación como nulas. Si falta la línea de alineación consultada, se mostrará el objeto AlignmentLine.Unspecified. (I896c5, b/158134875)

  • Se agregó un parámetro modificable al elemento componible AndroidView (I48a88, b/158746303)

  • El elemento Semantics() dejó de estar disponible. En su lugar, usa el objeto Modifier.semantics(). (I72407, b/158841414)

  • Se agregó el elemento componible viewModel() que permite crear o conseguir el objeto ViewModel ya creado de manera similar a cómo funciona en las clases Activity o Fragment (I5fdd1).

  • Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)

  • A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)

  • A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I086f4)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Id3434)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I97a5a)

  • El componente TestTag dejó de estar disponible. En su lugar, usa Modifier.testTag. (If5110, b/157173105)

  • Se quitó la implementación no-op predeterminada del objeto ParentDataModifier#modifyParentData, ya que equivalía a no haber implementado la interfaz. (I0deaa)

  • Se quitó el elemento ScaleFit, que anteriormente había quedado obsoleto. En su lugar, usa el objeto ContentScale. (Ifbc5b)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I19d02)

  • Se agregó el componente DropdownMenu en ui-material, una implementación del menú de Material Design (I9bb3d)

  • Se quitó el elemento LayoutTag() obsoleto; en su lugar, usa Modifier.tag(). Se quitó el elemento Modifier.matchParent() obsoleto; en su lugar, usa Modifier.matchParentSize(). (If8044)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I57bff)

  • Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc)

  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope a DrawScope. Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente (I1798e).

  • El objeto DoubleTapGestureFilter ahora desambigua el elemento SingleTapGestureFilter en todo el árbol. (If92b1)

  • Se actualizó la API de Alignment y se agregó compatibilidad con la alineación absoluta (que no se duplica automáticamente en contexto de derecha a izquierda). (I38cd3)

  • Se modificó la API de los modificadores DrawLayer: se cambió el nombre del objeto outlineShape a shape y tiene el valor predeterminado de RectangleShape, ahora sin valores anulables. Se cambió el nombre del elemento clipToOutline a clip; se quitó el objeto clipToBounds, ya que es igual que clip == true con RectangleShape (I7ef11, b/155075735).

  • Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los usuarios que aún necesitan acceso a Canvas, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el Canvas subyacente (I80afd)

  • Se modificó la API de WithConstraints con expresión lambda final. Ahora, en lugar de dos parámetros, tiene un alcance de receptor que, además de las restricciones y layoutDirection, brinda propiedades minWidth, maxWidth, minHeight y maxHeight en Dp. (I91b9a, b/149979702)

  • Se cambió el nombre del objeto LayoutModifier2 a LayoutModifier. (Id29f3)

  • Se quitó la interfaz de LayoutModifier obsoleta. (I2a9d6)

  • Las funciones de medición intrínseca en los objetos Layout y LayoutModifier2 ahora tienen un receptor IntrinsicMeasureScope que proporciona una API de consulta intrínseca con dirección de diseño propagada de forma implícita (Id9945)

  • Se pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)

  • Se agregó el elemento Modifier.zIndex() para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño de nivel superior. Se cambió el nombre de la propiedad de elevación de DrawLayerModifier por shadowElevation, y esta propiedad ya no controla el orden del dibujo. Se cambió el orden de los parámetros de DrawShadow: el primer parámetro ahora es elevation y el segundo es shape, con una configuración RectangleShape predeterminada. (I20150, b/152417501)

  • Se quitaron los elementos onSizeChange y onPositionChange en Owner. (I5c718)

  • Se agregó el objeto Constraints2, una copia del elemento Constraints que solo admite valores de restricción Int, en lugar del parámetro IntPx. Se quitará el objeto IntPx y se asumirá que todas las restricciones de número entero son píxeles como Android.

    • También se agregó el objeto IntSize, que finalmente reemplazará al elemento IntPxSize. (I4b43a)
  • Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)

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

  • (I45f09, b/152842521)

    • Se cambió el nombre del objeto ScaleFit por ContentScale
    • Se trasladó el elemento ContentScale del módulo ui-graphics al módulo ui-core a fin de quede ubicado en el mismo módulo que la API de Alignment.
    • Se cambió el nombre del objeto FillMaxDimension por Crop.
    • Se cambió el nombre del objeto FillMinDimension por Fit.
    • Se cambió el nombre del objeto Fit por Inside para que coincidan mejor.
    • Equivalentes de ImageView.ScaleType
    • Se agregó documentación que indica que combinar Crop y Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_CROP, que el uso de Fit con Alignment.Center genera lo mismo que ImageView.ScaleType.FIT_CENTER, y que el uso de Inside con Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_INSIDE.
  • Compatibilidad con lectura de derecha a izquierda para modificadores de dibujo. (I0aaf9)

  • Se lanzó la API para aumentar vistas de Android desde XML. Consulta la demostración de ViewInCompose para obtener más detalles. (I42916)

  • Mejora la API de DrawModifier:

    • Se creó el alcance del receptor para el objeto draw() ContentDrawScope.
    • Se quitaron todos los parámetros de draw().
    • El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
    • ContentDrawScope tiene el método drawContent() (Ibaced, b/152919067).
  • Se agregaron los objetos positionInParent y boundsInParent para el elemento LayoutCoordinates (Icacdd, b/152735784)

  • Ahora, los objetos DrawLayerModifier y drawLayer() establecen de forma predeterminada los elementos clipToBounds y clipToOutline como falso. (I0eb8b, b/152810850)

  • Se cambió el nombre del objeto LayoutResult a MeasureResult. (Id8c68)

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

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

  • Se agregaron propiedades translationX/Y para admitir la compensación de la lista de visualización de comandos de dibujo para una capa determinada. Esto es útil para mover contenido en respuesta a animaciones o eventos táctiles. (I8641c)

  • Se agregaron parámetros pivotX, pivotY a las APIs de Layers para admitir la rotación y el escalamiento en un punto específico de una capa (Icf7c3).

  • Se agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones de componibilidad OnPositioned y OnChildPositioned (I2ec8f)

  • Se agregó el objeto LayerModifier, un modificador que permite agregar un elemento RenderNode a una capa. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará al objeto RepaintBoundary. (I7100d, b/150774014)

  • Se permitió que la dirección del diseño se propagara desde el nodo de diseño de nivel superior hasta los secundarios. Se agregó un modificador de dirección de diseño. (I3d955)

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

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

  • Se combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)

  • Se modificó el objeto LayoutCoordinates para que el elemento providedAlignmentLines sea un conjunto en lugar de un mapa y para que el objeto LayoutCoordinates implemente el operador get() a fin de recuperar un valor. Esto permite que los modificadores cambien con más facilidad uno o más valores del conjunto, sin que se cree una colección nueva para cada modificador. (I0245a)

  • LayoutCoordinates ya no tiene una propiedad de posición. La propiedad de posición no tiene sentido cuando se tienen en cuenta los objetos LayoutModifiers, la rotación o el escalamiento. En cambio, los desarrolladores deben usar los objetos parentCoordinates y childToLocal() para calcular la transformación de un objeto LayoutCoordinate a otro.

    El objeto LayoutCoordinates usa el elemento IntPxSize para la propiedad de tamaño, en lugar de PxSize. Se usan tamaños de píxeles enteros para los diseños, por lo que todos los tamaños de diseño deberían usar números enteros y no valores de punto flotante. (I9367b)

  • Mejoras en la superficie de la API de Constraints (I0fd15)

  • Se creó la API de CanvasScope que une un objeto de Canvas para exponer una superficie de API de dibujo declarativa y sin estado. Las transformaciones se contienen dentro de su propio alcance de receptor, y la información de tamaño también se define en los límites de inserción correspondientes. No requiere que un consumidor mantenga su propio objeto de estado de Paint para configurar las operaciones de dibujo.

    • Se agregó CanvasScopeSample y se actualizó la app de demostración a fin de incluir una demostración de gráficos declarativos. (Ifd86d)
  • Se quitó la API de MaskFilter sin usar, ya que se usa de manera limitada y no se optimiza para la aceleración de hardware en la mayoría de los casos de uso (I54f76).

  • Se trasladó el objeto RectangleShape de androidx.ui.foundación.shape.* al elemento androidx.ui.graphics.* (Ia74d5, b/154507984)

  • Se reemplazaron todos los usos anulables de Color en la API con valores no anulables y se usa Color.Unset en lugar de valor nulo (Iabaa7).

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

  • Se agregó el objeto Unset Color para representar un valor sin configurar, sin el recuadro Colors. (If901a)

  • Se agregaron métodos de extensión Canvas.rotate y Canvas.scale para consumir coordenadas dinámicas opcionales para las transformaciones. De forma predeterminada, estos métodos se ubican en la esquina superior izquierda de la traslación del lienzo actual.

    También se trasladó el objeto Canvas.rotateRad a fin de que sea un método de extensión para mantener la coherencia. (Ibaca6)

  • Se creó la API de PixelMap para admitir consultas de información de píxeles desde un elemento ImageAsset. (I69ad6)

  • Se cambió el nombre del objeto toFrameworkRect/toFrameworkRectF por toAndroidRect/toAndroidRectF para que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las APIs del framework de Android sobre las que están compiladas. También se actualizaron los documentos de estas API. (I86337)

  • Se agregó la API de VectorPainter a fin de reemplazar la API de subcomposición existente para gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un elemento DrawModifier. El objeto DrawVector anterior que admite composición dejó de estar disponible y se reemplazó por el elemento VectorPainter.

    Se cambió el nombre de la API de Image(Painter) a PaintBox(Painter) Created Vector componible y que se comporta como el elemento Image componible, pero con un parámetro VectorAsset en lugar de un objeto ImageAsset (I9af9a, b/149030271).

  • Se cambió el nombre de Image a ImageAsset para diferenciar mejor entre los datos de Image y el próximo elemento componible Image, que se utiliza para participar en el diseño y dibujar contenido. Método de extensión _Body:Created en android.graphics.Bitmap, Bitmap.asImageAsset() para crear una instancia útil del objeto ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el framework de Compose (Id5bbd).

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

  • Se agregó el operador TextDecoration.plus. (I0ad1a)

  • De los valores de enumeración de TextDirectionAlgorithm, se quitó el objeto Force. (Icc944)

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

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

  • Se agregó el objeto AnnotatedString.getStringAnnotations que muestra todas las anotaciones dentro del rango (I1fa00)

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

  • El cursor de TextField tiene una animación intermitente. (Id10a7)

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

  • Cambio en la API: se cambió el nombre del objeto AnnotatedString.Item por AnnotatedString.Range (I2d44d)

  • Se cambió el nombre del objeto AnnotatedString.Builder.addAnnotationString a addStringAnnotation. (I5059e)

  • Ahora es posible ocultar o mostrar el teclado en pantalla usando SoftwareKeyboardController, que se entrega mediante la devolución de llamada onTextInputStarted (I8dc44, b/151860051).

  • Se agregó el operador de adición para (Text/Paragraph/Span)Style, que delega a la función merge() (Ia1add)

  • El elemento FontWeight.lerp ya no se ajusta. Sigue siendo una clase de datos. (I521c2)

  • El constructor del elemento FontWeight ahora es público, ya no es una clase de datos. (Id6b1f)

  • Se agregaron los objetos getLineStart, getLineEnd, getEllipsisOffset y getEllipsisCount al elemento TextLayoutResult (Ibc801).

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

  • Se quitó la clase Size sin usar, ya que hay una clase Size duplicada en el módulo ui-geometry que se consume. (I1b602)

  • Se agregó AdapterList, un componente de lista de desplazamiento que solo compone y presenta los elementos visibles. Según los problemas que se conocen, solo es vertical y no maneja todos los casos de cambios en sus elementos secundarios. (Ib351b)

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

Correcciones de errores

  • Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto a onFocusChanged. (Ida4a1)
  • VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y se reemplazó con ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
  • Se cambió el nombre de runOnIdleCompose a 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)
  • IU de Compose ahora admite compilación dentro del objeto ViewGroups sin requerir una nueva composición. Consulta el elemento ViewInteropDemo para ver un ejemplo. (I9ab0b, b/160455080)
  • Se agregaron sortWith y removeRange a MutableVector (Icccf7).
  • Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField (I27032)
  • Se quitó la clase intercalada Shader que une la clase de espera NativeShader. Se cambió el nombre del objeto NativeShader por Shader. La clase intercalada Shader unida no agregó ningún valor a la superficie de la API y era una clase intercalada, así que usa la clase NativeShader directamente. (I25e4d)
  • Se refactorizó el objeto PainterModifier para dejar de proporcionar escalamiento según las restricciones y el parámetro ContentScale especificados. Las implementaciones del objeto Painter deben escalar el contenido de su dibujo en función del tamaño especificado del elemento DrawScope en el que están dibujados.

    Se corrigió el problema por el cual se ajustaba el tamaño del mapa de bits en caché del objeto VectorPainter a su configuración predeterminada, en lugar del tamaño determinado para dibujar.

    Se actualizó el objeto ImagePainter a fin de escalar su contenido en lugar de depender del elemento PainterModifier para hacerlo en su nombre. (I6ba90)

  • Se agregó la función withFrameNanos de nivel superior para la sincronización de la animación (Ie34c5).

  • La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)

  • androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue quedaron obsoletos. TextField, FilledTextField y CoreTextField que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)

  • Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió ese error. (I1f48b, b/157998762)

  • Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió ese error. (Iab398, b/157998762)

  • Se refactorizó la clase Radius para que sea una clase intercalada. Se quitaron los métodos de creación complementarios para que el radio a lo largo del eje "y" coincida con el parámetro obligatorio del radio del eje "x" en el constructor de funciones con el parámetro predeterminado.

    Se actualizó DrawScope.drawRoundRect para que admita un solo parámetro Radius en lugar de 2 números de punto flotante separados para el radio en los ejes "x" e "y" (I46d1b).

  • El elemento componible Recompose ya no es una abstracción útil. La mayor parte de la recomposición debería ocurrir como resultado de las asignaciones de MutableState. Para todo lo demás, se recomienda usar la función invalidate para activar una recomposición del alcance actual (Ifc992)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Iede0b)

  • Cambia la estrategia para la generación de código del compilador de Compose. Antes del cambio, el compilador de compose transformaba las llamadas en funciones que admiten composición. Con este cambio, ahora transformamos el cuerpo de este tipo de función sin modificar (en su mayor parte) el sitio de llamada.

    Esto significa que la mayor parte de la lógica que se comunica con el tiempo de ejecución de compose sucede al comienzo del cuerpo de la función, en lugar de ocurrir en el sitio de llamada.

    Este cambio debería ser compatible con código fuente para cualquier uso de compose. La mayoría de los usuarios de compose no deberían tener que actualizar ningún código como resultado de este cambio.

    A fin de brindar compatibilidad con este trabajo, se ha modificado la firma de JVM de todas las funciones que admiten composición. Una función que admite composición y que acepta un solo parámetro se transforma en una función que acepta 3 parámetros. Los parámetros adicionales son Composer, un objeto integer. "clave", que es un valor entero de máscara de bits que se utiliza para propagar metadatos a través de llamadas.

    Ahora, Compose también transforma los argumentos predeterminados en una función que admite composición. Lo hace sin introducir una sobrecarga sintética, adicional y predeterminada de la función. Como resultado, este cambio tendrá menos funciones que se definan.

    Como consecuencia, se realizarán los siguientes cambios de comportamiento intencionales conocidos:

    1. Algunas llamadas se omitirán en los casos en que antes no hubiese ocurrido.
    2. Ahora, se suscriben y se administran correctamente las expresiones que admiten composición en las expresiones de argumento predeterminados.

    En este trabajo, se incluyeron algunas optimizaciones: 1. El resultado de las comparaciones de parámetros se propaga a otras funciones que admiten composición mediante el gráfico de llamadas. Como resultado, se realizarán menos comparaciones en el tiempo de ejecución, se reducirá el tamaño de la tabla de ranuras y se omitirán más funciones que admiten composición que antes no se omitían. 2. Los parámetros que se determinan "estáticos" en el tiempo de compilación ya no se comparan ni se almacenan en el tiempo de ejecución. Esto reduce la cantidad de comparaciones y el tamaño de la tabla de ranuras. 3. Se utiliza la estructura para el flujo de control del cuerpo de las funciones a fin de minimizar la cantidad de grupos que se generan. Esto reduce el tamaño de la tabla de ranuras y da como resultado menos trabajo para el tiempo de ejecución. 4. Si los parámetros de envío y recepción para las funciones no se utilizan dentro del cuerpo de la función, no se los incluye para determinar si se puede omitir la función.

    La mayoría de los cambios rotundos se realizaron en las API a las que el compilador se orienta de manera directa, y el uso típico de Compose no se verá afectado: 1. Se quitó el objeto Composer::startExpr. 2. Se quitó el objeto Composer::endExpr. 3. Composer::call quedó obsoleto. 4. Se quitaron las sobrecargas del objeto key que no son varargs. Usa la versión vararg en el futuro. 5. La anotación Pivotal quedó obsoleta. Usa el objeto key como reemplazo. 6. Se cambió el objeto ScopeUpdateScope::updateScope para esperar un elemento Function3 en lugar de Function1. 7. Se actualizaron los objetos restartableFunction y restartableFunctionN para que incluyan parámetros adicionales de tiempo de compilación. (I60756, b/143464846)

  • Se quitaron los modificadores obsoletos LayoutAlign. (I10877)

  • Se quitó RepaintBoundary y se reemplazó por DrawLayerModifier. (I00aa4)

  • Button, FloatingActionButton y Clickable ahora tienen un parámetro enabled separado. Se reorganizaron algunos de los parámetros de Button o se les cambió el nombre. (I54b5a)

  • Se reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta muestras actualizadas para obtener información de uso. (If63ab, b/146478620, b/146482131)

  • Cambios rotundos en la API de ambients. Consulta el registro y la documentación de Ambient<T> para obtener más detalles (I4c7ee, b/143769776).

  • Se cambió el comportamiento del objeto TextDirection predeterminado, según lo establecido por el elemento LayoutDirection. Por ejemplo, si LayoutDirection es de derecha a izquierda, el objeto TextDirection predeterminado también lo será. Antes era TextAddress.ContentOrLtr/Rtl. (I4e803)

  • Corrección de errores: cuando el tamaño y el estilo de la fuente estaban anidados en un objeto AnnotatedString, no se procesaba correctamente el texto. (I77a9d)

  • Agrega los parámetros que se usan con frecuencia al objeto Text(). Si estás creando un estilo de texto local para pasar una pequeña cantidad de estos parámetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), ahora puede proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)

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