Compose Material

Compila 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.
Actualización más reciente Versión estable actual Próxima versión potencial Versión beta Versión alfa
29 de septiembre de 2021 1.0.3 - - 1.1.0-alpha05

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:

Groovy

dependencies {
    implementation "androidx.compose.material:material:1.1.0-alpha05"
}

android {
    buildFeatures {
        compose true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha05"
    }

    kotlinOptions {
        jvmTarget = "1.8"
    }
}

Kotlin

dependencies {
    implementation("androidx.compose.material:material:1.1.0-alpha05")
}

android {
    buildFeatures {
        compose = true
    }

    composeOptions {
        kotlinCompilerExtensionVersion = "1.1.0-alpha05"
    }

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

Versión 1.1.0-alpha05

29 de septiembre de 2021

Lanzamiento de androidx.compose.material:material-*:1.1.0-alpha05. La versión 1.1.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • Se agregó el tamaño mínimo de los objetivos táctiles para los componentes de Material que no tienen un objetivo táctil accesible. Como se agrega espacio adicional alrededor de los componentes para garantizar que tengan un objetivo táctil lo suficientemente grande, esto puede cambiar las IU existentes que suponen que el tamaño de esos componentes es su tamaño visual, y no tiene en cuenta el tamaño del objetivo táctil. Puedes usar el elemento local de composición LocalMinimumTouchTargetEnforcement experimental para inhabilitar este comportamiento en una jerarquía, pero esto es solo una solución temporal mientras se actualizan las IU existentes a fin considerar el nuevo tamaño mínimo. (I9b966, b/149691127, b/171509422)
  • Se agregó la interfaz experimental TextFieldColorsWithIcons, que extendía TextFieldColors para proporcionar InteractionSource a leadingColor y trailingColor. Esto permite modificar el aspecto de TextField según el estado del enfoque. (I66923, b/198402662)

Versión 1.1.0-alpha04

15 de septiembre de 2021

Lanzamiento de androidx.compose.material:material-*:1.1.0-alpha04. La versión 1.1.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se dieron de baja performGesture y GestureScope, que se reemplazaron por performTouchInput y TouchInjectionScope. (Ia5f3f, b/190493367)
  • Se agregó touchBoundsInRoot a SemanticsNode, que incluye el tamaño mínimo del objetivo táctil para que los desarrolladores puedan garantizar que estos cumplan con los requisitos de accesibilidad mínimos. (I2e14b, b/197751214)

Correcciones de errores

  • Permite que el clip extienda los límites del objetivo táctil más allá de la región del clip para los fines mínimos del objetivo táctil. (I43e10, b/171509422)
  • Se actualizó el elemento Divider que admite composición para respetar Dp.Hairline del parámetro de grosor a fin de admitir el dibujo de divisores de píxeles únicos, independientemente de la densidad de la pantalla. (I16ffb, b/196840810)

Versión 1.1.0-alpha0

1 de septiembre de 2021

Lanzamiento de androidx.compose.material:material-*:1.1.0-alpha03. La versión 1.1.0-alpha03 contiene estas confirmaciones.

Nuevas funciones

  • Se actualizó Compose 1.1.0-alpha03 para que dependa de Kotlin 1.5.30. (I74545)

Cambios en la API

  • Se agregó un método de prueba para obtener los límites recortados. (I6b28e)
  • Se agregó un tamaño mínimo de objetivo táctil a ViewConfiguration para usarlo en la semántica y la entrada de puntero a fin de garantizar la accesibilidad. (Ie861c)

Versión 1.1.0-alpha02

18 de agosto de 2021

Lanzamiento de androidx.compose.material:material-*:1.1.0-alpha02. La versión 1.1.0-alpha02 contiene estas confirmaciones.

Contribución externa

  • Se corrigió el comportamiento de SwipeableState en el caso en que el desplazamiento se encuentre dentro de un error de redondeo de un anclaje. (I03d39, b/191993377)

Versión 1.1.0-alpha01

4 de agosto de 2021

Lanzamiento de androidx.compose.material:material-*:1.1.0-alpha01. La versión 1.1.0-alpha01 contiene estas confirmaciones.

Cambios en la API

  • Se actualizó el método DrawScope#drawImage que consume los rects de origen y destino para consumir un parámetro opcional FilterFilter. Esto es útil para el arte de píxeles que se pixela cuando se escala verticalmente para el arte basado en píxeles. Se actualizó el objeto BitmapPainter + Image que admite composición para que también consuma un parámetro opcional FilterQuality. (Ie4fb0, b/180311607)
  • Se cambió el nombre de la insignia de BadgeBox por BadgedBox, y se cambiaron los parámetros para Badge que admite compisición. Se agregó el componente de insignia que es el contenido típico de la insignia para un BadgedBox. (I639c6)
  • Se agregó el componente NavigationRail. Consulta los documentos y las muestras para obtener información sobre el uso. (I8de77)

Correcciones de errores

  • Se agregó un ejemplo de NavigationRail y una demostración de la app de catálogo alineados en la demostración. (I3cffc)
  • Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece usePlatformDefaultWidth como falso para anular este comportamiento. (Iffaed, b/192682388)
  • Se agregó una demostración de navigation-rail a la app de catálogo. (I04960).
  • Se agregó la demostración de badge a la app de catálogo. (If285d)

Versión 1.0

Versión 1.0.3

29 de septiembre de 2021

Lanzamiento de androidx.compose.material:material-*:1.0.3. La versión 1.0.3 contiene estas confirmaciones.

Actualizaciones de dependencias

  • Se actualizó para depender de Kotlin 1.5.30

Versión 1.0.2

1 de septiembre de 2021

Lanzamiento de androidx.compose.material:material-*:1.0.2. La versión 1.0.2 contiene estas confirmaciones.

Se actualizó para que sea compatible con la versión 1.0.2 de Compose. Compose 1.0.2 continúa siendo compatible con Kotlin 1.5.21.

Versión 1.0.1

4 de agosto de 2021

Lanzamiento de androidx.compose.material:material-*:1.0.1. La versión 1.0.1 contiene estas confirmaciones.

Actualizaciones de dependencias

  • Se actualizó para depender de Kotlin 1.5.21.

Versión 1.0.0

28 de julio de 2021

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

Funciones principales de la versión 1.0.0

Esta es la primera versión estable de Compose. Consulta el blog oficial de Lanzamientos de Compose para obtener más información.

Errores conocidos

  • Si usas Android Studio Bumblebee Canary 4 o AGP 7.1.0-alpha04/7.1.0-alpha05, es posible que se produzca la siguiente falla:

      java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
    

    Para sortear el problema, aumenta temporalmente tu minSdkVersion a más de 24 en el archivo build.gradle. Este error se solucionará en la próxima versión de Android Studio Bumblebee y en el AGP 7.1. (b/194289155)

Versión 1.0.0-rc02

14 de julio de 2021

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

Correcciones de errores

  • Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece usePlatformDefaultWidth como falso para anular este comportamiento. (Iffaed, b/192682388)

Versión 1.0.0-rc01

1 de julio de 2021

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

Cambios en la API

  • Se agregó el componente BadgeBox. Consulta los documentos y las muestras para obtener información de uso. (I5e284)
  • Se cambió el nombre de useDefaultMaxWidth en PopupProperties por usePlatformDefaultWidth. (I05710)
  • Ahora se pueden usar los diálogos en todo el ancho de la pantalla. (I83929, b/190810877)
  • Se agregó la implementación del control deslizante de rango experimental. (I2f4b3)

Correcciones de errores

  • A fin de alinearse con las especificaciones de OutlinedTextField de Material Design con entradas no válidas, se dejó de usar el color de error en la etiqueta cuando esta se usa como un marcador de posición. Esto sucede cuando no hay texto de entrada en el campo de texto y este no está enfocado. A partir de esa modificación, cambió el significado del parámetro error:Boolean de la función TextFieldColors.labelColor(): ahora también se mostrará un valor false aunque la entrada no sea válida si se usa la etiqueta como marcador de posición. (I45f78)

Versión 1.0.0-beta09

16 de junio de 2021

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

Cambios en la API

  • Se agregó el parámetro Shape a OutlinedTextField para poder personalizar la forma del borde. (I8f39e, b/181322957)
  • Se cambió TextOverflow a una clase intercalada. (I433af)

Correcciones de errores

  • La malla en BottomDrawer, BackdropScaffold y ModalBottomSheetLayout desaparecerá cuando se pase Color.Unspecified. (I2d899, b/182063309)

Reglas de perfiles agregadas

En esta versión, se agregaron reglas de perfiles a los siguientes módulos de Compose (I14ed6):

  • androidx.compose.animation
  • androidx.compose.animation-core
  • androidx.compose.foundation
  • androidx.compose.foundation-layout
  • androidx.compose.material
  • androidx.compose.material-ripple
  • androidx.compose.runtime
  • androidx.compose.ui
  • androidx.compose.ui.geometry
  • androidx.compose.ui.graphics
  • androidx.compose.ui.text
  • androidx.compose.ui.text
  • androidx.compose.ui.unit
  • androidx.compose.ui.util

¿Qué son las reglas de perfiles?

  • Las reglas de perfiles de una biblioteca se especifican en un archivo de texto baseline-prof.txt, ubicado en src/main o el directorio equivalente. El archivo especifica una regla por línea, donde una regla en este caso es un patrón para la coincidencia con métodos o clases de la biblioteca. La sintaxis de estas reglas es un superconjunto del formato de perfil ART legible que se usa cuando se implementa adb shell profman --dump-classes-and-methods .... Estas reglas adoptan una de dos formas para segmentar métodos o clases.

  • Una regla de métodos tendrá el siguiente patrón:

    <FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
    
  • Una regla de clases tendrá el siguiente patrón:

    <CLASS_DESCRIPTOR>
    
  • Aquí, <FLAGS> es uno o más caracteres H, S y P, los cuales indican si este método debe marcarse como "Hot" (caliente), "Startup" (inicio) o "Post Startup" (posterior al inicio).

  • El <CLASS_DESCRIPTOR> es el descriptor de la clase a la que pertenece el método segmentado. Por ejemplo, la clase androidx.compose.runtime.SlotTable tendría un descriptor de Landroidx/compose/runtime/SlotTable;.

  • El <METHOD_SIGNATURE> es la firma del método y, además, incluye el nombre, los tipos de parámetros y los tipos de datos que muestra. Por ejemplo, el método fun isPlaced(): Boolean en LayoutNode tiene la firma isPlaced()Z.

  • Estos patrones pueden tener comodines (**, * y ?) para tener una sola regla que abarque varios métodos o clases.

¿Para qué sirven las reglas?

  • Un método con la marca H indica que es "hot" y debe compilarse con anticipación.

  • Un método con la marca S indica que se llama durante el inicio y debe compilarse con anticipación para evitar el costo de interpretarlo y compilarlo en el momento del inicio.

  • Un método que tiene la marca P indica que es un método que se llama después del inicio.

  • Una clase presente en este archivo indica que se usa durante el inicio y debe asignarse previamente en el montón para evitar el costo de cargarla.

¿Cómo funciona?

  • Las bibliotecas pueden definir estas reglas que se empaquetarán en artefactos de AAR. Luego, cuando se compila un APK que incluye esos artefactos, esas reglas se combinan y se usan para compilar un perfil de ART binario compacto específico para el APK. De esta manera, ART puede tomar este perfil cuando se instala el APK en dispositivos para compilar con anticipación un subconjunto específico de la aplicación a fin de mejorar su rendimiento, especialmente en la primera ejecución. Ten en cuenta que esta acción no tendrá efecto en las aplicaciones depurables.

Versión 1.0.0-beta08

2 de junio de 2021

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

Nuevas funciones

Cambios de comportamiento en API

  • CAMBIO DE COMPORTAMIENTO: Una tarjeta ahora consume clics, por lo que el proceso de agregarlos mediante Card(Modifier.clickable) es una no-op. Usa la nueva sobrecarga experimental de una tarjeta que acepte onClick. (Ia8744, b/183775620)
    • Se agregó una nueva sobrecarga de tarjetas que controla los clics, así como otras funcionalidades en las que se puede hacer clic: indication, interactionSource, enabled/disabled. No se puede usar una tarjeta normal en la que no se puede hacer clic con Modifier.clickable porque, en esos casos, la tarjeta no recortará el indication de ripple.
  • CAMBIO DE COMPORTAMIENTO: Surface ahora consume clics, por lo que el proceso de agregarlos mediante Surface(Modifier.clickable) es una no-op. Usa la nueva sobrecarga experimental de Surface que acepte onClick. (I73e6c, b/183775620)
    • Se agregó una nueva sobrecarga de Surface que controla los clics, así como otras funcionalidades en las que se puede hacer clic: indication, interactionSource, enabled/disabled. No se puede usar un elemento Surface normal en el que no se puede hacer clic con Modifier.clickable porque, en esos casos, Surface no recortará el indication de ripple.

Cambios en la API

  • FabPosition se convirtió en una clase intercalada de enumeración para admitir una posible expansión en el futuro. (I030fb)
  • Se refactorizaron los usos de enumeración en clases intercaladas para evitar problemas con explicaciones exhaustivas cuando se agregan nuevos valores de enumeración. (I2b5eb)
  • Se agregó un tiempo de espera a los elementos en los que se puede hacer clic o se pueden activar a fin de mostrar un ripple durante el desplazamiento o arrastre. (Ia2704, b/168524931)
  • Las propiedades semánticas de ContentDescription y Text ya no son valores individuales, sino listas. Esto permite fusionarlas como aparecen en lugar de concatenaciones. También se proporcionaron mejores API de prueba para usar estos cambios. (Ica6bf, b/184825850)
  • Modifier.focusModifier() dejó de estar disponible y se reemplazó con Modifier.focusTarget(). (I6c860)
  • Se reemplazó la enumeración FocusState con una interfaz FocusState. (Iccc1a, b/187055290)
  • Se quitó LocalRippleNativeRendering, porque ahora la implementación de ripple respaldada por View es estable. (I7fab3, b/188569367)

Correcciones de errores

  • Se modificó Modifier.onGloballyPositioned() para informar las coordenadas de este modificador en la cadena de modificador, en lugar de las coordenadas de diseño después de aplicar todos los modificadores. Es decir, ahora el orden de los modificadores afecta las coordenadas que se informarán. (Ieb67d, b/177926591)
  • Se agregó un archivo readme para el catálogo de Compose Material existente. (If9191)

Versión 1.0.0-beta07

18 de mayo de 2021

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

Cambios en la API

  • Ya no es necesario usar métodos de extensión para la compatibilidad con rutas en Navigation Compose. (I22beb, b/172823546)

Versión 1.0.0-beta06

5 de mayo de 2021

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

Cambios en la API

  • Se migró Ripple para usar RippleDrawable internamente en dispositivos Android. Esto significa que las animaciones de ripple se producirán en el RenderThread y serán fluidas incluso cuando el subproceso de IU se encuentre con carga, como cuando se navega entre pantallas. Esto no cambia la superficie de la API de ripple, pero es posible que se produzcan cambios de comportamiento como resultado de este proceso. Para ayudar en la migración, se agregó LocalRippleNativeRendering, que proporciona un valor de false a este CompositionLocal para recurrir a la implementación de ripple anterior dentro de CompositionLocalProvider. Esta API es temporal y se quitará en el futuro, por lo que si tienes problemas cuando usas la API, infórmalo. (I902f8, b/168777351, b/183019123)
  • Se agregaron las API de accesibilidad CollectionInfo y CollectionItemInfo, que permiten marcar la colección y sus elementos para los servicios de accesibilidad. (Id54ef, b/180479017)
  • Se agregó la API de accesibilidad error que permite marcar un nodo que contiene entradas no válidas. (I12997, b/180584804, b/182142737)

Correcciones de errores

  • Se actualizó la implementación del catálogo de inserción de Compose Material en https://github.com/google/accompanist/pull/365. (I25dc3)
  • Los encabezados de fila y columna secundarios Row con peso (relleno = falso) ya no hacen que el elemento superior rellene todo el espacio del eje principal disponible. (Ied94d, b/186012444, b/184355105)

Versión 1.0.0-beta05

21 de abril de 2021

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

Correcciones de errores

  • Se agregaron imágenes de mosaicos de componentes, selector de temas, y URL del menú más específicas al catálogo existente de Compose Material. (I9b58e)

Versión 1.0.0-beta04

7 de abril de 2021

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

Cambios en la API

  • CAMBIO EN LA API: El estado DrawerState ya no extiende el elemento experimental SwipeableState.
    • CAMBIO EN LA API: Ahora, BottomDrawerState se marca como experimental para que coincida con el componente experimental BottomDrawer (I81114, b/181656094).
  • Se cambió el nombre de hideSoftwareKeyboard y showSoftwareKeyboard de SoftwareKeyboardController ahide() y show(), respectivamente.
    • Proporciona la interfaz completa de CompositionLocal para LocalSoftwareKeyboardController, que permite que se configure (especialmente útil en pruebas). (I579a6).
  • Se agregó la API de accesibilidad LiveRegion. Si el nodo está marcado como una región live, los servicios de accesibilidad notificarán automáticamente al usuario sobre los cambios (Idcf6f, b/172590946)

Correcciones de errores

  • Se agregó la implementación del catálogo de Compose Material al módulo existente. En los próximos cambios, se agregarán los componentes imágenes de mosaicos y selector de temas. (Ie7a94)

Versión 1.0.0-beta03

24 de marzo de 2021

Lanzamiento de androidx.compose.material:material-*: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)
  • Se agregó una nueva API de LeadingIconTab para admitir la visualización de un ícono y texto intercalado en una pestaña. (I23267)

Contribución externa

  • [por Jossi Wolf] BottomDrawer ahora une el contenido del espacio del panel lateral. BottomDrawer no muestra un IllegalStateException cuando el elemento principal tiene una altura infinita. El panel lateral inferior ahora se abrirá en un estado expandido si tiene un tamaño inferior al 50%. Se actualizaron los documentos de BottomDrawerState y ModalBottomSheetLayoutState. Ahora, BottomDrawerState#isOpen se muestra como verdadero si está en estado abierto o expandido. (I87241)

Versión 1.0.0-beta02

10 de marzo de 2021

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

Cambios en la API

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

Correcciones de errores

  • Se aplicaron restricciones sobre el uso público de las API experimentales. (I6aa29, b/174531520)
  • Se cambió la alineación horizontal predeterminada para TopAppBar y BottomAppBar para comenzar de manera coherente con la fila. (lb2dc7)
  • Se agregó un nuevo módulo y marcador de posición de IU para un catálogo de Compose Material, que actualmente está anidado en demostraciones de pruebas de integración existentes. (Idfcb3)
  • androidx.compose.ui:ui ya no depende de AppCompat ni Fragment. Si usas ComposeView en tu aplicación y usas Fragment o AppCompat, asegúrate de usar AppCompat 1.3+ o Fragment 1.3+. Se necesitan estas versiones para establecer correctamente el ciclo de vida y los estados guardados del propietario que se requieren para ComposeView. (I1d6fa, b/161814404)

Versión 1.0.0-beta01

24 de febrero de 2021

Lanzamiento de androidx.compose.material:material-*: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 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)
  • Ahora, imageResource y vectorResource son funciones de extensión en los elementos ImageBitmap y ImageVector complementarios, respectivamente. Se borraron las funciones load{Image,Vector,Font}Resource. (I89130)
  • Ya no son experimentales los modificadores para cambiar el tamaño de los elementos intrínsecos. (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)
  • Ahora, son nulas las expresiones lambda de acción Switch, Checkbox y RadioButton. Se actualizaron las muestras de filas para hacer clic en las casillas de verificación a fin de usar esta función. (If601b, b/171819073)
  • Se reemplazó InteractionState por [Mutable]InteractionSource.
    • Las interfaces son responsables de emitir o recopilar eventos de interacción.
    • En lugar de pasar el elemento interactionState = remember { InteractionState() } a componentes como Button y Modifier.clickable(), usa el objeto interactionSource = remember { MutableInteractionSource() }.
    • En lugar del elemento Interaction.Pressed in interactionState, debes usar las funciones de extensión en el objeto InteractionSource, como InteractionSource.collectIsPressedAsState().
    • Para casos complejos de uso, puedes usar el elemento InteractionSource.interactions para observar el flujo de Interactions. Para obtener más información, consulta la documentación y ejemplos de InteractionSource.
    • (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
  • Agrega la interfaz AccessibilityMananger y LocalAccessibilityMananger en CompositionLocals. (I53520)
  • Se quitaron los métodos obsoletos de LayoutCoordinates; usa la función en lugar de la propiedad para positionInParent y boundsInParent. (I580ed, b/169874631, b/175142755)
  • Ahora, el control deslizante admite el estado habilitado/inhabilitado. (I6d56b, b/179793072)
  • Se creó un nuevo elemento TextInputSession para sesiones de entrada a partir de componentes de texto de bajo nivel, como CoreTextField. (I8817f, b/177662148)
  • Se quitó AnimationEndReason.Interrupted. Si se interrumpe la animación, se mostrará una CancellationException. (I2cbbc, b/179695417)
  • Se quitó @ExperimentalRippleApi y se cambió RippleAlpha para que sea una clase con propiedades en lugar de una interfaz. (I6df7c)
  • Se agregó la interfaz TextFieldColors para representar diferentes colores usados en TextField y OutlinedTextField, en diferentes estados. Para la implementación predeterminada, consulta TextFieldDefaults.textFieldColors y TextFieldDefaults.outlinedTextFieldColors.
  • 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(), de LazyListState.snapToItemIndex() a scrollToItem() y de ScrollState.smoothScrollTo() a animateScrollTo(). (I35ded)

  • Ahora, se puede validar el tiempo de compilación de cualquier elemento que admite composición con el objeto@ReadOnlyComposable para garantizar que solo realicen llamadas a otro objeto @ReadOnlyComposables. (I58961)

  • Se quitó la API de TargetAnimation. (If47d1, b/177457083)

  • 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 migró Orientation al paquete de base. Se migró VelocirtTracker de ui.gesture a ui.input.pointer. (Iff4a8, b/175294473)

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

  • Ahora, ZoomableController.smoothScaleBy y ZoomableController.stopAnimation son funciones de suspensión. (I7f970, b/177457083)

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

  • Se realizaron los siguientes cambios en la API de Material:

    • Se agregó el parámetro contentPadding a Top/BottomAppBar para permitir personalizar el relleno predeterminado.
    • Se reorganizaron los parámetros en BackdropScaffold a fin de cumplir con los lineamientos de las API para los parámetros obligatorios antes de los parámetros opcionales.
    • Se migró el parámetro icon en BottomNavigationItem para que sea posterior a selected y onClick.
    • Se cambió el nombre del parámetro alwaysShowLabels en BottomNavigationItem a alwaysShowLabel.
    • Se cambiaron los nombres de los parámetros bodyContent en algunos componentes a solo content.
    • Se reorganizaron los parámetros en ButtonDefaults.buttonColors(). Ten en cuenta que, debido a que no cambió el tipo de parámetros, no se producirá un error en tu código. Asegúrate de estar usando parámetros con nombre o actualiza el orden de manera manual; de lo contrario, tu código no funcionará como antes.
    • Se agregó el parámetro secondaryVariant a darkColors(). Por lo general, este color es el mismo que el de secondary en el tema oscuro, pero agrega coherencia y mayor personalización.
    • Se quitó ElevationDefaults y animateElevation() de la superficie de la API pública, ya que no se usaban con frecuencia ni eran útiles.
    • Se cambió el nombre de onValueChangeEnd en Slider a onValueChangeFinished y se hizo nulo.
    • Se cambió el nombre del parámetro text en Snackbar a content para brindar coherencia.
    • Se agregó el parámetro contentPadding a DropdownMenuItem para permitir la personalización del relleno predeterminado y se convirtió content en una extensión en RowScope.
    • Se cambió el nombre de ModalDrawerLayout a ModalDrawer.
    • Se cambió el nombre de BottomDrawerLayout a BottomDrawer.
    • (I1cc66)
  • Ahora, BasicTextField acepta Brush en lugar de Color para mejorar la personalización. (I83a36)

  • Ahora, imageResource y vectorResource son funciones de extensión en los elementos ImageBitmap y ImageVector complementarios, respectivamente. Se borraron las funciones load{Image,Vector,Font}Resource. (I89130)

  • Se cambió Indication#createIndication() a Indication#rememberUpdatedIndication(InteractionState) y se quitó el parámetro InteractionState de IndicationInstance#drawIndication(). IndicationInstance solo debe ser responsable de dibujar efectos visuales y no de lanzar animaciones ni estados de escritura en respuesta a los cambios de InteractionState. En se 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)

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.material:material-*: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)
  • Se marcaron BottomDrawerLayout y ListItem como @ExperimentalMaterialApi. (Id766e)
  • 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)
  • 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 hicieron internos los elementos halfExpand() y expand() en ModalBottomSheetState. (Ic914e)
  • 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 migraron Moved AlertDialog y DropdownMenu, de manera que sean solo para Android por ahora. Se agregó el parámetro PopupProperties a DropdownMenu para ofrecer configuración adicional de la ventana emergente subyacente. (I9c443)
  • loadFontResource dejó de estar disponible. imageResource, loadImageResource, vectorResource, y loadVectorResource dejaron de estar disponibles. En su lugar, usa fontResource o painterResource. (I6b809)
  • Se quitaron los parámetros toggle y toggleModifier de DropdownMenu, y se cambió el nombre de dropdownModifier, dropdownOffset y dropdownContent a modifier, offset y content, respectivamente. Ahora, DropdownMenu se comporta de manera coherente con Popup, donde el diseño de nivel superior se usa para la posición del menú. En la mayoría de los casos, puedes migrar toggle para que sea equivalente a DropdownMenu y unir ambos en un elemento Box. Consulta la muestra actualizada en la documentación para obtener más información sobre el uso de esta API. (I884fb)
  • Se cambió el nombre de toIntPx() a roundToPx(). (I9b7e4, b/173502290)
  • Se cambió el nombre de IntBounds a IntRect y se mejoró la API. (I1f6ff)
  • Se agregaron las acciones de semántica para expandir y contraer. Se agregaron los elementos expand y halfExpand en ModalBottomSheetState. (Ib5064)
  • Modifier.dragGestureFilter dejó de estar disponible. Usa Modifier.pointerInput { detectDragGestures (...)} en su lugar. De forma alternativa, puedes usar Modifier.draggable para arrastrar un eje. (I0ba93, b/175294473)
  • Se cambió el nombre de Ambients para que coincida con Ambient -> CompositionLocal. Los elementos Ambients se solían llamar AmbientFoo; ahora los elementos CompositionLocals se llaman LocalFoo. (I2d55d)
  • Se movió la selección a la base. (I7892b)
  • Se quitará el objeto savedInstanceState { 0 } que admite composición, de forma similar a como se quitó state { 0 }, que también admitía composición, y ahora se promociona el uso de remember { mutableStateOf(0) }, por ejemplo. En su lugar, se debe usar rememberSaveable { mutableStateOf(0) }, que se guardará y restablecerá automáticamente si el tipo usado dentro de MutableState se puede almacenar en el paquete. Si antes pasabas un objeto Saver personalizado, ahora debes usar una sobrecarga nueva de rememberSaveable, que tiene el parámetro stateSaver. Se verá de la siguiente manera: val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }. (Ib4c26, b/177338004)
  • Se agregó ProgressBarRangeInfo.Indeterminate a fin de marcar barras de progreso indeterminadas para la accesibilidad. (I6fe05)
  • @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)

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

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

  • Se cambió el nombre de los parámetros en RounderCornerShape, CutCornerShape 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 cambiaron los parámetros text y icon de Tab y el parámetro label de BottomNavigationItem para que sean nulos, a fin de transmitir mejor el comportamiento del componente cuando estos parámetros se proporcionan o no, ya que afectan el tamaño y el diseño del componente. En la actualidad, si pasas emptyContent() para que no represente texto, ícono ni etiqueta, debes usar null en su lugar. (I57ed4)

  • Se cambió el nombre del parámetro contentColorFor a backgroundColor. (I5bb67).

  • TabDefaults se volvió obsoleto y se lo reemplazó por TabRowDefaults. (I0f189)

  • Se introdujo la API de ColorMatrix para modificar valores RGB de contenido fuente y se refactorizó la API de ColorFilter para que sea una interfaz y coincida con la implementación de PathEffect. (Ica1e8)

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

  • Agrega la API de SemanticsProperties.PaneTitle. (I20d5a)

  • Se agregaron parámetros habilitados a Tab y BottomNavigationItem para evitar que se pueda hacer clic en ellos. Se cambió BottomNavigationItem para que sea RowScope.BottomNavigationItem a fin de expresar mejor sus requisitos de diseño en su API. (Id683d)

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

  • Se agregó el parámetro layoutDirection al objeto createOutline del elemento Shape. Esto permite crear formas que reconozcan la dirección en el diseño. (I57c20, b/152756983)

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

Correcciones de errores

  • Ahora, el ícono escalará verticalmente para adaptarse al tamaño y respetar los modificadores de tamaño que se le apliquen. Por ejemplo, Icon(.., modifier = Modifier.size(50.dp) ahora se dibujará en un espacio de 50 x 50 dp. (Ib2ba9, b/178796190)

Versión 1.0.0-alpha11

28 de enero de 2021

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

Cambios en la API

  • Promueve algunas API de Material para que ya no sean @Experimental. (I5d20e).
  • Se agregó el 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)
  • Cambia las interfaces de parámetros con estado de Material para tener funciones @Composable que muestren State<T>. Agrega Animatable.asState() para facilitar la conversión de un valor Animatable en un State. También cambia animateElevation para que sea una extensión de suspensión en Animatable. (If613c)
  • Snackbar, SnackbarHost, SnackbarHostState ya no son @ExperimentalMaterialAPI. (Id1fb5)
  • Cambia Typography, Shapes y TabPosition para que ya no sean clases de datos. Se agregó la función de copia para Typography y Shapes de modo que reemplacen las ya generadas. (I40037)
  • Se borraron algunas API de Material que dejaron de estar disponibles. (Ifaa25)

Correcciones de errores

  • onCommit, onDispose y onActive dejaron de estar disponibles, y se los reemplazó con las API de SideEffect y DisposableEffect. (If760e)
  • La transición TransitionDefinition-based dejó de estar disponible. (I0ac57)
  • Ahora se admite el State inicial en updateTransition. (Ifd51d)
  • WithConstraints ahora se llama BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
  • 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ó 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).

  • El efecto usado en Button y FloatingActionButton ya no se puede personalizar proporcionando una nueva Indication para AmbientIndication. No se suponía que fuera una forma de personalizar esos componentes, y ahora los componentes son coherentes con otros componentes de Material. Para personalizar los efectos de toda una aplicación, consulta RippleTheme. (I546c5)

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

  • 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 corrigió un error que impedía configurar el ancho del campo de texto de Material de menos de 280 dp. (I78373)

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

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

  • La superficie ahora puede tener varios elementos secundarios de diseño. (I66a92, b/144488459)

  • invalidate y compositionReference() dejaron de estar disponibles, y se reemplazaron con currentRecomposeScope y rememberCompositionReference, respectivamente. (I583a8)

  • Cambia PopupPositionProvider para usar coordenadas relativas de ventana, no coordenadas globales. Cambia el nombre de parentGlobalBounds a anchorBounds y cambia windowGlobalBounds para que sea windowSize: IntSize. (I2994a)

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

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

  • Ahora, clickable, toggleable y selectable pueden crearse fuera de las composiciones. (I0a130, b/172938345, b/175294473)

  • Se cambió la aceleración a una interfaz funcional. (Ib14e5)

  • 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 nuevas para Arrays: items(items: Array) y itemsIndexed(Array). (I803fc, b/175562574)

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

  • Se agregó Modifier.toolingGraphicsLayer, que agrega un modificador de capas de gráficos cuando se activa la inspección. (I315df)

  • Ahora, FocusRequester.createRefs se marca como experimental, ya que podría sufrir cambios. (I2d898, b/177000821)

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

  • Se implementó TestCoroutineDispatcher en pruebas. (I532b6)

  • Se actualizó la API de gráficos vectoriales para admitir el análisis del tono aplicado a la raíz de los gráficos vectoriales. (Id9d53, b/177210509)

Versión 1.0.0-alpha10

13 de enero de 2021

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

Cambios en la API

  • Se modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
  • Se cambió el nombre de @ExperimentalTesting a @ExperimentalTestApi para que sea coherente con anotaciones de API experimentales similares. (Ia4502, b/171464963)
  • Se cambió el nombre de Position a DpOffset y se quitó getDistance(). (Ib2dfd)
  • Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
  • Se agregó la opción de activar o desactivar el Strings.kt de Foundation. (I4a5b7, b 172366489)
  • 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 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)

Correcciones de errores

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

Versión 1.0.0-alpha09

16 de diciembre de 2020

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

Cambios en la API

  • Se agregó una API para activar manualmente las acciones de establecer animación y arrastrar en Modifier.swipeable. (Iaa17a, b/162408885)
  • Se cambiaron los nombres de objetos *Constants como ButtonConstants para que terminen con Defaults, como ButtonDefaults. También se quitaron los prefijos default innecesarios de las propiedades en esos objetos nuevos. (Ibb915, b/159982740)
  • Compose admite captadores de propiedad que pueden realizar invocaciones que se pueden componer. La compatibilidad con lo anterior no desaparecerá, pero cambiará la sintaxis para declarar un captador de propiedad, dado que @Composable cambiará.

    La sintaxis, ahora obsoleta, consistía en anotar la propiedad en sí:

        @Composable val someProperty: Int get() = ...
    

    Ahora, la sintaxis correcta consiste en anotar el captador de la propiedad:

       val someProperty: Int @Composable get() = ...
    

    Ambas sintaxis funcionarán por un tiempo, pero, al final, la sintaxis obsoleta anterior se convertirá en un error de compilación. (Id9197)

  • Se agregó la biblioteca androidx.compose.material:material-ripple que contiene API de efectos para permitir la creación de componentes interactivos sin que se necesite el resto de la biblioteca de Material. rememberRippleIndication dejó de estar disponible y se reemplazó por rememberRipple. (Ibdf11)

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 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. En su lugar, usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)

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

  • Se movieron p.VectorConverter, Position.VectorConverter, etc. a animation-core, y dejaron de estar disponibles los objetos VectorConveters anteriores. (If0c4b)

  • Ahora la API de autocompletado es una experimental y requiere que la habilites. (I0a1ec)

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

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

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

  • El comportamiento de posicionamiento de los menús desplegables se cambió ligeramente según la especificación de Material. (I34c72, b/168594123).

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

  • Se agregó Modifier.clearAndSetSemantics para borrar la semántica de los derivados y establecer nuevas. (I277ca)

  • Se movió ContentDrawScope al módulo ui-graphics para que esté con DrawScope. (Iee043, b/173832789)

Versión 1.0.0-alpha08

2 de diciembre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha08, androidx.compose.material:material-icons-core:1.0.0-alpha08 y androidx.compose.material:material-icons-extended:1.0.0-alpha08. La versión 1.0.0-alpha08 contiene estas confirmaciones.

Cambios en la API

  • MaterialTheme ahora establece los colores correctos para los controladores y el fondo de selección. Las apps que no son de Material pueden usar AmbientTextSelectionColors de forma manual para personalizar los colores usados para la selección. (I1e6f4, b/139320372, b/139320907)
  • Se agregó 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 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 trasladaron las propiedades de semántica básica a la IU. (I6f05c)
  • fun RippleIndication() dejó de estar disponible y se reemplazó por rememberRippleIndication() por coherencia con otras API. (Id8e2c)
  • 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)

Correcciones de errores

  • Se agregó la acción de semántica Descartar. (I2b706)
  • Se movieron las API de DrawModifier del paquete androidx.compose.ui a androidx.compose.ui.draw. Se creó el archivo DrawModifierDeprecated.kt para que incluya los métodos typealiases/helper a fin de asistir en la migración de las API que dejaron de estar disponibles a las actuales. (Id6044, b/173834241)
  • Se cambió el nombre de Modifier.drawLayer a Modifier.graphicsLayer y se actualizaron las clases relacionadas con GraphicsLayer según los comentarios de la API. (I0bd29, b/173834241)
  • Se quitó <T> de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8)
  • Se agregaron API de Modifier.scale/rotate como convenientes para drawLayer.
    • Se cambió el nombre de Modifier.drawOpacity a Modifier.alpha.
    • Se cambió el nombre de Modifier.drawShadow a Modifier.shadow. (I264ca, b/173208140)
  • 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 introdujeron las API de SweepGradientShader y SweepGradientBrush. (Ia22c1)
  • Se agregó una comprobación de lint para los parámetros de modificación en funciones que admiten composición. Esta comprobación de lint verifica el nombre, el tipo de datos que se muestra, el valor predeterminado y el orden del parámetro para mantener la coherencia con los lineamientos de Compose. (If493b)
  • Se actualizó la API de TextFieldValue.
    • TextFieldValue.composition se hizo de solo lectura.
    • Se quitó la excepción que se arrojaba para el rango de selección no válido. (I4a675, b/172239032)
  • Se agregó una nueva sobrecarga de Modifier.drawLayer(). Toma un bloqueo de lambda en un objeto GraphicsLayerScope nuevo donde se definen los parámetros de la capa de una forma que permita omitir la recomposición y la creación de un diseño nuevo cuando se produce el cambio de estado. DrawLayerModifier ahora es un elemento interno en la preparación para migrar su lógica al método placeable.placeWithLayer() de LayoutModifier. (I15e9f, b/173030831)
  • Los entornos Ambient con el nombre Ambient como sufijo dejaron de estar disponibles, y se los reemplazó por nuevas propiedades con el prefijo Ambient, en función de otros lineamientos de la API de Compose y Ambients. (I33440)
  • Se 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 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 cambió el nombre de id por layoutId para LayoutIdParentData. Se cambió el nombre de Measurable.id por Measurable.layoutId. (Iadbcb, b/172449643)

Versión 1.0.0-alpha07

11 de noviembre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha07, androidx.compose.material:material-icons-core:1.0.0-alpha07 y androidx.compose.material:material-icons-extended:1.0.0-alpha07. La versión 1.0.0-alpha07 contiene estas confirmaciones.

Cambios en la API

  • Emphasis dejó de estar disponible y se reemplazó por AmbientContentAlpha. AmbientContentAlpha es una abstracción más simple que representa la versión alfa del contenido preferido para parte de la jerarquía, similar a la forma en que AmbientContentColor representa el color de contenido preferido. De manera predeterminada, Icon y Text consumen el valor actual de AmbientContentAlpha. También puedes hacerlo de forma manual: color.copy(alpha = AmbientContentAlpha.current) para tener el mismo efecto en tus componentes. En lugar de usar ProvidEmphasis, solo puedes proporcionar un valor de forma directa mediante AmbientContentAlpha y usar los nuevos niveles predeterminados en ContentAlpha para reemplazar a los antiguos EmphasisLevels. (Idf03e, b/159017896)
  • Se agregó androidx.compose.material.AmbientContentColor para reemplazar a androidx.compose.foundation.AmbientContentColor. (I84f7b, b/172067770)
  • Se agregó androidx.compose.material.Text para reemplazar a androidx.compose.foundation.Text como componente de texto de alto nivel y temática. Para un componente básico de texto que no consume color ni estilo de texto del tema, utiliza BasicText. (Ie6ae0)
  • Se agregó maxLines a TextFields. (Ib2a5b)
  • Se actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
  • Surface ahora utiliza la elevación absoluta (total) al momento de calcular las superposiciones de elevación. Por lo tanto, un objeto Surface anidado en otro Surface usará la elevación combinada para dibujar la superposición. (I7bd2b, b/171031040)

Correcciones de errores

  • Se movió captureToBitmap a captureToImage. (I86385)
  • 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 cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
  • Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
  • BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
  • Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
  • Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
  • Se 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 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 cambió el nombre de LaunchedTask a LaunchedEffect para conservar la coherencia con las API de SideEffect y DisposableEffect. No se permite el uso de LaunchedEffect sin parámetros de asunto para fomentar las prácticas recomendadas. (Ifd3d4)
  • Se 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)

Versión 1.0.0-alpha06

28 de octubre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha06, androidx.compose.material:material-icons-core:1.0.0-alpha06 y androidx.compose.material:material-icons-extended: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ó FloatingActionButtonElevation para representar la elevación utilizada por los BAF en diferentes estados. Consulta FloatingActionButtonConstants.defaultElevation() para obtener la implementación predeterminada. (I2d4f5).
  • Se agregó la interfaz SwitchColors para representar los colores que usa un Switch en diferentes estados. Consulta SwitchConstants.defaultColors para personalizar estos colores. (I93805)
  • Se agregaron las interfaces ButtonElevation y ButtonColors para representar la elevación y los colores que usan los botones en diferentes estados. Consulta las funciones predeterminadas de ButtonConstants para personalizar esos parámetros. (Ic5b7b)
  • Se agregó la interfaz RadioButtonColors para representar los colores utilizados por un RadioButton en diferentes estados. Consulta RadioButtonConstants.defaultColors() para personalizar los colores que se usan en diferentes estados. (I74130)
  • Se agregó la interfaz CheckboxColors para representar los colores usados por una casilla de verificación en diferentes estados. Consulta CheckboxConstants.defaultColors() para personalizar los colores que se usan en diferentes estados. (I7dbdb)

Correcciones de errores

  • Los componentes de Material ya no establecen la elevación como zIndex . Eso significa que, dentro del mismo elemento superior, el elemento secundario con mayor tamaño de sombra no se dibujará encima del elemento secundario con el más pequeño de forma automática. Si aún necesitas este comportamiento, configura Modifier.zIndex() de forma manual cuando sea necesario. (I70417, b/170623932)
  • VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter a fin de indicar mejor que la API de composición aprovecha internamente "remember" para conservar datos entre las composiciones. (Ifda43)
  • Se 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 refactorizaron DrawScope y ContentDrawScope para que sean interfaces en lugar de clases abstractas.
    • Se creó la implementación de CanvasDrawScope de DrawScope.
    • Se refactorizaron implementaciones de DrawScope para usar CanvasScope.
    • Se creó DrawContext para unir dependencias de DrawScope.
    • Se quitaron los métodos obsoletos de DrawScope. (I56f5e)
  • Se creó Box como función intercalada. (Ibce0c, b/155056091)

Versión 1.0.0-alpha05

14 de octubre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha05, androidx.compose.material:material-icons-core:1.0.0-alpha05 y androidx.compose.material:material-icons-extended:1.0.0-alpha05. La versión 1.0.0-alpha05 contiene estas confirmaciones.

Cambios en la API

  • Las ventanas emergentes y los diálogos ahora heredan FLAG_SECURE desde la ventana superior. También se agregó la opción de configurar esto explícitamente. (I64966, b/143778148, b/143778149)
  • De forma predeterminada, Modif.swipeable ahora tiene umbrales de 56 dp para estados. (Iab825, b/168610267)
  • Todos los estados de scaffold marcados como @Stable. drawerGesturesEnabled en ScaffoldState se movieron a Scaffold. (I36645, b/168297016)
  • Se quitó el tipo anulable de los parámetros lambda de Scaffold. Puedes usar emptyContent() a fin de representar sin contenido para un parámetro determinado. (I2b318, b/157633857, b/158551084)
  • Se dieron de baja las API de contentColor() y currentTextStyle(), y se reemplazaron 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)
  • Se agregó AmbientElevationOverlay, lo que permite personalizar o inhabilitar la superposición de elevación predeterminada que se aplica a los objetos Surfaces con tema oscuro. (I5b74d)

Correcciones de errores

  • Como parte de la estandarización de los valores sentinela de las clases intercaladas, se cambia el nombre a Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas. (I97611, b/169797763)
  • Se agregó TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)
  • Se cambió el nombre de launchInComposition por LaunchedTask para que coincida con los lineamientos de la API de Compose. (I99a8e)
  • Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)

Versión 1.0.0-alpha04

1 de octubre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha04, androidx.compose.material:material-icons-core:1.0.0-alpha04 y androidx.compose.material:material-icons-extended:1.0.0-alpha04. La versión 1.0.0-alpha04 contiene estas confirmaciones.

Cambios en la API

  • Se exponen parámetros InteractionState en componentes de Material con estado para permitir elevar el estado y leerlo o controlarlo. (Iaca5f, b/168025711, b/167164434)
  • Se cambian los parámetros de *color en RadioButton y TriStateCheckbox para personalizar por completo los colores usados en cada estado, así como el cambio de la animación de los colores entre los estados si así lo deseas. Para obtener más información, consulta las nuevas funciones de colores animateDefault* en CheckboxConstants y RadioButtonConstants. (I1c532)
  • Se cambió el nombre de rememberBackdropState a rememberBackdropScaffoldState y se agregó un parámetro adicional para el reloj de animación. Se cambió el nombre del parámetro backdropScaffoldState de BackdropScaffold a soldoldState. Se cambió el nombre de BackdropConstants a BackdropScaffoldConstants. (Ib644d)
  • Se agregó el componente experimental BottomSheetSafold. (Ie02f0, b/148996320)
  • Se agregó el componente experimental ModalBottomSheetLayout. (Ic209e, b/148996320)
  • Se cambió el nombre de ButtonConstants/FloatingActionButtonConstants.defaultAnimatedElevation a defaultElevation, y ahora muestra un valor Dp en lugar de AnimatedValue. (I5f3ed)

Correcciones de errores

  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de transformación de escalamiento y rotación a fin de consumir un solo parámetro de compensación para representar la coordenada dinámica, en lugar de parámetros flotantes separados para las coordenadas x/y en DrawScope y DrawTransform.
    • Se quitaron los métodos Rect.expandToInclude y Rect.join.
    • Se actualizó la documentación de Radius para indicar el óvalo además del elíptico.
    • Se agregó documentación para indicar que el constructor público para la clase de Radius intercalado no se debe llamar directamente, sino que se debe crear una instancia de los objetos Radius a través de sus constructores de funciones.
    • Se quitaron las API de RoundRect para consultar topRight, bottomRight, bottomCenter, etc.
    • Rect.shift dejó de estar disponible y se reemplazó por Rect.translate.
    • Se quitaron las API de RoundRect.grow y Rect.shrink.
    • Se cambió el nombre de RoundRect.outerRect a Rect.boundingRect.
    • Se quitaron los métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect y Rect.isStadium.
    • Se cambió el nombre de RoundRect.longestSide a RoundRect.maxDimension.
    • Se cambió el nombre de RoundRect.shortestSide a RoundRect.minDimension.
    • Se modificó RoundRect.center para que sea una propiedad en lugar de una función.
    • Se actualizó el constructor RoundRect para consumir propiedades de Radius en lugar de parámetros individuales para valores de radio x/y.
    • Se quitaron las API de tamaño que asumían que se trataba de un rectángulo con el origen en 0,0.
    • Se agregó una API destructiva a Radius.
    • Se migraron varias funciones de extensión de RoundRect para que sean propiedades.
    • (I8f5c7, b/168762961)
  • foundation.Box dejó de estar disponible. Usa foundation.layout.Box en su lugar. (Ie5950, b/167680279)
  • Se cambió el nombre de Stack a Box. La función Box anterior dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
  • Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de DrawScope con métodos de transformación con alcance para indicar que la transformación solo se aplica dentro de la devolución de llamada y se quita una vez invocada la devolución de llamada.
    • Se actualizó la documentación de clipPath para hacer referencia a Path en lugar del rectángulo redondeado.
    • Se corrigió el espaciado en la documentación del parámetro en clipPath.
    • Se cambió el nombre de DrawScope.drawCanvas a drawIntoCanvas y se quitó el parámetro de tamaño.
    • Se cambió el nombre de los parámetros dx/dy en el método de inserción a horizontal y vertical.
    • Se agregó una sobrecarga de inserción que proporciona el mismo valor de inserción a los 4 límites.
    • Se quitó la documentación del método de inserción que indicaba que la inserción se aplicaba a los 4 lados.
    • Se actualizó la documentación de la clase Rect.
    • Se actualizaron los comentarios en los parámetros Rect para que coincidan con el estilo de KDoc.
    • Se quitaron Rect.join and Rect.expandToInclude.
    • Se creó una sobrecarga para Rect.translate (desplazamiento), y Rect.shift dejó de estar disponible.
    • (If086a, b/167737376)
  • 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)

Versión 1.0.0-alpha03

16 de septiembre de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha03, androidx.compose.material:material-icons-core:1.0.0-alpha03 y androidx.compose.material:material-icons-extended:1.0.0-alpha03. La versión 1.0.0-alpha03 contiene estas confirmaciones.

Cambios en la API

  • Se cambió el nombre del parámetro onSelect de BottomNavigationItem a onClick. (I91925, b/161809324)
  • Se agregó el parámetro InteractionState a BottomNavigationItem y Tab, lo que permite elevar este estado y ajustar la forma en que aparece el componente en diferentes estados. (Ia3e9e, b/168025711)
  • Se quitaron los parámetros disabledBackgroundColor y disabledContentColor de los botones. En su lugar, debes usar las nuevas funciones predeterminadas de color dentro de ButtonConstants. Si ya configuraste de forma explícita contentColor o backgroundColor, en su lugar, debes usar estas funciones predeterminadas y personalizar algunos o todos los parámetros para evitar que se reemplace el color de los estados habilitados o inhabilitados. (If9b52)
  • El color de fondo de Textfield ya no aplica la transparencia alfa de manera implícita. En su lugar, se aplicará directamente cualquier color que configures a través del parámetro backgroundColor. (Iecee9, b/167951441)
  • Se cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)
  • Se reemplazaron los parámetros resistanceFactorAtMin y resistanceFactorAtMax en Modifier.swipeable por un solo parámetro de resistencia. Se agregó un nuevo método defaultResistanceConfig en SwipeableConstants. (I54238)
  • Se agregó compatibilidad con la elevación animada con estado para Button y FloatingActionButton. La elevación ahora anima el cambio entre los estados predeterminado y presionado. Para personalizar la elevación entre estados, en todos los casos, usa ButtonConstants.defaultAnimatedElevation() y FloatingActionButtonConstants.defaultAnimatedElevation() en lugar de establecer un valor Dp plano. (I37925)
  • El parámetro Label ahora es opcional en TextField y OutlinedTextField. (I267f6, b/162234081)

Correcciones de errores

  • Las funciones de prueba globales, como onNode o waitForIdle, dejaron de estar disponibles. Migra a sus equivalentes nuevas que se definen en ComposeTestRule. (I7f45a)
  • DpConstraints y las API que usaban esas restricciones dejaron de estar disponibles. (I90cdb, b/167389835)
  • Se cambiaron los nombres 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 quitaron las acciones de semántica de desplazamiento hacia adelante y hacia atrás. Se agregaron pasos a AccessibilityRangeInfo. (Ia47b0)
  • Se cambiaron de manera coherente los nombres de los usos de Gravity a Align o Alignment en las API de diseño. (I2421a, b/164077038)
  • Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
  • Se trasladaron 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.material:material:1.0.0-alpha02, androidx.compose.material:material-icons-core:1.0.0-alpha02 y androidx.compose.material:material-icons-extended:1.0.0-alpha02. La versión 1.0.0-alpha02 contiene estas confirmaciones.

Cambios en la API

  • Se agregó un componente experimental de BackdropSafold. (Iad908)

Correcciones de errores

  • Se reemplazó Matrix4 con Matrix. Se quitaron todas las otras partes del paquete de vectormath. (Ibd665, b/160140398)

Versión 1.0.0-alpha01

26 de agosto de 2020

Lanzamiento de androidx.compose.material:material:1.0.0-alpha01, androidx.compose.material:material-icons-core:1.0.0-alpha01 y androidx.compose.material:material-icons-extended:1.0.0-alpha01. La versión 1.0.0-alpha01 contiene estas confirmaciones.

Problema conocido

= El primer carácter de un TextField de Material no se puede quitar mediante la tecla de retroceso. (b/165956313)

Versión 0.1.0-dev

Versión 0.1.0-dev17

19 de agosto de 2020

Lanzamiento de androidx.compose.material:material:0.1.0-dev17, androidx.compose.material:material-icons-core:0.1.0-dev17 y androidx.compose.material:material-icons-extended:0.1.0-dev17. La versión 0.1.0-dev17 contiene estas confirmaciones.

Cambios en la API

  • Se quitaron RadioGroup y RadioGroupItems, que anteriormente habían quedado obsoletos. En su lugar, usa Row y RadioBotton. (I381b7, b/163806637)
  • 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 cambiaron los nombres de algunas propiedades en SwipeableState: swipeTarget -> targetValue, swipeProgress -> progress, swipeDirection -> direction. Se agregó una función rememberSwipeableState para crear SwipeableStates. (I2fc9c, b/163129614, b/163132293)
  • Se agregó compatibilidad de la barra de notificaciones con el posicionamiento y las colas adecuadas. Accede mediante la función de suspensión SnackbarHostState.showSnackbar. Además:
    • Se agregaron componentes SnackbarHost. Esto aloja las barras de notificaciones en función del estado y se encarga de la transición entre esas barras.
    • Se agregó SnackbarHostState a fin de permitir el control de las barras de notificaciones y sus hosts, así como para desacoplarlo de ScaffoldState. También puedes acceder a ese estado mediante scaffoldState.snackbarHostState.
    • Se agregó la sobrecarga de la barra de notificaciones para admitir una interfaz común entre snackbarHostState y las propias barras. (I79aaa)
  • Se agregó el parámetro habilitado a IconButton y se reordenaron los parámetros de IconToggleButton. (I0a941, b/161809385, b/161807956)
  • Se quitó la versión ListItem con la API basada en strings. En su lugar, usa la versión de ranuras. (Ib8f57, b/161804681)
  • Se quitó el componente obsoleto FilledTextField. En su lugar, usa TextField para obtener la implementación de Material Design del campo de texto Filled. (I5e889)
  • AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)
  • Se agregaron parámetros en Modifier.swipeable para cambiar la resistencia cuando el usuario deslice el dedo más allá del límite. Se quitaron los parámetros [min/max]Value. (I93d98)
  • 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)
  • Se agregó el parámetro opcional velocityThreshold a Modifier.swipeable. (I698ba)
  • bottomBarSize, fabSize y otros parámetros ya no están disponibles en ScaffoldState. En su lugar, usa Modifier.onPosition en el componente del cual te gustaría conocer el tamaño. Se agregaron los parámetros contentColor y Modifier a Scaffold. (Ic6f7b, b/161811485, b/157174382)
  • Se cambió el nombre y el orden de algunos parámetros en Tab por razones de coherencia con otras API. (Ia2d12, b/161807532)
  • Se dividió TabRow en TabRow y ScrollableTabRow, y se quitó isScrollable de TabRow. También se expuso edgePadding en ScrollableTabRow, que permite controlar el espacio libre antes y después de las pestañas. (I583e8, b/161809544)
  • Se quitó el objeto TabRow y se lo reemplazó por TabConstants. Se movió TabRow.TabPosition al nivel superior (TabPosition) y se cambió el nombre de indicatorContainer a indicator. Consulta los ejemplos y la documentación a fin de obtener información detallada para usar la API actualizada y sobre cuáles son los valores predeterminados. (I54d45, b/161809544)
  • Se ajustó el parámetro de límites de Modifier.swipeable. Ahora toma un par de estados (de tipo T) y muestra el límite entre ellos en forma de un ThresholdConfig. Se agregó un parámetro dismissThresholds a SwipeToDismiss, que es una lambda (DismissDirection) -> ThresholdConfig. (Ie1080)
  • El control deslizante tiene más colores para lograr una personalización detallada. (I73e64, b/161810475)
  • Se cambió el nombre del parámetro de color de Card por backgroundColor. (I01fc1, b/161809546)
  • La barra de notificaciones ahora tiene colores personalizables de fondo y contenido. (I238f2, b/161804381)
  • Se agregaron los parámetros de personalización modifier, backgroundColor, contentColor y scrimColor a Drawers. (I23655, b/161804378)
  • 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. Con esto, se reduce la superficie general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrón by mutableStateOf() con la delegación de propiedades de clase. (Ia5727)
  • Se cambió el nombre del parámetro padding de Button por contentPadding. (Id252e, b/161809394)
  • Se agregó el componente experimental de material SwipeToDismiss. (I129e5)

Correcciones de errores

  • Se quitaron onChildPositioned y OnChildPositionedModifier. En su lugar, los desarrolladores deberán usar onPositioned y OnPositionedModifier en el diseño secundario. (I4522e, b/162109766)
  • 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)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • Se cambió el nombre de PlacementScope.placeAbsolute() a PlacementScope.place(), y el del PlacementScope.place() anterior a PlacementScope.placeRelative(). Como resultado, el método PlacementScope.place() ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usa PlacementScope.placeRelative() en su lugar. (I873ac, b/162916675)
  • PxBounds dejó de estar disponible y se reemplazó por Rect. Se actualizaron todos los usos de PxBounds con rect y se agregaron la baja y reemplazo adecuados, con anotaciones para ayudar con la migración. (I37038, b/162627058)
  • Se cambió el nombre de RRect a RoundRect para que se adapte mejor a los patrones de nombres de Compose. Se crearon constructores de funciones similares a RRect, y los de RRect quedaron obsoletos. (I5d325)

Versión 0.1.0-dev16

5 de agosto de 2020

Lanzamiento de androidx.compose.material:material:0.1.0-dev16, androidx.compose.material:material-icons-core:0.1.0-dev16 y androidx.compose.material:material-icons-extended:0.1.0-dev16. La versión 0.1.0-dev16 contiene estas confirmaciones.

Cambios en la API

  • Colors ahora es una clase final en vez de una interfaz. En lugar de extender y proporcionar una implementación personalizada, debes crear un ambiente nuevo para tu objeto de tema personalizado y acceder a él mediante el nuevo ambiente en tus componentes, de manera similar a cómo funciona MaterialTheme internamente. (Ibae84)
  • Se cambió el nombre de ColorPalette por Colors a fin de mapear mejor el sistema de colores de Material y quitar la confusión que existía en torno a considerar ColorPalette como un objeto de temas "genérico", en lugar de considerarlo una implementación específica del sistema de colores de Material. Además, se cambió el nombre de lightColorPalette y darkColorPalette por lightColors y darkColors, respectivamente. (I9e976, b/161812111)
  • Se cambió el nombre de los parámetros de BottomNavigationItem de text a label, de onSelected a onSelect, de activeColor a selectedContentColor y de inactiveColor a unselectedContentColor. Además, se actualizó el orden de los parámetros de conformidad con los lineamientos. (Icb605, b/161809324)
  • Se rediseñó por completo Modifier.stateDraggable y se cambió su nombre por Modifier.swipeable. Se agregó una nueva clase SwipeableState, y se refactorizaron DrawerState y BottomDrawerState para heredar de ella. [Modal/Bottom]DrawerLayout ya no toma un parámetro onStateChange. (I72332, b/148023068)
  • Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
  • Se agregó la anotación ExperimentalMaterialApi. Se marcó RippleTheme como Experimental. (Ic5fa0, b161784800)
  • Se cambió el nombre de FilledTextField de Material por TextField, y el del TextField principal se cambió por BaseTextField a fin de que la API deseada resulte más fácil de encontrar y usar. (Ia6242, b/155482676)

Correcciones de errores

  • OnChildPositioned dejó de estar disponible. En su lugar, usa el elemento secundario OnPositioned. (I87f95, b/162109766)
  • 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 movió diálogo a la IU. (I47fa6)
  • 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)
  • Se cambió el nombre de Modifier.determinateProgress a Modifier.progressSemantics. (I9c0b4)
  • Se actualizó material-icons-extended con los últimos íconos agregados a Material.io/icons. (I4b1d3)
  • Se requiere que el tipo T se especifique de forma explícita para transitionDefinition. (I1aded)
  • Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte, a la vez que prohíbe la escritura de Modifier.padding().background() + anotherModifier, lo que interrumpe la cadena y es más difícil de leer. (Iedd58, b/161529964)
  • Se cambió el nombre de AndroidComposeTestRule a createAndroidComposeRule. (I70aaf)
  • Se agregaron los SemanticsMatcher isFocused() y isNotFocused(). (I0b760)
  • Se quitó BaseGestureScope.globalBounds, que no debería usarse a partir de pruebas. En su lugar, usa las coordenadas locales del nodo con el que interactúas. (Ie9b08)
  • Se corrigió la posición de la ventana emergente en las pantallas cortadas. (Idd7dd)
  • Se cambió el nombre de Modifier.drawBackground a Modifier.background. (I13677)

Versión 0.1.0-dev15

22 de julio de 2020

Lanzamiento de androidx.compose.material:material:0.1.0-dev15, androidx.compose.material:material-icons-core:0.1.0-dev15 y androidx.compose.material:material-icons-extended:0.1.0-dev15. La versión 0.1.0-dev15 contiene estas confirmaciones.

Actualización de dependencias

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

Cambios en la API

  • La anotación del objeto @Model quedó obsoleta. Usa state y mutableStateOf como alternativas. Se decidió darle de baja después de un debate minucioso.

    Justificación

    Los motivos, entre otros, son los siguientes:

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

    Notas de migración

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

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

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

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

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

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

    Alternativa 2: usa mutableStateOf y los delegados de propiedad.

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

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

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

  • Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto a onFocusChanged. (Ida4a1)

  • Se agregó el parámetro de límites en el objeto stateDraggable para especificar límites entre los anclajes. Se usó para establecer un límite de 56 dp en el panel lateral inferior. Además, el objeto BottomDrawerLayout ahora usa una enumeración BottomDrawerState separada. (I533fa)

  • 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 quitó la anulación obsoleta del objeto FilledTextField que admite composición. (I7f8f8)

  • Se cambió el nombre del objeto Button (que contiene la configuraciones predeterminadas que usa la función Button) por ButtonConstants. (I7c5f7, b/159687878)

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

  • Los objetos RadioGroup y RadioGroupItem dejaron de estar disponibles. Usa el elemento Box con los objetos Modifier.selectable, Row y Column para crear un conjunto adecuado de opciones radioButton por tu diseño. (I7f5cf, b/149528535)

  • Se agregó Textfield con contorno de Material. (I1a518).

  • androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue quedaron obsoletos. TextField, FilledTextField y CoreTextField que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)

  • El objeto TabRow.TabPosition no muestra la posición en el elemento Dp, ni en IntPx. (I34a07, b/158577776)

  • Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)

  • A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)

  • El objeto Modifier.ripple dejar de estar disponible. 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. (I101cd, b/155375067)

  • Se modificó la API de Scaffold: se renombraron algunos parámetros y se agregaron otros para una mejor personalización. Se agregó un método get a los tamaños de consulta de Fab, TopBar y BottomBar. (I0e7ce)

  • Se agregó el componente DropdownMenu en ui-material, una implementación del menú de Material Design. (I9bb3d)

  • Se permite mostrar/ocultar manualmente el teclado en pantalla con SoftwareKeyboardController. (Ifb9d6, b/155427736)

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

  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope a DrawScope. Se actualizó DrawScope a fin de implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente. (I1798e)

  • Cambia el nombre del objeto Emphasis.emphasize() por Emphasis.applyEmphasis(). (Iceebe)

  • Los botones inhabilitados ahora siguen visualmente la especificación de Material Design. (I47dcb, b/155076924)

  • El objeto RellenedTextField obtiene acción de IME, transformación visual y compatibilidad con el tipo de teclado. (I1f9cf, b/155075201)

  • Agrega el parámetro strokeWidth a CircularProgressIndicator para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de un LinearProgressIndicator, puedes usar Modifier.preferredHeight() u otro modificador de tamaño. (Icea16, b/154919081)

  • Agrega el parámetro strokeWidth a CircularProgressIndicator para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de un LinearProgressIndicator, puedes usar Modifier.preferredHeight() u otro modificador de tamaño. (Icea16, b/154919081)

  • Se agregó la API para los íconos iniciales y finales en el objeto FilledTextField y el manejo del estado de error. (Ic12e0)

  • Se cambió el color predeterminado del BAF y el BAF extendido al objeto MaterialTheme.colors.secondary. (I3b9b9, b/154118816)

  • Se reemplazaron todos los usos anulables de Color en la API con valores no anulables y se usa Color.Unset en lugar de valor nulo. (Iabaa7)

  • Se 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 control deslizante ahora no tiene estado. Los usuarios deberán pasar y actualizar el estado por su cuenta, como con cualquier otro control. (Ia00aa)

  • Se quitó el objeto StaticDrawer. Si lo necesitas, usa el elemento Box con el ancho especificado para el material. (I244a7)

  • Se agregó la implementación de Material Design del campo de texto relleno. (Ic75cd)

  • Se agregó el parámetro de modificador a ListItem y se reordenaron los parámetros para ubicar el cuerpo de expresiones lambda al final. (I66e21)

  • Se agregó el parámetro de constructor defaultFontFamily a Typography, lo que permite especificar la familia de fuentes predeterminada que se usará para cualquier elemento TextStyles proporcionado que no tenga una familia establecida. (I89d07)

  • Se quitaron temporalmente tablas de datos de materiales de la superficie de la API. (Iaea61)

  • Se cambió el nombre de los parámetros en Divider que admite composición. (Ic4373)

  • elementos secundarios (Ia6d19)

  • Quita el objeto MaterialTheme.emphasisLevels; en su lugar, usa el elemento EmphasisAmbient.current para recuperar los niveles de énfasis. (IB5e40)

  • 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 modificaron las API de MaterialTheme, como MaterialTheme.colors() y MaterialTheme.typography(), de modo que sean propiedades en lugar de funciones. Se quitaron los paréntesis de las llamadas existentes y no se espera ningún cambio de comportamiento. (I3565a)

  • Se refactorizaron las API de FloatingActionButton para aceptar lambdas que admitan composición en lugar de primitivas. Consulta muestras actualizadas para obtener información de uso. (I00622)

  • Se agregó el parámetro enabled a Checkbox, Switch y Toggleable. (I41c16)

  • Ripple ahora es un modificador. Mientras Clickable sigue sin convertirse, el uso recomendado es Clickable(onClick = { ... }, modifier = ripple()). (Ie5200, b/151331852, b/150060763)

  • Se trasladaron los objetos Surface y Card de androidx.ui.material.Surface a androidx.ui.material. (I88a6d, b/150863888)

  • 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. Método de extensión _Body:Created en android.graphics.Bitmap, Bitmap.asImageAsset(), a fin de crear una instancia útil del objeto ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el framework de Compose. (Id5bbd)

  • Se quitó la API de la barra de notificaciones con parámetros de string a fin de usar la sobrecarga que acepta funciones lambda que admiten composición. Consulta las muestras actualizadas para obtener información sobre el uso. (I55f80)

  • Se refactorizó la API de pestañas para aceptar lambdas de text y icon. (Ia057e)

  • Se agregó el componente BottomNavigation; consulta los documentos y las muestras para obtener información sobre el uso. (I731a0)

  • 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 reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta muestras actualizadas para obtener información de uso. (If63ab, b/146478620, b/146482131)

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

  • El objeto 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 realizaron cambios rotundos en la API de ambients. Consulta el registro y la documentación de Ambient<T> para obtener más detalles. (I4c7ee, b/143769776)

  • Se agregó el componente de material de Scaffold. Se implementó el objeto Scaffold. (I7731b)

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

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)
  • 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)
  • Se cambió el nombre de runOnIdleCompose a runOnIdle. (I83607)
  • Las propiedades semánticas de valor único ahora usan un estilo de llamada. Por ejemplo, "semantics { hidden = true }" ahora se escribe como: "semantics { hidden() }". (Ic1afd, b/145951226, b/145955412)
  • Se 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 modificó la API de Transition para mostrar un elemento TransitionState en lugar de pasar el objeto TransitionState a los elementos secundarios. Esto hace que la API sea más coherente con las API de animate(). (I24e38)
  • Se agregó una clase de unidad IntBounds, que representa los límites de píxeles enteros del diseño. Se actualizó la API de PopupPositionProvider para usarla. (I0d8d0, b/159596546)
  • Se agregó una nueva marca opcional useUnmergedTree a fin de probar los buscadores. (I2ce48)
  • Se quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
  • Se quitó la clase intercalada Shader que une la clase de espera NativeShader. Se cambió el nombre del objeto NativeShade a Shader. La clase intercalada Shader unida no agregó ningún valor a la superficie de la API y era una clase intercalada, así que usa la clase NativeShader directamente. (I25e4d)
  • Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)
  • El elemento Material DropdownMenu ahora es desplazable. (Ide699)
  • Del bloque de medición de la función Layout(), se quitó el parámetro de dirección del diseño. Sin embargo, la dirección de diseño está disponible dentro de la devolución de llamada a través del objeto de alcance de medición. (Ic7d9d)
  • Usa el objeto AnimationSpec en lugar del elemento AnimationBuilder en las API de nivel superior a fin de aclarar el concepto de especificación de animación estática. Mejora 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)
  • El objeto Switch ahora aparece en un estado inhabilitado cuando se configura el elemento enabled como falso. (If4624, b/155941869, b/159331694)
  • Se cambió el nombre del objeto Modifier.tag a Modifier.layoutId para evitar confusiones con el elemento Modifier.testTag. (I995f0)
  • El objeto Placeable#get(AlignmentLine) ya no muestra las posiciones Int de la línea de alineación como nulas. Si falta la línea de alineación consultada, se mostrará el objeto AlignmentLine.Unspecified. (I896c5, b/158134875)
  • Se 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)

  • A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)

  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)

  • El componente Toggleable dejó de estar disponible. En su lugar, usa Modifier.toggleable. (I35220, b/157642842)

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

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

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

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

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

  • Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc)

  • Se modificó la API de los modificadores DrawLayer: se cambió el nombre del objeto outlineShape a shape y tiene el valor predeterminado de RectangleShape, ahora sin valores anulables. Se cambió el nombre del elemento clipToOutline a clip; se quitó el objeto clipToBounds, ya que es igual que clip == true con RectangleShape. (I7ef11, b/155075735)

  • Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los consumidores que aún necesitan acceso a un lienzo, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el lienzo subyacente. (I80afd)

  • El elemento que admite composición AlineableLineOffset dejó de estar disponible. En su lugar, usa el modificador relativePaddingFrom(). Se quitó el elemento CenterAlignmentLine que admite composición. (I60107)

  • Se 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 agregó el modificador de diseño defaultMinSizeConstraints, que establece restricciones de tamaño en el diseño unido solo cuando las restricciones entrantes correspondientes no están especificadas (0 como restricción mínima e infinito como máximas). (I311ea, b/150460257)

  • Se quitó el objeto FocusManagerAmbient. Usa el elemento FocusModifier.requestFocus para obtener enfoque. (Ic4826)

  • 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 agregó personalización del color del cursor a TextField. (I6e33f)

  • El 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 cambió el nombre del objeto LayoutModifier2 a LayoutModifier. (Id29f3)

  • Se quitó la interfaz de LayoutModifier obsoleta. (I2a9d6)

  • Se reemplazó el parámetro CoreTextField/TextField focusIdentifier con el objeto FocusNode a fin de integrarlo con el subsistema de enfoque. (I7ea48)

  • Las funciones de medición intrínseca en los objetos Layout y LayoutModifier2 ahora tienen un receptor IntrinsicMeasureScope que proporciona una API de consulta intrínseca con dirección de diseño propagada de forma implícita. (Id9945)

  • Se agregó el elemento Modifier.zIndex() para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño de nivel superior. Se cambió el nombre de la propiedad de elevación de DrawLayerModifier por shadowElevation, y esta propiedad ya no controla el orden del dibujo. Se cambió el orden de los parámetros de DrawShadow: el primer parámetro ahora es elevation y el segundo es shape, con una configuración RectangleShape predeterminada. (I20150, b/152417501)

  • Se trasladó el objeto RectangleShape de androidx.ui.foundación.shape.* al elemento androidx.ui.graphics.* (Ia74d5, b/154507984)

  • 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 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 creó la API de PixelMap para admitir consultas de información de píxeles desde un elemento ImageAsset. (I69ad6)

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

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

  • Mejora la API de DrawModifier:

    • Se creó el alcance del receptor para el objeto draw() ContentDrawScope.
    • Se quitaron todos los parámetros de draw().
    • El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
    • ContentDrawScope tiene el método drawContent(). (Ibaced, b/152919067)
  • Los objetos runOnIdleCompose y runOnUiThread ahora son funciones globales en lugar de ser métodos en ComposeTestRule. (Icbe8f)

  • Los operadores delegados de la propiedad [Mutable]State se movieron a extensiones a fin de admitir optimizaciones delegadas de propiedad de Kotlin 1.4. Los emisores deben agregar importaciones para continuar usando by state { ... } o by mutableStateOf(...). (I5312c)

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

  • El objeto ColoredRect dejó de estar disponible. En su lugar, usa el elemento Box(Modifier.preferredSize(width, height).drawBackground(color)). (I499fa, b/152753731)

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

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

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

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

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

  • El elemento Center que admite composición quedó obsoleto. Debería reemplazarse con el modificador LayoutSize.Fill + LayoutAlign.Center o con uno de los elementos Box o Stack que admiten composición, con los modificadores adecuados aplicados. (Idf5e0)

  • 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) Created Vector que admite composición y que se comporta como el elemento Image que admite composición, pero con un parámetro VectorAsset en lugar de un objeto ImageAsset. (I9af9a, b/149030271)

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

  • Se quitó RepaintBoundary y se reemplazó por DrawLayerModifier. (I00aa4)

  • 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 Opacity que admite composición por el modificador drawOpacity. (I5fb62)

  • Reemplaza la función Clips que admite composición con el modificador drawCli (). 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 agregó el objeto LayerModifier, un modificador que permite agregar un elemento RenderNode a una capa. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará al objeto RepaintBoundary. (I7100d, b/150774014)

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

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

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

  • WithConstraints tiene el parámetro LayoutDirection (I6d6f7)

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

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

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

  • Se quitó el elemento DrawShape que admite composición. En su lugar, usa el modificador DrawBackground. (I7ceb2)

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

  • 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 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 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 combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)

  • Se modificó el objeto LayoutCoordinates para que el elemento providedAlignmentLines sea un conjunto en lugar de un mapa y para que el objeto LayoutCoordinates implemente el operador get() a fin de recuperar un valor. Esto permite que los modificadores cambien con más facilidad uno o más valores del conjunto, sin que se cree una colección nueva para cada modificador. (I0245a)

  • Los desplazadores ahora muestran el comportamiento nativo de Android. (I922af, b/147493715)

  • Mejoras en la superficie de la API de Constraints (I0fd15)