IU
Actualización más reciente | Versión estable actual | Próxima versión potencial | Versión beta | Versión Alfa |
---|---|---|---|---|
1 de octubre de 2020 | - | - | - | 1.0.0-alpha04 |
Estructura
Compose es una combinación de 7 ID de grupo de Maven en androidx
. Cada grupo contiene un subconjunto de funcionalidades objetivo, cada uno con su propio conjunto de notas de la versión.
En esta tabla, se explican los grupos y vínculos correspondiente a cada conjunto de notas de la versión.
Grupo | Descripción |
---|---|
compose.animation | Crea animaciones en sus aplicaciones de Jetpack Compose para enriquecer la experiencia del usuario. |
compose.compiler | Transforma las funciones que admite @Composable y habilita las optimizaciones con un complemento de compilador de Kotlin. |
compose.foundation | 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. |
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. |
compose.runtime | Son 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.ui | Son los componentes fundamentales de la IU de Compose necesarios para interactuar con el dispositivo, incluidos el diseño, el dibujo y la entrada. |
ui | Funciona con la biblioteca de Jetpack Compose. |
Cómo declarar dependencias
Para agregar una dependencia en la IU de Compose, debes agregar el repositorio de Maven de Google a tu proyecto. Consulta el repositorio de Maven de Google para obtener más información.
Agrega las dependencias de los artefactos que necesites en el archivo build.gradle
de tu app o módulo:
dependencies { // New dependencies implementation "androidx.compose.ui:ui-tooling:1.0.0-alpha08" implementation "androidx.compose.ui:ui-test:1.0.0-alpha08" // Old dependencies implementation "androidx.ui:ui-tooling:1.0.0-alpha07" implementation "androidx.ui:ui-test:1.0.0-alpha07" } android { buildFeatures { compose true } composeOptions { kotlinCompilerVersion "1.4.0" kotlinCompilerExtensionVersion "1.0.0-alpha08" } } tasks.withType(org.jetbrains.kotlin.gradle.tasks.KotlinCompile).configureEach { kotlinOptions { jvmTarget = "1.8" freeCompilerArgs += ["-Xallow-jvm-ir-dependencies", "-Xskip-prerelease-check"] } }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes en esta biblioteca antes de crear uno nuevo. Para agregar tu voto a un error existente, haz clic en el botón de la estrella.
Consulta la documentación sobre la Herramienta de seguimiento de errores para obtener más información.
Versión 1.0.0
Versión 1.0.0-alpha04
1 de octubre de 2020
Lanzamiento de androidx.ui:ui-test:1.0.0-alpha04
y androidx.ui:ui-tooling:1.0.0-alpha04
. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó una función de suspensión en ComposeTestRule para esperar el estado de inactividad de la app (I4212c, b/168226343, b/168227042)
- Se agregaron las anotaciones rootAnimationClockFactory, transitionsEnabled, blinkingCursorEnabled y textInputServiceFactory con @VisibleForTesting, se las convirtió en internas para la API y se ocultó su KDoc. (I554eb, b/138390812)
Correcciones de errores
- foundation.Box dejó de estar disponible. Usa foundation.layout.Box en su lugar. (Ie5950, b/167680279)
- Se cambió el nombre de Stack a Box. La función Box anterior dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
- Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
- Se actualizaron varias API de gráficos.
- Se actualizaron las API de DrawScope con métodos de transformación con alcance para indicar que la transformación solo se aplica dentro de la devolución de llamada y se quita una vez invocada la devolución de llamada.
- Se actualizó la documentación de clipPath para hacer referencia a Path en lugar del rectángulo redondeado.
- Se corrigió el espaciado en la documentación del parámetro en clipPath.
- Se cambió el nombre de DrawScope.drawCanvas a drawIntoCanvas y se quitó el parámetro de tamaño.
- Se cambió el nombre de los parámetros dx/dy en el método de inserción a horizontal y vertical.
- Se agregó una sobrecarga de inserción que proporciona el mismo valor de inserción a los 4 límites.
- Se quitó la documentación del método de inserción que indicaba que la inserción se aplicaba a los 4 lados.
- Se actualizó la documentación de la clase Rect.
- Se actualizaron los comentarios en los parámetros Rect para que coincidan con el estilo de KDoc.
- Se quitaron Rect.join and Rect.expandToInclude.
- Se creó una sobrecarga para Rect.translate (desplazamiento) y Rect.shift dejó de estar disponible.
- (If086a, b/167737376)
- Se quitó el parámetro inlineContent de Text con entrada de string. No se utilizará porque inlineContent debe funcionar con AnnotatedString. (Ief403)
Versión 1.0.0-alpha03
16 de septiembre de 2020
Lanzamiento de androidx.ui:ui-test:1.0.0-alpha03
y androidx.ui:ui-tooling:1.0.0-alpha03
. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Las funciones de prueba globales, como onNode o waitForIdle, dejaron de estar disponibles. Migra a sus equivalentes nuevos que se definen en ComposeTestRule (I7f45a).
- Se trasladó
createAndroidComposeRule
yAndroidInputDispatcher
desdeandroidx.ui.test.android
aandroidx.ui.test
. (Idef08, b/164060572) - Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
- Se corrigieron los cálculos de tamaño y posición en GestureScope que ocasionaban la generación de gestos de deslizamiento no válidos, entre otros. (Iaf358, b/166589947)
Correcciones de errores
- Se cambiaron de manera coherente los nombres de los usos de gravity a align o alignment en las API de diseño. (I2421a, b/164077038)
- Se cambió el nombre de InnerPadding a PaddingValues. (I195f1, b/167389171)
Versión 1.0.0-alpha02
2 de septiembre de 2020
Lanzamiento de androidx.ui:ui-test:1.0.0-alpha02
y androidx.ui:ui-tooling:1.0.0-alpha02
. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- TestUiDispatcher se marca como experimental. (Iae99d, b/161247083)
- Ahora la duración es una clase intercalada. (I565eb)
Se agregó
ManualFrameClock.hasAwaiters
para ver si hay algo que espera un marco de ese reloj;runWithManualClock
como un reemplazo pararunBlocking
cuando se ejecutan pruebas que necesitan un ManualFrameClock, yTestUiDispatcher.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") } }
Correcciones de errores
Cambió la convención de llamada para funciones que admiten composición. Este es un cambio rotundo del objeto binario. Se deben volver a compilar todas las bibliotecas para que funcionen con esta versión del complemento del compilador de Compose.
Esta modificación no crea un cambio rotundo a nivel de la fuente, ya que las únicas API que cambiaron son las API del compilador que tienen una participación explícita. (I7afd2, b/158123185)
Versión 1.0.0-alpha01
26 de agosto de 2020
Lanzamiento de androidx.ui:ui-test:1.0.0-alpha01
y androidx.ui:ui-tooling:1.0.0-alpha01
. La versión 1.0.0-alpha01 contiene estas confirmaciones.
Versión 0.1.0-dev
Versión 0.1.0-dev17
19 de agosto de 2020
Lanzamiento de androidx.ui:ui-test:0.1.0-dev17
y androidx.ui:ui-tooling:0.1.0-dev17
. La versión 0.1.0-dev17 contiene estas confirmaciones.
Cambios en la API
- Offset se convirtió en una clase intercalada. (Iaec70)
- IntSize ahora es una clase intercalada. (I2bf42)
- AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)
- Se agregó la función
createAndroidComposeRule
que toma un objetoClass<T : ComponentActivity>
como parámetro a fin de crear fácilmente una AndroidComposeRule, dada una clase de actividad específica. (I40da4)
Correcciones de errores
- Se actualizaron los nombres de PointerEventPass para la versión Alfa. (Ifda6f)
- Se cambió el nombre de
PlacementScope.placeAbsolute()
porPlacementScope.place()
, y el delPlacementScope.place()
anterior porPlacementScope.placeRelative()
. Como resultado, el métodoPlacementScope.place()
ya no duplicará automáticamente la posición en contextos de derecha a izquierda. Si quieres que eso ocurra, usaPlacementScope.placeRelative()
en su lugar. (I873ac, b/162916675) - Se refactorizó la organización del código de entrada del puntero. (Ie3f45)
- PxBounds dejó de estar disponible y se reemplazó por Rect. Se actualizaron todos los usos de PxBounds con rect y se agregaron la baja y reemplazo adecuados, con anotaciones para ayudar con la migración. (I37038, b/162627058)
- Se corrigió la falla que ocurría cuando se utilizaba dentro del bucle algo que guardaba el estado. Ahora se permite tener la misma clave en savedInstanceState(), y ya se ajustó la API de UiSavedStateRegistry en virtud de este requisito nuevo. (I4ab76, (b/160042650)., b/156853976, b/159026663, b/154920561)
- El elemento
state { ... }
que admite composición dejó de estar disponible en favor de cualquier llamada explícita aremember { 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ónby mutableStateOf()
con la delegación de propiedades de clase. (Ia5727) - Se agregó la disposición spacedBy para filas y columnas a fin de habilitar el posicionamiento de los elementos secundarios de diseño con un espaciado fijo. También se agregó la disposición alineada, de forma que puedan posicionarse esos elementos unos junto a otros y alineados en la fila y columna según la Alineación establecida. Los métodos anteriores Arrangement.Vertical#arrange y Arrangement.Horizontal#arrange dejaron de estar disponibles, y ya no se admitirán las disposiciones personalizadas en el futuro. (I6733d, b/161985975)
- Modifier.drawBorder dejó de estar disponible. En su lugar, usa Modifier.border. Se reemplazó la clase de datos de borde por BorderStroke. (I4257d, b/158160576)
Versión 0.1.0-dev16
5 de agosto de 2020
Lanzamiento de androidx.ui:ui-test:0.1.0-dev16
y androidx.ui:ui-tooling:0.1.0-dev16
. La versión 0.1.0-dev16 contiene estas confirmaciones.
La mayoría de los paquetes de Jetpack Compose se refactorizaron de acuerdo con la tabla siguiente.
Refactorización de paquetes de Jetpack Compose
Nombre anterior del paquete | Nombre nuevo del paquete |
---|---|
androidx.animation |
androidx.compose.animation.core |
androidx.ui.autofill |
androidx.compose.ui.autofill |
androidx.compose |
androidx.compose.runtime |
androidx.compose.dispatch |
androidx.compose.runtime.dispatch |
androidx.ui.animation |
androidx.compose.animation |
androidx.ui.core |
androidx.compose.ui androidx.compose.ui.unit androidx.compose.ui.graphics |
androidx.ui.foundation |
androidx.compose.foundation |
androidx.ui.geometry |
androidx.compose.ui.geometry |
androidx.ui.graphics |
androidx.compose.ui.graphics |
androidx.ui.input |
androidx.compose.ui.text.input |
androidx.ui.intl |
androidx.compose.ui.text.intl |
androidx.ui.layout |
androidx.compose.foundation.layout |
androidx.ui.livedata |
androidx.compose.runtime.livedata |
androidx.ui.material |
androidx.compose.material |
androidx.ui.material.icons |
androidx.compose.material.icons |
androidx.ui.rxjava2 |
androidx.compose.runtime.rxjava2 |
androidx.ui.savedinstancestate |
androidx.compose.runtime.savedinstancestate |
androidx.ui.node |
androidx.compose.ui.node androidx.compose.ui.input.pointer |
androidx.ui.platform |
androidx.compose.ui.platform |
androidx.ui.res |
androidx.compose.ui.res |
androidx.ui.semantics |
androidx.compose.ui.semantics |
androidx.ui.testutils |
androidx.compose.ui.input.pointer |
androidx.ui.text |
androidx.compose.foundation.text androidx.compose.ui.text |
androidx.ui.text.platform |
androidx.compose.ui.text.android androidx.compose.ui.platform |
androidx.ui.unit |
androidx.compose.ui.unit |
androidx.ui.util |
androidx.compose.ui.util |
androidx.ui.viewinterop |
androidx.compose.ui.viewinterop |
androidx.ui.viewmodel |
androidx.compose.ui.viewinterop |
Aún no se refactorizó (sin cambios) |
---|
androidx.ui.test |
androidx.ui.tooling |
Si usas Android Studio, puedes reemplazar tus declaraciones de importación por el siguiente fragmento de código y usar el botón Optimize Imports
en Android Studio.
Para los casos que Android Studio no trata, consulta la lista de paquetes indicada más arriba.
import androidx.compose.runtime.*
import androidx.compose.animation.*
import androidx.compose.animation.core.*
import androidx.compose.foundation.*
import androidx.compose.foundation.gestures.*
import androidx.compose.foundation.layout.*
import androidx.compose.foundation.lazy.*
import androidx.compose.foundation.shape.*
import androidx.compose.material.*
import androidx.compose.material.icons.*
import androidx.compose.material.icons.filled.*
import androidx.compose.ui.*
import androidx.compose.ui.geometry.*
import androidx.compose.ui.draw.*
import androidx.compose.ui.graphics.*
import androidx.compose.ui.graphics.drawscope.*
import androidx.compose.ui.graphics.painter.*
import androidx.compose.ui.graphics.vector.*
import androidx.compose.ui.layout.*
import androidx.compose.ui.platform.*
import androidx.compose.ui.res.*
import androidx.compose.ui.text.*
import androidx.compose.ui.text.font.*
import androidx.compose.ui.text.style.*
import androidx.compose.ui.unit.*
import androidx.compose.ui.util.*
import androidx.compose.ui.viewinterop.*
import androidx.ui.tooling.preview.*
Cambios en la API
- KeyEvent reemplazó a KeyEvent2. (I2d770, b/162097585)
- Se quitó
SemanticsNodeInteraction.performPartialGesture
. UsaSemanticsNodeInteraction.performGesture
en su lugar. (Id9b62) - Se cambió el nombre de
SemanticsNodeInteraction.getBoundsInRoot()
porSemanticsNodeInteraction.getUnclippedBoundsInRoot()
. (Icafdf, b/161336532) - Se cambió el nombre de AndroidComposeTestRule por createAndroidComposeRule. (I70aaf)
- Se agregaron los SemanticsMatcher isFocused() y isNotFocused(). (I0b760)
- Se quitó
BaseGestureScope.globalBounds
, que no debería usarse a partir de pruebas. En su lugar, usa las coordenadas locales del nodo con el que interactúas. (Ie9b08) - Se mejoró la exactitud de la API del inspector. (I3cfbf)
Correcciones de errores
- Se movió diálogo a la IU. (I47fa6)
- Se actualizaron las API correspondientes a la compatibilidad de orientación de derecha a izquierda. Se agregó LayoutDirectionAmbient, que puede usarse para leer y cambiar la dirección del diseño. Se quitaron Modifier.rtl y Modifier.ltr. (I080b3)
- Se requiere que el tipo T se especifique de forma explícita para transitionDefinition. (I1aded)
- Modifier.plus dejó de estar disponible; en su lugar, usa Modifier.then. "Then" tiene un indicador de orden más fuerte, a la vez que prohíbe la escritura de
Modifier.padding().background() + anotherModifier
, lo que interrumpe la cadena y es más difícil de leer. (Iedd58, b/161529964) - Se agregó
SemanticsNode.positionInRoot
para obtener la posición de un SemanticsNode en relación con la raíz de la jerarquía de Compose. (Icdf26, b/161336532) - Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)
- Se cambió el nombre de FilledTextField de Material por TextField, y el del TextField principal se cambió por BaseTextField a fin de que la API deseada resulte más fácil de encontrar y usar. (Ia6242, b/155482676)
- Se cambió el nombre de Modifier.drawBackground por Modifier.background. (I13677)
- Se cambió el nombre de ColorPalette por Colors a fin de mapear mejor el sistema de colores de Material y quitar la confusión que existía en torno a considerar ColorPalette como un objeto de temas "genérico" en lugar de considerarlo una implementación específica del sistema de colores de Material. Además, se cambió el nombre de lightColorPalette y darkColorPalette por lightColors y darkColors, respectivamente. (I9e976, b/161812111)
- Se acopló el paquete foundation.shape.corner a foundation.share. (I46491, b/161887429)
Row
yColumn
ahora son funciones intercaladas, lo que reduce en forma significativa la sobrecarga asociada a su uso. (I75c10)
Versión 0.1.0-dev15
22 de julio de 2020
Lanzamiento de androidx.ui:ui-test:0.1.0-dev15
y androidx.ui:ui-tooling:0.1.0-dev15
. La versión 0.1.0-dev15 contiene estas confirmaciones.
La mayoría de los artefactos de Jetpack Compose se refactorizaron de acuerdo con la tabla siguiente.
Ten en cuenta que, en esta versión, solo se refactorizaron los nombres de artefactos. En futuras versiones, se actualizarán los nombres de los paquetes para que sigan su nombre de artefacto nuevo.
Refactorización de artefactos de Jetpack Compose
Artefacto anterior | Nuevo artefacto |
---|---|
androidx.compose:compose-dispatch |
androidx.compose.runtime:runtime-dispatch |
androidx.compose:compose-runtime |
androidx.compose.runtime:runtime |
androidx.ui:ui-animation |
androidx.compose.animation:animation |
androidx.ui:ui-animation-core |
androidx.compose.animation:animation-core |
androidx.ui:ui-core |
androidx.compose.ui:ui |
androidx.ui:ui-foundation |
androidx.compose.foundation:foundation |
androidx.ui:ui-geometry |
androidx.compose.ui:ui-geometry |
androidx.ui:ui-graphics |
androidx.compose.ui:ui-graphics |
androidx.ui:ui-layout |
androidx.compose.foundation:foundation-layout |
androidx.ui:ui-livedata |
androidx.compose.runtime:runtime-livedata |
androidx.ui:ui-material |
androidx.compose.material:material |
androidx.ui:ui-material-icons-core |
androidx.compose.material:material-icons-core |
androidx.ui:ui-material-icons-extended |
androidx.compose.material:material-icons-extended |
androidx.ui:ui-rxjava2 |
androidx.compose.runtime:runtime-rxjava2 |
androidx.ui:ui-saved-instance-state |
androidx.compose.runtime:runtime-saved-instance-state |
androidx.ui:ui-text |
androidx.compose.foundation:foundation-text |
androidx.ui:ui-text-android |
androidx.compose.ui:ui-text-android |
androidx.ui:ui-text-core |
androidx.compose.ui:ui-text |
androidx.ui:ui-unit |
androidx.compose.ui:ui-unit |
androidx.ui:ui-util |
androidx.compose.ui:ui-util |
Aún no se refactorizó (sin cambios) |
---|
androidx.compose:compose-compiler |
androidx.ui:ui-test |
androidx.ui:ui-tooling |
Actualización de dependencias
- Para usar la versión
0.1.0-dev15
de Compose, deberás actualizar tus dependencias de acuerdo con los nuevos fragmentos de código que se muestran más arriba en Cómo declarar dependencias.
Cambios en la API
- Se cambió el nombre de
runOnIdleCompose
porrunOnIdle
. (I83607) - Se cambió el nombre de varias API de prueba con el fin de que sean más intuitivas. Se cambió el nombre de todas las API findXYZ por el de onNodeXYZ. Se cambió el nombre de todas las API doXYZ por el de performXYZ. (I7f164)
- API para imprimir los datos semánticos de la app en forma jerarquizada y no como una lista plana. También se quitó SemanticsMatcher.any; en su lugar, usa findRoot().printToString() para imprimir los datos semánticos. (I866b5)
- KeyEvent dejó de estar disponible y se reemplazó por KeyEvent2. (I68730)
- Se agregó una nueva marca opcional useUnmergedTree a fin de probar los buscadores. (I2ce48)
- Se quitaron las API de prueba de tamaño obsoletas. (Iba0a0)
- Se agregó una clase de unidad IntBounds, que representa los límites de píxeles enteros del diseño. Se actualizó la API de PopupPositionProvider para usarla. (I0d8d0, b/159596546)
- Se agregó un nuevo parámetro de dispositivo a @Preview. (I39049)
Correcciones de errores
- VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y fue reemplazado por ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
- Las propiedades semánticas de valor único ahora usan un estilo de llamada. Por ejemplo, "semantics { hidden = true }" ahora se escribe como "semantics { hidden() }". (Ic1afd, b/145951226, b/145955412)
- Se agregó una anotación de API experimental para las API relacionadas con entradas clave. (I53c0a)
- Se modificó la API de Transition para mostrar un elemento TransitionState en lugar de pasar el objeto TransitionState a los elementos secundarios. Esto hace que la API sea más coherente con las API de animate(). (I24e38)
- El aplicador ahora requiere un método clear() para desechar las composiciones. (Ibe697)
- Se creó la API experimental LayoutNode. (I4f2e9)
- Las ventanas emergentes, los diálogos y los menús ahora heredan el MaterialTheme contextual. (Ia3665, b/156527485)
- Se agregó la función withFrameNanos de nivel superior para la sincronización de la animación. (Ie34c5)
- Del bloque de medición de la función Layout(), se quitó el parámetro de dirección del diseño. Sin embargo, la dirección de diseño está disponible dentro de la devolución de llamada a través del objeto de alcance de medición. (Ic7d9d)
- Usa el objeto AnimationSpec en lugar del elemento AnimationBuilder en las API de nivel superior a fin de aclarar el concepto de especificación de animación estática. -Mejora la DSL de transición mediante la eliminación del requisito lambda para crear el objeto AnimationSpecs, como tween, spring. Estas toman parámetros de constructor en forma directa. -Mejora la facilidad de uso general del elemento AnimationSpec para abrir constructores en lugar de depender de compiladores. -Cambia la duración y la demora de los objetos KeyFrames y Tween al elemento Int. De esta manera, se eliminan las conversiones de tipos y los métodos de sobrecarga innecesarios (para admitir tanto los objetos Long como Int). (Ica0b4)
Se generará una IllegalStateException si intentas activar una sincronización en el subproceso principal, por ejemplo, cuando haces lo siguiente:
runOnIdleCompose { findByTag(\"tag\").assertExists() }
Quita la llamada a runOnIdleCompose en esos casos:
findByTag(\"tag\").assertExists()
Se agregó el operador TextDecoration.plus. (I0ad1a)
El espacio del contenido del botón ahora se comporta como Row (es útil cuando necesitas un ícono con texto. Consulta ejemplos en Button how to write it). (I0ff10, b/158677863)
Versión 0.1.0-dev04
24 de junio de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev14
. La versión 0.1.0-dev14 contiene estas confirmaciones.
Cambios en la API
- Se reemplazó el uso de
IntPx
conInt
. Se reemplazóIntPxPosition
conIntOffset
. Se reemplazóIntPxSize
conIntSize
. (Ib7b44) - A fin de consolidar las clases utilizadas para representar la información de tamaño, estandarizamos el uso de la clase
Size
en lugar dePxSize
. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 números de punto flotante para representar el ancho y la altura. (Ic0191) - A fin de consolidar las clases utilizadas para representar la información de posicionamiento, estandarizamos el uso de la clase
Offset
en lugar dePxPosition
. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 números de punto flotante para representar los desplazamientos x e y. (I3ad98) - Se reemplazó el uso de la clase
Px
dentro varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I086f4) Placeable#get(AlignmentLine)
ya no muestra las posiciones Int de la línea de alineación como nulas. Si no se encuentra la línea de alineación consultada, se mostraráAlignmentLine.Unspecified
. (I896c5, b/158134875)- Se agregó un parámetro modificable a
AndroidView
que admite composición. (I48a88, b/158746303) - El valor
Semantics()
quedó obsoleto. UsaModifier.semantics()
en su lugar. (I72407, b/158841414) - Se agrega
viewModel()
que se puede componer y permite crear u obtener un ViewModel ya creado de manera similar a como funciona en las clases Activity o Fragment (I5fdd1) - Se reemplazó el uso de la clase
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 valor
TestTag
quedó obsoleto. UsaModifier.testTag
en su lugar. (If5110, b/157173105) - Se quitó la implementación no-op predeterminada de
ParentDataModifier#modifyParentData
, ya que equivalía a no haber implementado la interfaz. (I0deaa) - Se quitó
ScaleFit
, que anteriormente había quedado obsoleto. UsaContentScale
en su lugar. (Ifbc5b) - Se cambió el nombre de
AdapterList
porLazyColumnItems
. (6decc02) - Se agregó
LazyRowItems
, desplazamiento horizontal similar aLazyColumnItems
. (Ibbcf7) - Se quitó
androidx.ui.foundation.shape.RectangleShape
; usaandroidx.ui.graphics.RectangleShape
en su lugar. (I94939, b/154507984) - Se agregó
Modifier.zoomable
para la funcionalidad de pellizcar para hacer zoom. (Id5d63) - El componente
Toggleable
quedó obsoleto. UsaModifier.toggleable
en su lugar. (I35220, b/155642842) MutuallyExclusiveSetItem
quedó obsoleto. UsaModifier.selectable
en su lugar. (I02b47, b/157642842)- Se agregó el parámetro
fontWeight
a Text, que no se agregó con anterioridad por accidente. (I56937) - Se cambió el nombre del parámetro de porcentaje a fracción al crear los lineamientos de ConstraintLayout. (Ida2db)
- Se agregó compatibilidad con los márgenes de las barreras de ConstraintLayout. (I47ffe)
- Se corrigió la compatibilidad con lectura de derecha a izquierda en ConstraintLayout. Se agregaron unas API que no admiten lectura de derecha a izquierda. (I3b1c7)
- Se agregó un nuevo DSL de ConstraintLayout. Consulta las muestras para obtener más detalles. (Icaa9a)
- Se agregó la anotación
@ExperimentalLayout
. ConstraintLayout, FlowRow y FlowColumn ahora contienen esa etiqueta para indicar que sus API cambiarán. (I412a8) - Se agregó Textfield con contorno de Material. (I1a518).
TabRow.TabPosition
no muestra la posición en Dp ni en IntPx. (I34a07, b/158577776)Modifier.ripple
quedó obsoleto. Clickable ahora usa ripple como indicación predeterminada (si tienes un MaterialTheme {} configurado en tu aplicación), por lo que, en la mayoría de los casos, puedes usar clickable y get ripple de forma gratuita. Para personalizar el parámetro de color/tamaño/límites para ripple, puedes crear manualmente un RippleIndication y pasarlo a clickable como parámetro de indicación. (I101cd, b/155375067)- Se modificó la API de Scaffold: se renombraron algunos parámetros y se agregaron otros para una mejor personalización. Se agregó un método get a los tamaños de consulta de Fab, TopBar y BottomBar. (I0e7ce)
- Agrega el parámetro strokeWidth a CircularProgressIndicator para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de un LinearProgressIndicator, puedes usar Modifier.preferredHeight() u otro modificador de tamaño. (Icea16, b/154919081)
- Se agregó
relativeOffset(x, y)
aGestureScope
yPartialGestureScope
, lo que produce una instancia Offset con valores relacionados con el tamaño del componente.relativeOffset(.1f, .2f)
indica un desplazamiento en el que x es el 10% del ancho del componente, mientras que y es el 20% de su altura. (Ia4bf7, b/158291007) - Ahora, cuando se inyectan clics largos o dobles, se puede especificar la duración de dichos gestos. (I51c97, b/155464717)
Se agregaron propiedades a GestureScope y PartialGestureScope para obtener las coordenadas comunes de un componente. Son números de punto flotante para propiedades unidimensionales (como
right
) y desplazamientos para propiedades bidimensionales (comocenterLeft
).Las propiedades unidimensionales son las siguientes:
left
centerX
right
top
centerY
bottom
Las propiedades bidimensionales son las siguientes: *
topLeft
*topCenter
*topRight
*centerLeft
*center
(ya existía, se la menciona para completar la lista) *centerRight
*bottomLeft
*bottomCenter
*bottomRight
Ejemplo de uso:
findByTag("widget") .doGesture { sendSwipe(topLeft, bottomRight) }
(I49ef3, b/158291007): Se agregaron las API de inyección de gestos multitáctiles para poder probar componentes cuando se realizan este tipo de gestos.
Ahora, cuando se inyecta un gesto, se pueden especificar varios punteros proporcionando un ID de puntero a un método de gesto parcial. Si no se especifica un ID de puntero, se asume el puntero 0, llamado puntero predeterminado. Ten en cuenta que todos los gestos prefabricados (sendClick
, sendSwipe
y todos los métodos compilados en ellos) usan el puntero predeterminado. Los siguientes métodos de PartialGestureScope ahora tienen una sobrecarga que acepta un ID de puntero:
- sendDown
- sendMoveTo
- sendMoveBy
- sendUp
Ahora cada evento muestra una lista completa de la ubicación actual de cada puntero activo (es decir, que registra un evento descendente) y los métodos enumerados anteriormente envían un evento de inmediato. Además, se introdujeron tres métodos nuevos:
- movePointerTo
- movePointerBy
- sendMove
Los métodos movePointerTo
y movePointerBy
cambian la ubicación actual de un puntero, pero no envían un evento para reflejarlo. En consecuencia, tampoco adelantan el tiempo actual del gesto. Esto permite mover varios punteros a la vez. El último método, sendMove
, no admite ningún parámetro y simplemente envía un evento de movimiento, lo que permite "vaciar" todo el movimiento del puntero. Si se actualizaron los punteros con movePointerXx
y se envía un evento hacia arriba o hacia abajo, se activará un evento de movimiento inmediatamente antes de este.
La temporización de todos los métodos también cambió levemente. A partir de ahora, sendDown
y sendUp
ya no hacen avanzar el tiempo del gesto, por lo que puedes enviar varios punteros hacia abajo o hacia arriba de forma simultánea. Todos los demás métodos adelantan el tiempo del gesto. Por el momento, aún no es posible cambiar el delta de tiempo.
(I9acac, b/157142514): Se agregó AnnotatedString.getStringAnnotations
, que muestra todas las anotaciones dentro del rango. (I1fa00)
Correcciones de errores
- Se introdujeron las API de animación sin estado de bajo nivel. (I63bf7)
- La función Recompose que admite composición ya no es una abstracción útil. La mayor parte de la recomposición debería ocurrir como resultado de las asignaciones de MutableState. Para todo lo demás, se recomienda usar la función
invalidate
a fin de activar una recomposición del alcance actual. (Ifc992) - Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)
- Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Id3434).
- Los encadenados ahora pueden iniciarse con un valor nulo. (Iad6a4, b/155947711)
- Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I19d02)
androidx.ui.foundation.TextFieldValue
yandroidx.ui.input.EditorValue
quedaron obsoletos.TextField
,FilledTextField
yCoreTextField
que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)- Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba PointerInputFilters mediante la subcomposición durante el envío. Ya se solucionó ese error. (I1f48b, b/157998762)
- Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba
PointerInputFilters
mediante la subcomposición durante el envío. Ya se solucionó ese error. (Iab398, b/157998762) Se refactorizó la clase Radius para que sea una clase intercalada. Se quitaron los métodos de creación complementarios para que el radio a lo largo del eje y coincida con el parámetro obligatorio del radio del eje x en el constructor de funciones con el parámetro predeterminado.
Se actualizó
DrawScope.drawRoundRect
para que admita un solo parámetro Radius en lugar de 2 números de punto flotante para el radio en los ejes x e y. (I46d1b)El cursor de TextField tiene una animación intermitente (Id10a7)
Los gestos parciales ya no requieren pasar
GestureToken
. (Id7ae5)Se corrigió un error de ConstraintLayout que causaba una falla en las recomposiciones. (Ibee5a, b/158164341)
Se corrigió
onClick
que no se podía invocar paraDropdownMenuItem
. (I3998b, b/157673259)Se cambió el nombre del paquete de
androidx.ui.text
aandroidx.ui.intl
dentro deLocale
yLocaleList
. (I8132c)
Versión 0.1.0-dev13
10 de junio de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev13
. La versión 0.1.0-dev13 contiene estas confirmaciones.
Errores conocidos
- Cuando la aplicación dependa de
androidx.core:core-ktx:1.2.0
y se use una FontFamily con varias fuentes o tamaños de fuentes, se procesará la selección de fuentes en una fuente de tamaño normal. Trabajaremos para solucionar este problema; por el momento, la solución consiste en usarandroidx.core:core-ktx:1.2.0-alpha01
oandroidx.core:core-ktx:1.1.0
.
Versión 0.1.0-dev12
27 de mayo de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev12
. La versión 0.1.0-dev12 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad con
animate()
paraDp
,Px
,Size
,Position
,Bounds
,PxPosition
,PxSize
,PxBounds
,IntPx
,IntPxSize
,IntPxPosition
,IntPxBounds
yAnimationVector
. (IB7518, b/156559139) - Se agregó el componente
DropdownMenu
enui-material
, una implementación del menú de Material Design. (I9bb3d, b/135742486) - Se quitó el elemento
LayoutTag()
obsoleto; en su lugar, usa Modifier.tag(). (If8044, b/157020665, b/156577646) - Se quitó el objeto
Modifier.matchParent()
obsoleto; en su lugar, usaModifier.matchParentSize()
. (If8044, b/157020665, b/156577646) - Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I57bff, b/15681014)
- Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc, b/153198273, b/154023028)
DoubleTapGestureFilter
ahora desambiguaSingleTapGestureFilter
en todo el árbol. (If92b1, b/147609897, b/148553848, b/138605697, b/148464969)- Se actualizó la API de Alignment y se agregó compatibilidad con la alineación absoluta (que no se duplica automáticamente en contexto de derecha a izquierda). (I38cd3, b/153633345)
VerticalScroller
ahora proporciona un objeto Column listo para usar.HorizontalScroller
ahora proporciona un objetoRow
listo para usar. (Ieca5d, b/157020670)- Se agregó el objeto
Modifier.indication
al paquete de base. Úsalo para mostrar la función de presionar/arrastrar/otra indicación en tus elementos interactivos personalizados. (I8425f, b/155287131) VerticalScroller
yHorizontalScroller
ahora admiten el desplazamiento invertido cuando se configuraisReversed
enScrollerPosition
. (I953es, b/155852672)- Se agregó compatibilidad con elementos que se pueden compilar en el diseño de texto. (I1373c, b/139320966)
- Se quitó la API obsoleta del objeto DrawBackground y se reemplazó por las API de la extensión drawBackground en Modifier. Implementaciones refactorizadas de color, pincel y pintura del objeto drawBackground para reducir las rutas de código y quitar el requisito de crear Modifier como parte de la composición. (I0343a, b/155999867)
- Se agregó
Modifier.padding(InnerPadding)
. (I94985, b/157133803) - Se quitaron los objetos obsoletos RowAlign y ColumnAlign de Row y Column. (If60d4, b/154524540, b/155858731)
- Se agregó el modificador de diseño
offsetPx
, que se puede usar para definir desplazamientos (dinámicos) en px. (I5af57, b/154841615) - Se permite mostrar/ocultar manualmente el teclado en pantalla con SoftwareKeyboardController. (Ifb9d6, b/155427736)
- Se cambió el nombre de
Emphasis.emphasize()
porEmphasis.applyEmphasis()
. (Iceebe, b/152874916) - Se agregó la utilidad para simular gestos de pellizco en las pruebas. (If6c42, b/145593752)
- Se quitó la clase
Size
sin usar, ya que hay una claseSize
duplicada en el móduloui-geometry
que se consume. (I1b602, b/156546424) - El nombre de
AnnotatedString.Item
cambió porAnnotatedString.Range
. (I2d44d, b/156126205) Cambia la estrategia para la generación de código del compilador de Compose. Antes del cambio, el compilador de compose transformaba las llamadas en funciones que admiten composición. Con este cambio, ahora transformamos el cuerpo de este tipo de función sin modificar (en su mayor parte) el sitio de llamada.
Esto significa que la mayor parte de la lógica que se comunica con el tiempo de ejecución de compose sucede al comienzo del cuerpo de la función, en lugar de ocurrir en el sitio de llamada.
Este cambio debería ser compatible con código fuente para cualquier uso de compose. La mayoría de los usuarios de compose no deberían tener que actualizar ningún código como resultado de este cambio.
A fin de brindar compatibilidad con este trabajo, se ha modificado la firma de JVM de todas las funciones que admiten composición. Una función que admite composición y que acepta un solo parámetro se transforma en una función que acepta tres parámetros. Los parámetros adicionales son Composer, un objeto integer. "clave", que es un valor entero de máscara de bits que se utiliza para propagar metadatos a través de llamadas.
Ahora, Compose también transforma los argumentos predeterminados en una función que admite composición. Lo hace sin introducir una sobrecarga sintética, adicional y predeterminada de la función. Como resultado, este cambio tendrá menos funciones que se definan.
Como consecuencia, se realizarán los siguientes cambios de comportamiento intencionales conocidos:
- Algunas llamadas se omitirán en los casos en que antes no hubiese ocurrido.
- Ahora, se suscriben y se administran, correctamente, las expresiones que admiten composición en las expresiones de argumento predeterminados.
En este trabajo, se incluyeron algunas optimizaciones:
- El resultado de las comparaciones de parámetros se propaga a otras funciones que admiten composición mediante el gráfico de llamadas. Como resultado, se realizarán menos comparaciones en el tiempo de ejecución, se reducirá el tamaño de la tabla de ranuras y se omitirán más funciones que admiten composición que antes no se omitían.
- Los parámetros que se determinan "estáticos" en el tiempo de compilación ya no se comparan ni se almacenan en el tiempo de ejecución. Esto reduce la cantidad de comparaciones y el tamaño de la tabla de ranuras.
- Se utiliza la estructura para el flujo de control del cuerpo de las funciones a fin de minimizar la cantidad de grupos que se generan. Esto reduce el tamaño de la tabla de ranuras y da como resultado menos trabajo para el tiempo de ejecución.
- Si los parámetros de envío y recepción para las funciones no se utilizan dentro del cuerpo de la función, no se los incluye para determinar si se puede omitir la función.
La mayoría de los cambios rotundos se realizaron en las API a las que el compilador se orienta de manera directa, y el uso típico de compose no se verá afectado:
- Se quitó el objeto
Composer::startExpr
. - Se quitó el objeto
Composer::endExpr
. - El objeto
Composer::call
dejó de estar disponible. - Se quitaron las sobrecargas del objeto
key
que no son varargs. Usa la versiónvararg
en el futuro. - La anotación Pivotal dejó de estar disponible. Usa el objeto
key
como reemplazo. - Se cambió el objeto ScopeUpdateScope::updateScope para esperar un elemento Function3 en lugar de Function1
- Se actualizaron los objetos restartableFunction y restartableFunctionN para que incluyan parámetros adicionales de tiempo de compilación.
La anotación del objeto @Model
dejó de estar disponible.
La anotación del objeto
@Model
dejó de estar disponible. Usa los elementosstate
ymutableStateOf
como alternativas. Se decidió darle de baja después de un debate minucioso.Justificación
Los motivos, entre otros, son los siguientes:
- Reduce la superficie de la API y los conceptos que debemos enseñar.
- Se alinea, de manera más estrecha, con otros kits de herramientas comparables (SwiftUI, React, Flutter).
- Se puede revertir la decisión. Siempre podemos recuperar el elemento
@Model
en el futuro. - Quita el uso de caso límite y la dificultad para responder preguntas sobre la configuración del elemento @Model como cuestiones que necesitamos controlar.
- Clases de datos, equals, hashcode del objeto
@Model
, etc. - ¿Cómo se pueden "observar" algunas propiedades y otras no?
- ¿Cómo especifico la igualdad estructurada frente a la igualdad referencial para usarla en la observación?
- Clases de datos, equals, hashcode del objeto
- Reduce la "magia" en el sistema. Disminuiría la probabilidad de que alguien suponga que el sistema es más inteligente de lo que es (es decir, que sabe cómo diferenciar una lista).
- Permite que el nivel de detalle en la observación sea más intuitivo.
- Mejora la refactorización de la variable -> propiedad sobre clase.
- Es posible que ofrezca posibilidades para realizar optimizaciones manuales y específicas del objeto State.
- Se alinea, de manera más estrecha, con el resto del ecosistema y reduce la ambigüedad hacia el estado inmutable o el "estado mutable que adoptamos".
Notas de migración
Casi todos los usos existentes del objeto
@Model
se transforman, de manera bastante trivial, de una de dos maneras. A modo de ejemplo, la siguiente clase del objeto@Model
cuenta con dos propiedades y se usa en un elemento que admite composición.@Model class Position( var x: Int, var y: Int ) @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
Alternativa 1: usa el objeto
State<OriginalClass>
y crea copias.Este enfoque es más fácil con las clases de datos de Kotlin. En esencia, convierte todas las propiedades anteriores del objeto
var
en propiedades del elementoval
de una clase de datos, luego usa el objetostate
en lugar del elementoremember
y asigna el valor state a las copias clonadas de la clase original mediante el método de conveniencia del elementocopy(...)
de la clase datos.Es importante tener en cuenta que este enfoque solo funciona cuando las únicas transformaciones de esa clase se realizan en el mismo alcance que se crea la instancia
State
. Si la clase está mutando, de manera interna, fuera del alcance del uso, y confías en esa observación, querrás usar el siguiente enfoque.data class Position( val x: Int, val y: Int ) @Composable fun Example() { var p by state { Position(0, 0) } PositionChanger( position=p, onXChange={ p = p.copy(x=it) } onYChange={ p = p.copy(y=it) } ) }
Alternativa 2: usa el objeto
mutableStateOf
y los delegados de propiedadEste 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 objetovar
de la clase original con las propiedades del elementovar
con el objetomutableStateOf
como su delegado de propiedad. Esto tiene la ventaja de que el uso de la clase no cambiará en absoluto, solo su implementación interna. Sin embargo, el comportamiento no es completamente idéntico al del ejemplo original, ya que cada propiedad se observa o se suscribe de forma individual, por lo que las recomposiciones que observas después de esta refactorización pueden ser más limitadas (lo cual es bueno).class Position(x: Int, y: Int) { var x by mutableStateOf(x) var y by mutableStateOf(y) } // source of Example is identical to original @Composable fun Example() { var p = remember { Position(0, 0) } PositionChanger( position=p, onXChange={ p.x = it } onYChange={ p.y = it } ) }
(I409e8, b/152050010, b/146362815, b/146342522, b/143413369, b/135715219, b/143263925, b/139653744)
Correcciones de errores
- Se corrigió un error: cuando el tamaño y el estilo de la fuente estaban anidados en una AnnotatedString, no se procesaba correctamente el texto. (I77a9d, b/155081453)
- Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron DrawScope y ContentDrawScope.
- Se cambió el nombre de CanvasScope por DrawScope.
- Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection.
- Se eliminó la subclase DrawScope de ContentDrawScope.
- Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente. (I1798e, b/155918846)
- Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (Iede0b, b/156681014)
Versión 0.1.0-dev11
14 de mayo de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev11
. La versión 0.1.0-dev11 contiene estas confirmaciones.
Cambios en la API
- Crossfade ahora acepta el parámetro
AnimationBuilder
opcional para permitir la configuración de la animación. (I6d6e0) - Se modificó la API de WithConstraints con expresión lambda final. Ahora, en lugar de dos parámetros, tiene un alcance de receptor que, además de las restricciones y layoutDirection, brinda propiedades
minWidth
,maxWidth
,minHeight
ymaxHeight
en Dp. (I91b9a, b/149979702) - Se cambió el nombre de
LayoutModifier2
porLayoutModifier
. (Id29f3) - Se quitó la interfaz obsoleta de
LayoutModifier
. (I2a9d6) HorizontalScroller
yVerticalScroller
ahora restablecen su posición de desplazamiento usando el estado de instancia guardado. (Ia0fae, b/155075048)- Se quitó
FocusManagerAmbient
. UsaFocusModifier.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, usaBox
con el modificadordrawBackground
. (I983c7, b/Hang75751) - Se agregó personalización del color del cursor al
TextField
. (I6e33f) - Ahora es posible ocultar o mostrar el teclado en pantalla usando
SoftwareKeyboardController
, que se entrega mediante la devolución de llamadaonTextInputStarted
. (I8dc44, b / 151860051) TextFieldValue
usado conTextField
ahora puede ser una recreación de una actividad que permanece vigente cuando se usa de la siguiente manera: var text porsavedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() }
. (I5c3ce, b/155075724)- Agrega parámetros de uso común a
Text()
. Si estás creando un estilo de texto local para pasar una pequeña cantidad de estos parámetros, comoText(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
conFocusNode
a fin de integrarlo con el subsistema de enfoque. (I7ea48) - Actualización de TextField: en dimensión horizontal, ocupará todo el espacio disponible. (IB08df, b/154638552)
- El elemento que admite composición AlineableLineOffset dejó de estar disponible. En su lugar, usa el modificador relativePaddingFrom(). Se quitó el elemento CenterAlignmentLine que admite composición. (I60107)
- Se agregó el modificador de diseño
defaultMinSizeConstraints
, que establece restricciones de tamaño en el diseño unido solo cuando las restricciones entrantes correspondientes no están especificadas (0 como restricción mínima e infinito como máxima). (I311ea, b/150460257) - Se quitó
Container
. En su lugar, usaBox
. (Ibbc2b, b/151407926) - Se quitaron los modificadores
LayoutWidth
/Height
/Size
obsoletos. (Ib0bc1) - Se agregaron valores de parámetros predeterminados al modificador de desplazamiento. (I37f06)
- Se agregó un modificador de padding simétrico. (I39840, b/152941819)
- Se quitó el modificador
LayoutAspectRatio
obsoleto. (I65a74) - Se corrigió un error en los modificadores de ancho y altura que hacía que se midiera el diseño unido sin restricciones de eje opuesto. (I210b8, b/154797971)
- Los botones inhabilitados ahora siguen visualmente la especificación de Material Design. (I47dcb, b/155076924)
FilledTextField
obtiene acción de IME, transformación visual y compatibilidad con el tipo de teclado. (I1f9cf, b/155075201)- Agrega el parámetro
strokeWidth
aCircularProgressIndicator
para personalizar el tamaño del trazo. Para cambiar el tamaño del trazo (altura) de unLinearProgressIndicator
, puedes usarModifier.preferredHeight()
o algún otro modificador de tamaño. (Icea16, b/154919081) - Se agregó la API para los íconos iniciales y finales en
FilledTextField
y el manejo del estado de error. (Ic12e0) - Agrega la acción
doPartialGesture
con el receptor PartialGestureScope que tiene los métodossendDown
,sendMoveTo
,sendMoveBy
,sendUp
ysendCancel
. (I6b058, b/152477560) - Agrega los métodos
sendDown
,sendMove
,sendUp
ysendCancel
aInputDispatcher
yGestureToken
para combinar estos eventos táctiles individuales en un gesto. (Ibd278, b/152477560) - Se agregó el operador de adición para (Text/Paragraph/Span)Style, que delega a la función merge(). (Ia1add)
- Se combinaron los proyectos
ui-framework
yui-platform
enui-core
, por lo que todas las dependencias de esos módulos solo deben depender de ui-core. (/I70067)
Correcciones de errores
- Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los consumidores que aún necesitan acceso a un lienzo, pueden usar el método de extensión drawCanvas que proporciona una devolución de llamada a fin de emitir comandos de dibujo con el lienzo subyacente. (I80afd)
- Se quitaron los modificadores
LayoutAlign
obsoletos. (I10877) - Agrega
Toolbar
para las operaciones relacionadas con texto. (I49d53)
Versión 0.1.0-dev10
29 de abril de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev10
. La versión 0.1.0-dev10 contiene estas confirmaciones.
Cambios en la API
- Se reemplazaron todos los usos anulables de
Color
en la API con valores no anulables y se usaColor.Unset
en lugar denull
. (Iabaa7) - Las funciones de medición intrínseca en
Layout
yLayoutModifier2
ahora tienen un receptorIntrinsicMeasureScope
que proporciona una API de consulta intrínseca con dirección de diseño propagada de forma implícita. (Id9945) - Se pueden medir los elementos secundarios
Layout
yLayoutModifier
con una dirección de diseño diferente. (Ibd731) - Se agregó el nuevo
Modifier.zIndex()
para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño principal. Se cambió el nombre de la propiedad de elevación deDrawLayerModifier
porshadowElevation
y esta propiedad ya no controla el orden del dibujo. Se cambió el orden de los parámetros deDrawShadow
: el primer parámetro ahora es laelevation
y el segundo es lashape
, con unaRectangleShape
predeterminada. (I20150, b/152417501) - Se quitaron
onSizeChange
yonPositionChange
deOwner
. (I5c718) - Se agregó
Constraints2
, una copia deConstraints
que solo admite valores de restricciónInt
, en lugar deIntPx
. Se quitaráIntPx
y se asumirá que todas las restricciones de número entero son píxeles como Android.- También se agregó
IntSize
, que finalmente reemplazará aIntPxSize
. (I4b43a)
- También se agregó
- Se agregaron
InteractionState
yInteraction
, lo que facilita la compilación de componentes que reaccionan a los cambios de estado de la IU, como presionar y arrastrar. (Icfe25, b/152525426) - Se trasladó
RectangleShape
deandroidx.ui.foundation.shape.*
aandroidx.ui.graphics.*
. (Ia74d5, b/154507984) - Actualización de la API de
TextField
: se combinaron las devoluciones de llamada deonFocus
yonBlur
en una sola devolución de llamada deonFocusChange(Boolean)
con un parámetro booleano. (I66cd3) - Se quitó
FontLoader
. UsafontResource
en su lugar. (Id0308) - Se quitó la API
MaskFilter
sin usar, ya que tiene un uso limitado y no está optimizada para la aceleración de hardware en la mayoría de los casos prácticos. (I54f76) - Se agregó Unset
Color
para representar un valor sin configurar sin el recuadro "Colors". (If901a) - Se agregaron los métodos de extensión
Canvas.rotate
yCanvas.scale
a fin de consumir coordenadas dinámicas opcionales para transformaciones. De forma predeterminada, estos métodos se ubican en la esquina superior izquierda de la traslación del lienzo actual.- También se trasladó
Canvas.rotateRad
a fin de que sea un método de extensión para mantener la coherencia. (Ibaca6).
- También se trasladó
- Se cambió el color predeterminado del BAF y el BAF extendido a
MaterialTheme.colors.secondary
. (I3b9b9, b/154118816) - Ya no es necesario llamar explícitamente a
onIdle()
después deComposeTestRule.setContent {}
. (Iafb2e, b/154079800) - Ahora puedes pasar una
ActivityTestRule
personalizada aAndroidComposeTestRule
. (I38206, b/153623653) - Se agregaron
getLineStart
,getLineEnd
,getEllipsisOffset
ygetEllipsisCount
aTextLayoutResult
. (Ibc801) FontWeight.lerp
ya no se ajusta. Sigue siendo una clase de datos. (I521c2)- El constructor
FontWeight
ahora es público; ya no es una clase de datos. (Id6b1f)
Correcciones de errores
- Ingresa parámetros rect opcionales adicionales en
ImagePainter
para admitir el dibujo de una subsección deImageAsset
subyacente. (I0ea9e) - Se corrigió una falla en
AdapterList
que se producía cuando se quitaban elementos. (Ic64b0, b/pa3195921) - Ahora se requiere el uso de
ComposeTestRule
para que funcione cualquier elemento Finder (como findByTag). (I75bb9, b/153565271)
Versión 0.1.0-dev09
15 de abril de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev09
. La versión 0.1.0-dev09 contiene estas confirmaciones.
Cambios en la API
- Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)
alignToSiblings now accepts a
ahora acepta un Measured en lugar deinstead of
. (I5788d)- (I45f09, b/152842521)
- Se cambió el nombre de
ScaleFit
porContentScale
. - Se trasladó el valor
ContentScale
del móduloui-graphics
al móduloui-core
a fin de quede ubicado en el mismo módulo que la API de alineación. - Se cambió el nombre de
FillMaxDimension
porCrop
. - Se cambió el nombre de
FillMinDimension
porFit
. - Se cambió el nombre de
Fit
porInside
para que coincida mejor con equivalentes deImageView.ScaleType
. - Se agregó documentación que indica que con la combinación de
Crop
yAlignment.Center
se obtiene el mismo resultado que conImageView.ScaleType.CENTER_CROP
, y que conFit
cuando se usa conAlignment.Center
se obtiene el mismo resultado que conImageView.ScaleType.FIT_CENTER
. - Si se usa
Inside
conAlignment.Center
, se obtiene el mismo resultado que conImageView.ScaleType.CENTER_INSIDE
.
- Se cambió el nombre de
- Se agregó compatibilidad con lectura de derecha a izquierda para modificadores de dibujo. (I0aaf9)
- Se lanzó la API para aumentar vistas de Android desde XML. Consulta la demostración de ViewInCompose para obtener más detalles. (I42916)
- Se agregaron
positionInParent
yboundsInParent
paraLayoutCoordinates
. (Icacdd, b/152735784) DrawLayerModifier
ydrawLayer()
ahora establecen de forma predeterminada el valorfalse
enclipToBounds
yclipToOutline
. (I0eb8b, b/152810850)- Se cambió el nombre de
LayoutResult
porMeasureResult
. (Id8c68) - Se agregó
LayoutModifier2
, una nueva API para definir modificadores de diseño;LayoutModifier
dejó de estar disponible. (If32ac) - Quita
ProvideContentColor
; en su lugar, usa directamenteContentColorAmbient
conProviders
. (Iee942). - Agrega un parámetro de color al texto, lo que permite anular el color del estilo del texto sin necesidad de combinarlo manualmente con el estilo proporcionado en un tema. (I41a66)
- El sistema de temas de formas se actualiza según la especificación de Material Design. Ahora puedes proporcionar formas pequeñas, medianas y grandes para que las use la mayoría de los componentes. (Ifb4d1)
LayoutDirectionAmbient
ya no está disponible. Para leer la dirección del diseño definida por la configuración regional, usalocaleLayoutDirection
enConfigurationAmbient
. (I851b1)- El nuevo
LifecycleOwnerAmbient
ya está disponible. Ahora, una actividad que usas con la IU de Compose debería extenderandroidx.activity.ComponentActivity
(oAppCompatActivity
).setContent
enandroid.app.Activity
dejó de estar disponible. (Idb25a, b/153141084) - Las ventanas emergentes admiten lectura de derecha a izquierda (Ib6657)
- Agrega
ClipboardManager
. (I1dd2b) - Se agregó compatibilidad con dimensiones personalizadas de ConstraintLayout. (Idb1a5)
- Se quitó
OnChildPositioned
. En su lugar, los desarrolladores deben usar el modificadorModifier.onChildPositioned
. (I5ade7, b/151141173, b/151641453, b/151818355) - Se cambió el nombre
toFrameworkRect
/toFrameworkRectF
portoAndroidRect
/toAndroidRectF
a fin de que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las API del marco de trabajo de Android sobre las que están compiladas. También se actualizaron los documentos de estas API. (I86337) - Se cambió el nombre de
EdgeInsets
porInnerPadding
. Se cambió el nombre del parámetro innerPadding de los botones de Material por padding. (I66165) - Se agregaron modificadores para la definición de tamaño en mediciones intrínsecas y dejaron de estar disponibles los componentes que cumplían esta función. (I8295d)
- Se quitaron las funciones
Wrap
yCenter
que admiten composición y que quedaron obsoletas. (I29e23) - El control deslizante ahora no tiene estado. Los usuarios deberán pasar y actualizar el estado por su cuenta, como con cualquier otro control. (Ia00aa)
- Se quitó
StaticDrawer
. Si lo necesitas, usaBox
con el ancho especificado para el material. (I244a7) - Se agregó el parámetro de modificador a ListItem y se reordenaron los parámetros para ubicar el cuerpo de expresiones lambda al final. (I66e21)
- Se agregó el parámetro de constructor
defaultFontFamily
aTypography
, lo que permite especificar la familia de fuentes predeterminada que se usará para cualquier TextStyles proporcionado que no tenga una familia definida. (I89d07) - Se quitaron temporalmente tablas de datos de materiales de la superficie de la API. (Iaea61)
- Se cambió el nombre de los parámetros en la función
Divider
que admite composición. (Ic4373) - Se cambió el nombre del parámetro final "secundario" de muchos componentes de Material; usa el nombre nuevo si lo usaste mediante parámetros con nombre (o simplemente usa la sintaxis final de lambda). (Ia6d19)
- Quita
MaterialTheme.emphasisLevels
; en su lugar, usaEmphasisAmbient.current
para recuperar los niveles de énfasis. (IB5e40) - Ahora se puede usar
savedInstanceState()
con tipos anulables. (I6847f, b/153532190) Se agregó
ui-rxjava2
, un nuevo artefacto con adaptadores para RxJava2. (Ifab4b, b/153369097)- Ejemplo de uso:
val value by observable.subscribeAsState()
Se agregó
ui-livedata
, un nuevo artefacto con un adaptador para LiveData. (Ie9e8c, b/150465596)- Ejemplo de uso:
val value by liveData.observeAsState()
Correcciones de errores
- Se agregaron los parámetros
verticalGravity
yhorizontalGravity
aRow
yColumn
, respectivamente. (I7dc5a) - Se cambió el nombre de
ui-text module was renamed as
por ui-text-core` (I57dec) - Se mejoró la API
DrawModifier
(Ibaced, b/152919067):- El alcance del receptor incluye
draw()
ContentDrawScope
- Se quitaron todos los parámetros de
draw()
DrawScope
tiene la misma interfaz que elCanvasScope
anteriorContentDrawScope
tiene el métododrawContent()
.
- El alcance del receptor incluye
runOnIdleCompose
yrunOnUiThread
ahora son funciones globales en lugar de ser métodos enComposeTestRule
. (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 { ... }
oby mutableStateOf(...)
. (I5312c) - El elemento
ColoredRect
dejó de estar disponible. UsaBox(Modifier.preferredSize(width, height).drawBackground(color))
en su lugar. (I499fa, b/152753731) - Cambiamos la forma en que medimos el primer diseño que colocas dentro del bloque
activity.setContent { }
. Antes, llenaba toda la pantalla de la actividad, mientras que ahora se comporta como si colocaras el diseño dentro de una pila: puede ser más pequeño que una pantalla y se ubica en la pantalla superior izquierda. Si deseas usar el comportamiento anterior, puedes aplicar Modifier.fillMaxSize() para tu diseño. (Ie88a7, b/153453714) - Se cambió el nombre del módulo
ui-text-compose
porui-text
.ui-text
ahora contiene elementosCoreText
yCoreTextField
que admiten composición. (IB7d47) - Se movieron los elementos
ui-framework/CoreText
,CoreTextField
que admiten composición enui-text-compose
. Te recomendamos incluirui-text-compose
en tu proyecto. (I32042) - Se actualizaron
wrapContentWidth
ywrapContentHeight
para incluirAlignment
vertical u horizontal en lugar deAlignment
. Se actualizó el modificador de gravedad para aceptarAlignment
vertical u horizontal. Se actualizaronRow
,Column
yStack
para admitirAlignment
continuas personalizadas. (Ib0728) - Se creó la API de
PixelMap
para admitir consultas de información de píxeles desde unImageAsset
. (I69ad6) - Se agregó la implementación de Material Design del campo de texto relleno. (Ic75cd)
- Se reemplazó el nombre del paquete
ui-android-text
(androidx.text
) porandroidx.ui.text.platform
a fin de cumplir con la política de androidx. (I42711)
Versión 0.1.0-dev08
1 de abril de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev08
. La versión 0.1.0-dev08 contiene estas confirmaciones.
Cambios en la API
- Se agregaron propiedades translationX/Y a fin de admitir la compensación de la lista de visualización de comandos de dibujo para una capa determinada. Esto es útil para mover contenido en respuesta a animaciones o eventos táctiles. (I8641c)
- Se agregaron parámetros
pivotX
,pivotY
a las API de capa a fin de admitir la rotación y el escalamiento en un punto específico de una capa. (Icf7c3) - Se movió el elemento arrastrable al modificador. (Id9b16, b/151959544).
- Se movió
Text
al paqueteandroidx.ui.foundation
, desdeandroidx.ui.core
. (I87ce5) - Se agregó el parámetro
enabled
a Checkbox, Switch y Toggleable. (I41c16) - Ripple ahora es un modificador. Mientras que Clickable aún no se convirtió al uso recomendado, que es
Clickable(onClick = { ... }, modifier = ripple())
. (Ie5200, b/151331852, b/150060763) - Se agregó la API de VectorPainter para reemplazar la API de subcomposición existente por gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un DrawModifier.
- Se dejaron de compilar los elementos anteriores que admiten composición de DrawVector favor de VectorPainter.
- Se cambió el nombre de la API de
Image(Painter)
porPaintBox(Painter)
. - Se creó el elemento
Vector
que admite composición y que se comporta como el elementoImage
, pero con unVectorAsset
en lugar de unImageAsset
. (I9af9a) (b/149030271)
- El elemento
ParentData
que admite composición dejó de estar disponible. Debes crear un modificador que implemente la interfazParentDataModifier
o usar el modificadorLayoutTag
si solo necesitas etiquetar elementos secundarios de diseño para reconocerlos dentro del bloque de medición. (I51368, b/150953183) - Se quitó
OnPositioned
y se reemplazó por el modificadoronPositioned
. (I2ea3c) - Ahora se puede acceder a los miembros
RowScope
yColumnScope
desde fuera deRow
yColumn
. (I3a641) - El elemento
Container
ahora es obsoleto. UsaBox
en su lugar. (I675ce, b/151407926) - Se refactorizaron las API de
FloatingActionButton
para aceptar lambdas que admitan composición en lugar de primitivas. Consulta muestras actualizadas para obtener información de uso. (I00622) - Nuevas funciones:
savedInstanceState()
yrememberSavedInstanceState()
. Son similares astate()
yremember()
, pero tienen una compilación de compatibilidad de estado de instancias guardada. (If1987, b/152025209)
Correcciones de errores
- Se reemplazaron el modificador y el operador por funciones de extensión (I225e4)
- El elemento Center que admite composición dejó de estar disponible. Debería reemplazarse con el modificador
LayoutSize.Fill
+LayoutAlign.Center
o con uno de los elementos que admiten composiciónBox
oStack
, con los modificadores adecuados aplicados. (Idf5e0) - Se modificaron las API de
MaterialTheme
, comoMaterialTheme.colors()
,MaterialTheme.typography()
, de modo que sean propiedades en lugar de funciones. Se quitaron los paréntesis de las llamadas existentes y no se espera ningún cambio de comportamiento. (I3565a)
Versión 0.1.0-dev07
18 de marzo de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev07
. La versión 0.1.0-dev07 contiene estas confirmaciones.
Cambios en la API
- Se agregaron las siguientes API a ManualAnimationClock:
hasObservers: Boolean
ydispatchOnSubscribe: Boolean
de parámetro de constructor. (Iaa134) - Agrega OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones OnPositioned y OnChildPositioned que admiten composición. (I2ec8f)
- Se agregó LayerModifier, un modificador que permite agregar un RenderNode a un diseño. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará a RepaintBoundary. (I7100d, b/150774014)
- Se permitió que la dirección del diseño se propagara desde el nodo de diseño de nivel superior hasta los secundarios. Se agregó un modificador de dirección de diseño. (I3d955)
- Se creó un elemento Image que admite composición para controlar el tamaño y el diseño, además de dibujar un ImageAsset determinado en la pantalla. Este elemento también admite el dibujo de cualquier instancia arbitraria de Painter que respete su tamaño intrínseco, así como un tamaño fijo determinado o un tamaño mínimo. (IBcc8f)
- Se cambió el nombre de Image por ImageAsset para destacar mejor la diferencia entre los datos de Image y el próximo elemento Image que admite composición, que se utiliza para participar en el diseño y dibujar contenido. (Id5bbd)
- Se creó un método de extensión en
android.graphics.Bitmap
,Bitmap.asImageAsset()
, a fin de crear una instancia útil de ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el marco de trabajo de Compose. (Id5bbd) - Se movió
androidx.compose.ViewComposer
aandroidx.ui.node.UiComposer
y se movióandroidx.compose.Compose.subcomposeInto
aandroidx.ui.core.subcomposeInto
. (Idef00) - Se quitó la función de diseño que admite composición y que acepta varargs de elementos secundarios. (I8f7f6)
- Se agregó a
WithConstraints
el parámetroLayoutDirection
. (I6d6f7) - Se agregó el modificador LayoutOffset para compensar la posición del diseño. (I0b8a3)
- Se trasladó Surface y Card de
androidx.ui.material.surface
alandroidx.ui.material
. (I88a6d) (b/150863888)
Correcciones de errores
- Se cambió el nombre de LayoutFlexible por LayoutWeight. Se cambió el nombre del parámetro estricto para completar. (If4738)
- Se reemplazó la función Opacity que admite composición por el modificador drawOpacity. (I5fb62)
- Las pruebas que usan AndroidCompositTestRule ahora proporcionan un reloj de animación en la raíz de la composición que se puede pausar, reanudar y avanzar manualmente. (Id54c5)
- Se quitó RepaintBoundary y se reemplazó por DrawLayerModifier. (I00aa4)
- Button, FloatingActionButton y Clickable ahora tienen un parámetro
enabled
separado. Se reorganizaron algunos de los parámetros de Button o se les cambió el nombre. (I54b5a) - Se cambió el comportamiento de DrawVector, que dejó de ser una función que admite composición normal para mostrar un modificador drawVector() que dibujará el vector como fondo de un diseño. (I7b8e0)
- Reemplaza la función que admite composición Clips con el modificador drawClip(). DrawClipToBounds es un modificador conveniente para usar cuando solo necesitas recortar los límites de la capa con una forma rectangular. (If28eb)
- Se reemplazó la función que admite composición DrawShadow con el modificador drawShadow(). Las sombras ahora se dibujan como parte de LayerModifier. (I0317a)
- La función Wrap que admite composición dejó de estar disponible. Se puede reemplazar con el modificador LayoutAlign o con la función Stack que admite composición. (IB237F)
- Se cambió el nombre de Painter.toModifier por Painter.asModifier debido a que el modificador recientemente creado tiene una referencia al Painter original que se puede compartir entre varias instancias del modificador. (I7195b)
- Ya no se permite el relleno negativo en LayoutPadding. En su lugar, se debería usar LayoutOffset para las compensaciones de posición negativa. (Ifb5b1)
Versión 0.1.0-dev06
4 de marzo de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev06
. La versión 0.1.0-dev06 contiene estas confirmaciones.
Cambios en la API
- El componente de pila admite la dirección de derecha a izquierda. (Ic9e00)
- Asistencia inicial para lectura de derecha a izquierda en el diseño de Compose. (Ia5519)
- Se agregaron Icon, IconButton y IconToggleButton, y se quitó AppBarIcon. Puedes reemplazar directamente los usos existentes de AppBarIcon con IconButton, y tendrán el objetivo táctil correcto. Consulta las muestras para obtener información de uso y consulta Íconos para conocer los íconos de material que puedes usar directamente con estos componentes. (I96849)
- Se quitó la API de la barra de notificaciones con parámetros de string a fin de usar la sobrecarga que acepta funciones lambda que admiten composición. Consulta las muestras actualizadas para obtener información sobre el uso. (I55f80)
- Se refactorizó la API de pestañas para aceptar lambdas de
text
yicon
. (Ia057e) - Se agregó el componente BottomNavigation; consulta los documentos y las muestras para obtener información sobre el uso. (I731a0)
- Agrega compatibilidad para llamar a acciones de semántica personalizadas. (I8c818)
Correcciones de errores
- Compatibilidad con lectura de derecha a izquierda en el modificador LayoutPadding. (I9e8da)
Versión 0.1.0-dev05
19 de febrero de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev05
. La versión 0.1.0-dev05 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API de Painter. Se creó una API para abstraer el dibujo de contenido en una región específica. Este comportamiento es similar al de las API de Drawable, pero proporciona una superficie de API más simplificada. Además, hay implementaciones genéricas para aplicar varios efectos, como Alfa y ColorFilters, para implementaciones de dibujo arbitrarias, y las mismas implementaciones tienen la capacidad de proporcionar una asistencia más optimizada para estas instalaciones. (aosp/1214802)
- Cambios rotundos en la API de ambients. Consulta la documentación de registro y de
Ambient<T>
para obtener más detalles. (I4c7ee, b/143769776) - Se modificó LayoutCoordinates para que providedAlignmentLines sea un conjunto en lugar de un mapa y para que LayoutCoordinates implemente el operador
get()
a fin de recuperar un valor. Esto permite que los modificadores cambien con más facilidad uno o más valores del conjunto, sin que se cree una colección nueva para cada modificador. (I0245a) - LayoutCoordinates ya no tiene una propiedad de posición. La propiedad de posición no tiene sentido cuando se tienen en cuenta los LayoutModifiers, la rotación o el escalamiento. En cambio, los desarrolladores deben usar parentCoordinates y
childToLocal()
para calcular la transformación de una LayoutCoordinate a otra. - LayoutCoordinates usa
IntPxSize
para la propiedad de tamaño, en lugar de "PxSize". Se usan tamaños de píxeles enteros para los diseños, por lo que todos los tamaños de diseño deberían usar números enteros y no valores de punto flotante. (I9367b) - Se agregó AdapterList, un componente de lista de desplazamiento que solo compone y presenta los elementos visibles. Según los problemas que se conocen, solo es vertical y no maneja todos los casos de cambios en sus elementos secundarios. (Ib351b)
- Agrega compatibilidad inicial para incorporar vistas de Android dentro de Compose. Consulta la demostración de ViewInCompose.kt para obtener más detalles. (I6d1ce)
- Se actualizó LayoutAlign para que ya no ocupe todo el espacio disponible. (I2b14f)
- Se agregaron los módulos
androidx.ui:ui-material-icons-core
yandroidx.ui:ui-material-icons-extended
. Puedes depender deandroidx.ui:ui-material-icons-extended
para poder usar directamente todos los íconos de material (material.io/icons) desde Compose. Se incluirá directamente un subconjunto pequeño (en un principio, de tres, pero se ampliará en el futuro) con los íconos más usados como parte de la biblioteca ui-material principal, por lo que no deberás agregar esta dependencia grande para usar íconos como Menú. Consulta la documentación deandroidx.ui.material.icons.Icons
para obtener más información y las muestras vinculadas. - Se quitó el elemento AspectRatio que admite composición y se reemplazó por el modificador. Se borraron el elemento FlexColumn obsoleto, los elementos que admiten composición de FlexRow y el modificador de Spacing. (Iec8a7)
- Se reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta las muestras de Buttons actualizadas para obtener información sobre el uso. (If63ab, b/146478620, b/146482131)
Correcciones de errores
- Se combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)
Errores conocidos
- Los cambios en las propiedades semánticas de un componente hacen que se pierda todo el estado de los elementos secundarios, lo que provoca fallas en las animaciones y en todos los elementos que dependen de que el estado se conserve después de las recomposiciones. Debido a que actualmente no es posible comparar lambdas, se incluyen todos los componentes que definen una acción semántica con una lambda que no sea
remember
, como Scroller. Se solucionará este problema en la próxima versión. (b/148606417)
Versión 0.1.0-dev04
29 de enero de 2020
Lanzamiento de androidx.ui:ui-*:0.1.0-dev04
. Para conocer las confirmaciones incluidas en esta versión, consulta este artículo.
Cambios en la API
- Haz que los ID de punteros sean universalmente únicos. (I42cde)
- Combinación de nodos de semántica (aosp/1138236)
- Mejoras en la superficie de la API de Constraints (I0fd15)
- Se refactorizaron
PathParser
yPathNode
/PathCommand
(I715ae) - Actualización de la superficie de la API de DpConstraints (I712a0)
- Se agregó compatibilidad para modificadores que implementan varias interfaces. (I22c16)
- Se implementó la cancelación para el resto de los detectores de gestos. (I349f4)
- Se agregó
Color.compositeOver()
a Color (I5379d). - Quita algunas clases innecesarias para
androidx.ui:ui-core
:ImageByteFormat
,ImageRepeat
,Matrix2
. (I45e6b) - Se habilitó la compilación incremental de Kotlin en proyectos de Compose (b/144304390)
- Concatena modificadores con
+
(Ic33d3) - Se agregó el modificador LayoutTag (I69fe4).
- Agrega atributos ParagraphStyle a TextStyle (If0d40)
- Se agregó DrawModifier, un tipo de modificador que tiene permiso para dibujar en la superficie del diseño modificado. (I5fa56)
- Cambia el almacenamiento de la posición del modificador para que sea relativa. (I5977f)
- Se agregó la API de prueba para realizar deslizamientos sobre elementos (I9125a)
- Se agregó el componente Box para combinar la función común de dibujo y diseño. (I6e2a7)
- Los desplazadores ahora muestran el comportamiento nativo de Android. (b/147493715)
- Se reemplazó DrawBorder con el modificador Border (Id335a).
- Se mejoró la detección de gestos de desplazamiento. (I87d36)
- Agrega metadatos de contentColor a Foundation (ICD074)
- Se agregó el componente de material de Scaffold. Scaffold implementa la estructura de diseño visual básica de Material Design. (I7731b)
- Usa el nuevo parámetro contentColor de Surface en los botones (b/146210556)
- Se quitó
textStyle.withOpacity()
(I8cc9a) - Agrega el subsistema Emphasis (Ife95c)
- Las propiedades FAB de
FloatingActionButtonKt
ahora son privadas (I9c121) - Se implementaron las primeras iteraciones de una Snackbar (If1c08).
- Se agregó compatibilidad inicial para el tema oscuro (I6323a).
- Se agregaron size, center y localToGlobal a
GestureScope
(I1ea37) - Agrega API para inyección de gesto de doble clic (I44902)
- Se agregó
sendLongClick methods
aGestureScope
(Ic7db9). - Convierte (x, y) en
PxPosition
en la inyección de gestos (Ifefa4) - Se agregó la velocidad deseada al gesto inyectado (I3b9df).
- Se agregó la captura de mapa de bits a la API de prueba de Compose (
androidx.ui:ui-test
). (I4e36c) - Se movió
doClick
aGestureScope
(I56211) - Se agregaron
findBySubstring
y los filtros correspondientes aFindersKt
. (Ief0b9) - Se refactorizó la selección de texto modificada a 1 carácter. (Iff757)
- Se quitó TextSpan (Iebece).
- Quita clases de Composition y las reemplaza con la clase base de Composer (Ieadbf)
- Se cambió el vector defaultWidth/defaultHeight para usar Dp (Iad267).
- Genera grupos correctamente para las llamadas intercaladas que admiten composición (Ibf739)
- Se habilitó el prototipado de marcas en detectores de gestos. (I4b7b0)
- Cambia el argumento de elipsis y maxLines de anulable a no nulo (I46dac)
- Ahora, AnnotatedString usa SpanStyle (Ib6d3e).
- Se agregó compatibilidad con modificadores para WithConstraints (b/145399789).
- Pasa el estilo de párrafo a TextDelegate (Id2d4a)
- Se agregó la clase
SpanStyle
(Ifdb4f) - Usa el valor predeterminado en lugar del número de punto flotante que acepta valores nulos en
TextGeometricTransform
. (I1bf00) - Se agregó
PreviewActivity
aandroidx.ui:ui-tooling
(Ic8988) ModelObserver
ahora tiene un subproceso único. (b/146144712)- Se agregó una comparativa para ModelObserver (Ia176b)
- Llama a devoluciones de llamada de cancelación cuando se quita PointerInputNode del árbol. (I7112a)
- Se quitó el modificador LayoutInflexible para la fila y columna (I0d820).
- Hereda modificadores de diseño de
ParentDataModifier
(I49b6a) - Se agregó el modificador unidos (I6f8df)
- Se agregaron modificadores alineados (Ifc581)
- Se agregó el diseño de restricción a Compose (I175ad).
Refactoriza