Organiza tus páginas con colecciones Guarda y categoriza el contenido según tus preferencias.

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
9 de noviembre de 2022 1.3.1 - - 1.4.0-alpha02

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 @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 IU 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 IU 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.4.0-alpha02"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.0-alpha01"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.ui:ui:1.4.0-alpha02")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.4.0-alpha01"
    }

    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.4

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 la pantalla en el que ModulateAlpha evitará aprovecharlo y, en su lugar, modificará las instrucciones de dibujo registradas dentro del elemento 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.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 a fin de especificar el 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 varias razones (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 hayan sido cubiertas por nuestras pruebas y que aún no se hayan 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 que admiten composición 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 a fin de 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) a fin de 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 de Show Layout Bounds se aplicará a los elementos que admiten composición inmediatamente después de activar o desactivar el mosaico 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 API estables (Ie65e4, b/229988420).
  • Se simplificó la API de rememberNestedScrollConnection para usar configuraciones regionales de composición a fin de 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 que admiten composición 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 API de gráficos vectoriales para usar la anotación correcta que admite composición @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 abstractas que admiten composición (como los métodos de interfaz), los campos o las variables globales que son lambdas que admiten composición (las variables y los parámetros locales se infieren), o cuando se usa ComposeNode o una función que admite composición 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á. En su lugar, usa BringIntoViewRequester (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 interfaz nueva que permite un control más detallado sobre qué ranuras se deben conservar para su reutilización futura (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 ID que no varían en el Inspector de diseño. (Ic116e)
  • Se agregaron los ID 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 API 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 API 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 que admite composición 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 a 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 API que ya eran 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 a 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 admite composición, 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 ImageVector, se cambió el nombre de ImagePainter a BitmapPainter, a fin de que sea paralelo a VectorPainter. (Iba381, b/174565889)
  • Se mejoraron las API 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 que admite composición. (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. imageResource, loadImageResource, vectorResource, y loadVectorResource dejaron de estar disponibles. En su lugar, usa fontResource 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 consistente con los lineamientos de API y a fin de 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 savedInstanceState { 0 } que admite composición, de forma similar a como se quitó state { 0 }, que también admitía composición, 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 a SaveableStateRegistry y el de AmbientUiSavedStateRegistry a 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 a androidx:compose:runtime:runtime-saveable (I6dcac).
  • Se borraron muchas API que dejaron de estar disponibles en el paquete de IU. (I2f2dc)
  • El artefacto compose:runtime-dispatch dejó de estar disponible. Ahora se puede encontrar MonotonicFrameClock en compose:runtime y AndroidUiDispatcher en compose:ui. (Ib5c36)
  • 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 a LayoutCoordinates.parentLayoutCoordinates a fin de 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 pressIndicititGestureFilter 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 API 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 con 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 a 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 a fin de ayudar con las conversiones entre diferentes representaciones de matrices para hacer coincidir la lógica de conversión del marco de trabajo 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ó con las API 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)

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

    RememberObserver es un reemplazo de CompositionLifecycleObserver con una semántica modificada y métodos con nombres cambiados. El cambio a la API nueva se puede realizar de manera mecánica para objetos que solo se recuerdan una vez y sigue siendo la práctica recomendada. Sin embargo, si se olvidó una referencia más de una vez en una composición, se llama a onRemembered para cada referencia en la que onEnter solo se llama una vez. Antes, se llamaba a onEnter varias veces si el objeto se usaba en subcomposiciones, como WithConstraints y Scaffold, por lo que la garantía de la única llamada a onEnter no era confiable. Por lo tanto, se quitó de RememberObserver.

    RememberObserver agrega onAbandoned, que se llama si la devolución de llamada pasada a remember muestra la instancia RememberObserver, pero como esta no se recuerda en el estado de composición, nunca se llamará a onRemembered. Esto puede ocurrir si una excepción termina la composición antes de completarla, o bien si la descarta, ya que el estado que estaba produciendo una composición ya no está vigente o no se necesita. Si la instancia de RememberObserver que sigue a la recomendación de referencia única anterior realiza el seguimiento de un recurso externo, tanto onForgotten como onAbandoned indicarán que el recurso ya no es necesario. Si el objeto realiza un seguimiento del trabajo que se inició o los recursos asignados en onRemembered, se puede ignorar a onAbandoned, ya que no se llamará si se llama a onRemembered. (I02c36)

  • 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. A fin de 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 IU 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 a @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 API 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 las implementaciones de igualdades para usar "is MyClass" en su lugar. (I4f734)

  • Modifier.focus() y Modifier.focusRequester() dejaron de estar disponibles. Se recomienda usar modificador.focusModifier() y Modifier.focusReference() en su lugar. (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 a AwaitPointerEventScope y el de handlePointerInput() a awaitPointerEventScope() para las API 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 a contentDescription y el de accessibilityValue a 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 a 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 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 que admite composición 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 a fin de asistir en la migración de las API 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 que admiten composición a fin de verificar la coherencia con los lineamientos de Compose. También se migraron algunas API que usaban children como nombre de su lambda al final a content, según la comprobación y orientación de lint. (Iec48e)
  • Se 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 a 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 API 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 API de SweepGradientShader y SweepGradientBrush. (Ia22c1)
  • El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
  • Se agregaron API de desplazamiento basadas en corrutinas:

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

  • Se agregó 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 API 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 que admiten composición. 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, a fin de 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 a fin de 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 que admiten composición 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 a fin de indicar mejor que la API de composición 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, a fin de proporcionar a las implementaciones la capacidad de reordenar los comandos de dibujo. Esto sirve para combinar y ajustar casos de uso en los que los píxeles de contenido deben procesarse primero a fin de 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 a 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 modificables 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 a Align o Alignment en las API 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 funciones que admiten composición 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 a fin de 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 a fin de que sus campos de nombre puedan mutar. (Ieae45, b/151378808)

  • Se quitaron onChildPositioned y OnChildPositionedModifier. En su lugar, los desarrolladores deberán 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.border. Se reemplazó la clase de datos Border por BorderStroke. (I4257d, b/158160576)
  • Se quitaron las llamadas a FrameManager obsoletas.

    Se modificaron las API de composición interna a fin de 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 state { ... } que admite composición 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. En su lugar, usa el elemento secundario OnPositioned. (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 API 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, lo que interrumpe la cadena y es más difícil de leer. (Iedd58, b/161529964)
  • Agrega 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 API de líneas en TextLayoutResult. (I79bd2)
  • Ahora se puede acceder mediante Foo.VectorConverter a los convertidores vectoriales a fin de 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 a fin de que se mapee 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. 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 a createAndroidComposeRule (I70aaf)
  • Se agregaron más API a TextLayoutResult. (Id7e04)
  • Se cambió el nombre de FilledTextField de Material a TextField, y el del TextField principal a 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 a 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 quedaron obsoletos 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 API 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 a 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 AndroidView que admite composición. (I48a88, b/158746303)

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

  • Agrega el elemento viewModel() que admite composición y permite crear u obtener 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 el elemento 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 a fin de 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, con la combinación de los elementos Crop y Alignment.Center, se obtiene el mismo resultado que con los objetos ImageView.ScaleType.CENTER_CROP y Fit, y que, con el elemento Alignment.Center, se obtiene el mismo resultado que con los objetos ImageView.ScaleType.FIT_CENTER Inside, y que, con el elemento Alignment.Center, se obtiene el mismo resultado que con los objetos 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 a fin de 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 API 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 OnPositioned y OnChildPositioned que admiten composición. (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 a fin de exponer una superficie de API de dibujo declarativa y sin estado. Las transformaciones se contienen dentro de su propio alcance de receptor, y la información de tamaño también se define en los límites de inserción correspondientes. No requiere que un consumidor mantenga su propio objeto de estado de Paint para configurar las operaciones de dibujo.

    • Se agregó CanvasScopeSample y se actualizó la app de demostración a fin de incluir una demostración de gráficos declarativos. (Ifd86d)
  • Se quitó 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 prácticos (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 a fin de 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 a toAndroidRect/toAndroidRectF a fin de que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las API 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 que admite composición y que se comporta como el elemento Image que admite composición, pero con un parámetro VectorAsset en lugar de un objeto ImageAsset (I9af9a, b/149030271).

  • Se cambió el nombre de Image a ImageAsset para destacar mejor la diferencia 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(), a fin de 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 androidx.ui.text a androidx.ui.intl dentro de Locale y LocaleList. (I8132c)

  • El cursor 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 a 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 API 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 a 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 para el radio en los ejes "x" e "y" (I46d1b).

  • La función Recompose que admite composición 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 a fin de 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 determinado por el elemento LayoutDirection. Por ejemplo, si LayoutDirection es de derecha a izquierda, el objeto TextDirection predeterminado también lo será. Anteriormente, el objeto era TextDirection.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).