Google se compromete a impulsar la igualdad racial para las comunidades afrodescendientes. Obtén información al respecto.

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 actual Próxima versión potencial Versión beta Versión alfa
11 de noviembre de 2020 - - - 1.0.0-alpha07

Estructura

Compose es una combinación de 7 ID 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 correspondiente a cada conjunto de notas de la versión.

GrupoDescripción
compose.animationCrea animaciones en sus aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario.
compose.compilerTransforma las funciones que admite @Composable y habilita las optimizaciones con un complemento de compilador de Kotlin.
compose.foundationEscribe aplicaciones de Jetpack Compose con componentes fundamentales listos para usar y extiende la base para compilar tus propias piezas de sistema de diseño.
compose.materialCompila las 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.runtimeSon los componentes básicos del modelo de programación de Compose y la administración de estados, y el entorno de ejecución principal para el 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.
uiFunciona con la biblioteca de Jetpack Compose.

Cómo declarar dependencias

Para agregar una dependencia en Compose, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio 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:

dependencies {
    implementation "androidx.compose.ui:ui:1.0.0-alpha03"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.0"
        kotlinCompilerExtensionVersion "1.0.0-alpha03"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
        freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"]
    }
}

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 en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Crea un error nuevo

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

Versión 1.0.0

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.

Nuevas funciones

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)
  • Se movieron varios símbolos relacionados con el diseño 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 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ó con 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, puedes usar BasicTextField. (I896eb)
  • Se incorporó el módulo ui-test-junit4. (Ib91f8)
  • Se cambió el nombre de relativePaddingFrom por paddingFrom. Se agregó el modificador paddingFromBaseline para especificar distancias de límites de diseño a la línea de base del texto. (I0440a, b/170633813)
  • Se cambió el nombre de LaunchedTask a LaunchedEffect para conservar la coherencia con las API de SideEffect y DisposableEffect. No se permite el uso de LaunchedEffect sin parámetros de asunto para fomentar las prácticas recomendadas. (Ifd3d4)
  • Se incorporaron recursos componibles que se reescriben cuando se actualiza la configuración. (I6387c, b/167352819)
  • Recomposer ahora requiere CoroutineContext en la construcción. (Ic4610)
  • Se suman valores zIndex cuando se aplican varios Modifier.zIndex(). Anteriormente, ganaba el primero. (Ic514c, b/170623936)
  • Se realizaron cambios en la implementación interna de SlotTable que no deberían afectar a la API pública. (If9828)
  • Se agregó la opción IME de corrección automática del teclado. (I57b8d)
  • Se movió androidx.ui.test a androidx.compose.ui.test. (I9ffdb)
  • Se quitó TKeyboardOptions.toImeOptions de la API pública. (Ic2e45)

Contribución externa

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

Versión 1.0.0-alpha06

28 de octubre de 2020

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

Cambios en la API

  • Recomposer ahora es CompositionReference y es un elemento principal 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 valores 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 Radio por CornerRadius a fin de 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 dos 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 por OnGloballyPositionedModifier y el de onPositioned() por onGloballyPositioned(). (I587e8, b/169083903)

  • Se agregó la propiedad hasPendingMeasureLayout 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 por 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 haInvalidations() 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 madida 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 interlineado 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 incorporó 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/138390812)
  • 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. (I0860 y 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 PopInputFilter 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 View dentro de Compose. Ten en cuenta que en el futuro no se admitirá la composición directa de objetos View y ViewGroup, 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() por PlacementScope.place(), y el del PlacementScope.place() anterior por 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 un 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 en favor de cualquier llamada explícita a remember { mutableStateOf(...) } por motivos de claridad. De esta forma, se reduce la plataforma 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 y, al mismo tiempo, 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 sincrónica. En general, no lo necesitas, ya que la nueva medición o el rediseño se realizan automáticamente, pero lo usamos dentro de LazyColumnItems durante el desplazamiento. (I5f331, b/160791058)
  • 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 por LazyColumnFor. Se cambió el nombre de LazyRowItems por LazyRowFor. (I84f84)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Se cambió el nombre de AndroidComposeTestRule por createAndroidComposeRule. (I70aaf)
  • Se agregaron más API a TextLayoutResult. (Id7e04)
  • Se cambió el nombre de FilledTextField de Material por TextField, y el del TextField principal por BaseTextField a fin de que la API deseada resulte más fácil de encontrar y usar. (Ia6242, b/155482676)
  • Se cambió el nombre de Modifier.drawBackground por Modifier.background. (I13677)

Versión 0.1.0-dev15

22 de julio de 2020

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

Actualización de dependencias

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

Cambios en la API

  • El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester, Modifier.focusObserver. Los objetos FocusState y FocusDetailedState dejaron de estar disponibles y se los reemplazó por el elemento 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 en 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 enfoque. (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 del objeto 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 del diseño está disponible dentro de la devolución de llamada mediante el objeto de alcance de la medición. (Ic7d9d)

  • Refactoriza el objeto SelectionHandles para reutilizar. (I420e0)

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

  • Se borraron los objetos TestTag y Semantics. Usa los elementos Modifier.testTag y Modifier.semantics. (I15ff0, b/158841414)

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

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

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

  • Se agregó un parámetro modificable al elemento 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 a fin de 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 a fin de 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)

  • El objeto 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 por DrawScope. Se actualizó el objeto DrawScope para implementar la interfaz de Density y proporcionar el elemento LayoutDirection. Se borró la subclase DrawScope en el parámetro ContentDrawScope. Se actualizaron los objetos Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que el objeto 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 por shape y tiene el valor predeterminado de RectangleShape, ahora sin valores anulables. Se cambió el nombre del elemento clipToOutline por 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 consumidores que aún necesitan acceso a un lienzo, 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 lienzo 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 el objeto layoutDirection, brinda propiedades minWidth, maxWidth, minHeight y maxHeight en Dp. (I91b9a, b/149979702)

  • Cambió el nombre del objeto LayoutModifier2 por 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.
    • El elemento 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() ahora establecen de forma predeterminada los elementos clipToBounds y clipToOutline como falso. (I0eb8b, b/152810850)

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

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

  • Se reemplazaron el modificador y el operador por funciones de extensión de fábrica. (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 a fin de 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 del objeto withDensity(density), usa el elemento 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ó el objeto 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 sin valores anulables y se usa el objeto Color.Unset en lugar de null. (Iabaa7)

  • Ingresa parámetros rect opcionales adicionales en el objeto ImagePainter para admitir el dibujo de una subsección del elemento 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 por toAndroidRect/toAndroidRectF a fin de que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las API del marco de trabajo 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) por 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 del objeto Image por ImageAsset a fin de destacar mejor la diferencia entre los datos de Image y el próximo elemento Image que admite composición, que se utiliza para participar en el diseño y dibujar contenido. 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 marco de trabajo 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 del objeto TextDirectionAlgorithm por 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 los objetos Locale y LocaleList dentro de los elementos androidx.ui.text y androidx.ui.intl. (I8132c)

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

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

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

  • Cambia el nombre del objeto AnnotatedString.Builder.addAnnotationString por addStringAnnotation. (I5059e)

  • Ahora es posible ocultar o mostrar el teclado en pantalla usando el elemento 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)

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

  • Se cambió el nombre del módulo ui-text por 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 por 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. De manera similar, el elemento ScrollerPosition dejó de estar disponible y se reemplazó por el objeto ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
  • Se cambió el nombre de runOnIdleCompose por runOnIdle. (I83607)
  • Se cambió el nombre de varias API de prueba con el fin de que sean más intuitivas. Se cambió el nombre de todas las API findXYZ por el de onNodeXYZ. Se cambió el nombre de todas las 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 los objetos sortWith y removeRange al elemento MutableVector. (Icccf7)
  • Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField. (I27032)
  • Se quitó la clase intercalada Shader que une la clase de espera NativeShader. Se cambió el nombre del objeto NativeShader por Shader. La clase intercalada Shader unida no agregó ningún valor a la superficie de la API y era una clase intercalada, así que usa la clase NativeShader directamente. (I25e4d)
  • Se refactorizó el objeto PainterModifier para dejar de proporcionar escalamiento según las restricciones y el parámetro ContentScale especificados. Las implementaciones del objeto Painter deben escalar el contenido de su dibujo en función del tamaño especificado del elemento DrawScope en el que están dibujados.

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

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

  • agrega 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 el elemento 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ó el elemento DrawScope.drawRoundRect para utilizar un solo parámetro Radius en lugar de 2 números de punto flotante separados por el radio junto con 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 a fin de 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 tres 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 a fin de 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 la documentación de registro y 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 por ui-text-android. (I68cbe)