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
16 de diciembre de 2020 - - - 1.0.0-alpha09

Estructura

Compose es una combinación de 6 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.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 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.

Cómo crear 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

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 API 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 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 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 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() 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. 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, 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 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 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 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 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/15105299)
  • 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 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 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)