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

Base de Compose

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

Estructura

Compose es una combinación de 7 ID de grupo de Maven en androidx. Cada grupo contiene un subconjunto de funcionalidades objetivo, cada uno con su propio conjunto de notas de la versión.

En esta tabla, se explican los grupos y vínculos correspondiente a cada conjunto de notas de la versión.

GrupoDescripción
compose.animationCrea animaciones en sus aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario.
compose.compilerTransforma las funciones que admite @Composable y habilita las optimizaciones con un complemento de compilador de Kotlin.
compose.foundationEscribe aplicaciones de Jetpack Compose con componentes fundamentales listos para usar y extiende la base para compilar tus propias piezas de sistema de diseño.
compose.materialCompila las IU de Jetpack Compose con componentes de Material Design listos para usar. Este es el punto de entrada de nivel superior de Compose, diseñado para proporcionar componentes que coincidan con los descritos en www.material.io.
compose.runtimeSon los componentes básicos del modelo de programación de Compose y la administración de estados, y el entorno de ejecución principal para el cual se orienta el complemento de compilación de Compose.
compose.uiSon los componentes fundamentales de la IU de Compose necesarios para interactuar con el dispositivo, incluidos el diseño, el dibujo y la entrada.
uiFunciona con la biblioteca de Jetpack Compose.

Cómo declarar dependencias

Para agregar una dependencia en Compose, debes agregar el repositorio Maven de Google a tu proyecto. Consulta el repositorio Maven de Google para obtener más información.

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

dependencies {
    implementation "androidx.compose.foundation:foundation:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

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

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

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

Comentarios

Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.

Crea un error nuevo

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

Versión 1.0.0

Versión 1.0.0-alpha07

11 de noviembre de 2020

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

Cambios en la API

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

Correcciones de errores

  • Se introdujo la clase intercalada ScaleFactor para representar factores de escala de los ejes horizontales y verticales independientes, a fin de admitir casos de uso de escalamiento no uniforme.
    • Se agregó el método computeScaleFactor a ContentScale.
    • Se agregó ContentScale.FillBounds para realizar escalamientos no uniformes a fin de estirar los límites de src y completar el destino.
    • Se agregaron métodos de operador para calcular los parámetros de ScaleFactor con los parámetros Size.
    • (Ic96a6, b/172291582)
  • Se movió captureToBitmap a captureToImage. (I86385)
  • Se marcó CoreText como @InternalTextApi. En su lugar, usa BasicText. (I6aaeb)
  • Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
  • Se movieron ImeAction y KeyboardType a KeyboardOptions. (I910ce)
  • Se marcó CoreTextField como @InternalTextApi. En su lugar, usa BasicTextField. (Ie2469)
  • Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
  • Se introdujo el módulo ui-test-junit4. (Ib91f8)
  • Se actualizó la API de íconos para que acepte Color.Unspecified como un tono posible que dibujará el elemento o Painter proporcionados sin ColorFilter. Anteriormente, cuando se intentaba ignorar el ajuste de tono con Color.Unspecified, se aplicaba un color transparente, lo que provocaba que no se renderizara nada. (I049e2, b/171624632)
  • Se quitó MeasureResult de MeasureScope. (Ibf96d, b/171184002)
  • Varios símbolos relacionados con el diseño se movieron de androidx.compose.ui a androidx.compose.layout.ui. (I0fa98, b/170475424)
  • Se movió androidx.ui.test a androidx.compose.ui.test. (I9ffdb)
  • Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
  • Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
  • Se agregaron pruebas para las posiciones de SelectionHandle en SelectionContainer. (Ie93db)
  • Se agregó la opción IME de corrección automática del teclado. (I57b8d)

Versión 1.0.0-alpha06

28 de octubre de 2020

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

Cambios en la API

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

Correcciones de errores

  • VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter a fin de indicar mejor que la API de composición aprovecha internamente "remember" para conservar datos 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 agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
  • Se agregó la opción de IME KeyboardCapitalization. (I8ac38)
  • Se corrigió la posición del controlador Rtl. (I6e1e0)
  • Cambio rotundo: Se quitó el valor que se mostraba de PointerInputFilter.onPointerEvent(…), dado que el único valor que se puede modificar en los eventos del puntero es el de los datos de consumo. En lugar de mostrar datos de PointerInputFilter.onPointerEvent(…), ahora puedes mutar los datos de consumo de los objetos PointerEvents pasados. (I6acd0)
  • Se agregó la opción SelectAll al menú de selección. (Ief02b)

Versión 1.0.0-alpha05

14 de octubre de 2020

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

Cambios en la API

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

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

Correcciones de errores

  • Como parte de la estandarización de los valores sentinela para las clases intercaladas, se cambia el nombre a Color.Unset a Color.Unspecified para mantener la coherencia con otras clases intercaladas. (I97611, b/169797763)
  • Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
  • Se 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 actualizaron los parámetros de Size.Unspecified a Float.NaN en lugar de Float.POSITIVE_INFINITY. Se actualizaron las implementaciones de Painter para verificar con Size.Unspecified, así como Sizes no finitos. (I95a7e)
  • Se agregó el módulo Paging Compose y la integración de paginación. (Ib85da)
  • Se modificó LazyListScope para recibir valores nulos. (I1765b)
  • Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)
  • Se agregaron muestras para LazyColumn/Row. (Idc16d)
  • Se corrigieron los elementos y métodos itemsIndexed para permitir emptyList. (I06647)
  • Se agregó una DSL para especificar la información de inspección. (Ic9a22)
  • Se movió LongPress a Text. (Iff2bc)
  • Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)
  • Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
  • Se quitó PointerInputFilter.onPointerInput(...). PointerInputFilter.onPointerEvent(...) debe usarse en su lugar. (I6f04a)

Versión 1.0.0-alpha04

1 de octubre de 2020

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

Cambios en la API

  • Se cambió el nombre de Stack a Box. foundation.Box dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
  • Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
  • Agrega una nueva clase LazyListState. Esto permite la observación y el control de la posición de desplazamiento de los componentes de LazyRow y LazyColumn. Es posible crear las instancias con rememberLazyListState() y pasarlas al parámetro de estado del componente. Actualmente, se pueden observar en esta versión inicial el primer elemento visible y las compensaciones. (Ic7cb7, b/159307669)
  • La posición de la lista Lazy y la compensación de desplazamiento ahora se guardan y se restablecen en la creación de Activity. (Ie045f, b/116685058)
  • Se agregó la acción de semántica de clics largos. (I6281b, b/115646846)
  • Se agregó la utilidad MutatorMutex para mantener un solo mutador del estado compartido en el tiempo y cancelar mutadores en conflicto por prioridad. (I3f975)
  • Se agregaron las anotaciones rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled y textInputServiceFactory con @VisibleForTesting; se las convirtió en internas para la API, y se ocultó su KDoc. (I554eb, b/168308412)
  • Se quitó el parámetro inlineContent de Text con entrada de string. No se utilizará porque inlineContent debe funcionar con AnnotatedString. (Ief403)
  • Se quitaron las API de organización personalizada que eran obsoletas. (Ic576d, b/168297922, b/168297923)
  • Se agregó el parámetro unbounded a los modificadores wrapContentSize, lo que permite medir el elemento de diseño con limitaciones máximas infinitas. (I77951, b/158559319)
  • Evitamos las importaciones estáticas de contenido de alcances de diseño (p. ej., alignWithSiblings en RowScope). En su lugar, se debe usar la alternativa a un alcance explícito: with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) }. (I216be, b/166760797)

Correcciones de errores

  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de transformación de escalamiento y rotación a fin de consumir un solo parámetro de compensación para representar la coordenada dinámica, en lugar de parámetros flotantes separados para las coordenadas x/y en DrawScope y DrawTransform.
    • Se quitaron los métodos Rect.expandToInclude y Rect.join.
    • Se actualizó la documentación de Radius para indicar el óvalo además del elíptico.
    • Se agregó documentación para indicar que el constructor público para la clase de Radius intercalado no se debe llamar directamente, sino que se debe crear una instancia de los objetos Radius a través de sus constructores de funciones.
    • Se quitaron las API de RoundRect para consultar topRight, bottomRight, bottomCenter, etc.
    • Rect.shift dejó de estar disponible y se reemplazó por Rect.translate.
    • Se quitaron las API de RoundRect.grow y Rect.shrink.
    • Se cambió el nombre de RoundRect.outerRect a Rect.boundingRect.
    • Se quitaron los métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect y Rect.isStadium.
    • Se cambió el nombre de RoundRect.longestSide a RoundRect.maxDimension.
    • Se cambió el nombre de RoundRect.shortestSide a RoundRect.minDimension.
    • Se modificó RoundRect.center para que sea una propiedad en lugar de una función.
    • Se actualizó el constructor RoundRect para consumir propiedades de Radius en lugar de parámetros individuales para valores de radio x/y.
    • Se quitaron las API de tamaño que asumían que se trataba de un rectángulo con el origen en 0,0.
    • Se agregó una API destructiva a Radius.
    • Se migraron varias funciones de extensión de RoundRect para que sean propiedades.
    • (I8f5c7, b/168762961)
  • Optimizaciones de rendimiento para el desplazamiento LazyColumnFor/LazyRowFor mediante la anulación de recomposiciones innecesarias durante cada desplazamiento. (I64f65, b/168293643, b/167972292, b/165028371)
  • Se corrigió una falla en LazyColumnFor/LazyRowFor después del desplazamiento, se cambiaron elementos y se implementó el desplazamiento automático hacia arriba cuando el elemento visible anteriormente se haya quitado, de manera que ya no se verán espacios vacíos al final. (I220ab, b/116480164, b/167855468)
  • Ya no se permite el anidado desplazable en los mismos contenedores de dirección, como ScrollableContainer y LazyColumnFor. Esa función nunca era compatible y, además, provocaba un error en el desplazamiento y el comportamiento diferido al componer los elementos de LazyColumnFor. (I6e101)
  • Se actualizaron varias API de gráficos.
    • Se actualizaron las API de DrawScope con métodos de transformación con alcance para indicar que la transformación solo se aplica dentro de la devolución de llamada y se quita una vez invocada la devolución de llamada.
    • Se actualizó la documentación de clipPath para hacer referencia a Path en lugar del rectángulo redondeado.
    • Se corrigió el espaciado en la documentación del parámetro en clipPath.
    • Se cambió el nombre de DrawScope.drawCanvas a drawIntoCanvas y se quitó el parámetro de tamaño.
    • Se cambió el nombre de los parámetros dx/dy en el método de inserción a horizontal y vertical.
    • Se agregó una sobrecarga de inserción que proporciona el mismo valor de inserción a los 4 límites.
    • Se quitó la documentación del método de inserción que indicaba que la inserción se aplicaba a los 4 lados.
    • Se actualizó la documentación de la clase Rect.
    • Se actualizaron los comentarios en los parámetros Rect para que coincidan con el estilo de KDoc.
    • Se quitaron Rect.join and Rect.expandToInclude.
    • Se creó una sobrecarga para Rect.translate (desplazamiento) y Rect.shift dejó de estar disponible.
    • (If086a, b/167737376)
  • Se agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)
  • Se creó el interlineado de TextRange para evitar la creación de objetos. (Id034b)
  • Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)

Versión 1.0.0-alpha03

16 de septiembre de 2020

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

Cambios en la API

  • Se cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)
  • Se cambiaron de manera coherente los nombres de los usos de gravity a align o alignment en las API de diseño. (I2421a, b/164077038)
  • Se agregó un parámetro de alineación a Stack que permite especificar la alineación predeterminada para todos los elementos secundarios de Stack. (Ie80ca, b/164085265)

Correcciones de errores

  • DpConstraints y las API que usaban esas restricciones dejaron de estar disponibles. (I90cdb, b/167389835)
  • Se cambió el nombre de los parámetros minWidth y maxWidth de widthIn a min y max. Del mismo modo que para preferredWidthIn, heightIn y preferredHeightIn. (I0e5e1, b/167389544)
  • Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
  • Se corrigieron los cálculos de tamaño y posición en GestureScope que ocasionaban la generación de gestos de deslizamiento no válidos, entre otros. (Iaf358, b/166589947)
  • Se trasladó createAndroidComposeRule y AndroidInputDispatcher desde androidx.ui.test.android a androidx.ui.test. (Idef08, b/164060572)

Versión 1.0.0-alpha02

2 de septiembre de 2020

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

Correcciones de errores

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

    Por ejemplo:

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

    (I0a85b, b/161247083)

Versión 1.0.0-alpha01

26 de agosto de 2020

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

Versión 0.1.0-dev

Versión 0.1.0-dev17

19 de agosto de 2020

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

Cambios en la API

  • Se agregó la disposición spacedBy para filas y columnas a fin de habilitar el posicionamiento de los elementos secundarios de diseño con un espaciado fijo. También se agregó la disposición alineada, de forma que puedan posicionarse esos elementos unos junto a otros y alineados en la fila y columna según la Alineación establecida. Los métodos anteriores Arrangement.Vertical#arrange y Arrangement.Horizontal#arrange dejaron de estar disponibles, y ya no se admitirán las disposiciones personalizadas en el futuro. (I6733d, b/161985975)
  • Offset se convirtió en una clase intercalada. (Iaec70)
  • Se quitaron las devoluciones de llamada onFocusChanged de TextField. En su lugar, usa Modifier.focusObserver. (I51089, b/161297615)
  • Modifier.drawBorder dejó de estar disponible. En su lugar, usa Modifier.border. Se reemplazó la clase de datos Border por BorderStroke. (I4257d, b/158160576)
  • Se quitaron VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Usa Modifier.background. (I73b0d, b/163019183)
  • Se quitaron los modificadores marcados como obsoletos fillMax* de LazyItemScope, ya que dificultan agregar correctamente esos modificadores para los elementos que no sean secundarios directos de LazyColumnFor. (Ifa78d)
  • Se agregó la implementación de LazyColumn/LazyRow como DSL. (I93cc6)
  • Constraints ahora es una clase intercalada. (I88736)
  • Se agregó la capacidad de ajustar el tamaño de un diseño a una fracción del espacio disponible usando los modificadores fillMaxWidth, fillMaxHeight y fillMaxSize. (I945bb, b/161562591)

Correcciones de errores

  • Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)
  • Se agregó la lambda mergePolicy a SemanticsPropertyKey. Se puede usar con el fin de definir una política personalizada para la combinación de semántica de mergeAllDescendants. La política predeterminada es usar el valor del elemento superior si ya está presente; de lo contrario, se utiliza el valor secundario. (Iaf6c4, b/161979921)
  • Se cambió el nombre de PlacementScope.placeAbsolute() por PlacementScope.place(), y el del PlacementScope.place() anterior por PlacementScope.placeRelative(). Como resultado, el método PlacementScope.place() ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usa PlacementScope.placeRelative() en su lugar. (I873ac, b/162916675)
  • Se quitó el componente obsoleto FilledTextField. En su lugar, usa TextField para obtener la implementación de Material Design del campo de texto Filled. (I5e889)
  • Se agregó el parámetro backgroundColor a LinearProgressIndicator y se quitó el padding interno de CircularProgressIndicator. Se agregó el nuevo ProgressIndicatorConstants.DefaultProgressAnimationSpec, que se puede usar como el AnimationSpec predeterminado cuando se anime el progreso entre valores. (If38b5, b/161809914, b/161804677)
  • El elemento state { ... } que admite composición dejó de estar disponible en favor de cualquier llamada explícita a remember { mutableStateOf(...) } por motivos de claridad. De esta forma, se reduce la plataforma general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrón by mutableStateOf() con la delegación de propiedades de clase. (Ia5727)
  • Se cambió el nombre de RRect a RoundRect para que se adapte mejor a los patrones de nombres de compose. Se crearon constructores de funciones similares a RRect y los de RRect quedaron obsoletos. (I5d325)
  • Se quitaron onChildPositioned y OnChildPositionedModifier. En su lugar, los desarrolladores deberán usar onPositioned y OnPositionedModifier en el diseño secundario. (I4522e, b/162109766)
  • IntSize ahora es una clase intercalada. (I2bf42)
  • Función LongPress para editar el área en blanco. (Ib1e5b)
  • FloatingToolbar se oculta después de presionar el texto. (If4525)
  • FloatingToolbar se oculta cuando se actualiza la selección. (I8444c)
  • Se anula la selección cuando se activa Desenfoque. (I781a2)

Versión 0.1.0-dev16

5 de agosto de 2020

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

Cambios en la API

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

Correcciones de errores

  • Se abordaron correcciones amplias de API. (I077bc)
    1. Se quitó la interfaz OffsetBase sin usar.
    2. Se alinearon las clases Offset y IntOffset a fin de tener una superficie de API coherente.
    3. Se cambió el nombre de IntOffset.Origin por IntOffset.Zero para que sea coherente con la API de Offset.
    4. Se quitó de la interfaz de Canvas el método nativeCanvas con el objeto de ayudar a los consumidores a crear sus propias instancias de Canvas.
    5. Se creó una clase stub EmptyCanvas para refactorizar DrawScope a fin de hacerlo un parámetro no nulo en lugar de usar lateinit y de garantizar la no nulabilidad del campo.
    6. Se cambió el nombre de las enumeraciones ClipOp para que lleven mayúsculas en la primera letra de cada palabra.
    7. Se cambió el nombre de las enumeraciones FilterQuality para que lleven mayúsculas en la primera letra de cada palabra.
    8. Se cambió el nombre de las enumeraciones StrokeJoin para que lleven mayúsculas en la primera letra de cada palabra.
    9. Se cambió el nombre de las enumeraciones PointMode para que lleven mayúsculas en la primera letra de cada palabra.
    10. Se cambió el nombre de las enumeraciones PaintingStyle para que lleven mayúsculas en la primera letra de cada palabra.
    11. Se cambió el nombre de las enumeraciones PathFillType para que lleven mayúsculas en la primera letra de cada palabra.
    12. Se cambió el nombre de las enumeraciones StrokeCap para que lleven mayúsculas en la primera letra de cada palabra.
    13. Se actualizó la implementación de DrawCache para que deje de usar parámetros lateinit.
    14. Se actualizó DrawScope a fin de que deje de usar la delegación lazy para los parámetros internos fillPaint y strokePaint.
    15. Se actualizó el objeto Image que admite composición a fin de evitar el uso de Box y lograr una sobrecarga menor.
    16. Se actualizó la clase Outline para que tenga anotaciones @Immutable.
    17. Se actualizó PathNode para que tenga anotaciones @Immutable en cada instrucción de la ruta de acceso.
    18. Se actualizó la subcomposición de Vector a fin de quitar verificaciones condicionales redundantes de igualdad dado que compose ya las administra.
    19. Los métodos de construcción complementarios de Rect dejaron de estar disponibles y se los reemplazó por constructores de funciones.
    20. Se actualizaron las clases Brush y los constructores de funciones con las API de @Immutable y @Stable.
    21. Se actualizaron las enumeraciones VertexMode para que lleven mayúsculas en la primera letra de cada palabra.
    22. Se actualizó el método selectPaint de DrawScope a fin de reemplazar condicionalmente los parámetros de trazo en la pintura si estos cambiaron.
    23. Se actualizó Size para agregar la API de desestructuración, se cambió el nombre de UnspecifiedSize por Unspecified y se quitaron métodos sin usar.
  • Se agregó MonotonicFrameAnimationClock, que te permite usar un MonotonicFrameClock como un AnimationClockObservable para cerrar la brecha entre los nuevos relojes basados en corrutinas y las API que aún usan los relojes antiguos basados en la devolución de llamada.

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

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

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

  • Se actualizaron las API correspondientes a la compatibilidad de orientación de derecha a izquierda. Se agregó LayoutDirectionAmbient, que puede usarse para leer y cambiar la dirección del diseño. Se quitaron Modifier.rtl y Modifier.ltr. (I080b3)

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

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

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

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

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

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

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

Versión 0.1.0-dev15

22 de julio de 2020

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

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

Actualización de dependencias

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

Cambios en la API

  • De manera similar al nuevo parámetro en ScrollableColumn/ScrollableRow, LazyColumnItems/LazyRowItems ahora tienen el parámetro contentPadding, que permite agregar relleno al contenido recortado, lo cual no es posible mediante un parámetro de modificación. También permite agregar espaciado antes del primer elemento o después del último solamente. (Ibc24e)
  • Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto por onFocusChanged. (Ida4a1)
  • VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y se reemplazó con ScrollState'. ( I400ce, b/157225838, b/149460415, b/15105299)
  • 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 por ScrollableController. (Iab63c, b/149460415)
  • Las propiedades semánticas de valor único ahora usan un estilo de llamada. Por ejemplo, "semantics { hidden = true }" ahora se escribe como: semantics { hidden() }. (Ic1afd, b/145951226, b/145955412)
  • Los tamaños de esquina que usan RoundedCornerShape y CutCornerShape ahora pueden superar el 50%. (Id2340, b/160400213)
  • Se cambió de Inside a Fit la configuración predeterminada del parámetro ContentScale del elemento Image que admite composición. Esto se hizo a fin de que el comportamiento escale verticalmente el elemento Painter subyacente si el tamaño del diseño es más grande que el tamaño intrínseco de ese elemento sin afectar la relación de aspecto. Este comportamiento se ajusta mejor a las expectativas a fin de brindar tamaños fijos para el elemento Image sin afectar el comportamiento predeterminado cuando solo se use el tamaño intrínseco para procesar el tamaño de la composición. (I40ae3, b/159838006)
  • Usa el objeto AnimationSpec en lugar del elemento AnimationBuilder en las API de nivel superior a fin de aclarar el concepto de especificación de animación estática. -Mejora la DSL de transición mediante la eliminación del requisito lambda para crear el objeto AnimationSpecs, como tween, spring. Estas toman parámetros de constructor en forma directa. -Mejora la facilidad de uso general del elemento AnimationSpec para abrir constructores en lugar de depender de compiladores. -Cambia la duración y la demora de los objetos KeyFrames y Tween al elemento Int. De esta manera, se eliminan las conversiones de tipos y los métodos de sobrecarga innecesarios (para admitir tanto los objetos Long como Int). (Ica0b4)
  • Se quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)
  • Se agregó LazyRowItems: desplazamiento horizontal similar a LazyColumnItems. (Ibbcf7)
  • Se introdujeron las API de animación sin estado de bajo nivel. (I63bf7)
  • androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue quedaron obsoletos. TextField, FilledTextField y CoreTextField que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)
  • Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
  • Se quitó androidx.ui.foundation.shape.RectangleShape. Usa androidx.ui. graphics.RectangleShape. (I94939, b/154507984)
  • A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)
  • A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)
  • Se agregó Modifier.zoomable para la funcionalidad de pellizcar para hacer zoom. (Id5d63)
  • El componente Toggleable dejó de estar disponible. En su lugar, usa Modifier.toggleable. (I35220, b/157642842)
  • El objeto MutuallyExclusiveSetItem dejó de estar disponible. En su lugar, usa el elemento Modifier.selegable. (I02b47, b/157642842)
  • El componente TestTag dejó de estar disponible. En su lugar, usa el elemento Modifier.testTag. (If5110, b/157173105)
  • Se agregó el parámetro fontWeight a Text, que no se agregó con anterioridad por accidente. (I56937)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I19d02)
  • El objeto VerticalScroller ahora proporciona el elemento Column listo para usar. El objeto HorizontalScroller ahora proporciona el elemento Row listo para usar. (Ieca5d, b/157020670)
  • Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Iede0b)
  • Se agregó el objeto Modifier.indication al paquete de base. Úsalo para mostrar la función de presionar/arrastrar/otra indicación en tus elementos interactivos personalizados. (I8425f, b/155287131)
  • VerticalScroller y HorizontalScroller ahora admiten el desplazamiento invertido cuando se configura isReversed en ScrollerPosition. (I953bd)
  • Se agregó compatibilidad con elementos que se pueden compilar en el diseño de texto. (I1373c)
  • Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope por 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)
  • Se quitó la API obsoleta del objeto DrawBackground y se reemplazó por las API de la extensión drawBackground en Modifier. Implementaciones refactorizadas de color, pincel y pintura del objeto drawBackground para reducir las rutas de código y quitar el requisito de crear Modifier como parte de la composición. (I0343a)
  • Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los consumidores que aún necesitan acceso a un lienzo, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el lienzo subyacente. (I80afd)
  • HorizontalScroller y VerticalScroller ahora restablecen su posición de desplazamiento usando el estado de instancia guardado. (Ia0fae, b/155075048)
  • Se quitó el objeto FocusManagerAmbient. Usa el elemento FocusModifier.requestFocus para obtener enfoque. (Ic4826)
  • Se quitó temporalmente el diseño de la tabla hasta que esté disponible nuevamente con una API actualizada. (Id88a7)
  • Se creó la API de CanvasScope que une un objeto de Canvas a fin de exponer una superficie de API de dibujo declarativa y sin estado. Las transformaciones se contienen dentro de su propio alcance de receptor, y la información de tamaño también se define en los límites de inserción correspondientes. No requiere que un consumidor mantenga su propio objeto de estado de Paint para configurar las operaciones de dibujo.

    Se agregó CanvasScopeSample y se actualizó la app de demostración a fin de incluir una demostración de gráficos declarativos. (Ifd86d)

  • Se quitó ColoredRect. En su lugar, usa Box con el modificador drawBackground, (I983c7, b/152753731)

  • Se agregó personalización del color del cursor a TextField. (I6e33f)

  • Ahora es posible ocultar o mostrar el teclado en pantalla usando SoftwareKeyboardController, que se entrega mediante la devolución de llamada onTextInputStarted. (I8dc44, b/151860051)

  • TextFieldValue usado con TextField ahora puede ser una recreación de una actividad que permanece vigente cuando se usa de la siguiente manera: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }. (I5c3ce, b/155075724)

  • Se agregaron los parámetros que se usan con frecuencia a Text(). Si estás creando un estilo de texto local para pasar una pequeña cantidad de estos parámetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), ahora puedes proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)

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

  • Actualización de TextField: en dimensión horizontal, ocupará todo el espacio disponible. (IB08df, b/154638552)

  • Se agregaron InteractionState y Interaction, lo que facilita la compilación de componentes que reaccionan a los cambios de estado de la IU, como presionar y arrastrar. (Icfe25, b/152525426)

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

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

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

  • Se cambió el nombre de ScaleFit por ContentScale. Se trasladó el valor ContentScale del módulo ui-graphics al módulo ui-core a fin de que quede en el mismo módulo que la API de alineación. Se cambió el nombre de FillMaxDimension por Crop, el de FillMinDimension por Fit y el de Fit por Inside para que coincida mejor con los equivalentes de ImageView.ScaleType. Se agregó documentación que indica que con la combinación de Crop y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_CROP, que con Fit y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.FIT_CENTER, y que con Inside y Alignment.Center se obtiene el mismo resultado que con ImageView.ScaleType.CENTER_INSIDE. (I45f09, b/152842521)

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

  • Agrega un parámetro de color al texto, lo que permite anular el color del estilo del texto sin necesidad de combinarlo manualmente con el estilo proporcionado en un tema. (I41a66)

  • Se mejoró la API de DrawModifier:

    • Se creó el alcance del receptor para el objeto draw() ContentDrawScope.
    • Se quitaron todos los parámetros de draw().
    • El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
    • ContentDrawScope tiene el método drawContent(). (Ibaced, b/152919067)
  • ColoredRect quedó obsoleto. Usa Box(Modifier.preferredSize(width, height).drawBackground(color)) en su lugar. (I499fa, b/152753731)

  • El sistema de temas de formas se actualiza según la especificación de Material Design. Ahora puedes proporcionar formas pequeñas, medianas y grandes para que las use la mayoría de los componentes. (Ifb4d1)

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

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

  • Se trasladó el objeto Text de androidx.ui.core al paquete androidx.ui.foundation. (I87ce5)

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

  • Ripple ahora es un modificador. Mientras que Clickable aún no se convirtió al uso recomendado, que es Clickable(onClick = { ... }, modifier = ripple()). (Ie5200, b/151331852, b/150060763)

  • Se agregó la API de VectorPainter para reemplazar la API de subcomposición existente por gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un elemento DrawModifier. El objeto DrawVector anterior que admite composición dejó de estar disponible y se reemplazó por el elemento VectorPainter.

    Se cambió el nombre de la API de Image(Painter) por PaintBox(Painter). Se creó el elemento Vector que admite composición y que se comporta como el elemento Image, pero con un VectorAsset en lugar de un ImageAsset. (I9af9a , b/149030271)

  • Se creó un elemento Image que admite composición para controlar el tamaño y el diseño, además de dibujar un ImageAsset determinado en la pantalla. Este elemento también admite el dibujo de cualquier instancia arbitraria de Painter que respete su tamaño intrínseco, así como un tamaño fijo determinado o un tamaño mínimo. (Ibcc8f)

  • Button, FloatingActionButton y Clickable ahora tienen un parámetro enabled separado. Se reorganizaron algunos de los parámetros de Button o se les cambió el nombre. (I54b5a)

  • Se cambió el nombre de Image por ImageAsset para destacar mejor la diferencia entre los datos de Image y el próximo elemento Image que admite composición, que se utiliza para participar en el diseño y dibujar contenido.

    Se creó un método de extensión en android.graphics.Bitmap, Bitmap.asImageAsset(), a fin de crear una instancia útil de ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el marco de trabajo de Compose. (Id5bbd)

  • Se quitó el elemento DrawImage que admite composición. Usa ImagePainter para dibujar una imagen en un diseño existente o SimpleImage para introducir un elemento Image que ocupe espacio. (I595e1, b/149827027)

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

  • Se agregaron Icon, IconButton y IconToggleButton, y se quitó AppBarIcon. Puedes reemplazar directamente los usos existentes de AppBarIcon con IconButton, y tendrán el objetivo táctil correcto. Consulta las muestras para obtener información de uso y consulta Íconos para conocer los íconos de material que puedes usar directamente con estos componentes. (I96849)

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

  • Se agregó AdapterList, un componente de lista de desplazamiento que solo compone y presenta los elementos visibles. Según los problemas que se conocen, solo es vertical y no maneja todos los casos de cambios en sus elementos secundarios. (Ib351b)

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

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

  • Se agregaron los parámetros de relleno, borde, forma y fondo al objeto Box. (I05027, b/148147281)

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

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

  • Se agregó el componente Box para combinar la función común de dibujo y diseño. (I6e2a7)

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

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

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

  • Se cambió el nombre del parámetro de porcentaje a fracción al crear los lineamientos de ConstraintLayout. (Ida2db)

  • Se agregó compatibilidad con los márgenes de las barreras de ConstraintLayout. (I47ffe)

  • Se corrigió la compatibilidad con lectura de derecha a izquierda en ConstraintLayout. Se agregaron unas API que no admiten lectura de derecha a izquierda. (I3b1c7)

  • Se agregó un nuevo DSL de ConstraintLayout. Consulta las muestras para obtener más detalles. (Icaa9a)

  • Se agregó la anotación @ExperimentalLayout. ConstraintLayout, FlowRow y FlowColumn ahora contienen esa etiqueta para indicar que sus API cambiarán. (I412a8)

  • Se agregó Modifier.padding(InnerPadding). (I94985, b/157133803)

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

  • Se quitó el elemento LayoutTag() obsoleto; en su lugar, usa Modifier.tag(). Se quitó el elemento Modifier.matchParent() obsoleto; en su lugar, usa Modifier.matchParentSize(). (If8044)

  • Se agregó el modificador de diseño offsetPx, que se puede usar para definir desplazamientos (dinámicos) en px. (I5af57)

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

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

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

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

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

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

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

  • Se quitaron los modificadores obsoletos LayoutAlign. (I10877)

  • Se corrigió un error en los modificadores de ancho y altura que hacía que se midiera el diseño unido sin restricciones de eje opuesto. (I210b8, b/154797971)

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

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

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

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

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

  • Se agregaron modificadores para la definición de tamaño en mediciones intrínsecas y dejaron de estar disponibles los componentes que cumplían esta función. (I8295d)

  • Se agregó compatibilidad con dimensiones personalizadas de ConstraintLayout. (Idb1a5)

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

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

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

  • El elemento Container quedó obsoleto. En su lugar, usa Box. (I675ce, b/151407926)

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

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

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

  • Se quitó el elemento AspectRatio que admite composición y se reemplazó por el modificador. Se borraron el elemento FlexColumn obsoleto, los elementos que admiten composición de FlexRow y el modificador de Spacing. (Iec8a7)

  • Se quitó el modificador LayoutInflexible para la fila y columna (I0d820).

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

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

Correcciones de errores

  • El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester, Modifier.focusObserver. FocusState y FocusDetailedState quedaron obsoletos y se los reemplazó por FocusState2. (I46919, b/160822875, b/160922136)
  • Se cambió el nombre de runOnIdleCompose por runOnIdle. (I83607)
  • Se cambió el nombre de varias API de prueba con el fin de que sean más intuitivas. Se cambió el nombre de todas las API findXYZ por el de onNodeXYZ. Se cambió el nombre de todas las API doXYZ por el de performXYZ. (I7f164)
  • Se quitó el objeto Modifier.ripple que dejó de estar disponible previamente. El elemento Clickable ahora usa ripple como indicación predeterminada (si tienes un objeto MaterialTheme {} configurado en tu aplicación), por lo que, en la mayoría de los casos, puedes usar los elementos clickable y get ripple de forma gratuita. Para personalizar el parámetro de color/tamaño/límites para ripple, puedes crear manualmente un RippleIndication y pasarlo a clickable como parámetro de indicación. (I663b2, b/155375067)
  • Se quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
  • Se creó la API experimental LayoutNode. (I4f2e9)
  • Se implementó en Compose la versión 1 del bloqueo de orientación de desplazamiento. (I1ce7a, b/150289741)
  • Las ventanas emergentes, los diálogos y los menús ahora heredan el MaterialTheme contextual. (Ia3665, b/156527485)
  • Del bloque de medición de la función Layout(), se quitó el parámetro de dirección del diseño. Sin embargo, la dirección del diseño está disponible dentro de la devolución de llamada mediante el objeto de alcance de la medición. (Ic7d9d)
  • Se agregó AbsoluteArrangement: permite la organización de los elementos secundarios dentro de la fila sin duplicación automática RTL. (I3a1df)
  • La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)
  • Antes de este cambio, el complemento del compilador de Compose interceptaba de forma no trivial las llamadas a los constructores dentro de una función @Composable si había una (I5205a, b/158123804).
  • Se agrega viewModel() que se puede componer y permite crear u obtener un ViewModel ya creado de manera similar a como funciona en las clases Activity o Fragment (I5fdd1)
  • Se refactorizó la clase Radius para que sea una clase intercalada. Se quitaron los métodos de creación complementarios para que el radio a lo largo del eje y coincida con el parámetro obligatorio del radio del eje x en el constructor de funciones con el parámetro predeterminado.

    Se actualizó DrawScope.drawRoundRect para que admita un solo parámetro Radius en lugar de 2 números de punto flotante para el radio en los ejes x e y. (I46d1b)

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

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

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

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

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

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

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

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

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

  • Se actualizó la API de Alignment y se agregó compatibilidad con la alineación absoluta (que no se duplica automáticamente en contexto de derecha a izquierda). (I38cd3)

  • Se pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)

  • Se ingresaron parámetros rect opcionales adicionales en ImagePainter para admitir el dibujo de una subsección de ImageAsset subyacente. (I0ea9e)

  • Se corrigió una falla en AdapterList que se producía cuando se quitaban elementos. (Ic64b0, b/153195921)

  • Cambiamos la forma en que medimos el primer diseño que colocas dentro del bloque activity.setContent { }. Antes, llenaba toda la pantalla de la actividad, mientras que ahora se comporta como si colocaras el diseño dentro de una pila: puede ser más pequeño que una pantalla y se ubica en la pantalla superior izquierda. Si deseas usar el comportamiento anterior, puedes aplicar Modifier.fillMaxSize() para tu diseño. (Ie88a7, b/153453714)

  • Se cambió el nombre del módulo ui-text-compose por ui-text. El objeto ui-text ahora contiene los elementos CoreCore y CoreTextField que admiten composición. (IB7d47)

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

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

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

  • Ahora, los objetos DrawLayerModifier y drawLayer() ahora establecen de forma predeterminada los elementos clipToBounds y clipToOutline como falso. (I0eb8b, b/152810850)

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

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

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

  • Se cambió el comportamiento de DrawVector, que dejó de ser una función que admite composición normal para mostrar un modificador drawVector() que dibujará el vector como fondo de un diseño. (I7b8e0)

  • Reemplaza la función Clips que admite composición con el modificador drawClip(). El objeto DrawClipToBounds es un modificador conveniente para usar cuando solo necesitas recortar los límites de la capa con una forma rectangular. (If28eb)

  • Se reemplazó la función DrawShadow que admite composición con el modificador drawShadow(). Las sombras ahora se dibujan como parte de LayerModifier. (I0317a)

  • Se trasladó el objeto androidx.compose.ViewComposer al elemento androidx.ui.node.UiComposer androidx.compose. Se quitó el parámetro 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)

  • La función Wrap que admite composición dejó de estar disponible. Se puede reemplazar con el modificador LayoutAlign o con la función Stack que admite composición. (IB237F)

  • Se permitió que la dirección del diseño se propagara desde el nodo de diseño de nivel superior hasta los secundarios. Se agregó un modificador de dirección de diseño. (I3d955)

  • Se cambió el nombre de Painter.toModifier por Painter.asModifier debido a que el modificador recientemente creado tiene una referencia al Painter original que se puede compartir entre varias instancias del modificador. (I7195b)

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

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

  • Se combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)

  • Se quitó la clase ValueHolder. Se reestructuraron las clases AnimatedValue y AnimatedFloat para que el campo de valor de animación sea abstracto a fin de que las subclases puedan ver la actualización del valor.

    • Se agregaron clases de modelos para AnimatedValue, AnimatedFloat, etc.
    • Se agregó un nuevo conjunto de API liviana de @Composable para realizar animaciones entre valores.
    • (I79530)
  • Cambios rotundos en la API de ambients. Consulta la documentación de registro y de Ambient<T> para obtener más detalles. (I4c7ee, b/143769776)

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

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

  • Se modificó la API de WithConstraints con expresión lambda final. Ahora, en lugar de dos parámetros, tiene un alcance de receptor que, además de las restricciones y el objeto layoutDirection, brinda propiedades minWidth, maxWidth, minHeight y maxHeight en Dp. (I91b9a, b/149979702)

  • Cambió el nombre del objeto LayoutModifier2 por LayoutModifier. (Id29f3)

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

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

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

  • El elemento ParentData que admite composición dejó de estar disponible. Debes crear un modificador que implemente la interfaz ParentDataModifier o usar el modificador LayoutTag si solo necesitas etiquetar elementos secundarios de diseño para reconocerlos dentro del bloque de medición. (I51368, b/150953183)

  • Se agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones OnPositioned y OnChildPositioned que admiten composición. (I2ec8f)

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

  • WithConstraints tiene el parámetro LayoutDirection (I6d6f7)

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

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

  • LayoutCoordinates ya no tiene una propiedad de posición. La propiedad de posición no tiene sentido cuando se tienen en cuenta los objetos LayoutModifiers, la rotación o el escalamiento. En cambio, los desarrolladores deben usar los objetos parentCoordinates y childToLocal() para calcular la transformación de un objeto LayoutCoordinate a otro.

    El objeto LayoutCoordinates usa el elemento IntPxSize para la propiedad de tamaño, en lugar de PxSize. Se usan tamaños de píxeles enteros para los diseños, por lo que todos los tamaños de diseño deberían usar números enteros y no valores de punto flotante. (I9367b)

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

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

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

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

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

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

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

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

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

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

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

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

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

  • El nuevo LifecycleOwnerAmbient ya está disponible. Ahora, una actividad que usas con la IU de Compose debería extender androidx.activity.ComponentActivity (o AppCompatActivity). setContent en android.app.Activity quedó obsoleto. (Idb25a, b/153141084)

  • Se reemplazó el nombre del paquete ui-android-text (androidx.text) por androidx.ui text.platform a fin de cumplir con la política de androidx. (I42711)