IU

Funciona con la biblioteca de Jetpack Compose.
Actualización más reciente Versión estable actual Próxima versión potencial Versión beta Versión Alfa
1 de octubre de 2020 - - - 1.0.0-alpha04

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 la IU de Compose, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.

Agrega las dependencias de los artefactos que necesites en el archivo build.gradle de tu app o módulo:

dependencies {
    // New dependencies
    implementation "androidx.compose.ui:ui-tooling:1.0.0-alpha08"
    implementation "androidx.compose.ui:ui-test:1.0.0-alpha08"

    // Old dependencies
    implementation "androidx.ui:ui-tooling:1.0.0-alpha07"
    implementation "androidx.ui:ui-test:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

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

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

Versión 1.0.0-alpha04

1 de octubre de 2020

Lanzamiento de androidx.ui:ui-test:1.0.0-alpha04 y androidx.ui:ui-tooling:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se agregó una función de suspensión en ComposeTestRule para esperar el estado de inactividad de la app (I4212c, b/168226343, b/168227042)
  • 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)

Correcciones de errores

  • 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 quitó el parámetro inlineContent de Text con entrada de string. No se utilizará porque inlineContent debe funcionar con AnnotatedString. (Ief403)

Versión 1.0.0-alpha03

16 de septiembre de 2020

Lanzamiento de androidx.ui:ui-test:1.0.0-alpha03 y androidx.ui:ui-tooling:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Las funciones de prueba globales, como onNode o waitForIdle, dejaron de estar disponibles. Migra a sus equivalentes nuevos que se definen en ComposeTestRule (I7f45a).
  • Se trasladó createAndroidComposeRule y AndroidInputDispatcher desde androidx.ui.test.android a androidx.ui.test. (Idef08, b/164060572)
  • Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
  • Se corrigieron los cálculos de tamaño y posición en GestureScope que ocasionaban la generación de gestos de deslizamiento no válidos, entre otros. (Iaf358, b/166589947)

Correcciones de errores

  • 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 cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)

Versión 1.0.0-alpha02

2 de septiembre de 2020

Lanzamiento de androidx.ui:ui-test:1.0.0-alpha02 y androidx.ui:ui-tooling:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

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

    Por ejemplo:

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

    (I0a85b, b/161247083)

Correcciones de errores

  • Cambió la convención de llamada para funciones que admiten composición. 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)

Versión 1.0.0-alpha01

26 de agosto de 2020

Lanzamiento de androidx.ui:ui-test:1.0.0-alpha01 y androidx.ui:ui-tooling: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.ui:ui-test:0.1.0-dev17 y androidx.ui:ui-tooling:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Cambios en la API

  • Offset se convirtió en una clase intercalada. (Iaec70)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)
  • Se agregó la función createAndroidComposeRule que toma un objeto Class<T : ComponentActivity> como parámetro a fin de crear fácilmente una AndroidComposeRule, dada una clase de actividad específica. (I40da4)

Correcciones de errores

  • Se actualizaron los nombres de PointerEventPass para la versión Alfa. (Ifda6f)
  • 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)
  • 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 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 agregó la disposición spacedBy para filas y columnas a fin de habilitar el posicionamiento de los elementos secundarios de diseño con un espaciado fijo. También se agregó la disposición alineada, de forma que puedan posicionarse esos elementos unos junto a otros y alineados en la fila y columna según la Alineación establecida. Los métodos anteriores Arrangement.Vertical#arrange y Arrangement.Horizontal#arrange dejaron de estar disponibles, y ya no se admitirán las disposiciones personalizadas en el futuro. (I6733d, b/161985975)
  • Modifier.drawBorder dejó de estar disponible. En su lugar, usa Modifier.border. Se reemplazó la clase de datos de borde por BorderStroke. (I4257d, b/158160576)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.ui:ui-test:0.1.0-dev16 y androidx.ui:ui-tooling:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

La mayoría de los paquetes de Jetpack Compose se refactorizaron de acuerdo con la tabla siguiente.

Refactorización de paquetes de Jetpack Compose

Nombre anterior del paquete Nombre nuevo del paquete
androidx.animation androidx.compose.animation.core
androidx.ui.autofill androidx.compose.ui.autofill
androidx.compose androidx.compose.runtime
androidx.compose.dispatch androidx.compose.runtime.dispatch
androidx.ui.animation androidx.compose.animation
androidx.ui.core androidx.compose.ui
androidx.compose.ui.unit
androidx.compose.ui.graphics
androidx.ui.foundation androidx.compose.foundation
androidx.ui.geometry androidx.compose.ui.geometry
androidx.ui.graphics androidx.compose.ui.graphics
androidx.ui.input androidx.compose.ui.text.input
androidx.ui.intl androidx.compose.ui.text.intl
androidx.ui.layout androidx.compose.foundation.layout
androidx.ui.livedata androidx.compose.runtime.livedata
androidx.ui.material androidx.compose.material
androidx.ui.material.icons androidx.compose.material.icons
androidx.ui.rxjava2 androidx.compose.runtime.rxjava2
androidx.ui.savedinstancestate androidx.compose.runtime.savedinstancestate
androidx.ui.node androidx.compose.ui.node
androidx.compose.ui.input.pointer
androidx.ui.platform androidx.compose.ui.platform
androidx.ui.res androidx.compose.ui.res
androidx.ui.semantics androidx.compose.ui.semantics
androidx.ui.testutils androidx.compose.ui.input.pointer
androidx.ui.text androidx.compose.foundation.text
androidx.compose.ui.text
androidx.ui.text.platform androidx.compose.ui.text.android
androidx.compose.ui.platform
androidx.ui.unit androidx.compose.ui.unit
androidx.ui.util androidx.compose.ui.util
androidx.ui.viewinterop androidx.compose.ui.viewinterop
androidx.ui.viewmodel androidx.compose.ui.viewinterop
Aún no se refactorizó (sin cambios)
androidx.ui.test
androidx.ui.tooling

Si usas Android Studio, puedes reemplazar tus declaraciones de importación por el siguiente fragmento de código y usar el botón Optimize Imports en Android Studio. Para los casos que Android Studio no trata, consulta la lista de paquetes indicada más arriba.

  import androidx.compose.runtime.*
  import androidx.compose.animation.*
  import androidx.compose.animation.core.*
  import androidx.compose.foundation.*
  import androidx.compose.foundation.gestures.*
  import androidx.compose.foundation.layout.*
  import androidx.compose.foundation.lazy.*
  import androidx.compose.foundation.shape.*
  import androidx.compose.material.*
  import androidx.compose.material.icons.*
  import androidx.compose.material.icons.filled.*
  import androidx.compose.ui.*
  import androidx.compose.ui.geometry.*
  import androidx.compose.ui.draw.*
  import androidx.compose.ui.graphics.*
  import androidx.compose.ui.graphics.drawscope.*
  import androidx.compose.ui.graphics.painter.*
  import androidx.compose.ui.graphics.vector.*
  import androidx.compose.ui.layout.*
  import androidx.compose.ui.platform.*
  import androidx.compose.ui.res.*
  import androidx.compose.ui.text.*
  import androidx.compose.ui.text.font.*
  import androidx.compose.ui.text.style.*
  import androidx.compose.ui.unit.*
  import androidx.compose.ui.util.*
  import androidx.compose.ui.viewinterop.*
  import androidx.ui.tooling.preview.*

Cambios en la API

  • KeyEvent reemplazó a KeyEvent2. (I2d770, b/162097585)
  • Se quitó SemanticsNodeInteraction.performPartialGesture. Usa SemanticsNodeInteraction.performGesture en su lugar. (Id9b62)
  • Se cambió el nombre de SemanticsNodeInteraction.getBoundsInRoot() por SemanticsNodeInteraction.getUnclippedBoundsInRoot(). (Icafdf, b/161336532)
  • Se cambió el nombre de AndroidComposeTestRule por createAndroidComposeRule. (I70aaf)
  • Se agregaron los SemanticsMatcher isFocused() y isNotFocused(). (I0b760)
  • Se quitó BaseGestureScope.globalBounds, que no debería usarse a partir de pruebas. En su lugar, usa las coordenadas locales del nodo con el que interactúas. (Ie9b08)
  • Se mejoró la exactitud de la API del inspector. (I3cfbf)

Correcciones de errores

  • Se movió diálogo a la IU. (I47fa6)
  • 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)
  • Se requiere que el tipo T se especifique de forma explícita para transitionDefinition. (I1aded)
  • 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)
  • 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)
  • Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)
  • Se cambió el nombre de FilledTextField de Material por TextField, y el del TextField principal se cambió 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)
  • Se cambió el nombre de ColorPalette por Colors a fin de mapear mejor el sistema de colores de Material y quitar la confusión que existía en torno a considerar ColorPalette como un objeto de temas "genérico" en lugar de considerarlo una implementación específica del sistema de colores de Material. Además, se cambió el nombre de lightColorPalette y darkColorPalette por lightColors y darkColors, respectivamente. (I9e976, b/161812111)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Row y Column ahora son funciones intercaladas, lo que reduce en forma significativa la sobrecarga asociada a su uso. (I75c10)

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.ui:ui-test:0.1.0-dev15 y androidx.ui:ui-tooling:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

La mayoría de los artefactos de Jetpack Compose se refactorizaron de acuerdo con la tabla siguiente.

Ten en cuenta que, en esta versión, solo se refactorizaron los nombres de artefactos. En futuras versiones, se actualizarán los nombres de los paquetes para que sigan su nombre de artefacto nuevo.

Refactorización de artefactos de Jetpack Compose

Artefacto anterior Nuevo artefacto
androidx.compose:compose-dispatch androidx.compose.runtime:runtime-dispatch
androidx.compose:compose-runtime androidx.compose.runtime:runtime
androidx.ui:ui-animation androidx.compose.animation:animation
androidx.ui:ui-animation-core androidx.compose.animation:animation-core
androidx.ui:ui-core androidx.compose.ui:ui
androidx.ui:ui-foundation androidx.compose.foundation:foundation
androidx.ui:ui-geometry androidx.compose.ui:ui-geometry
androidx.ui:ui-graphics androidx.compose.ui:ui-graphics
androidx.ui:ui-layout androidx.compose.foundation:foundation-layout
androidx.ui:ui-livedata androidx.compose.runtime:runtime-livedata
androidx.ui:ui-material androidx.compose.material:material
androidx.ui:ui-material-icons-core androidx.compose.material:material-icons-core
androidx.ui:ui-material-icons-extended androidx.compose.material:material-icons-extended
androidx.ui:ui-rxjava2 androidx.compose.runtime:runtime-rxjava2
androidx.ui:ui-saved-instance-state androidx.compose.runtime:runtime-saved-instance-state
androidx.ui:ui-text androidx.compose.foundation:foundation-text
androidx.ui:ui-text-android androidx.compose.ui:ui-text-android
androidx.ui:ui-text-core androidx.compose.ui:ui-text
androidx.ui:ui-unit androidx.compose.ui:ui-unit
androidx.ui:ui-util androidx.compose.ui:ui-util
Aún no se refactorizó (sin cambios)
androidx.compose:compose-compiler
androidx.ui:ui-test
androidx.ui:ui-tooling

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

  • 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)
  • API para imprimir los datos semánticos de la app en forma jerarquizada y no como una lista plana. También se quitó SemanticsMatcher.any; en su lugar, usa findRoot().printToString() para imprimir los datos semánticos. (I866b5)
  • 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 quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
  • 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)
  • Se agregó un nuevo parámetro de dispositivo a @Preview. (I39049)

Correcciones de errores

  • 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 fue reemplazado por ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
  • 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ó una anotación de API experimental para las API relacionadas con entradas clave. (I53c0a)
  • Se modificó la API de Transition para mostrar un elemento TransitionState en lugar de pasar el objeto TransitionState a los elementos secundarios. Esto hace que la API sea más coherente con las API de animate(). (I24e38)
  • El aplicador ahora requiere un método clear() para desechar las composiciones. (Ibe697)
  • Se creó la API experimental LayoutNode. (I4f2e9)
  • Las ventanas emergentes, los diálogos y los menús ahora heredan el MaterialTheme contextual. (Ia3665, b/156527485)
  • Se agregó la función withFrameNanos de nivel superior para la sincronización de la animación. (Ie34c5)
  • 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)
  • Usa el objeto AnimationSpec en lugar del elemento AnimationBuilder en las API de nivel superior a fin de aclarar el concepto de especificación de animación estática. -Mejora la DSL de transición mediante la eliminación del requisito lambda para crear el objeto AnimationSpecs, como tween, spring. Estas toman parámetros de constructor en forma directa. -Mejora la facilidad de uso general del elemento AnimationSpec para abrir constructores en lugar de depender de compiladores. -Cambia la duración y la demora de los objetos KeyFrames y Tween al elemento Int. De esta manera, se eliminan las conversiones de tipos y los métodos de sobrecarga innecesarios (para admitir tanto los objetos Long como Int). (Ica0b4)
  • Se generará una IllegalStateException si intentas activar una sincronización en el subproceso principal, por ejemplo, cuando haces lo siguiente:

    runOnIdleCompose {
        findByTag(\"tag\").assertExists()
    }
    

    Quita la llamada a runOnIdleCompose en esos casos:

    findByTag(\"tag\").assertExists()
    

    (Idced7, b/159224666)

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

  • El espacio del contenido del botón ahora se comporta como Row (es útil cuando necesitas un ícono con texto. Consulta ejemplos en Button how to write it). (I0ff10, b/158677863)

Versión 0.1.0-dev04

24 de junio de 2020

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

Cambios en la API

  • Se reemplazó el uso de IntPx con Int. Se reemplazó IntPxPosition con IntOffset. Se reemplazó IntPxSize con IntSize. (Ib7b44)
  • A fin de consolidar las clases utilizadas para representar la información de tamaño, estandarizamos el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 números 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, estandarizamos el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 números de punto flotante para representar los desplazamientos x e y. (I3ad98)
  • Se reemplazó el uso de la clase Px dentro 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)
  • Placeable#get(AlignmentLine) ya no muestra las posiciones Int de la línea de alineación como nulas. Si no se encuentra la línea de alineación consultada, se mostrará AlignmentLine.Unspecified. (I896c5, b/158134875)
  • Se agregó un parámetro modificable a AndroidView que admite composición. (I48a88, b/158746303)
  • El valor Semantics() quedó obsoleto. Usa Modifier.semantics() en su lugar. (I72407, b/158841414)
  • Se agrega viewModel() que se puede componer y permite crear u obtener un ViewModel ya creado de manera similar a como funciona en las clases Activity o Fragment (I5fdd1)
  • Se reemplazó el uso de la clase Pxen 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 valor TestTag quedó obsoleto. Usa Modifier.testTag en su lugar. (If5110, b/157173105)
  • Se quitó la implementación no-op predeterminada de ParentDataModifier#modifyParentData, ya que equivalía a no haber implementado la interfaz. (I0deaa)
  • Se quitó ScaleFit, que anteriormente había quedado obsoleto. Usa ContentScale en su lugar. (Ifbc5b)
  • Se cambió el nombre de AdapterList por LazyColumnItems. (6decc02)
  • Se agregó LazyRowItems, desplazamiento horizontal similar a LazyColumnItems. (Ibbcf7)
  • Se quitó androidx.ui.foundation.shape.RectangleShape; usa androidx.ui.graphics.RectangleShape en su lugar. (I94939, b/154507984)
  • Se agregó Modifier.zoomable para la funcionalidad de pellizcar para hacer zoom. (Id5d63)
  • El componente Toggleable quedó obsoleto. Usa Modifier.toggleable en su lugar. (I35220, b/155642842)
  • MutuallyExclusiveSetItem quedó obsoleto. Usa Modifier.selectable en su lugar. (I02b47, b/157642842)
  • Se agregó el parámetro fontWeight a Text, que no se agregó con anterioridad por accidente. (I56937)
  • Se cambió el nombre del parámetro de porcentaje a fracción al crear los lineamientos de ConstraintLayout. (Ida2db)
  • Se agregó compatibilidad con los márgenes de las barreras de ConstraintLayout. (I47ffe)
  • Se corrigió la compatibilidad con lectura de derecha a izquierda en ConstraintLayout. Se agregaron unas API que no admiten lectura de derecha a izquierda. (I3b1c7)
  • Se agregó un nuevo DSL de ConstraintLayout. Consulta las muestras para obtener más detalles. (Icaa9a)
  • Se agregó la anotación @ExperimentalLayout. ConstraintLayout, FlowRow y FlowColumn ahora contienen esa etiqueta para indicar que sus API cambiarán. (I412a8)
  • Se agregó Textfield con contorno de Material. (I1a518).
  • TabRow.TabPosition no muestra la posición en Dp ni en IntPx. (I34a07, b/158577776)
  • Modifier.ripple quedó obsoleto. Clickable ahora usa ripple como indicación predeterminada (si tienes un MaterialTheme {} configurado en tu aplicación), por lo que, en la mayoría de los casos, puedes usar clickable y get ripple de forma gratuita. Para personalizar el parámetro de color/tamaño/límites para ripple, puedes crear manualmente un RippleIndication y pasarlo a clickable como parámetro de indicación. (I101cd, b/155375067)
  • Se modificó la API de Scaffold: se renombraron algunos parámetros y se agregaron otros para una mejor personalización. Se agregó un método get a los tamaños de consulta de Fab, TopBar y BottomBar. (I0e7ce)
  • Agrega el parámetro strokeWidth a CircularProgressIndicator para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de un LinearProgressIndicator, puedes usar Modifier.preferredHeight() u otro modificador de tamaño. (Icea16, b/154919081)
  • Se agregó relativeOffset(x, y) a GestureScope y PartialGestureScope, lo que produce una instancia Offset con valores relacionados con el tamaño del componente. relativeOffset(.1f, .2f) indica un desplazamiento en el que x es el 10% del ancho del componente, mientras que y es el 20% de su altura. (Ia4bf7, b/158291007)
  • Ahora, cuando se inyectan clics largos o dobles, se puede especificar la duración de dichos gestos. (I51c97, b/155464717)
  • Se agregaron propiedades a GestureScope y PartialGestureScope para obtener las coordenadas comunes de un componente. Son números de punto flotante para propiedades unidimensionales (como right) y desplazamientos para propiedades bidimensionales (como centerLeft).

    Las propiedades unidimensionales son las siguientes:

    • left
    • centerX
    • right
    • top
    • centerY
    • bottom

    Las propiedades bidimensionales son las siguientes: * topLeft * topCenter * topRight * centerLeft * center (ya existía, se la menciona para completar la lista) * centerRight * bottomLeft * bottomCenter * bottomRight

    Ejemplo de uso:

    findByTag("widget")
        .doGesture {
            sendSwipe(topLeft, bottomRight)
        }
    

(I49ef3, b/158291007): Se agregaron las API de inyección de gestos multitáctiles para poder probar componentes cuando se realizan este tipo de gestos.

Ahora, cuando se inyecta un gesto, se pueden especificar varios punteros proporcionando un ID de puntero a un método de gesto parcial. Si no se especifica un ID de puntero, se asume el puntero 0, llamado puntero predeterminado. Ten en cuenta que todos los gestos prefabricados (sendClick, sendSwipe y todos los métodos compilados en ellos) usan el puntero predeterminado. Los siguientes métodos de PartialGestureScope ahora tienen una sobrecarga que acepta un ID de puntero: - sendDown - sendMoveTo - sendMoveBy - sendUp

Ahora cada evento muestra una lista completa de la ubicación actual de cada puntero activo (es decir, que registra un evento descendente) y los métodos enumerados anteriormente envían un evento de inmediato. Además, se introdujeron tres métodos nuevos: - movePointerTo - movePointerBy - sendMove

Los métodos movePointerTo y movePointerBy cambian la ubicación actual de un puntero, pero no envían un evento para reflejarlo. En consecuencia, tampoco adelantan el tiempo actual del gesto. Esto permite mover varios punteros a la vez. El último método, sendMove, no admite ningún parámetro y simplemente envía un evento de movimiento, lo que permite "vaciar" todo el movimiento del puntero. Si se actualizaron los punteros con movePointerXx y se envía un evento hacia arriba o hacia abajo, se activará un evento de movimiento inmediatamente antes de este.

La temporización de todos los métodos también cambió levemente. A partir de ahora, sendDown y sendUp ya no hacen avanzar el tiempo del gesto, por lo que puedes enviar varios punteros hacia abajo o hacia arriba de forma simultánea. Todos los demás métodos adelantan el tiempo del gesto. Por el momento, aún no es posible cambiar el delta de tiempo. (I9acac, b/157142514): Se agregó AnnotatedString.getStringAnnotations, que muestra todas las anotaciones dentro del rango. (I1fa00)

Correcciones de errores

  • Se introdujeron las API de animación sin estado de bajo nivel. (I63bf7)
  • 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. 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. (Id3434).
  • Los encadenados ahora pueden iniciarse con un valor nulo. (Iad6a4, b/155947711)
  • 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)
  • 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 PointerInputFilters mediante la subcomposición durante el envío. Ya se solucionó 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 PointerInputFilters mediante la subcomposición durante el envío. Ya se solucionó 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)

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

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

  • Se corrigió un error de ConstraintLayout que causaba una falla en las recomposiciones. (Ibee5a, b/158164341)

  • Se corrigió onClick que no se podía invocar para DropdownMenuItem. (I3998b, b/157673259)

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

Versión 0.1.0-dev13

10 de junio de 2020

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

Errores conocidos

  • Cuando la aplicación dependa de androidx.core:core-ktx:1.2.0 y se use una FontFamily con varias fuentes o tamaños de fuentes, se procesará la selección de fuentes en una fuente de tamaño normal. Trabajaremos para solucionar este problema; por el momento, la solución consiste en usar androidx.core:core-ktx:1.2.0-alpha01 o androidx.core:core-ktx:1.1.0.

Versión 0.1.0-dev12

27 de mayo de 2020

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

Cambios en la API

  • Se agregó compatibilidad con animate() para Dp, Px, Size, Position, Bounds, PxPosition, PxSize, PxBounds, IntPx, IntPxSize, IntPxPosition, IntPxBounds y AnimationVector. (IB7518, b/156559139)
  • Se agregó el componente DropdownMenu en ui-material, una implementación del menú de Material Design. (I9bb3d, b/135742486)
  • Se quitó el elemento LayoutTag() obsoleto; en su lugar, usa Modifier.tag(). (If8044, b/157020665, b/156577646)
  • Se quitó el objeto Modifier.matchParent() obsoleto; en su lugar, usa Modifier.matchParentSize(). (If8044, b/157020665, b/156577646)
  • 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, b/15681014)
  • Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc, b/153198273, b/154023028)
  • DoubleTapGestureFilter ahora desambigua SingleTapGestureFilter en todo el árbol. (If92b1, b/147609897, b/148553848, b/138605697, b/148464969)
  • 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, b/153633345)
  • VerticalScroller ahora proporciona un objeto Column listo para usar. HorizontalScroller ahora proporciona un objeto Row listo para usar. (Ieca5d, b/157020670)
  • Se agregó el objeto Modifier.indication al paquete de base. Úsalo para mostrar la función de presionar/arrastrar/otra indicación en tus elementos interactivos personalizados. (I8425f, b/155287131)
  • VerticalScroller y HorizontalScroller ahora admiten el desplazamiento invertido cuando se configura isReversed en ScrollerPosition. (I953es, b/155852672)
  • Se agregó compatibilidad con elementos que se pueden compilar en el diseño de texto. (I1373c, b/139320966)
  • Se quitó la API obsoleta del objeto DrawBackground y se reemplazó por las API de la extensión drawBackground en Modifier. Implementaciones refactorizadas de color, pincel y pintura del objeto drawBackground para reducir las rutas de código y quitar el requisito de crear Modifier como parte de la composición. (I0343a, b/155999867)
  • Se agregó Modifier.padding(InnerPadding). (I94985, b/157133803)
  • Se quitaron los objetos obsoletos RowAlign y ColumnAlign de Row y Column. (If60d4, b/154524540, b/155858731)
  • Se agregó el modificador de diseño offsetPx, que se puede usar para definir desplazamientos (dinámicos) en px. (I5af57, b/154841615)
  • Se permite mostrar/ocultar manualmente el teclado en pantalla con SoftwareKeyboardController. (Ifb9d6, b/155427736)
  • Se cambió el nombre de Emphasis.emphasize() por Emphasis.applyEmphasis(). (Iceebe, b/152874916)
  • Se agregó la utilidad para simular gestos de pellizco en las pruebas. (If6c42, b/145593752)
  • Se quitó la clase Size sin usar, ya que hay una clase Size duplicada en el módulo ui-geometry que se consume. (I1b602, b/156546424)
  • El nombre de AnnotatedString.Item cambió por AnnotatedString.Range. (I2d44d, b/156126205)
  • 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. El objeto Composer::call dejó de estar disponible.
    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 dejó de estar disponible. 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)

La anotación del objeto @Model dejó de estar disponible.

  • La anotación del objeto @Model dejó de estar disponible. Usa los elementos state y mutableStateOf como alternativas. Se decidió darle de baja después de un debate minucioso.

    Justificación

    Los motivos, entre otros, son los siguientes:

    • Reduce la superficie de la API y los conceptos que debemos enseñar.
    • Se alinea, de manera más estrecha, con otros kits de herramientas comparables (SwiftUI, React, Flutter).
    • Se puede revertir la decisión. Siempre podemos recuperar el elemento @Model en el futuro.
    • Quita el uso de caso límite y la dificultad para responder preguntas sobre la configuración del elemento @Model como cuestiones que necesitamos controlar.
      • Clases de datos, equals, hashcode del objeto @Model, etc.
      • ¿Cómo se pueden "observar" algunas propiedades y otras no?
      • ¿Cómo especifico la igualdad estructurada frente a la igualdad referencial para usarla en la observación?
    • Reduce la "magia" en el sistema. Disminuiría la probabilidad de que alguien suponga que el sistema es más inteligente de lo que es (es decir, que sabe cómo diferenciar una lista).
    • Permite que el nivel de detalle en la observación sea más intuitivo.
    • Mejora la refactorización de la variable -> propiedad sobre clase.
    • Es posible que ofrezca posibilidades para realizar optimizaciones manuales y específicas del objeto State.
    • Se alinea, de manera más estrecha, con el resto del ecosistema y reduce la ambigüedad hacia el estado inmutable o el "estado mutable que adoptamos".

    Notas de migración

    Casi todos los usos existentes del objeto @Model se transforman, de manera bastante trivial, de una de dos maneras. A modo de ejemplo, la siguiente clase del objeto @Model cuenta con dos propiedades y se usa en un elemento que admite composición.

    @Model class Position(
     var x: Int,
     var y: Int
    )
    
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    Alternativa 1: usa el objeto State<OriginalClass> y crea copias.

    Este enfoque es más fácil con las clases de datos de Kotlin. En esencia, convierte todas las propiedades anteriores del objeto var en propiedades del elemento val de una clase de datos, luego usa el objeto state en lugar del elemento remember y asigna el valor state a las copias clonadas de la clase original mediante el método de conveniencia del elemento copy(...) de la clase datos.

    Es importante tener en cuenta que este enfoque solo funciona cuando las únicas transformaciones de esa clase se realizan en el mismo alcance que se crea la instancia State. Si la clase está mutando, de manera interna, fuera del alcance del uso, y confías en esa observación, querrás usar el siguiente enfoque.

    data class Position(
     val x: Int,
     val y: Int
    )
    
    @Composable fun Example() {
     var p by state { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p = p.copy(x=it) }
       onYChange={ p = p.copy(y=it) }
     )
    }
    

    Alternativa 2: usa el objeto mutableStateOf y los delegados de propiedad

    Este enfoque es más fácil con los delegados de propiedad de Kotlin y la API del objeto mutableStateOf, que te permite crear instancias MutableState fuera de la composición. En esencia, reemplaza todas las propiedades del objeto var de la clase original con las propiedades del elemento var con el objeto mutableStateOf como su delegado de propiedad. Esto tiene la ventaja de que el uso de la clase no cambiará en absoluto, solo su implementación interna. Sin embargo, el comportamiento no es completamente idéntico al del ejemplo original, ya que cada propiedad se observa o se suscribe de forma individual, por lo que las recomposiciones que observas después de esta refactorización pueden ser más limitadas (lo cual es bueno).

    class Position(x: Int, y: Int) {
     var x by mutableStateOf(x)
     var y by mutableStateOf(y)
    }
    
    // source of Example is identical to original
    @Composable fun Example() {
     var p = remember { Position(0, 0) }
     PositionChanger(
       position=p,
       onXChange={ p.x = it }
       onYChange={ p.y = it }
     )
    }
    

    (I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)

Correcciones de errores

  • Se corrigió un error: cuando el tamaño y el estilo de la fuente estaban anidados en una AnnotatedString, no se procesaba correctamente el texto. (I77a9d, b/155081453)
  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron DrawScope y ContentDrawScope.
    • Se cambió el nombre de CanvasScope por DrawScope.
    • Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection.
    • Se eliminó la subclase DrawScope de ContentDrawScope.
    • Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente. (I1798e, b/155918846)
  • 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, b/156681014)

Versión 0.1.0-dev11

14 de mayo de 2020

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

Cambios en la API

  • Crossfade ahora acepta el parámetro AnimationBuilder opcional para permitir la configuración de la animación. (I6d6e0)
  • 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 de LayoutModifier2 por LayoutModifier. (Id29f3)
  • Se quitó la interfaz obsoleta de LayoutModifier. (I2a9d6)
  • HorizontalScroller y VerticalScroller ahora restablecen su posición de desplazamiento usando el estado de instancia guardado. (Ia0fae, b/155075048)
  • Se quitó FocusManagerAmbient. Usa FocusModifier.requestFocus para obtener enfoque. (Ic4826)
  • Se quitó temporalmente el diseño de la tabla hasta que esté disponible nuevamente con una API actualizada. (Id88a7)
  • Se creó la API de CanvasScope que une un objeto de Canvas a fin de exponer una superficie de API de dibujo declarativa y sin estado. Las transformaciones se contienen dentro de su propio alcance de receptor y la información de tamaño también se define en los límites de inserción correspondientes. No requiere que un consumidor mantenga su propio objeto de estado de Paint para configurar las operaciones de dibujo.
    • Se agregó CanvasScopeSample y se actualizó la app de demostración a fin de incluir una demostración de gráficos declarativos. (Ifd86d)
  • Se quitó ColoredRect. En su lugar, usa Box con el modificador drawBackground. (I983c7, b/Hang75751)
  • Se agregó personalización del color del cursor al TextField. (I6e33f)
  • Ahora es posible ocultar o mostrar el teclado en pantalla usando SoftwareKeyboardController, que se entrega mediante la devolución de llamada onTextInputStarted. (I8dc44, b / 151860051)
  • TextFieldValue usado con TextField ahora puede ser una recreación de una actividad que permanece vigente cuando se usa de la siguiente manera: var text por savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }. (I5c3ce, b/155075724)
  • Agrega parámetros de uso común a Text(). Si estás creando un estilo de texto local para pasar una pequeña cantidad de estos parámetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), ahora puedes proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)
  • Se reemplazó el parámetro CoreTextField/TextField focusIdentifier con FocusNode a fin de integrarlo con el subsistema de enfoque. (I7ea48)
  • Actualización de TextField: en dimensión horizontal, ocupará todo el espacio disponible. (IB08df, b/154638552)
  • El elemento que admite composición AlineableLineOffset dejó de estar disponible. En su lugar, usa el modificador relativePaddingFrom(). Se quitó el elemento CenterAlignmentLine que admite composición. (I60107)
  • Se agregó el modificador de diseño defaultMinSizeConstraints, que establece restricciones de tamaño en el diseño unido solo cuando las restricciones entrantes correspondientes no están especificadas (0 como restricción mínima e infinito como máxima). (I311ea, b/150460257)
  • Se quitó Container. En su lugar, usa Box. (Ibbc2b, b/151407926)
  • Se quitaron los modificadores LayoutWidth/Height/Size obsoletos. (Ib0bc1)
  • Se agregaron valores de parámetros predeterminados al modificador de desplazamiento. (I37f06)
  • Se agregó un modificador de padding simétrico. (I39840, b/152941819)
  • Se quitó el modificador LayoutAspectRatio obsoleto. (I65a74)
  • Se corrigió un error en los modificadores de ancho y altura que hacía que se midiera el diseño unido sin restricciones de eje opuesto. (I210b8, b/154797971)
  • Los botones inhabilitados ahora siguen visualmente la especificación de Material Design. (I47dcb, b/155076924)
  • FilledTextField obtiene acción de IME, transformación visual y compatibilidad con el tipo de teclado. (I1f9cf, b/155075201)
  • Agrega el parámetro strokeWidth a CircularProgressIndicator para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de un LinearProgressIndicator, puedes usar Modifier.preferredHeight() o algún otro modificador de tamaño. (Icea16, b/154919081)
  • Se agregó la API para los íconos iniciales y finales en FilledTextField y el manejo del estado de error. (Ic12e0)
  • Agrega la acción doPartialGesture con el receptor PartialGestureScope que tiene los métodos sendDown, sendMoveTo, sendMoveBy, sendUp y sendCancel. (I6b058, b/152477560)
  • Agrega los métodos sendDown, sendMove, sendUp y sendCancel a InputDispatcher y GestureToken para combinar estos eventos táctiles individuales en un gesto. (Ibd278, b/152477560)
  • Se agregó el operador de adición para (Text/Paragraph/Span)Style, que delega a la función merge(). (Ia1add)
  • Se combinaron los proyectos ui-framework y ui-platform en ui-core, por lo que todas las dependencias de esos módulos solo deben depender de ui-core. (/I70067)

Correcciones de errores

  • 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 quitaron los modificadores LayoutAlign obsoletos. (I10877)
  • Agrega Toolbar para las operaciones relacionadas con texto. (I49d53)

Versión 0.1.0-dev10

29 de abril de 2020

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

Cambios en la API

  • Se reemplazaron todos los usos anulables de Color en la API con valores no anulables y se usa Color.Unset en lugar de null. (Iabaa7)
  • Las funciones de medición intrínseca en 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 nuevo Modifier.zIndex() para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño principal. 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 la elevation y el segundo es la shape, con una RectangleShape predeterminada. (I20150, b/152417501)
  • Se quitaron onSizeChange y onPositionChange de Owner. (I5c718)
  • Se agregó Constraints2, una copia de Constraints que solo admite valores de restricción Int, en lugar de IntPx. Se quitará IntPx y se asumirá que todas las restricciones de número entero son píxeles como Android.
    • También se agregó IntSize, que finalmente reemplazará a IntPxSize. (I4b43a)
  • Se agregaron InteractionState y Interaction, lo que facilita la compilación de componentes que reaccionan a los cambios de estado de la IU, como presionar y arrastrar. (Icfe25, b/152525426)
  • Se trasladó RectangleShape de androidx.ui.foundation.shape.* a androidx.ui.graphics.*. (Ia74d5, b/154507984)
  • Actualización de la API de TextField: se combinaron las devoluciones de llamada de onFocus y onBlur en una sola devolución de llamada de onFocusChange(Boolean) con un parámetro booleano. (I66cd3)
  • Se quitó FontLoader. Usa fontResource en su lugar. (Id0308)
  • Se quitó la API MaskFilter sin usar, ya que tiene un uso limitado y no está optimizada para la aceleración de hardware en la mayoría de los casos prácticos. (I54f76)
  • Se agregó Unset Color para representar un valor sin configurar sin el recuadro "Colors". (If901a)
  • Se agregaron los métodos de extensión Canvas.rotate y Canvas.scale a fin de consumir coordenadas dinámicas opcionales para 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ó Canvas.rotateRad a fin de que sea un método de extensión para mantener la coherencia. (Ibaca6).
  • Se cambió el color predeterminado del BAF y el BAF extendido a MaterialTheme.colors.secondary. (I3b9b9, b/154118816)
  • Ya no es necesario llamar explícitamente a onIdle() después de ComposeTestRule.setContent {}. (Iafb2e, b/154079800)
  • Ahora puedes pasar una ActivityTestRule personalizada a AndroidComposeTestRule. (I38206, b/153623653)
  • Se agregaron getLineStart, getLineEnd, getEllipsisOffset y getEllipsisCount a TextLayoutResult. (Ibc801)
  • FontWeight.lerp ya no se ajusta. Sigue siendo una clase de datos. (I521c2)
  • El constructor FontWeight ahora es público; ya no es una clase de datos. (Id6b1f)

Correcciones de errores

  • Ingresa parámetros rect opcionales adicionales en ImagePainter para admitir el dibujo de una subsección de ImageAsset subyacente. (I0ea9e)
  • Se corrigió una falla en AdapterList que se producía cuando se quitaban elementos. (Ic64b0, b/pa3195921)
  • Ahora se requiere el uso de ComposeTestRule para que funcione cualquier elemento Finder (como findByTag). (I75bb9, b/153565271)

Versión 0.1.0-dev09

15 de abril de 2020

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

Cambios en la API

  • Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)
  • alignToSiblings now accepts a ahora acepta un Measured en lugar de instead of. (I5788d)
  • (I45f09, b/152842521)
    • Se cambió el nombre de ScaleFit por ContentScale.
    • Se trasladó el valor 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 alineación.
    • Se cambió el nombre de FillMaxDimension por Crop.
    • Se cambió el nombre de FillMinDimension por Fit.
    • Se cambió el nombre de Fit por Inside para que coincida mejor con equivalentes de ImageView.ScaleType.
    • Se agregó documentación que indica que con la combinación de Crop y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_CROP, y que con Fit cuando se usa con Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.FIT_CENTER.
    • Si se usa Inside con Alignment.Center, se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_INSIDE.
  • Se agregó 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)
  • Se agregaron positionInParent y boundsInParent para LayoutCoordinates. (Icacdd, b/152735784)
  • DrawLayerModifier y drawLayer() ahora establecen de forma predeterminada el valor false en clipToBounds y clipToOutline. (I0eb8b, b/152810850)
  • Se cambió el nombre de LayoutResult por MeasureResult. (Id8c68)
  • Se agregó LayoutModifier2, una nueva API para definir modificadores de diseño; LayoutModifier dejó de estar disponible. (If32ac)
  • Quita ProvideContentColor; en su lugar, usa directamente ContentColorAmbient con Providers. (Iee942).
  • Agrega un parámetro de color al texto, lo que permite anular el color del estilo del texto sin necesidad de combinarlo manualmente con el estilo proporcionado en un tema. (I41a66)
  • El sistema de temas de formas se actualiza según la especificación de Material Design. Ahora puedes proporcionar formas pequeñas, medianas y grandes para que las use la mayoría de los componentes. (Ifb4d1)
  • LayoutDirectionAmbient ya no está disponible. Para leer la dirección del diseño definida por la configuración regional, usa localeLayoutDirection en ConfigurationAmbient. (I851b1)
  • El nuevo LifecycleOwnerAmbient ya está disponible. Ahora, una actividad que usas con la IU de Compose debería extender androidx.activity.ComponentActivity (o AppCompatActivity). setContent en android.app.Activity dejó de estar disponible. (Idb25a, b/153141084)
  • Las ventanas emergentes admiten lectura de derecha a izquierda (Ib6657)
  • Agrega ClipboardManager. (I1dd2b)
  • Se agregó compatibilidad con dimensiones personalizadas de ConstraintLayout. (Idb1a5)
  • Se quitó OnChildPositioned. En su lugar, los desarrolladores deben usar el modificador Modifier.onChildPositioned. (I5ade7, b/151141173, b/151641453, b/151818355)
  • Se cambió el nombre 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 cambió el nombre de EdgeInsets por InnerPadding. Se cambió el nombre del parámetro innerPadding de los botones de Material por padding. (I66165)
  • Se agregaron modificadores para la definición de tamaño en mediciones intrínsecas y dejaron de estar disponibles los componentes que cumplían esta función. (I8295d)
  • Se quitaron las funciones Wrap y Center que admiten composición y que quedaron obsoletas. (I29e23)
  • El control deslizante ahora no tiene estado. Los usuarios deberán pasar y actualizar el estado por su cuenta, como con cualquier otro control. (Ia00aa)
  • Se quitó StaticDrawer. Si lo necesitas, usa Box con el ancho especificado para el material. (I244a7)
  • Se agregó el parámetro de modificador a ListItem y se reordenaron los parámetros para ubicar el cuerpo de expresiones lambda al final. (I66e21)
  • Se agregó el parámetro de constructor defaultFontFamily a Typography, lo que permite especificar la familia de fuentes predeterminada que se usará para cualquier TextStyles proporcionado que no tenga una familia definida. (I89d07)
  • Se quitaron temporalmente tablas de datos de materiales de la superficie de la API. (Iaea61)
  • Se cambió el nombre de los parámetros en la función Divider que admite composición. (Ic4373)
  • Se cambió el nombre del parámetro final "secundario" de muchos componentes de Material; usa el nombre nuevo si lo usaste mediante parámetros con nombre (o simplemente usa la sintaxis final de lambda). (Ia6d19)
  • Quita MaterialTheme.emphasisLevels; en su lugar, usa EmphasisAmbient.current para recuperar los niveles de énfasis. (IB5e40)
  • Ahora se puede usar savedInstanceState() con tipos anulables. (I6847f, b/153532190)
  • Se agregó ui-rxjava2, un nuevo artefacto con adaptadores para RxJava2. (Ifab4b, b/153369097)

    • Ejemplo de uso:
    val value by observable.subscribeAsState()
    
  • Se agregó ui-livedata, un nuevo artefacto con un adaptador para LiveData. (Ie9e8c, b/150465596)

    • Ejemplo de uso:
    val value by liveData.observeAsState()
    

Correcciones de errores

  • Se agregaron los parámetros verticalGravity y horizontalGravity a Row y Column, respectivamente. (I7dc5a)
  • Se cambió el nombre de ui-text module was renamed as por ui-text-core` (I57dec)
  • Se mejoró la API DrawModifier (Ibaced, b/152919067):
    • El alcance del receptor incluye draw() ContentDrawScope
    • Se quitaron todos los parámetros de draw()
    • DrawScope tiene la misma interfaz que el CanvasScope anterior
    • ContentDrawScope tiene el método drawContent().
  • runOnIdleCompose y runOnUiThread ahora son funciones globales en lugar de ser métodos en ComposeTestRule. (Icbe8f)
  • Los operadores delegados de la propiedad [Mutable]State se movieron a extensiones a fin de admitir optimizaciones delegadas de propiedad de Kotlin 1.4. Los emisores deben agregar importaciones para continuar usando by state { ... } o by mutableStateOf(...). (I5312c)
  • El elemento ColoredRect dejó de estar disponible. Usa Box(Modifier.preferredSize(width, height).drawBackground(color)) en su lugar. (I499fa, b/152753731)
  • Cambiamos la forma en que medimos el primer diseño que colocas dentro del bloque activity.setContent { }. Antes, llenaba toda la pantalla de la actividad, mientras que ahora se comporta como si colocaras el diseño dentro de una pila: puede ser más pequeño que una pantalla y se ubica en la pantalla superior izquierda. Si deseas usar el comportamiento anterior, puedes aplicar Modifier.fillMaxSize() para tu diseño. (Ie88a7, b/153453714)
  • Se cambió el nombre del módulo ui-text-compose por ui-text. ui-text ahora contiene elementos CoreText y CoreTextField que admiten composición. (IB7d47)
  • Se movieron los elementos ui-framework/CoreText, CoreTextField que admiten composición en ui-text-compose. Te recomendamos incluir ui-text-compose en tu proyecto. (I32042)
  • Se actualizaron wrapContentWidth y wrapContentHeight para incluir Alignment vertical u horizontal en lugar de Alignment. Se actualizó el modificador de gravedad para aceptar Alignment vertical u horizontal. Se actualizaron Row, Column y Stack para admitir Alignment continuas personalizadas. (Ib0728)
  • Se creó la API de PixelMap para admitir consultas de información de píxeles desde un ImageAsset. (I69ad6)
  • Se agregó la implementación de Material Design del campo de texto relleno. (Ic75cd)
  • Se reemplazó el nombre del paquete ui-android-text (androidx.text) por androidx.ui.text.platform a fin de cumplir con la política de androidx. (I42711)

Versión 0.1.0-dev08

1 de abril de 2020

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

Cambios en la API

  • 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 capa a fin de admitir la rotación y el escalamiento en un punto específico de una capa. (Icf7c3)
  • Se movió el elemento arrastrable al modificador. (Id9b16, b/151959544).
  • Se movió Text al paquete androidx.ui.foundation, desde androidx.ui.core. (I87ce5)
  • Se agregó el parámetro enabled a Checkbox, Switch y Toggleable. (I41c16)
  • Ripple ahora es un modificador. Mientras que Clickable aún no se convirtió al uso recomendado, que es Clickable(onClick = { ... }, modifier = ripple()). (Ie5200, b/151331852, b/150060763)
  • Se agregó la API de VectorPainter para reemplazar la API de subcomposición existente por gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un DrawModifier.
    • Se dejaron de compilar los elementos anteriores que admiten composición de DrawVector favor de VectorPainter.
    • Se cambió el nombre de la API de Image(Painter) por PaintBox(Painter).
    • Se creó el elemento Vector que admite composición y que se comporta como el elemento Image, pero con un VectorAsset en lugar de un ImageAsset. (I9af9a) (b/149030271)
  • El elemento ParentData que admite composición dejó de estar disponible. Debes crear un modificador que implemente la interfaz ParentDataModifier o usar el modificador LayoutTag si solo necesitas etiquetar elementos secundarios de diseño para reconocerlos dentro del bloque de medición. (I51368, b/150953183)
  • Se quitó OnPositioned y se reemplazó por el modificador onPositioned. (I2ea3c)
  • Ahora se puede acceder a los miembros RowScope y ColumnScope desde fuera de Row y Column. (I3a641)
  • El elemento Container ahora es obsoleto. Usa Box en su lugar. (I675ce, b/151407926)
  • Se refactorizaron las API de FloatingActionButton para aceptar lambdas que admitan composición en lugar de primitivas. Consulta muestras actualizadas para obtener información de uso. (I00622)
  • Nuevas funciones: savedInstanceState() y rememberSavedInstanceState(). Son similares a state() y remember(), pero tienen una compilación de compatibilidad de estado de instancias guardada. (If1987, b/152025209)

Correcciones de errores

  • Se reemplazaron el modificador y el operador por funciones de extensión (I225e4)
  • El elemento Center que admite composición dejó de estar disponible. Debería reemplazarse con el modificador LayoutSize.Fill + LayoutAlign.Center o con uno de los elementos que admiten composición Box o Stack, con los modificadores adecuados aplicados. (Idf5e0)
  • Se modificaron las API de MaterialTheme, como MaterialTheme.colors(), MaterialTheme.typography(), de modo que sean propiedades en lugar de funciones. Se quitaron los paréntesis de las llamadas existentes y no se espera ningún cambio de comportamiento. (I3565a)

Versión 0.1.0-dev07

18 de marzo de 2020

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

Cambios en la API

  • Se agregaron las siguientes API a ManualAnimationClock: hasObservers: Boolean y dispatchOnSubscribe: Boolean de parámetro de constructor. (Iaa134)
  • Agrega OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones OnPositioned y OnChildPositioned que admiten composición. (I2ec8f)
  • Se agregó LayerModifier, un modificador que permite agregar un RenderNode a un diseño. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará a 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)
  • Se creó un elemento Image que admite composición para controlar el tamaño y el diseño, además de dibujar un ImageAsset determinado en la pantalla. Este elemento también admite el dibujo de cualquier instancia arbitraria de Painter que respete su tamaño intrínseco, así como un tamaño fijo determinado o un tamaño mínimo. (IBcc8f)
  • Se cambió el nombre de Image por 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. (Id5bbd)
  • Se creó un método de extensión en android.graphics.Bitmap, Bitmap.asImageAsset(), a fin de crear una instancia útil de ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el marco de trabajo de Compose. (Id5bbd)
  • Se movió androidx.compose.ViewComposer a androidx.ui.node.UiComposer y se movió androidx.compose.Compose.subcomposeInto a androidx.ui.core.subcomposeInto. (Idef00)
  • Se quitó la función de diseño que admite composición y que acepta varargs de elementos secundarios. (I8f7f6)
  • Se agregó a WithConstraints el parámetro LayoutDirection. (I6d6f7)
  • Se agregó el modificador LayoutOffset para compensar la posición del diseño. (I0b8a3)
  • Se trasladó Surface y Card de androidx.ui.material.surface al androidx.ui.material. (I88a6d) (b/150863888)

Correcciones de errores

  • Se cambió el nombre de LayoutFlexible por LayoutWeight. Se cambió el nombre del parámetro estricto para completar. (If4738)
  • Se reemplazó la función Opacity que admite composición por el modificador drawOpacity. (I5fb62)
  • Las pruebas que usan AndroidCompositTestRule ahora proporcionan un reloj de animación en la raíz de la composición que se puede pausar, reanudar y avanzar manualmente. (Id54c5)
  • 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 cambió el comportamiento de DrawVector, que dejó de ser una función que admite composición normal para mostrar un modificador drawVector() que dibujará el vector como fondo de un diseño. (I7b8e0)
  • Reemplaza la función que admite composición Clips con el modificador drawClip(). DrawClipToBounds es un modificador conveniente para usar cuando solo necesitas recortar los límites de la capa con una forma rectangular. (If28eb)
  • Se reemplazó la función que admite composición DrawShadow con el modificador drawShadow(). Las sombras ahora se dibujan como parte de LayerModifier. (I0317a)
  • La función Wrap que admite composición dejó de estar disponible. Se puede reemplazar con el modificador LayoutAlign o con la función Stack que admite composición. (IB237F)
  • Se cambió el nombre de Painter.toModifier por Painter.asModifier debido a que el modificador recientemente creado tiene una referencia al Painter original que se puede compartir entre varias instancias del modificador. (I7195b)
  • Ya no se permite el relleno negativo en LayoutPadding. En su lugar, se debería usar LayoutOffset para las compensaciones de posición negativa. (Ifb5b1)

Versión 0.1.0-dev06

4 de marzo de 2020

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

Cambios en la API

  • 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 agregaron Icon, IconButton y IconToggleButton, y se quitó AppBarIcon. Puedes reemplazar directamente los usos existentes de AppBarIcon con IconButton, y tendrán el objetivo táctil correcto. Consulta las muestras para obtener información de uso y consulta Íconos para conocer los íconos de material que puedes usar directamente con estos componentes. (I96849)
  • Se quitó la API de la barra de notificaciones con parámetros de string a fin de usar la sobrecarga que acepta funciones lambda que admiten composición. Consulta las muestras actualizadas para obtener información sobre el uso. (I55f80)
  • Se refactorizó la API de pestañas para aceptar lambdas de text y icon. (Ia057e)
  • Se agregó el componente BottomNavigation; consulta los documentos y las muestras para obtener información sobre el uso. (I731a0)
  • Agrega compatibilidad para llamar a acciones de semántica personalizadas. (I8c818)

Correcciones de errores

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

Versión 0.1.0-dev05

19 de febrero de 2020

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

Cambios en la API

  • Se agregó la API de Painter. Se creó una API para abstraer el dibujo de contenido en una región específica. Este comportamiento es similar al de las API de Drawable, pero proporciona una superficie de API más simplificada. Además, hay implementaciones genéricas para aplicar varios efectos, como Alfa y ColorFilters, para implementaciones de dibujo arbitrarias, y las mismas implementaciones tienen la capacidad de proporcionar una asistencia más optimizada para estas instalaciones. (aosp/1214802)
  • 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 modificó LayoutCoordinates para que providedAlignmentLines sea un conjunto en lugar de un mapa y para que 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 LayoutModifiers, la rotación o el escalamiento. En cambio, los desarrolladores deben usar parentCoordinates y childToLocal() para calcular la transformación de una LayoutCoordinate a otra.
  • LayoutCoordinates usa IntPxSize para la propiedad de tamaño, en lugar de "PxSize". Se usan tamaños de píxeles enteros para los diseños, por lo que todos los tamaños de diseño deberían usar números enteros y no valores de punto flotante. (I9367b)
  • Se 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 compatibilidad inicial para incorporar vistas de Android dentro de Compose. Consulta la demostración de ViewInCompose.kt para obtener más detalles. (I6d1ce)
  • Se actualizó LayoutAlign para que ya no ocupe todo el espacio disponible. (I2b14f)
  • Se agregaron los módulos androidx.ui:ui-material-icons-core y androidx.ui:ui-material-icons-extended. Puedes depender de androidx.ui:ui-material-icons-extended para poder usar directamente todos los íconos de material (material.io/icons) desde Compose. Se incluirá directamente un subconjunto pequeño (en un principio, de tres, pero se ampliará en el futuro) con los íconos más usados como parte de la biblioteca ui-material principal, por lo que no deberás agregar esta dependencia grande para usar íconos como Menú. Consulta la documentación de androidx.ui.material.icons.Icons para obtener más información y las muestras vinculadas.
  • Se quitó el elemento AspectRatio que admite composición y se reemplazó por el modificador. Se borraron el elemento FlexColumn obsoleto, los elementos que admiten composición de FlexRow y el modificador de Spacing. (Iec8a7)
  • Se reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta las muestras de Buttons actualizadas para obtener información sobre el uso. (If63ab, b/146478620, b/146482131)

Correcciones de errores

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

Errores conocidos

  • Los cambios en las propiedades semánticas de un componente hacen que se pierda todo el estado de los elementos secundarios, lo que provoca fallas en las animaciones y en todos los elementos que dependen de que el estado se conserve después de las recomposiciones. Debido a que actualmente no es posible comparar lambdas, se incluyen todos los componentes que definen una acción semántica con una lambda que no sea remember, como Scroller. Se solucionará este problema en la próxima versión. (b/148606417)

Versión 0.1.0-dev04

29 de enero de 2020

Lanzamiento de androidx.ui:ui-*:0.1.0-dev04. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.

Cambios en la API

  • Haz que los ID de punteros sean universalmente únicos. (I42cde)
  • Combinación de nodos de semántica (aosp/1138236)
  • Mejoras en la superficie de la API de Constraints (I0fd15)
  • Se refactorizaron PathParser y PathNode/PathCommand (I715ae)
  • Actualización de la superficie de la API de DpConstraints (I712a0)
  • Se agregó compatibilidad para modificadores que implementan varias interfaces. (I22c16)
  • Se implementó la cancelación para el resto de los detectores de gestos. (I349f4)
  • Se agregó Color.compositeOver() a Color (I5379d).
  • Quita algunas clases innecesarias para androidx.ui:ui-core: ImageByteFormat, ImageRepeat, Matrix2. (I45e6b)
  • Se habilitó la compilación incremental de Kotlin en proyectos de Compose (b/144304390)
  • Concatena modificadores con + (Ic33d3)
  • Se agregó el modificador LayoutTag (I69fe4).
  • Agrega atributos ParagraphStyle a TextStyle (If0d40)
  • Se agregó DrawModifier, un tipo de modificador que tiene permiso para dibujar en la superficie del diseño modificado. (I5fa56)
  • Cambia el almacenamiento de la posición del modificador para que sea relativa. (I5977f)
  • Se agregó la API de prueba para realizar deslizamientos sobre elementos (I9125a)
  • Se agregó el componente Box para combinar la función común de dibujo y diseño. (I6e2a7)
  • Los desplazadores ahora muestran el comportamiento nativo de Android. (b/147493715)
  • Se reemplazó DrawBorder con el modificador Border (Id335a).
  • Se mejoró la detección de gestos de desplazamiento. (I87d36)
  • Agrega metadatos de contentColor a Foundation (ICD074)
  • Se agregó el componente de material de Scaffold. Scaffold implementa la estructura de diseño visual básica de Material Design. (I7731b)
  • Usa el nuevo parámetro contentColor de Surface en los botones (b/146210556)
  • Se quitó textStyle.withOpacity() (I8cc9a)
  • Agrega el subsistema Emphasis (Ife95c)
  • Las propiedades FAB de FloatingActionButtonKt ahora son privadas (I9c121)
  • Se implementaron las primeras iteraciones de una Snackbar (If1c08).
  • Se agregó compatibilidad inicial para el tema oscuro (I6323a).
  • Se agregaron size, center y localToGlobal a GestureScope (I1ea37)
  • Agrega API para inyección de gesto de doble clic (I44902)
  • Se agregó sendLongClick methods a GestureScope (Ic7db9).
  • Convierte (x, y) en PxPosition en la inyección de gestos (Ifefa4)
  • Se agregó la velocidad deseada al gesto inyectado (I3b9df).
  • Se agregó la captura de mapa de bits a la API de prueba de Compose (androidx.ui:ui-test). (I4e36c)
  • Se movió doClick a GestureScope (I56211)
  • Se agregaron findBySubstring y los filtros correspondientes a FindersKt. (Ief0b9)
  • Se refactorizó la selección de texto modificada a 1 carácter. (Iff757)
  • Se quitó TextSpan (Iebece).
  • Quita clases de Composition y las reemplaza con la clase base de Composer (Ieadbf)
  • Se cambió el vector defaultWidth/defaultHeight para usar Dp (Iad267).
  • Genera grupos correctamente para las llamadas intercaladas que admiten composición (Ibf739)
  • Se habilitó el prototipado de marcas en detectores de gestos. (I4b7b0)
  • Cambia el argumento de elipsis y maxLines de anulable a no nulo (I46dac)
  • Ahora, AnnotatedString usa SpanStyle (Ib6d3e).
  • Se agregó compatibilidad con modificadores para WithConstraints (b/145399789).
  • Pasa el estilo de párrafo a TextDelegate (Id2d4a)
  • Se agregó la clase SpanStyle (Ifdb4f)
  • Usa el valor predeterminado en lugar del número de punto flotante que acepta valores nulos en TextGeometricTransform. (I1bf00)
  • Se agregó PreviewActivity a androidx.ui:ui-tooling (Ic8988)
  • ModelObserver ahora tiene un subproceso único. (b/146144712)
  • Se agregó una comparativa para ModelObserver (Ia176b)
  • Llama a devoluciones de llamada de cancelación cuando se quita PointerInputNode del árbol. (I7112a)
  • Se quitó el modificador LayoutInflexible para la fila y columna (I0d820).
  • Hereda modificadores de diseño de ParentDataModifier (I49b6a)
  • Se agregó el modificador unidos (I6f8df)
  • Se agregaron modificadores alineados (Ifc581)
  • Se agregó el diseño de restricción a Compose (I175ad).

Refactoriza

  • Se movieron los gráficos de androidx.ui:ui-core a androidx.ui:ui-graphics. (Ic17b0)
  • Se cambió el módulo y el paquete de Dp, IntPx, etc. a androidx.ui:ui-unit y androidx.ui:ui-util. (I45fe4)
  • Refactoriza los efectos a @Composable (Ie2686)