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

Base de Compose

Escribe aplicaciones de Jetpack Compose con componentes fundamentales listos para usar y extiende la base para compilar tus propias piezas de sistema de diseño.
Actualización más reciente Versión estable actual Próxima versión potencial Versión beta Versión alfa
21 de abril de 2021 - - 1.0.0-beta05 -

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.foundation:foundation:1.0.0-beta05"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerVersion "1.4.32"
        kotlinCompilerExtensionVersion "1.0.0-beta05"
    }
}

tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach {
    kotlinOptions {
        jvmTarget = "1.8"
    }
}

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

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes 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-beta05

21 de abril de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta05 y androidx.compose.foundation:foundation-layout:1.0.0-beta05. La versión 1.0.0-beta05 contiene estas confirmaciones.

Cambios en la API

  • La interfaz de FlingBehavior ahora se marca como @Stable. Todas las implementaciones deben cumplir con el contrato de @Stable. (I93354, b/184830577)

Correcciones de errores

  • Se corrigieron las acciones de desplazamiento de accesibilidad ACTION_SCROLL_FORWARD, ACTION_SCROLL_BACKWARD, accessibilityActionScrollLeft, accessibilityActionScrollUp, accessibilityActionScrollRight y accessibilityActionScrollDown. Ahora se desplazará de a una pantalla en la dirección que corresponda en lugar de moverse hasta el final. (Ieccb0)
  • Los archivos AndroidManifest de ui-test-manifest y ui-tooling-data ahora son compatibles con Android 12 (I6f9de, b/184718994).

Versión 1.0.0-beta04

7 de abril de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta04 y androidx.compose.foundation:foundation-layout:1.0.0-beta04. La versión 1.0.0-beta04 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de hideSoftwareKeyboard y showSoftwareKeyboard de SoftwareKeyboardController a hide() y show(), respectivamente.
    • Se proporcionó la interfaz completa de ComposiciónLocal a LocalSoftwareKeyboardController, lo que permite configurarla (particularmente útil en pruebas) (I579a6).
  • Se agregó TextOverflow.Visible. (Ic8f89)
  • Se quitaron las instancias públicas de RowScope, ColumnScope, BoxScope y BoxWithConstraintsScope. (I4e83e, b/181869067)

Correcciones de errores

  • Se corrigió el problema por el que los elementos de LazyColumn y LazyRow ubicados en los bordes se posicionaban de forma incorrecta después de un lanzamiento rápido (Ie4d13, b/183877420).
  • Antes del cambio, se pueden omitir las funciones que admiten composición local según sus parámetros. Después del cambio, no se omitirán las funciones que admitan composiciones locales. Se realiza este cambio porque es común y esperado que las funciones locales capturen los parámetros superiores, y omitirlos es una fuente común de errores.

    En resumen, ten en cuenta el siguiente ejemplo:

    @Composable fun Counter(count: Int, onCountChange: (Int) -> Unit) {
      @Composable fun ShowCount() { Text("Count: $count") }
      ShowCount()
      Button(onClick={ onCountChange(count + 1) }) {
        Text("Increment")
      }
    }
    

    Antes del cambio, se omitía siempre la función que admite composición ShowCount, incluso después actualizar el parámetro count. Sin embargo, ya no es así. (I5648a)

Versión 1.0.0-beta03

24 de marzo de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta03 y androidx.compose.foundation:foundation-layout:1.0.0-beta03. La versión 1.0.0-beta03 contiene estas confirmaciones.

Cambios en la API

  • DefaultMonotonicFrameClock ya no está disponible. Cuando se llama a withFrameNanos o Recomposer.runRecomposeAndApplyChanges sin MonotonicFrameClock, ahora arrojará una excepción IllegalStateException. (I4eb0d)

Correcciones de errores

  • Ahora se llama FlingBehavior.performFling() incluso cuando la velocidad es 0 (I0b6e5, b/181237123)

Versión 1.0.0-beta02

10 de marzo de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta02 y androidx.compose.foundation:foundation-layout:1.0.0-beta02. La versión 1.0.0-beta02 contiene estas confirmaciones.

Cambios en la API

  • Se agregaron varias optimizaciones pequeñas en la lógica de medición de LazyColumn. (Ic6889)
  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I5951e, b/168778053)
  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I84472, b/168778053)

Correcciones de errores

  • Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)

Versión 1.0.0-beta01

24 de febrero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-beta01 y androidx.compose.foundation:foundation-layout:1.0.0-beta01. La versión 1.0.0-beta01 contiene estas confirmaciones.

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

Cambios en la API

  • Se agregó la devolución de llamada onStart a detectDragGestures. (I67269, b/179995594)
  • Ya no son experimentales los modificadores para cambiar el tamaño de las funciones intrínsecas. (I15744)
  • Se quitaron las aserciones de dp. (I798d2)
  • Se quitó la devolución de llamada de SoftwareKeyboardController de todos los campos de texto que, en breve, se reemplazarán por una nueva API. (Iae869, b/168778053)
  • Se cambió el nombre de MeasureBlocks a MeasurePolicy, que se convirtió en una interfaz divertida. Se actualizaron o simplificaron las API de diseño para que usen MeasurePolicy. (Icab48, b/167662468, b/156751158)
  • Se reemplazó InteractionState por [Mutable]InteractionSource.
    • Las interfaces son responsables de emitir o recopilar eventos de interacción.
    • En lugar de pasar el elemento interactionState = remember { InteractionState() } a componentes como Button y Modifier.clickable(), usa el objeto interactionSource = remember { MutableInteractionSource() }.
    • En lugar del elemento Interaction.Pressed in interactionState, debes usar las funciones de extensión en el objeto InteractionSource, como InteractionSource.collectIsPressedAsState().
    • Para casos complejos de uso, puedes usar el elemento InteractionSource.interactions para observar el flujo de Interactions. Para obtener más información, consulta la documentación y ejemplos de InteractionSource.
    • (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
  • Se quitaron los métodos obsoletos de LayoutCoordinates; usa la función en lugar de la propiedad para positionInParent y boundsInParent. (I580ed, b/169874631, b/175142755)
  • Se creó un nuevo elemento TextInputSession para sesiones de entrada a partir de componentes de texto de bajo nivel, como CoreTextField. (I8817f, b/177662148)
  • Placeable ahora expone measuredSize, que representa el tamaño hasta el cual se mide realmente el diseño secundario. Es posible que este tamaño no respete las restricciones de medición. (Ib2729, b/172560206, b/172338608)
  • Agrega un modificador selectionGroup que permite marcar la colección de Tabs o RadioButtons con fines de accesibilidad. (Ie5c29)
  • Agrega LazyListState.animateScrollToItem.

    Este método se desplaza, de manera fluida, a un elemento específico de la lista. (I4bfd7)

  • Se cambió el nombre de ScrollableState.smoothScrollBy() a animateScrollBy() Se cambió el nombre de LazyListState.snapToItemIndex() a scrollToItem() Se cambió el nombre de ScrollState.smoothScrollTo() a animateScrollTo(). (I35ded)

  • Modifier.zoomable se reemplazó por Modifier.transformable. smoothPanBy, smoothRotationBy se agregó como función. (Ifc32b, b/175294473)

  • Ahora es obligatorio el uso de defaultFactory para compositionLocalOf y staticCompositionLocalOf en lugar de ser opcional.

    Este cambio quita un error de escritura potencial del tipo no anulable en los que no se proporcionó el valor predeterminado de fábrica. Anteriormente, esto hubiera proporcionado una referencia nula del tipo no anulable.

    En el caso de los tipos nulos, puedes proporcionar { null } como el valor predeterminado de fábrica.

    No recomendamos usar configuraciones locales con tipos no anulables, a menos que se pueda proporcionar un valor predeterminado razonable. Si no existe un valor predeterminado razonable, la expresión lambda defaultFactory debe arrojar una excepción. Sin embargo, usar una excepción significa que los usuarios de la configuración local tendrán una dependencia implícita de ella siempre que el sistema de tipos no la aplique de manera forzada. (Ifbd2a)

  • Se cambió Indication#createIndication() a Indication#rememberUpdatedIndication(InteractionState) y se quitó el parámetro InteractionState de IndicationInstance#drawIndication(). IndicationInstance solo debe ser responsable de generar efectos visuales, y no de iniciar animaciones o escribir estados en respuesta a cambios de InteractionState. En su lugar, estas animaciones y escrituras de estado deberían ocurrir dentro de rememberUpdatedIndication(). También se cambió el parámetro indication en Modifier.indication para que sea un parámetro obligatorio. (Ic1764, b/152525426)

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

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

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

  • Los paquetes de los métodos smoothScrollBy y scrollBy cambiaron aandroidx.compose.foundation.gestures.*. (I3f7c1, b/175294473)

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

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

  • Se cambió el nombre de defaultMinSizeConstraints a defaultMinSize. (I4eaae)

  • Se quitó Modifier.tapGestureFilter. Usa Modifier.pointerInput { detectTapGestures(...) } en su lugar. (I266ed, b/175294473)

  • Se quitó el consumo parcial del sistema de entrada del puntero. El método recomendado para coordinar el consumo parcial es Modifier.nestedScroll. (Ie9c9b)

  • Se migró Orientation al paquete de base. Se migró VelocirtTracker de ui.gesture a ui.input.pointer. (Iff4a8, b/175294473)

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

  • Ahora, drawerState.open() y drawerState.close() son funciones de suspensión. Usa rememberCoroutineScope() a fin de obtener el alcance de la composición para llamarlas. (I16f60, b/175294473)

  • Se cambió el nombre de Providers a CompositionLocalProvider.

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

  • Ahora, Modifier.draggable acepta DraggableState en lugar de una expresión lambda simple. Para obtener el mismo comportamiento que antes, puedes crear un estado a través de rememberDraggableState { delta -> }. (Ica70f, b/175294473)

  • Se agregaron los modificadores requiredWidth(IntrinsSize) y requiredHeight(IntrinsSize) para el tamaño requerido para tamaños intrínsecos. (I0a6b4)

  • Se quitó emptyContent() obsoleto. Usa {} en su lugar. (Idb33f, b/179432510)

  • Se borraron algunas API que ya eran obsoletas. (Ice5da, b/178633932)

Correcciones de errores

  • Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I658b6, b/168778053)

Versión 1.0.0-alpha12

10 de febrero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha12 y androidx.compose.foundation:foundation-layout:1.0.0-alpha12. La versión 1.0.0-alpha12 contiene estas confirmaciones.

Cambios en la API

  • Modifier.pointerInput ahora requiere claves de memoria para indicar cuándo se debe reiniciar la corrutina de detección de la entrada del puntero para las dependencias nuevas. (I849cd)
  • Actualización de prueba: hasText() verificará los textos de entrada y label/hint/placeholder en el campo del texto. (Iab803)
  • Se agregó PaddingValues.Absolute y se puede usar en las API que acepten PaddingValues. (Ia5f30)
  • onImeActionPerformed dejó de estar disponible. En su lugar, usa KeyboardActions. (If0bbd, b/179071523)
  • Para que las convenciones de nombre coincidan mejor con ImageBitmap e ImageVector, se cambió el nombre de ImagePainter a BitmapPainter, a fin de que sea paralelo con VectorPainter. (Iba381, b/174565889)
  • Se mejoraron las API de prueba de substring con una substring como argumento. (Icbe78)
  • Se introdujo un elemento de contexto de corrutinas InfiniteAnimationPolicy que se aplicará en animaciones infinitas. No se instala ninguna política de forma predeterminada, excepto cuando se ejecutan pruebas con ComposeTestRule. (I50ec4, b/151940543)
  • Animatable.snapTo y Animatable.stop ahora son funciones de suspensión. (If4288)
  • Se movió ComponentActivity.setContent a androidx.activity.compose.setContent en el módulo androidx.activity:activity-compose. (Icf416)
  • Se quitaron los métodos copy() y de desestructuración de varias clases en las que se usaban con muy poca frecuencia. (I26702, b/178659281)
  • Se agregaron claves personalizadas compatibles con LazyColumn/LazyRow. Esto nos permite controlar de manera más inteligente el reordenamiento de los elementos. Por lo tanto, el estado almacenado en los bloques {} de recuerdo se moverá junto con el elemento cuando se reordenan los elementos o se quita el del medio.

    LazyColumn {
        items(users, key = { user -> user.id }) { ... }
    }
    
  • Se cambió Indication#createInstance para que sea @Composable y también se cambió LocalIndication para que contenga Indication y no () -> Indication. (I5eeea, b/157150564)

  • Se reemplazó Constraints.enforce por Constraints.constrain. (I8b8ea)

  • loadFontResource dejó de estar disponible. imageResource, loadImageResource, vectorResource, y loadVectorResource dejaron de estar disponibles. En su lugar, usa fontResource o painterResource. (I6b809)

  • Por motivos de rendimiento, la semántica de ScrollAxisRange ahora toma expresiones lambda que muestran objetos Float en lugar de valores Float directos. (If4a35, b/178657186)

  • Se agregaron una semántica de EditableText para marcar texto de entrada editable del campo de texto con fines de accesibilidad y los métodos de prueba correspondientes para verificar la semántica. (I8e07a)

  • Modifier.clickable no es compatible con clics dobles y largos. Para lograr esa función, usa Modifier.combinedClickable. (Iafad1)

  • Se cambió el nombre de toIntPx() a roundToPx(). (I9b7e4, b/173502290)

  • Se cambió el nombre de IntBounds a IntRect y se mejoró la API. (I1f6ff)

  • Modifier.dragGestureFilter dejó de estar disponible. Usa Modifier.pointerInput { detectDragGestures (...)} en su lugar. De forma alternativa, puedes usar Modifier.draggable para arrastrar un eje. (I0ba93, b/175294473)

  • Se cambió el nombre de Ambients para que coincida con Ambient -> CompositionLocal. Los elementos Ambients se solían llamar AmbientFoo; ahora los elementos CompositionLocals se llaman LocalFoo. (I2d55d)

  • Se movió la selección a la base. (I7892b)

  • Se quitará el objeto savedInstanceState { 0 } que admite composición, de forma similar a como se quitó state { 0 }, que también admitía composición, y ahora se promociona el uso de remember { mutableStateOf(0) }, por ejemplo. En su lugar, se debe usar rememberSaveable { mutableStateOf(0) }, que se guardará y se restablecerá automáticamente si el tipo usado dentro de MutableState se puede almacenar en el paquete. Si antes pasabas un objeto Saver personalizado, ahora debes usar una sobrecarga nueva de rememberSaveable, que tiene el parámetro stateSaver. Se verá de la siguiente manera: val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }. (Ib4c26, b/177338004)

  • Se agregó una semántica de contraseña para accesibilidad. (I231ce)

  • Se agregó ProgressBarRangeInfo.Indeterminate a fin de marcar barras de progreso indeterminadas para la accesibilidad. (I6fe05)

  • Ahora, el tiempo de reproducción en la animación se extiende a nanosegundos. (If776a)

  • @ComposableContract dejó de estar disponible y se lo reemplazó por tres anotaciones más específicas.

    @ComposableContract(restartable = false) se convirtió en @NonRestartableComposable @ComposableContract(readonly = true) se convirtió en @ReadOnlyComposable @ComposableContract(preventCapture = true) se convirtió en @DisallowComposableCalls Se quitó @ComposableContract(tracked = true). (I60a9d)

  • Dejaron de estar disponibles las utilidades emptyContent() y (@Composable () -> Unit).orEmpty(), dado que ya no tienen un valor ni impacto de rendimiento positivos. (I0484d)

  • Ahora se pueden cerrar los elementos Recomposer. Si se cierran, continuarán componiendo hasta que se completen las corrutinas de elementos secundarios de composición. Se cambió el nombre de Recomposer.shutDown a cancel para que haya una diferencia con la acción de cerrar. (Ib6d76)

  • Las API relacionadas con LazyVerticalGrid se marcaron como experimentales. (Ia53e3, b/178519862)

  • Se cambió el nombre de rememberSavedInstanceState() a rememberSaveable() y se movieron al paquete androidx.compose.runtime.saveable. (I1366e, b/177338004)

  • Se cambió el nombre de RerestableStateHolder a SaveableStateHolder y se movió al paquete androidx.compose.runtime.saveable. Se cambió el nombre del método interno RerestableStateProvider a SaveableStateProvider. Se quitó el tipo genérico para que cualquiera pueda pasar como clave. Ya no se necesita la anotación experimental. (I0902e, b/174598702)

  • Se movieron Saver, listSaver(), mapSaver(), autoSaver de androidx.compose.runtime.savedinstancestate a androidx.compose.runtime.saveable. (I77fe6)

  • Se cambió el nombre del artefacto androidx:compose:runtime:runtime-saved-instance-state a androidx:compose:runtime:runtime-saveable. (I6dcac)

  • Se borraron muchas API que dejaron de estar disponibles en el paquete de IU. (I2f2dc)

  • El artefacto compose:runtime-dispatch dejó de estar disponible. Ahora se puede encontrar MonotonicFrameClock en compose:runtime y AndroidUiDispatcher en compose:ui. (Ib5c36)

  • Se cambió el nombre de los parámetros en RounderCorrShape, CuperCrShape y CornerBasedShape de izquierda a derecha, de principio a fin, para admitir la duplicación automática de la forma en la dirección RTL. Se introdujeron los objetos AbsoluteRounderCornerShape y AbsoluteCutCornerShape para los casos en los que no se prefiere la duplicación automática. (I61040, b/152756983)

  • Se quitó el elemento canDrag de Modifier.scrollable. (Id66e7, b/175294473)

  • Se refactorizó la API a la que se orienta el complemento de compilador de Compose para usar una interfaz en lugar de una clase concreta. La interfaz ya dejó de usar un parámetro de tipo.

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

  • Se quitó Modifier.scaleGestureFilter. En su lugar, usa Modifier.zoomable. También, se puede usar Modifier.pointerInput { detectMultitouchGestures { ... }} (Id5da1, b/175294473)

  • AnimatedValue/Float dejó de estar disponible. En su lugar, usa Animatable. (I71345, b/177457083)

    • Se quitaron CoreText y CoreTextField de la API pública.
    • Se quitó la sobrecarga de SelectContainer, que dejó de estar disponible. (I99c19)
  • Se quitaron las funciones de desplazamiento sin suspensión que dejaron de estar disponibles. Con los cambios de la última versión, las funciones de desplazamiento sin suspensión se quitaron por completo. Convierte las funciones de suspensión con los mismos nombres. El alcance de una corrutina se puede obtener a través de rememberCoroutineScope(). (I3d39c, b/178169563)

  • androidx.compose.foundation.layout.ConstraintLayout dejó de estar disponible y se reemplazó por androidx.constraintlayout.compose.ConstraintLayout. Es necesario agregar una dependencia en androidx.constraintlayout:constraintlayout-compose:1.0.0-alpha01. (I87adc)

  • tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter y pressIndicititGestureFilter dejaron de estar disponibles. En su lugar, usa Modifier.clickable o Modifier.pointerInput con la función detectTapGestures. (I6baf9, b/175294473)

  • Se quitó Recomposer.current(). Ahora, [Abstract]ComposeView es la opción predeterminada para los elementos Recomposer aplicados a ventanas y creados de forma diferida que controla ViewTreeLifecycleOwner para la ventana. La recomposición y las marcas de animación basadas en withFrameNanos-based se pausan cuando se detiene el ciclo de vida del host. (I38e11)

  • Recomposer.runningRecomposers ahora ofrece un StateFlow global de RecomposerInfo de solo lectura para observar el estado de la composición en proceso. Se prefiere esta API en lugar de Recomposer.current(), que dejó de estar disponible. (If8ebe)

Versión 1.0.0-alpha11

28 de enero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha11 y androidx.compose.foundation:foundation-layout:1.0.0-alpha11. La versión 1.0.0-alpha11 contiene estas confirmaciones.

Cambios en la API

  • scrollBy sin suspensión dejó de estar disponible y se quitó scrollTo sin suspensión.

    Ahora, recomendamos el uso de funciones de suspensión para controlar el desplazamiento y esperar a que este finalice. Como parte de esta transición, daremos de baja y/o quitaremos las versiones sin suspensión. (Ie9ced)

  • Dejó de estar disponible smoothScrollBy sin suspensión, por lo que recomendamos el uso de funciones de suspensión para controlar el desplazamiento y esperar a que este finalice. Como parte de esta transición, daremos de baja a las versiones sin suspensión. (I12880)

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

  • BasicTextField recibió un parámetro nuevo llamado "decorationBox". Permite agregar decoraciones, como íconos, marcadores de posición, etiquetas y otros, al campo de texto y aumentar el área de destino en la que se encuentra. (I16996)

  • Se quitó el parámetro canDrag de Modifier.draggable. (Ic4bec, b/175294473)

  • Se quitó el elemento AnimatedFloat.fling que acepta FlingConfig. Usa la suspensión Animatable.animateDecay. (I4659b, b/177457083)

  • Se quitó data class de las siguientes clases:

    • InlineTextContent
    • LocaleList
    • (I605c7)
  • Ahora, clickable, toggleable and selectable pueden crearse fuera de la composición. (I0a130, b/172938345, b/175294473)

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

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

  • Se quitó el AcatedArmostat que dejó de estar disponible. (Iffa96, b/177641870)

  • El parámetro propagateMinConstraints se agregó a Box para especificar si las restricciones mínimas entrantes se deben pasar al contenido de Box o no. El valor predeterminado es falso. (I0125b, b/152613457)

Correcciones de errores

  • onCommit, onDispose y onActive dejaron de estar disponibles y se los reemplazó con las API de SideEffect y DisposableEffect. (If760e)
  • WithConstraints se rediseñó y nombró BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
  • Se realizaron cambios en las funciones de fábrica de Font/FontFamily/Typeface.

    • Se agregaron funciones de fábrica que comienzan con mayúscula.
    • Las funciones anteriores con letra minúscula dejaron de estar disponibles.
    • Las nuevas funciones de fábrica muestran la FontFamily en lugar de subclases.
    • Se ocultaron los constructores de las subclases, por lo que solo se pueden construir mediante funciones de fábrica.
    • Se cambió el nombre de Font.asFontFamily por Font.toFontFamily.
    • (I42aa7)
  • Se agregó ComposeContentTestRule, que extiende ComposeTestRule y define setContent, que se quitó de ComposeTestRule. Se agregó un método createEmptyComposeRule() de fábrica que muestra un ComposeTestRule y no inicia una Activity para ti. Usa este método cuando quieras iniciar tu Activity durante una prueba, p. ej., con ActivityScenario.launch. (I9d782, b/174472899).

  • animateAsState ahora es animateFooAsState, donde Foo es el tipo de variable que se anima, p. ej., Float, Dp, Offset, etc. (Ie7e25)

  • Density ahora es el alcance del receptor para las interfaces de Arrangement. (I18aad)

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

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

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

  • Duration and Uptime se reemplazarán con Long en milisegundos, y este paso quitará la dependencia de entrada del puntero en esas clases. (Ia33b2, b/175142755, b/177420019)

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

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

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

  • Se cambió el nombre de TransformedText.transformedText a TransformedText.text.

    • TransformedText ya no es una clase de datos. (Ie672a)
  • Las siguientes clases ya no son clases de datos:

    • AnnotatedString
    • ParagraphStyle
    • SpanStyle
    • TextStyle
    • FontWeight
    • TextDecoration
    • TextGeometricTransform
    • TextIndex
    • TextLayoutResult
    • TextLayoutInput (Iaff99)
  • Se quitaron los métodos experimentales de monotonicFrameAnimationClockOf. (Ib753f, b/170708374)

  • Los métodos de coordenadas globales dejaron de estar disponibles y se crearon nuevos métodos de coordenadas basados en ventanas. (Iee284)

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

    • Usa ImeAction.Default en lugar de ImeAction.Unspecified. (Ie1bcc)
  • Ahora, FocusRequester.createRefs se marca como experimental, ya que podría sufrir cambios. (I2d898, b/177000821)

  • Se cambió el nombre de SemanticsPropertyReceiver.hidden a invisibleToUser y se marcó como @ExperimentalComposeUiApi. Se cambió el nombre de AccessibilityRangeInfo a ProgressBarRangeInfo, y el de stateDescriptionRange a progressBarRangeInfo. Se cambió el nombre de AccessibilityScrollState a ScrollAxisRange, el de horizontalAccessibilityScrollState a horizontalScrollAxisRange, y el de verticalAccessibilityScrollState a verticalScrollAxisRange. (Id3148)

  • Se cambió VisualTransformation para que sea una interfaz funcional. (I3bba4)

  • Se implementó TestCoroutineDispatcher en pruebas. (I532b6)

  • Se quitó PointerInputData y se modificó el PointerInputChange para otorgarle todos los campos de PointerInputData. Se convirtieron en internos los elementos PointerInputEvent y PointerInputEventData debido a que no se usan en ninguna API pública. (Ifff97, b/175142755)

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

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

Versión 1.0.0-alpha10

13 de enero de 2021

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha10 y androidx.compose.foundation:foundation-layout:1.0.0-alpha10. La versión 1.0.0-alpha10 contiene estas confirmaciones.

Cambios en la API

  • ImeOptions y KeyboardOptions ya no son clases de datos. (I3c898, b/168684531)
  • Se realizaron cambios en la API de VisualTransformation.
    • Se cambió el nombre de OffsetMap a OffsetMapping.
    • Se cambió el nombre de OffsetMapping.identityOffsetMap a OffsetMapping.Identity.
    • PasswordTransformation ya no es una clase de datos.
    • Se movió OffsetMapping a su propio archivo.
    • (I0bdf3)
  • Se realizaron cambios en la API de EditOperations.
    • Se cambió el nombre de EditOperation a EditCommand.
    • Se agregó el sufijo Command para implementaciones concretas de EditOperation.
    • Las EditCommand ya no son clases de datos.
    • Se cambió el nombre de la función EditOperation.process a applyTo.
    • Se cambió el nombre de InputEventListener a InputEventCallback.
    • (I0a366)
  • Se modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
  • Se cambió el nombre de @ExperimentalTesting a @ExperimentalTestApi para que fuera coherente con anotaciones de API experimentales similares. (Ia4502, b/171464963)
  • Se agregó el método experimental stickerHeader para LazyColumn/LazyRow. (I0a81d)
  • Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
  • TestUiDispatcher dejó de estar disponible. En su lugar, usa Dispatchers.Main. (Ic171f, b/175385255)
  • Se agregó la opción de activar o desactivar al Strings.kt de Foundation. (I4a5b7, b 172366489)
  • Se trasladó nativeClass al módulo de IU y se la convirtió en clase interna. Se actualizaron los usos de nativeClass en las implementaciones de igualdades para usar "is MyClass" en su lugar. (I4f734)
  • FlowRow y FlowColumn dejaron de estar disponibles. Usa un diseño personalizado en su lugar. (I09027)
  • Modifier.focus() y Modifier.focusRequester() dejaron de estar disponibles. Se recomienda usar modificador.focusModifier() y Modifier.focusReference() en su lugar. (I75a48, b/175160751, b/175160532, b/175077829)
  • Se agregó SelectionRegistry.notifySelectableChange para notificar a SelectableManager las actualizaciones de Selectable. (I6ff30, b/173215242)
  • Se cambió fun Dp.isFinite() a val Dp.isFinite. (I50e00)
  • Se cambió el nombre de Constraints#satisfiedBy a isSatisfiedBy. (I9cf5c)
  • Se agregó isSpecified, isUnspecified y useOrElse para las clases intercaladas con una constante Unspecified. (I93f7b, b/174310811)

Correcciones de errores

  • Se agregó la nueva API de Animatable basada en corrutinas que garantiza la exclusividad mutua entre sus animaciones. Se agregó DecayAnimationSpec para admitir animaciones de disminución multidimensionales. (I820f2, b/168014930)
  • Se agregó compatibilidad para campos de texto inhabilitados y de solo lectura. (I35279, b/171040474, b/166478534)
  • Se reemplazó animate() con animateAsState(), que muestra State<T>, en lugar de T. Esto mejora el rendimiento, ya que el alcance de la invalidación se puede limitar a donde se lee el valor State. (Ib179e)
  • Se agregó la API de función de Semantics y Role como parámetro para SemanticsModifier que se puede seleccionar, activar o desactivar, y en el que se puede hacer clic. Se cambió Modifier.progressSemantics para que Slider también pudiera usarlo. (I216cd)
  • Ahora se puede acceder al keyEvent nativo a través de keyEvent.nativeKeyEvent. (I87c57 o b/173086397)

Versión 1.0.0-alpha09

16 de diciembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha09 y androidx.compose.foundation:foundation-layout:1.0.0-alpha09. La versión 1.0.0-alpha09 contiene estas confirmaciones.

Cambios en la API

  • Agrega una interfaz Scrollable

    Esto permite que ScrollState y LazyListState se consideren tipos comunes, lo que a su vez permite implementar desplazamiento personalizado en ambos elementos.

    Esto también traslada smoothScrollBy a una función de extensión en Scrollable, lo que permite aprovechar esta funcionalidad. (I2153b)

  • Se agregó LazyVerticalGrid. (I17267, b/162213211)

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

  • Para las API de entrada de puntero de suspensión, se cambió el nombre de HandlePointerInputScope a AwaitPointerEventScope, y el de handlePointerInput() a awaitPointerEventScope(). (Idf0a1, b/175142755)

  • Se agregó LazyListState.layoutInfo, que expone la lista de tamaños y compensaciones de los elementos visibles en el momento. (If8678, b/170472532)

  • Se quitó la anotación ExperimentalPointerInput. (Ia7a24)

  • Se agregó compatibilidad con InteractionState para TextFields. (I61d91)

  • Se agregó el parámetro revertLayout para LazyColumn/Row. cuando los elementos true se componen de abajo hacia arriba y LazyListState.firstVisibleItemIndex == 0 significa que el primer elemento se ubica en la parte inferior. (I552ae, b/166589935)

  • Se agregó el parámetro verticalArrangement para LazyColumn. Se agregó el parámetro horizontalArrangement para LazyRow. Arrangement permite agregar un espacio entre los elementos y especificar su disposición si no tenemos suficientes para alcanzar el tamaño mínimo. (Icf79a, b/170394300)

  • detectMultitouchGestures ahora usa una devolución de llamada con una combinación de parámetros centroides, de desplazamiento y de zoom. (Ie6e1c)

  • Se trasladó ContentDrawScope al módulo ui-graphics para que se encontrara junto a DrawScope. (Iee043, b/173832789)

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)

  • Modifier.focusObserver dejó de estar disponible. Usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)

  • Ahora la API de Autofill es una API experimental y requiere habilitación. (I0a1ec)

  • Se agregaron declaraciones de desestructuración para crear instancias de FocusRequester. (I35d84, b/174817008)

  • Se cambió el nombre de accessibilityLabel a "descriptionDescription". Se cambió el nombre de accessibilityValue a stateDescription. (I250f2)

  • Se introdujeron varias funciones nuevas en SelectionRegistrar y se cambió el nombre de onPositionChange a notifyPositionChange. (Ifbaf7)

  • AndroidOwner se hizo interno. (Ibcad0, b/170296980)

  • Se agregó una función infiniteRepeatable para crear InfiniteRepetableSpec. (I668e5)

  • 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 agregó la API de painterResource para controlar objetos 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ó la función de fábrica buildAnnotatedString para compilar un elemento AnnotatedString. Dejó de estar disponible la función del compilador de annotatedString. (Idfe0b)

Versión 1.0.0-alpha08

2 de diciembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha08 y androidx.compose.foundation:foundation-layout:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • Se quitó el parámetro maxLines de CoreTextField. Si deseas restringir la altura del campo de texto por el número de líneas, usa BasicTextField. (Iec002)
  • Se cambiaron los métodos await*TouchSlop() para que no detectaran el desplazamiento del puntero hacia abajo y se les cambió el nombre a *OrCancellation. También se quitó la necesidad del parámetro orientationLock. (Ie96e1)
  • Se agregó la comprobación de lint para el nombre y la posición del parámetro lambda que se pueden componer 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 movieron las API de foundation:foundation-text a foundation:foundation. La estructura del paquete sigue siendo la misma. (Id3eb2)
  • Se agregó un nuevo detector de gestos multitáctil que incluye asistentes para detectar acciones de rotación, zoom y desplazamiento. (Ic459d)
  • 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 fuera una clase de ImageVector de acuerdo con los lineamientos acordados de la API. Se agregó un typealias de VectorAssetBuilder para vincular ImageVector.Builder con fines de compatibilidad. (Icfdc8)
  • Se cambió el nombre de ImageAsset y los métodos relacionados a ImageBitmap. (Ia2d99)
  • Se movieron las propiedades semánticas básicas de Foundation a la IU. (I6f05c)
  • 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ó un parámetro singeLine a BasicTextField, TextField y OutlinedTextField. Establece este parámetro en verdadero para que el campo de texto tenga una sola línea horizontal en la que el usuario pueda desplazarse. (I57004, b/168187755)

  • 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 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 quitaron las API que dejaron de estar disponibles anteriormente, y también Border, así que deberás usar BorderStroke. Se quitó Modifier.drawBorder. En su lugar, usa Modifier.border. Se quitó Modifier.gravity. En su lugar, usa Modifier.align. Se quitó Stack. En su lugar, usa Box. (I32c2b, b/172470874)

  • Se cambió el nombre de AbsoluteArrangement a Arrangement.Absolute. (If26f2)

Correcciones de errores

  • 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 acordados de la API. (I0bd29, b/173834241)
  • Se quitó <T> de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8)
  • Los campos de posición y tiempo de actividad de PointerInputData se volvieron 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 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ó 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 agregó el parámetro resetInput a TextInputService#onStateUpdated. (I3e8f5, b/172239032, b/171860947)
  • 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)
  • 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 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 revisar que las fábricas de Modifier usen androidx.compose.ui.composed {} internamente, en lugar de marcarse como @Composable. (I3c4bc)
  • 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 cambió el nombre del argumento de semántica mergeAllDescendants a mergeDescendants. (Ib6250)
  • El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
  • Se quitó el módulo ui-tests y sus stubs. (I3a7cb)
  • Se cambió el nombre de TextUnit.Inherit a TextUnit.Unspecified para mantener la coherencia con otras unidades. (Ifce19)
  • Se actualizó la interfaz de Alignment y se hizo funcional. (I46a07, b/172311734)
  • Se combinó el módulo foundation:foundation-text con foundation:foundation. (Idac0f)
  • Dejaron de estar disponibles place(Offset) y placeRelative(Offset). En su lugar, usa sobrecargas con compensaciones de Int. (I4c5e7).
  • Se cambió el nombre de id a layoutId para LayoutIdParentData. Se cambió el nombre de Measurable.id a Measurable.layoutId. (Iadbcb, b/172449643)

Versión 1.0.0-alpha07

11 de noviembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha07, androidx.compose.foundation:foundation-layout:1.0.0-alpha07 y androidx.compose.foundation:foundation-text:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Del mismo modo que ocurre con Modifier.fillMaxSize[Width|Height], ahora se admiten fracciones en Modifier.fillParentMaxSize[Width|Height] dentro del alcance de LazyColumn/Row. (I797e2, b/166586426)
  • Se quitó KeyboardOptions.toImeOptions de la API pública. (Ic2e45)
  • Las bases AmbientTextStyle, ProvideTextStyle y AmbientContentColor ya no están disponibles. En su lugar, utiliza las nuevas versiones que se proporcionan en la biblioteca de Material. En el caso de las aplicaciones que no son de Material, deberás crear tus propios ambientes de temas específicos de sistemas de diseño que se puedan consumir en tus componentes. (I74acc, b/172067770)
  • 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 agregó maxLines a TextFields. (Ib2a5b)
  • Se actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
  • Se agregó KeyboardOptions para su uso en TextFields. (I9ca32)
  • Se agregó BasicText como una API para texto sin tendencias en el diseño, similar a BasicTextField. (I28268)
  • Se quitó la anotación ExperimentalLazyDsl. Ahora se puede usar LazyColumn/LazyRow sin agregar @OptIn. (Idab7a, b/166584730)
  • BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
  • Se agregó BasicTextField como reemplazo de CoreTextField y BaseTextField. (Id4cea)
  • Se quitó LazyColumnItems/LazyRowItems, que dejó de estar disponible. (I1d8a8)
  • Se quitaron los elementos obsoletos que admiten composición encargados de definir el tamaño en mediciones intrínsecas. (I18537, b/171811496)
  • Se cambió el nombre de relativePaddingFrom a paddingFrom. Se agregó el modificador paddingFromBaseline para especificar distancias de límites de diseño a las líneas de base del texto. (I0440a, b/170633813)
  • Se agregó el parámetro matchHeightConstraintsFirst al modificador aspectRatio, que se puede usar para especificar el modificador de tamaño en función de las restricciones de altura antes de probar los correspondientes al ancho. (Ie7c43, b/155290593)
  • Se quitó el objeto DpConstraints obsoleto. (I87884, b/171702471)

Correcciones de errores

  • 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 movió captureToBitmap a captureToImage. (I86385)
  • Se marcó CoreText como @InternalTextApi. En su lugar, usa BasicText. (I6aaeb)
  • Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
  • Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
  • Se marcó CoreTextField como @InternalTextApi. En su lugar, usa BasicTextField. (Ie2469)
  • Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
  • Se introdujo el módulo ui-test-junit4. (Ib91f8)
  • Se actualizó la API de Icon para que acepte Color.Unspecified como un tono posible que dibujará el elemento o Painter proporcionados sin ColorFilter. Anteriormente, cuando se intentaba ignorar el ajuste de tono con Color.Unspecified, se aplicaba un color transparente, lo que provocaba que no se renderizara nada. (I049e2, b/171624632)
  • 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 movió androidx.ui.test a androidx.compose.ui.test. (I9ffdb)
  • Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
  • Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
  • Se agregaron pruebas para las posiciones de SelectionHandle en SelectionContainer. (Ie93db)
  • Se agregó la opción IME de corrección automática del teclado. (I57b8d)

Versión 1.0.0-alpha06

28 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha06, androidx.compose.foundation:foundation-layout:1.0.0-alpha06 y androidx.compose.foundation:foundation-text:1.0.0-alpha06. La versión 1.0.0-alpha06 contiene estas confirmaciones.

Cambios en la API

  • Se movió androidx.compose.foundation.Icon a androidx.compose.material.Icon. También puedes usar el componente de Image o Modifier.paint() con un objeto Painter si no quieres usar la biblioteca de Material. (I9f622)
  • Se agregó interactionState a Modifier.scrollable, ScrollableColumn y LazyColumnFor. (I81566, b/169509805)
  • Se agregó alignByBaseline a RowScope, y se cambió el nombre de alignWithSiblings a alignBy. (I06503, b/170628732)
  • Se creó Box como función intercalada. (Ibce0c, b/155056091)
  • Se agregó maxLines a CoreTextField. (Ibee58, b/143687793)
  • Se agregó softwrap a CoreTextField. (I21a4b)

Correcciones de errores

  • 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 en las composiciones. (Ifda43)
  • 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 teclado de una sola línea a CoreTextField. (I72e6d)
  • Se cambió el nombre de la API de Radius por CornerRadius para expresar mejor la manera en que se usa en Compose. Se actualizó la documentación para indicar que la esquina negativa radii se fijará en cero. (I130c7, b/168762961)
  • Se agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
  • Se agregó la opción de IME KeyboardCapitalization. (I8ac38)
  • Se corrigió la posición del controlador Rtl. (I6e1e0)
  • 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)
  • Se agregó la opción SelectAll al menú de selección. (Ief02b)

Versión 1.0.0-alpha05

14 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha05, androidx.compose.foundation:foundation-layout:1.0.0-alpha05 y androidx.compose.foundation:foundation-text:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • CoreTextField ahora es compatible con la funcionalidad del cursor. (Id23aa)
  • Las API contentColor() y currentTextStyle() dejan de estar disponibles, y se reemplazan por AmbientContentColor y AmbientTextStyle, respectivamente. Puedes acceder al valor actual usando .current en la propiedad de los ambientes, como en cualquier otro ambiente. Este cambio se realizó para mantener la coherencia y evitar tener varias formas de lograr el mismo resultado. Además, se cambia el nombre de algunas propiedades de ambientes para describir mejor sus propósitos, de la siguiente manera:

    • ContentColorAmbient -> AmbientContentColor
    • TextStyleAmbient -> AmbientTextStyle
    • IndicationAmbient -> AmbientIndication
    • EmphasisAmbient -> AmbientEmphasisLevels
    • RippleThemeAmbient -> AmbientRippleTheme (I37b6d)

Correcciones de errores

  • Como parte de la estandarización de los valores sentinela para las clases intercaladas, se cambió el nombre de Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas. (I97611, b/169797763)
  • Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
  • Se introdujo TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)
  • 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)
  • Se agregó el módulo Paging Compose y la integración de paginación. (Ib85da)
  • Se modificó LazyListScope para recibir valores nulos. (I1765b)
  • Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y el de onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)
  • Se agregaron muestras para LazyColumn/Row. (Idc16d)
  • Se corrigieron los métodos items y itemsIndexed para permitir emptyList. (I06647)
  • Se agregó un DSL para especificar la información del inspector. (Ic9a22)
  • Se movió LongPress a Text. (Iff2bc)
  • Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)
  • Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
  • Se quitó PointerInputFilter.onPointerInput(...). PointerInputFilter.onPointerEvent(...) debe usarse en su lugar. (I6f04a)

Versión 1.0.0-alpha04

1 de octubre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha04, androidx.compose.foundation:foundation-layout:1.0.0-alpha04 y androidx.compose.foundation:foundation-text:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de Stack a Box. foundation.Box 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 padding en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • Agrega una nueva clase LazyListState. Esto permite la observación y el control de la posición de desplazamiento de los componentes de LazyRow y LazyColumn. Es posible crear las instancias con rememberLazyListState() y pasarlas al parámetro de estado del componente. Actualmente, se pueden observar en esta versión inicial el primer elemento visible y las compensaciones. (Ic7cb7, b/159307669)
  • La posición de la lista Lazy y la compensación de desplazamiento ahora se guardan y se restablecen en la creación de Activity. (Ie045f, b/166589058)
  • Se agregó la acción de semántica de clics largos. (I6281b, b/156468846)
  • Se agregó la utilidad MutatorMutex para mantener un solo mutador del estado compartido en el tiempo y cancelar mutadores en conflicto por prioridad. (I3f975)
  • 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)
  • Se quitó el parámetro inlineContent de Text con entrada de string. No se utilizará porque inlineContent debe funcionar con AnnotatedString. (Ief403)
  • Se quitaron las API de organización personalizada que eran obsoletas. (Ic576d, b/168297922, b/168297923)
  • Se agregó el parámetro unbounded a los modificadores wrapContentSize, lo que permite medir el elemento de diseño con limitaciones máximas infinitas. (I77951, b/158559319)
  • Evitamos las importaciones estáticas de contenido de alcances de diseño (p. ej., alignWithSiblings en RowScope). En su lugar, se debe usar la alternativa a un alcance explícito: with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }. (I216be, b/166760797)

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)
  • Optimizaciones de rendimiento para el desplazamiento LazyColumnFor/LazyRowFor mediante la anulación de recomposiciones innecesarias durante cada desplazamiento. (I64f65, b/168293643, b/167972292, b/165028371)
  • Se corrigió una falla en LazyColumnFor/LazyRowFor después del desplazamiento, se cambiaron elementos y se implementó el desplazamiento automático hacia arriba cuando el elemento visible anteriormente se haya quitado, de manera que ya no se verán espacios vacíos al final. (I220ab, b/161480164, b/167855468)
  • Ya no se permite el anidado desplazable en los mismos contenedores de dirección, como ScrollableContainer y LazyColumnFor. Esa función nunca era compatible y, además, provocaba un error en el desplazamiento y el comportamiento diferido al componer los elementos de LazyColumnFor. (I6e101)
  • 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 agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)
  • Se creó el intercalado de TextRange para evitar la creación de objetos. (Id034b)
  • Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)

Versión 1.0.0-alpha03

16 de septiembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha03, androidx.compose.foundation:foundation-layout:1.0.0-alpha03 y androidx.compose.foundation:foundation-text:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)
  • 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 agregó un parámetro de alineación a Stack que permite especificar la alineación predeterminada para todos los elementos secundarios de Stack. (Ie80ca, b/164085265)

Correcciones de errores

  • Dejaron de estar disponibles DpConstraints y las API que usaban esas restricciones. (I90cdb, b/167389835)
  • Se cambió el nombre de los parámetros minWidth y maxWidth de widthIn a min y max. Del mismo modo que para preferredWidthIn, heightIn y preferredHeightIn. (I0e5e1, b/167389544)
  • 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 generaban gestos de deslizamiento no válidos, entre otros. (Iaf358, b/166589947)
  • Se trasladó createAndroidComposeRule y AndroidInputDispatcher de androidx.ui.test.android a androidx.ui.test. (Idef08, b/164060572)

Versión 1.0.0-alpha02

2 de septiembre de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha02, androidx.compose.foundation:foundation-layout:1.0.0-alpha02 y androidx.compose.foundation:foundation-text:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Correcciones de errores

  • Se marcó TestUiDispatcher como experimental. (Iae99d, b/161247083)
  • 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)

Versión 1.0.0-alpha01

26 de agosto de 2020

Lanzamiento de androidx.compose.foundation:foundation:1.0.0-alpha01, androidx.compose.foundation:foundation-layout:1.0.0-alpha01 y androidx.compose.foundation:foundation-text: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.foundation:foundation:0.1.0-dev17, androidx.compose.foundation:foundation-layout:0.1.0-dev17 y androidx.compose.foundation:foundation-text:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Cambios en la API

  • 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)
  • Offset se convirtió en una clase intercalada. (Iaec70)
  • 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 VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Se usa Modifier.background. (I73b0d, b/163019183)
  • Se quitaron los modificadores fillMax* marcados como obsoletos de LazyItemScope, ya que dificultan la inclusión correcta de esos modificadores para los elementos que no sean secundarios directos de LazyColumnFor. (Ifa78d)
  • Se agregó la implementación de LazyColumn/LazyRow como DSL. (I93cc6)
  • Constraints ahora es una clase intercalada. (I88736)
  • Se agregó la capacidad de ajustar el tamaño de un diseño a una fracción del espacio disponible usando los modificadores fillMaxWidth, fillMaxHeight y fillMaxSize. (I945bb, b/161562591)

Correcciones de errores

  • Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)
  • 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)
  • Se cambió el nombre de PlacementScope.placeAbsolute() a PlacementScope.place(), y el del objeto 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)
  • Se quitó el componente FilledTextField obsoleto. En su lugar, usa TextField para obtener la implementación de Material Design del campo de texto Filled. (I5e889)
  • Se agregó el parámetro backgroundColor a LinearProgressIndicator y se quitó el padding interno de CircularProgressIndicator. Se agregó el nuevo ProgressIndicatorConstants.DefaultProgressAnimationSpec, que se puede usar como AnimationSpec predeterminado en la animación del progreso entre valores. (If38b5, b/161809914, b/161804677)
  • El elemento state { ... } que admite composición dejó de estar disponible en favor de cualquier llamada explícita a remember { mutableStateOf(...) } por motivos de claridad. De esta forma, se reduce la plataforma general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrón by mutableStateOf() con la delegación de propiedades de clase. (Ia5727)
  • Se cambió el nombre de RRect a RoundRect para que se adapte mejor a los patrones de nombres de Compose. Se crearon constructores de funciones similares a RRect y los de RRect quedaron obsoletos. (I5d325)
  • Se quitaron onChildPositioned y OnChildPositionedModifier. En su lugar, los desarrolladores deberán usar onPositioned y OnPositionedModifier en el diseño secundario. (I4522e, b/162109766)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • Se utiliza la función LongPress para editar el área en blanco. (Ib1e5b)
  • FloatingToolbar se oculta después de presionar el texto. (If4525)
  • FloatingToolbar se oculta cuando se actualiza la selección. (I8444c)
  • Se anula la selección cuando se activa Desenfoque. (I781a2)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.compose.foundation:foundation:0.1.0-dev16, androidx.compose.foundation:foundation-layout:0.1.0-dev16 y androidx.compose.foundation:foundation-text:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

Cambios en la API

  • 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 movió diálogo a la IU. (I47fa6)
  • Se agregó LazyColumnForIndexed/LazyRowForIndexed, versiones de LazyColumnFor/LazyRowFor que brindan un índice y un elemento en itemCallback. Resulta útil cuando, además de un elemento actual, necesitas conocer un índice actual. (I65ff3)
  • Se cambió el nombre de Modifier.determinateProgress a Modifier.progressSemantics. (I9c0b4)
  • Se cambió el nombre de LazyColumnItems a LazyColumnFor. Se cambió el nombre de LazyRowItems a LazyRowFor. (I84f84)
  • Se agregaron algunas marcas/anotaciones a fin de aplicar prácticas recomendadas. (I66b20)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Se agregó el parámetro crossaxis de Gravity a LazyRowItems/LazyColumnItems. LazyRowItems/LazyColumnItems ahora son compatibles con el comportamiento de ajuste de contenido. (Ib39fc)
  • Se cambió el nombre de ZoomableState a ZoomableController. Se agregó compatibilidad con curvas personalizadas en smoothScale. Se agregaron las funcionalidades enabled y onZoomStarted. (If8b8f)
  • Se cambió el nombre de FilledTextField de Material a TextField, y el del TextField principal se cambió a BaseTextField para que la API deseada resulte más fácil de encontrar y usar. (Ia6242, b/155482676)
  • Se quitó AdapterList, que anteriormente había quedado obsoleto. En su lugar, usa LazyColumnItems. (I12b9b)
  • Se cambió el nombre de Modifier.drawBackground a Modifier.background. (I13677)
  • Se quitó el antiguo DSL de ConstraintLayout. Se cambió el nombre de ConstraintSet2 por ConstraintSet. (If58d1, b/162450908)
  • Se agregaron Modifier.absoluteOffset() y Modifier.absoluteOffsetPx(). A diferencia de los modificadores de desplazamiento, los de desplazamiento absoluto no se duplicarán automáticamente en el contexto de derecha a izquierda. (I3aa21)
  • Row y Column ahora son funciones intercaladas, lo que reduce de manera significativa la sobrecarga asociada a su uso. (I75c10)

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 agregó MonotonicFrameAnimationClock, que te permite usar un objeto MonotonicFrameClock como AnimationClockObservable para cerrar la brecha entre los nuevos relojes basados en corrutinas y las API que aún usan los relojes antiguos basados en la devolución de llamada.

    El MonotonicFrameClock equivalente de ManualAnimationClock ahora es ManualFrameClock. (I111c7, b/161247083)

  • Se quitó SemanticsNodeInteraction.performPartialGesture. Usa SemanticsNodeInteraction.performGesture en su lugar. (Id9b62)

  • Se cambió el nombre de SemanticsNodeInteraction.getBoundsInRoot() a SemanticsNodeInteraction.getUnclippedBoundsInRoot(). (Icafdf, b/161336532)

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

  • Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte y prohíbe la escritura de Modifier.padding().background() + anotherModifier, lo que interrumpe la cadena y se vuelve más difícil de leer. (Iedd58, b/161529964)

  • Se agregaron los SemanticsMatcher isFocused() y isNotFocused(). (I0b760)

  • Se agregó RemeasurementModifier. Permite a los usuarios volver a medir el diseño de forma sincrónica. En general, no lo necesitas, ya que la nueva medición o el rediseño se realizan automáticamente, pero lo usamos dentro de LazyColumnItems durante el desplazamiento. (I5f331, b/160791058)

  • isSystemInDarkTheme ahora tiene siempre la configuración del tema oscuro en todo el sistema e ignora el estado de ahorro de energía antes de Q, en virtud de las indicaciones más recientes. (I0c10c)

  • OnChildPositioned dejó de estar disponible. En su lugar, usa el elemento secundario OnPositioned. (I87f95, b/162109766)

  • Se cambió el nombre de AndroidComposeTestRule a createAndroidComposeRule. (I70aaf)

  • Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.compose.foundation:foundation:0.1.0-dev15, androidx.compose.foundation:foundation-layout:0.1.0-dev15 y androidx.compose.foundation:foundation-text:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

Para usar la versión 0.1.0-dev15 de Compose, deberás hacer lo siguiente:

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

  • De manera similar al nuevo parámetro en ScrollableColumn/ScrollableRow, LazyColumnItems/LazyRowItems ahora tienen el parámetro contentPadding, que permite agregar padding al contenido recortado, lo cual no es posible mediante un parámetro de modificación. También permite agregar espaciado antes del primer elemento o después del último solamente. (Ibc24e)
  • Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto a onFocusChanged. (Ida4a1)
  • VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y se reemplazó con ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
  • Se rediseñaron las API de Modifier.draggable y Modifier.scrollable. Se eliminó el objeto DragDirection y se reemplazó por el elemento Orientation. Se simplificó el objeto State que se requiere para el elemento scrollable. Se cambió el nombre de ScollableState a ScrollableController. (Iab63c, b/149460415)
  • 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)
  • Los tamaños de esquina que usan RoundedCornerShape y CutCornerShape ahora pueden superar el 50%. (Id2340, b/160400213)
  • Se cambió de Inside a Fit la configuración predeterminada del parámetro ContentScale del elemento Image que admite composición. Esto se hizo a fin de que el comportamiento escale verticalmente el elemento Painter subyacente si el tamaño del diseño es más grande que el tamaño intrínseco de ese elemento sin afectar la relación de aspecto. Este comportamiento se ajusta mejor a las expectativas a fin de brindar tamaños fijos para el elemento Image sin afectar el comportamiento predeterminado cuando solo se use el tamaño intrínseco para procesar el tamaño de la composición. (I40ae3, b/159838006)
  • 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 el 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 quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)
  • Se agregó LazyRowItems: desplazamiento horizontal similar a LazyColumnItems. (Ibbcf7)
  • Se introdujeron las API de animación sin estado de bajo nivel. Estas API (I63bf7)
  • Dejaron de estar disponibles androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue. 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 reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
  • Se quitó androidx.ui.foundation.shape.RectangleShape. Usa androidx.ui.graphics.RectangleShape. (I94939, b/154507984)
  • 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 agregó Modifier.zoomable para la funcionalidad de pellizcar para hacer zoom. (Id5d63)
  • El componente Toggleable dejó de estar disponible. En su lugar, usa Modifier.toggleable. (I35220, b/157642842)
  • El objeto MutuallyExclusiveSetItem dejó de estar disponible. En su lugar, usa el elemento Modifier.selegable. (I02b47, b/157642842)
  • El componente TestTag dejó de estar disponible. En su lugar, usa el elemento Modifier.testTag. (If5110, b/157173105)
  • Se agregó el parámetro fontWeight a Text, que no se agregó anteriormente por accidente. (I56937)
  • 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)
  • El objeto VerticalScroller ahora proporciona el elemento Column listo para usar. El objeto HorizontalScroller ahora proporciona el elemento Row listo para usar. (Ieca5d, b/157020670)
  • 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)
  • 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. (I953bd)
  • Se agregó compatibilidad con elementos que se pueden compilar en el diseño de texto. (I1373c)
  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope a DrawScope. Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente. (I1798e)
  • Se quitó la API obsoleta de 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)
  • 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)
  • HorizontalScroller y VerticalScroller ahora restablecen su posición de desplazamiento usando el estado de instancia guardado. (Ia0fae, b/155075048)
  • Se quitó el objeto FocusManagerAmbient. Usa el elemento FocusModifier.requestFocus para obtener enfoque. (Ic4826)
  • Se quitó temporalmente el diseño de la tabla hasta que vuelva a estar disponible 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/152753731)

  • Se agregó personalización del color del cursor a 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 by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }. (I5c3ce, b/155075724)

  • Se agregaron los parámetros que se usan con frecuencia 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 el objeto 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)

  • 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ó 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 un valor nulo. (Iabaa7)

  • Actualización de la API de TextField: se combinaron las devoluciones de llamada onFocus y onBlur en una sola devolución de llamada de onFocusChange con un parámetro booleano. (I66cd3)

  • Se cambió el nombre de ScaleFit a ContentScale. Se trasladó el valor ContentScale del módulo ui-graphics al módulo ui-core para que quede en el mismo módulo que la API de alineación. Se cambió el nombre de FillMaxDimension a Crop, el de FillMinDimension a Fit y el de Fit a Inside para que coincida mejor con los 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, que con Fit y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.FIT_CENTER, y que con Inside y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_INSIDE. (I45f09, b/152842521)

  • Se quitó ProvideContentColor; en su lugar, usa directamente ContentColorAmbient con Providers. (Iee942)

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

  • Se mejoró 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)
  • ColoredRect quedó obsoleto. Usa Box(Modifier.preferredSize(width, height).drawBackground(color)) en su lugar. (I499fa, b/152753731)

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

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

  • Se movió el elemento arrastrable al modificador. (Id9b16, b/151959544)

  • Se trasladó el objeto Text de androidx.ui.core al paquete androidx.ui.foundation. (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 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). 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)

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

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

    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 quitó el elemento DrawImage que admite composición. Usa ImagePainter para dibujar una imagen en un diseño existente o SimpleImage para introducir un elemento Image que ocupe espacio. (I595e1, b/149827027)

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

  • 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ó el elemento DrawShape que admite composición. En su lugar, usa el modificador DrawBackground. (I7ceb2)

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

  • Se agregó el componente Scrollable, que permite crear desplazadores y listas de forma personalizada. (I5fd37)

  • Se cambió el nombre de background a DrawBackground y se lo estableció para memorizar de forma predeterminada. (Ia0bd3)

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

  • Se agregó el componente Canvas. Este elemento que admite composición ocupa cierto tamaño (proporcionado por el usuario) y te permite dibujar con CanvasScope. (I0d622)

  • Se cambió el nombre del modificador Border por DrawBorder. (I8ffcc)

  • 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. (I922af, b/147493715)

  • Se reemplazó DrawBorder con el modificador Border. (Id335a)

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

  • 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ó Modifier.padding(InnerPadding). (I94985, b/157133803)

  • Se quitaron los objetos obsoletos RowAlign y ColumnAlign de Row y Column. (If60d4, b/155858731)

  • 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 agregó el modificador de diseño offsetPx, que se puede usar para definir desplazamientos (dinámicos) en px. (I5af57)

  • El elemento que admite composición AlignmentLineOffset 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 la máxima). (I311ea, b/150460257)

  • Se quitó el elemento Container. En su lugar, usa Box. (Ibbc2b, b/151407926)

  • Se quitaron los modificadores obsoletos LayoutWidth, Height y Size. (Ib0bc1)

  • Se agregaron valores de parámetros predeterminados al modificador de desplazamiento. (I37f06)

  • Se agregó un modificador de padding simétrico. (I39840)

  • Se quitó el modificador obsoleto LayoutAspectRatio. (I65a74)

  • Se quitaron los modificadores obsoletos LayoutAlign. (I10877)

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

  • Se agregaron los parámetros verticalGravity y horizontalGravity a los elementos Row y Column, respectivamente. (I7dc5a)

  • Se actualizaron wrapContentWidth y wrapContentHeight para incluir Alignment vertical u horizontal en lugar de cualquier alineación. Se actualizó el modificador de gravedad para aceptar el elemento Alignment vertical u horizontal. Se actualizaron los objetos Row, Column y Stack para admitir el elementos Alignments continuos personalizados. (Ib0728)

  • Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)

  • Se cambió el nombre del objeto EdgeInsets a InnerPadding. Se cambió el nombre del parámetro innerPadding de los botones de Material por padding. (I66165)

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

  • 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 agregó compatibilidad con dimensiones personalizadas de elementos secundarios de ConstraintLayout. (Idb1a5)

  • Se quitaron los elementos obsoletos Wrap y Center que admiten composición. (I29e23)

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

  • Ahora se puede acceder a los miembros RowScope y ColumnScope desde afuera de la fila y la columna. (I3a641)

  • Dejó de estar disponible el elemento Container. En su lugar, usa Box. (I675ce, b/151407926)

  • Se agregó el modificador LayoutOffset para compensar la posición del diseño. (I0b8a3)

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

  • Se actualizó LayoutAlign para que ya no ocupe todo el espacio disponible. (I2b14f)

  • 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 quitó el modificador LayoutInflexible para la fila y columna. (I0d820)

  • Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField. (I27032)

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

Correcciones de errores

  • 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 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)
  • Se quitó el objeto Modifier.ripple que dejó de estar disponible previamente. El elemento Clickable ahora usa ripple como indicación predeterminada (si tienes un objeto MaterialTheme {} configurado en tu aplicación), por lo que, en la mayoría de los casos, puedes usar los elementos 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. (I663b2, b/155375067)
  • Se quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
  • Se creó la API experimental LayoutNode. (I4f2e9)
  • Se implementó en Compose la versión 1 del bloqueo de orientación de desplazamiento. (I1ce7a, b/150289741)
  • Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)
  • 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)
  • Se agregó AbsoluteArrangement, que permite la organización de los elementos secundarios dentro de la fila sin duplicación automática de derecha a izquierda. (I3a1df)
  • La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)
  • 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 agregó el objeto viewModel() que admite composición y permite crear u obtener un elemento ViewModel ya creado de manera similar a como funciona en las clases Activity o Fragment. (I5fdd1)
  • 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)

  • 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 cursor de TextField tiene una animación intermitente. (Id10a7)

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

  • 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 cambió el nombre del objeto AnnotatedString.Builder.addAnnotationString a addStringAnnotation. (I5059e)

  • 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 pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)

  • Se ingresaron 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/153195921)

  • 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 a ui-text. El objeto ui-text ahora contiene los elementos CoreText y CoreTextField que admiten composición. (IB7d47)

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

  • Se trasladaron los elementos ui-framework/CoreText y CoreTextField que admiten composición en el objeto ui-text-compose. Te recomendamos incluir el objeto ui-text-compose en tu proyecto. (I32042)

  • Los objetos runOnIdleCompose y runOnUiThread ahora son funciones globales en lugar de 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)

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

  • El elemento Center que admite composición quedó obsoleto. Debe reemplazarse con el modificador LayoutSize.Fill + LayoutAlign.Center o con una de las funciones que admiten composición Box o Stack con los modificadores adecuados aplicados. (Idf5e0)

  • Se cambió el nombre de LayoutFlexible a LayoutWeight. Se cambió el nombre del parámetro estricto para completar. (If4738)

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

  • Se reemplazó la función Clip que admite composición con el modificador drawClip(). El objeto 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 DrawShadow que admite composición con el modificador drawShadow(). Las sombras ahora se dibujan como parte de LayerModifier. (I0317a)

  • Se trasladó el objeto androidx.compose.ViewComposer al elemento androidx.ui.node.UiComposer. Se quitó el parámetro androidx.compose.Emittable. Era redundante con el objeto ComponentNode. Se quitó el elemento androidx.compose.ViewAdapters. Ya no es un caso práctico admitido. Compose.composeInto quedó obsoleto. En su lugar, usa los elementos setContent o setViewContent. El componente Compose.disposeComposition dejó de estar disponible. En su lugar, usa el método dispose en el objeto Composition que muestra setContent. Se movió androidx.compose.Compose.subcomposeInto a androidx.ui.core.subcomposeInto. Se cambió el nombre de ComponentNode#emitInsertAt a ComponentNode#insertAt, el de ComponentNode#emitRemoveAt a ComponentNode#removeAt y el de ComponentNode#emitMode a ComponentNode#move. (Idef00)

  • 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 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 cambió el nombre de Painter.toModifier a Painter.asModifier debido a que el modificador recientemente creado tiene una referencia al Painter original que se puede compartir en varias instancias del modificador. (I7195b)

  • Obsoleto: el elemento Draw que admite composición es una fuente común de errores. (I78392, b/149827027)

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

  • 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 quitó la clase ValueHolder. Se reestructuraron las clases AnimatedValue y AnimatedFloat para que el campo de valor de animación sea abstracto a fin de que las subclases puedan ver la actualización del valor.

    • Se agregaron clases de modelos para AnimatedValue, AnimatedFloat, etc.
    • Se agregó un nuevo conjunto de API liviana de @Composable para realizar animaciones entre valores.
    • (I79530)
  • 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)

  • 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 corrigió un error de ConstraintLayout que causaba una falla en las recomposiciones. (Ibee5a, b/158164341)

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

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

  • Dejó de estar disponible LayoutDirectionAmbient. Para leer la dirección del diseño definida por la configuración regional, usa localeLayoutDirection en ConfigurationAmbient. (I851b1)

  • Se agregaron los objetos positionInParent y boundsInParent para el elemento LayoutCoordinates. (Icacdd, b/152735784)

  • 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 agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones OnPositioned y OnChildPositioned que admiten composición. (I2ec8f)

  • Ya no se permite el padding negativo en LayoutPadding. En su lugar, se debería usar LayoutOffset para las compensaciones de posición negativa. (Ifb5b1)

  • WithConstraints tiene el parámetro LayoutDirection. (I6d6f7)

  • Se actualizó la marca ComposeFlags.COMPOSER_PARAM para que sea true, lo que cambiará la estrategia de generación de código para el complemento de composición. En un nivel alto, esto provoca que las funciones @Composable se generen con un parámetro sintético adicional, que se pasa a través de llamadas @Composable posteriores para que el entorno de ejecución administre la ejecución correctamente. Este es un cambio rotundo el objeto binario; sin embargo, debería preservar la compatibilidad a nivel de la fuente en todo uso sancionado de la composición. (I7971c)

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

  • Se incluyeron mejoras en la superficie de la API de Constraints. (I0fd15)

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

  • Se ajustó el menú de la barra de herramientas para mostrar los botones Copiar, Cortar y Pegar de forma correcta. (Id3955)

  • Se agregó el objeto FloatingToolbar para la selección del elemento TextField. (Ie8b07)

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

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

  • Se agregó el objeto HapticFeedback para la selección del elemento TextField. (I58050)

  • Se agregaron los métodos Copiar, Cortar y Pegar para la selección del elemento TextField. (Idb70b)

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

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

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

  • Cambio en la API: se cambió el nombre de AnnotatedString.Item a AnnotatedString.Range. (I2d44d)

  • Se agregó una barra de herramientas para operaciones relacionadas con texto. (I49d53)

  • 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 quedó obsoleto. (Idb25a, b/153141084)

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