IU de Compose
androidx.compose.ui
androidx.compose.ui.geometry
androidx.compose.ui.graphics
androidx.compose.ui.platform
androidx.compose.ui.test
(Puedes ver todos los paquetes de Compose en los documentos de referencia de la API).
Actualización más reciente | Versión estable | Versión potencial | Versión beta | Versión alfa |
---|---|---|---|---|
12 de junio de 2024 | 1.6.8 | - | 1.7.0-beta03 | - |
Estructura
Compose es una combinación de 7 IDs 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 correspondientes a cada conjunto de notas de la versión.
Grupo | Descripción |
---|---|
compose.animation | Compila animaciones en las 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 IUs 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.material3 | Compila las IUs de Jetpack Compose con componentes de Material Design 3, la siguiente evolución de Material Design. Material 3 incluye temas y componentes actualizados, y funciones de personalización de Material You, como el color dinámico. Además, se diseñó para ser coherente con el nuevo estilo visual y la IU del sistema de Android 12. |
compose.runtime | Se trata de los componentes fundamentales del modelo de programación de Compose y de su administración de estados, así como del entorno de ejecución principal al cual se orienta el complemento de compilación de Compose. |
compose.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. |
Cómo declarar dependencias
Para agregar una dependencia en 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:
Groovy
dependencies { implementation "androidx.compose.ui:ui:1.6.8" } android { buildFeatures { compose true } composeOptions { kotlinCompilerExtensionVersion = "1.5.14" } kotlinOptions { jvmTarget = "1.8" } }
Kotlin
dependencies { implementation("androidx.compose.ui:ui:1.6.8") } android { buildFeatures { compose = true } composeOptions { kotlinCompilerExtensionVersion = "1.5.14" } kotlinOptions { jvmTarget = "1.8" } }
Para obtener más información sobre las dependencias, consulta Cómo agregar dependencias de compilación.
Comentarios
Tus comentarios ayudan a mejorar Jetpack. Avísanos si descubres nuevos errores o tienes ideas para mejorar esta biblioteca. Consulta los errores existentes de esta biblioteca antes de crear uno nuevo. Puedes agregar tu voto a un error existente haciendo 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.7
Versión 1.7.0-beta03
12 de junio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta03
. La versión 1.7.0-beta03 contiene estas confirmaciones.
Versión 1.7.0-beta02
29 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta02
. La versión 1.7.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
SemanticsProperties.Editable
aIsEditable
y el deSemanticsPropertyReceiver.editable
a un valorisEditable
Ahora, la propiedad es un booleano y siempre se especifica mediante campos de texto. (I8acd8). - Se cambió el nombre del parámetro de comparativas de accesibilidad. (I3d440).
- Se actualizó la API para aplicar diseño a los vínculos:
TextLinkStyles
ahora forma parte del constructorLinkAnnotation
y del métodoAnnotatedString.fromHtml
(I90b2b). También se quitóTextDefaults
del material (I5477b).
Correcciones de errores
- Se cambió el nombre de
LayoutCoordinates.introducesFrameOfReference
aLayoutCoordinates.introducesMotionFrameOfReference
para reflejar mejor su propósito Se cambió el nombre de la función relacionada para calcular las coordenadas en función de esa marca. (I3a330).
Versión 1.7.0-beta01
14 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-beta01
. La versión 1.7.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
performCustomAccessibilityActionLabelled
porperformCustomAccessibilityActionWithLabel
y el deperformCustomAccessibilityActionWhere
porperformCustomAccessibilityActionWithLabelMatching
(I5387f). AnnotatedString.hasEqualsAnnotations
ahora eshasEqualAnnotations
. (I685c0)- Se actualizó la API para obtener vínculos con el tema Material en el texto. Específicamente, se quitaron los métodos de
TextDefaults
para crear un temaLinkAnnotations
y analizar el HTML con vínculos temáticos. En su lugar, se agregó una claseTextLinkStyles
que permite aplicar estilo a los vínculos como un parámetro al elemento Text componible. (I31b93).
Correcciones de errores
- Se corrigieron casos de uso adicionales cuando se agregaban modificadores de entrada de puntero de forma dinámica durante eventos 63e1504.
Versión 1.7.0-alpha08
1 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha08
. La versión 1.7.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad para implementaciones de formas mutables.
Shape#createOutline
ahora se observa dentro de las capas de gráficos, por lo que la lectura de los valores de estado en el interior provocará invalidaciones cuando cambie el estado, lo que permite animaciones de formas con mejor rendimiento. (Id1629, b/326070216). - Se cambió el nombre de
isPositionedByParentWithDirectManipulation
aintroducesFrameOfReference
. Ten en cuenta que ahora tiene el efecto inverso, lo que significa que, de forma predeterminada, la mayoría de losLayoutCoordinates
introducen un marco de referencia y, solo cuando se lo coloca bajo manipulación directa, la propiedad será falsa. Para consultar la posición solo con aquellas que introducen un marco de referencia, usapositionInLocalFrameOfReference(...)
. O bienpositionInLocalLookaheadFrameOfReference
desde unLookaheadScope
. (Ifc5f7). - Se volvieron estables las APIs de
LookaheadScope
(I21507). - Cambia la lambda de acción para
getScrollViewportLength
según los comentarios recomendados de la API. (Ibc74a). - Se actualizaron las APIs de Outline de
GraphicsLayer
para consumir parámetros de número de punto flotante en lugar de int. Se quitaron los valores centinelas deUnsetOffset/UnsetSize IntSize
en favor de las constantes Unspecified ya existentes en las clases intercaladas Offset y Size basadas en flotantes (I2fb03, b/333863462). - Cuando se inserta la entrada del mouse durante las pruebas,
MouseInjectionScope.click()
,MouseInjectionScope.doubleClick()
,MouseInjectionScope.tripleClick()
yMouseInjectionScope.longClick()
ahora aceptan un parámetrobutton: MouseButton
para que sean más aplicables a nivel universal. El valor predeterminado esMouseButton.Primary
para todos los métodos. (I31a23, b/190493367, b/261439695). - Se cambió el nombre de
onClicked
aonClick
dentro deLinkInteractionListener
(Iaa35c). - Se cambia el nombre de
TextInclusionStrategy.isInside
aisIncluded
. Hace que el tipo de datos que se muestra deParagraph/MultiParagraph#getRangeForRect()
no sea anulable. (I51f26).
Correcciones de errores
- Se corrigió la captura de capturas de pantalla largas para contenedores de desplazamiento con
reverseScrolling=true
. (I7c59c).
Contribución externa
- Se agregó compatibilidad para la carga previa de elementos en
LazyLists
anidados (p. ej., unLazyColumn
que renderizaLazyRows
anidados). Se espera que este cambio reduzca la pérdida de fotogramas durante el desplazamiento para estosLazyLists
El valor predeterminado de la implementación consiste en precargar los primeros 2 elementos anidados. Sin embargo, las nuevas APIs deLazyLayoutPrefetchStrategy(nestedPrefetchItemCount)
yLazyListPrefetchStrategy#onNestedPrefetch
pueden controlar este comportamiento. (I51952).
Versión 1.7.0-alpha07
17 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha07
. La versión 1.7.0-alpha07 contiene estas confirmaciones.
Cambios en la API
ClickableText
se marcó como obsoleto. Para agregar vínculos al texto, crea unAnnotatedString
con unLinkAnnotation
correspondiente a tu vínculo y pasa esteAnnotatedString
al elemento componible Text. (I34d4b, b/323346994).- Se introdujo
ViewConfiguration.HandwritingGestureLineMargin
para los gestos de escritura a mano. Se agregó compatibilidad con el gestoJoinOrSplit
paraBasicTextField
(Ie6e13, b/325660505). FocusProperties.enter
yFocusProperties.exit
dejaron de ser experimentales.FocusDirection.Enter
yFocusDirection.Exit
dejaron de ser experimentalesFocusRequester.Cancel
ya no es experimental (I461a1, b/261564106).- Cuando consultes coordenadas de diseño, ahora puedes usar el argumento
excludeDirectManipulationOffset
para excluir el desplazamiento establecido por los diseños superiores que colocaron sus elementos secundarios conPlaceable.PlacementScope.withDirectManipulationPlacement
Del mismo modo, un diseño que cambia la posición de sus elementos secundarios con frecuencia ahora puede colocarlos usandowithDirectManipulationPlacement
(como Scroll, implementado de forma predeterminada). Esto ayuda a que las animaciones basadas enapproachLayout
sean más intuitivas, ya que ahora tiene la oportunidad de diferenciar qué desplazamiento animar y qué aplicar directamente cuando se decide animar su enfoque. (I60ec7). - Se quitó la marca de función para las capturas de pantalla largas. (I28648, b/329128246).
LazyColumn
ahora renderizará correctamente los encabezados fijos en capturas de pantalla largas. (I8d239, b/329296635).- Se reemplazarán las fuentes de
NestedScroll
para arrastrar y arrastrar y soltar porUserInput
ySideEffect
para adaptarse a la definición extendida de estas fuentes que ahora incluyen animaciones (efecto lateral) y rueda del mouse y teclado (UserInput
). (I40579) ApproachLayoutModifierNode
yModifier.approachLayout
ahora son estables, con los nuevosisMeasurementApproachInProgress()
yisPlacementApproachInProgress()
para reemplazar los antiguosisMeasurementApproachComplete()
yisPlacementApproachComplete()
, respectivamente- Se quitó el modificador
intermediateLayout
obsoleto. (I3e91c). - Se cambió el nombre de
GraphicsLayer#buildLayer
para grabar para duplicar los métodos start/endRecording de las APIs respaldadas por Displaylist, comoRenderNode
y Picture - Se actualizó
rememberGraphicsLayer
para aprovecharrememberObserver
. (I312c1, b/288494724, b/330758155). UrlAnnotation
dejó de estar disponible. En su lugar, usaLinkAnnotation.Url
. Si usas temas de Material, usa el objetoTextDefaults
para crear la anotación con el tema de Material aplicado (I8d180, b/323346545).- Se presionaba la opción de estilo de estado de los vínculos de texto, además del estilo normal, se colocaba el cursor y se enfocaba (I5f864, b/139312671).
- Se cambió el nombre de
String.parseAsHtml
porAnnotatedString.Companion.fromHtml
. (I43dcd). - Se agregaron argumentos de estilo (
linkStyle
,focusedLinkStyle
,hoveredLinkStyle
) y un objeto de escucha de interacción de vínculos al métodoparseAsHtml
. Cuando se analiza la cadena etiquetada con HTML con las etiquetas<a>
, el método creará unaLinkAnnotation.Url
para cada etiqueta y pasará los objetos de estilo y el objeto de escucha de interacción de vínculos a cada anotación. (I7c977). LinkAnnotation
ahora toma los argumentos de diseño basados en el estado y un elementoLinkInteractionListener
Agrega esta anotación aAnnotatedString
para obtener un hipervínculo. Si pasasfocusedState
ohoveredState
, puedes definir elconfiguration
visual para los vínculos cuando estén enfocados o colocas el cursor sobre ellos. (I81ce4, b/139312671).ImeOptions.hintLocales
ya no es anulable. Si deseas pasar una lista de configuración regional vacía, usaLocaleList.Empty
. (Ic5bc4).
Correcciones de errores
- Maneja de manera elegante los datos de eventos de entrada históricos incorrectos o dañados (ignora los datos de desplazamiento incorrectos).
- Corrige los eventos de puntero inesperados cuando se agrega de forma dinámica un modificador de entrada del puntero antes de otro modificador de entrada del puntero durante una transmisión de eventos de entrada de puntero activo (por ejemplo, entre la entrada y la salida de colocar el cursor sobre un elemento [mouse/stylus]).
Versión 1.7.0-alpha06
3 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha06
. La versión 1.7.0-alpha06 contiene estas confirmaciones.
Nuevas funciones
- Se agregó el método
parseAsHtml
para cadenas con estilo: permite convertir una cadena marcada con etiquetas HTML enAnnotatedString
. Ten en cuenta que no todas las etiquetas son compatibles; por ejemplo, aún no podrás mostrar listas con viñetas. (I84d3d, I30626, b/139326648). - Se implementó la compatibilidad experimental para capturas de pantalla largas en contenedores de desplazamiento de Compose con la API oficial de Android (
ScrollCaptureCallback
). Esta función es experimental y es posible que actualmente no maneje correctamente todos los casos. Por ese motivo, actualmente está inhabilitado de forma predeterminada. Para habilitarla, establece la marcaComposeFeatureFlag_LongScreenshotsEnabled
como verdadera. (I2b055, b/329296471).
Cambios en la API
- Se cambió
fun ClipEntry.getMetadata()
porval ClipEntry.clipMetadata
. (I50155). - Se quitaron las funciones
ClipboardManager.getClipMetadata
yClipboardManager.hasClip
. UsaclipEntry.getMetadata()
para leer los metadatos de la entrada del clip actual. También verifica el resultado deClipboardManager.getClip
si es nulo o no para comprender si el Portapapeles tiene un clip actual. (I50498). - Ahora puedes pasar objetos
GraphicsLayer
a funcionesplaceable.placeWithLayer()
(I1b22f). ClipboardManager.setClip
ahora acepta nulos para poder borrar el portapapeles (I7d2e9).- Se agregaron IDs de recursos para ayudar a ocultar vistas usadas como detalles de implementación en las herramientas de compilación (I99531).
- Se agregó el método de suspensión
GraphicsLayer#toImageBitmap
para admitir el procesamiento del contenido de un mapa de bits en unGraphicsLayer
Esta es una operación de renderización acelerada por hardware en el nivel de API 22 y versiones posteriores (inclusive) que admite más del 99% de todos los dispositivos Android. En el nivel de API 21 de Android, esto recurre a la renderización de software. (I9e114). - Es un método auxiliar para convertir un objeto
RectF
de Android enComposeRect
(I39925, b/325660505). - Todos los parámetros
KeyboardOptions
ahora tienen un valor sin especificar de forma predeterminada. Se agregó el métodoKeyboardOptions.merge
. - Se cambió el nombre de
KeyboardOptions.autoCorrect
aautoCorrectEnabled
y se hizo anulable, donde "null" indica que no se especificó ningún valor (Ia8ba0, b/295951492). - La variante
BasicTextField(state)
yBasicSecureTextField
ahora usanKeyboardActionHandler
en lugar deKeyboardActions
para procesar las acciones que realiza el teclado en pantalla (I58dda).
Versión 1.7.0-alpha05
20 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha05
. La versión 1.7.0-alpha05 contiene estas confirmaciones.
Nuevas funciones
- Se introdujo la nueva API de
GraphicsLayer
para registrar los comandos de dibujo en una lista de visualización, así como propiedades adicionales que afectan la renderización de la lista de visualización. Esto proporciona un límite de aislamiento para dividir una escena compleja en partes más pequeñas que se pueden actualizar unas de otras de manera individual sin recrear toda la escena. Las transformaciones realizadas a un objetoGraphicsLayer
se pueden realizar sin volver a grabar la lista de visualización. A diferencia deModifier.graphicsLayer
,GraphicsLayer
permite renderizar contenido componible en otro lugar y es útil en casos de uso animados en los que se espera que el contenido se renderice en diferentes escenas.
Cambios en la API
GraphicsLayer.draw(Canvas)
ya no es una API pública. En su lugar, usa la función de extensiónDrawScope.drawLayer(GraphicsLayer)
para dibujar la capa. (I7a7c0).- Se dividió
restrictedConstraints()
en dos métodos:fitPrioritizingWidth()
yfitPrioritizingHeight()
(I6d7fd). - Se agregó un stub de
HardwareCanvas
para el uso de Android L (I1c3b5, b/288494724). - Actualiza el framework de Compose para exponer una composición
GraphicsContext
local junto con la actualización de las implementaciones de los modificadores de propietario,DelegateableNode
ydrawWithCache
para exponer el acceso aGraphicsContext
para el acceso con alcance que borrará automáticamente instancias deGraphicsLayer
cuando se eliminen los modificadores. (I64a2f, b/288494724). - Se introdujo
InterceptPlatformTextInput
para ayudar a escribir pruebas relacionadas con el IME de bajo nivel y otros casos de uso del IME de bajo nivelPlatformTextInputTestOverride
dejó de estar disponible. (I862ed, b/322680547). - Se agregó
GraphicsLayer.setOutline(Outline)
función de extensión. (Ib81f4). - Se introdujo el constructor de la función
GraphicsContext
para crear una fábrica para crear instanciasGraphicsLayer
(Ib98d6, b/288494724). - Se expuso la API de
GraphicsLayer
para proporcionar una flexibilidad definida por el desarrollador a la hora de capturar comandos de dibujo que se pueden usar para dibujar en otro lugar y también aplicar diferentes efectos visuales al resultado final (I80245, b/288494724). - Ingresa
Paragraph#getRangeForRect
, que muestra un rango de texto cubierto por un área rectangular determinada. (Iee516, b/325660505). - Se quitó la anulación experimental de
BasicText
con el argumentoonLinkClicked
En el futuro, se incluirá una API de reemplazo para la compatibilidad con hipervínculos. (I107d5).
Correcciones de errores
- Se agregó la definición de API esperada y real de
GraphicsLayer
para admitir la captura y la repetición de comandos de dibujo con transformaciones y efectos visuales de composición opcional Se introdujo la interfazGraphicsContext
para que contenga dependencias de gráficos, incluida la creación y administración de instancias deGraphicsLayer
. (I4a8d6, b/288494724). - Se corrigió un problema de interoperabilidad con la búsqueda de enfoque 1D en el que el enfoque se bloqueaba en un
ComposeView
incorporado entre otras vistas (I08fd4).
Contribución externa
- Se movió
LocalLifecycleOwner
de la IU de Compose alifecycle-runtime-compose
para que sus APIs auxiliares basadas en Compose se puedan usar fuera de la IU de Compose. Gracias a Jake Wharton por la contribución. (I6c41b, b/328263448). - Exhibe de manera coherente las propiedades de número de punto flotante de sesgo en todos los subtipos de alineación basados en el sesgo. (I69f0f, b/328088992).
Versión 1.7.0-alpha04
6 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha04
. La versión 1.7.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad con la función de escritura a mano con pluma stylus para BasicTextField2 en dispositivos posteriores a Android U. (I002e4).
- En esta CL, agregamos la acción semántica
GetScrollViewportLength
para canalizar la información sobre los componentes que se desplazan en Compose al sistema de a11y. Esta CL también aplica el uso de dicha propiedad en las listas desplazables base. (Ic5fa2). FocusRequester.createRefs
ahora es estable (I4d92c, b/261436820).- Se introdujo
DelegatableNode.requireView()
para permitir que los nodos modificadores obtengan elView
actual de Android sin leer un elemento local de composición (I40768). - Se agregó la nueva API de
Path.reverse()
para revertir la dirección de una ruta (I36348). - Se agregó
hintLocales
aKeyboardOptions
para proporcionar aTextFields
la capacidad de sugerir a los IME con configuraciones regionales específicas para preestablecer un idioma preferido - Expón la propiedad
platformLocale
deLocale
que muestra el objeto de la plataforma subyacente, p.ej.,java.util.Locale
. (I921c6).
Versión 1.7.0-alpha03
21 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha03
. La versión 1.7.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Presentamos
ContextualFlowRow
yFlowRow
yColumn
mejorados con MaxLines y Overflow. Nos complace anunciar mejoras para los dispositivos experimentalesFlowRow
yFlowColumn
, que ahora incluyen maxLines y compatibilidad ampliado, junto con el lanzamiento deContextualFlowRow
yContextualFlowColumn
. Esta actualización está diseñada para proporcionar componentes óptimos de rendimiento, en el queContextualFlow*
es ideal para una gran cantidad de elementos con una pequeña configuración demaxLines
y una opción dinámica para ver más botones, yFlowRow
yFlowColumn
son perfectos para una pequeña cantidad de elementos, menos de 100. Importante: Para mantener el comportamiento existente enFlowRow
oFlowColumn
donde todos los elementos están compuestos, independientemente de si se ajustan al máximo del eje cruzado, estableceoverflow
enFlowRowOverflow.Visible
oFlowColumnOverflow.Visible
durante la inicialización. ExploraContextualFlowRowSample
yFlowRowSample
para ver ejemplos de estas nuevas funciones en acción. (Ib9135, b/293577082). - Se agregó la propiedad semántica
maxTextLength
que se debe establecer en los campos de texto que filtran la cantidad máxima permitida de caracteres. (I24d9f, b/170648072). - El wrapper
Modifier.inspectable
dejó de estar disponible. Esta API creará más invalidaciones de tu modificador de las necesarias, por lo que no se recomienda su uso. Se recomienda a los desarrolladores que implementen el métodoinspectableProperties()
enModifierNodeElement
si desean exponer las propiedades del modificador a las herramientas. (Ib3236). - Nuevo constructor para
PopupProperties
, que permite el control total de las marcasWindowManager.LayoutParams
(Ibb33e, b/312485503). - Se introdujo
DelegatableNode.requireLayoutCoordinates()
como una forma de obtener elLayoutCoordinates
actual de unModifier.Node
sin necesidad de anularonPlaced
y almacenar por tu cuenta las coordenadas en una propiedad (Ia8657). - Se introdujo
DelegatableNode.currentLayoutCoordinates
como una forma de obtener elLayoutCoordinates
actual de unModifier.Node
sin necesidad de anularonPlaced
y almacenar por tu cuenta las coordenadas en una propiedad (Iaebaa). BasicTextField2
y las APIs relacionadas del paqueteandroidx.compose.foundation.text2
se mueven aandroidx.compose.foundation.text
. (I9f635).- Se agregó una nueva API de
ApproachLayoutModifierNode
para admitir la creación de una lógica de enfoque personalizada en un nodo modificador explícito. También se agregó una nueva API experimental deDeferredTargetAnimation
para las animaciones cuyo objetivo es desconocido durante la creación de la instancia. (I60745). - Nuevas APIs de
Path
para consultar la dirección de una ruta y extraer contornos de unPath
(I63d04). - Se agregaron
PathHitTest
yPath.contains(Offset)
para verificar si unPath
contiene un punto específico. (I3b218). - El objeto
TextLayoutResult
ahora expone el métodogetLineBaseline(lineIndex)
. Esto permite leer el modelo de referencia de una línea arbitraria del texto, además de las propiedades de convenienciafirstBaseline
ylastBaseline
existentes. (Ide4e8, b/237428541). - Se agregó un método para comparar solo las anotaciones de dos
AnnotatedStrings
. (I32659).
Correcciones de errores
- Se solucionó un problema de retrocompatibilidad con
SemanticsPropertyReceiver.performImeAction
ySemanticsActions.PerformImeAction
(Id0528, b/322269946).
Versión 1.7.0-alpha02
7 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha02
. La versión 1.7.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se corrigió un problema de compatibilidad binaria con
SemanticsPropertyReceiver.performImeAction
. (I65865, b/322269946). - El constructor
PopupProperties
que toma un parámetrousePlatformDefaultWidth
ya no es experimental. (I8f8d2). - Se agregó una sobrecarga de
ComposeTestRule.waitUntil
que toma una descripción de cadena de la condición que se incluirá en el mensaje de tiempo de espera. (I9413e). - Se agregó la nueva API de semántica
unset()
para quitar las propiedades semánticas que se agregan en la misma cadena de modificadores. Nueva propiedad semánticaisOpaque
. (I8c583, b/317966058, b/246056649). - Se quitó
originalEventPosition
del método de copia en la API pública dePointerInputChange
(I7bead).
Correcciones de errores
- Se corrigió un error de a11y que permite hacer clic en botones que no son de pestañas ni de radio cuando se seleccionan (I2181c).
VelocityTracker
ahora tendrá la corrección para agregar puntos de forma predeterminada. Aún puedes desactivar la corrección estableciendoVelocityTrackerAddPointsFix
como falsa si hay algún problema. (Ib3877, b/269487059).- Se corrigió la incompatibilidad binaria con versiones anteriores en
TextStyle
yParagraphStyle
. (I179f0, b/320819734).
Contribución externa
- Se agregó un nuevo constructor
DialogProperties
sin parámetros específicos de la plataforma. (I45829). - Se agregó un nuevo constructor
PopupProperties
sin parámetros específicos de la plataforma. (I9a038).
Versión 1.7.0-alpha01
24 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.7.0-alpha01
. La versión 1.7.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se expandió
ClipboardManager
agregandoClipEntry
yClipMetadata
para admitir contenido arbitrario, como imágenes. - Se agregó la API de
DeviceConfigurationOverride
aui-test
para permitir la anulación local del comportamiento del contenido que se está probando, por ejemplo, para especificar un tamaño, una configuración regional, una dirección del diseño, una escala de fuente o un tema disponibles.
Versión 1.6
Versión 1.6.8
12 de junio de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.8
. La versión 1.6.8 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron inconsistencias en el escalamiento de la fuente cuando la escala es menor que la tabla definida más baja. En este caso, ahora interpolamos entre la escala lineal 1x y la tabla más baja definida, de modo que el tamaño de la fuente aumente monótonamente a medida que lo hacen las escalas. (Icbae3).
Versión 1.6.7
1 de mayo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.7
. La versión 1.6.7 contiene estas confirmaciones.
Versión 1.6.6
17 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.6
. La versión 1.6.6 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla poco frecuente de
BasicTextField
.
Versión 1.6.5
3 de abril de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.5
. La versión 1.6.5 contiene estas confirmaciones.
Versión 1.6.4
20 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.4
. La versión 1.6.4 contiene estas confirmaciones.
Versión 1.6.3
6 de marzo de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.3
. La versión 1.6.3 contiene estas confirmaciones.
Versión 1.6.2
21 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.2
. La versión 1.6.2 contiene estas confirmaciones.
Versión 1.6.1
7 de febrero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.1
. La versión 1.6.1 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema de retrocompatibilidad con
SemanticsPropertyReceiver.performImeAction
ySemanticsActions.PerformImeAction
(Ie0bb2, b/322269946). - Los diseños ahora emiten un error durante la medición cuando se muestra un tamaño anormalmente grande Este tipo de error suele ocurrir cuando la medición usa restricciones máximas directamente sin verificar
Constraints.Infinity
. La verificación ayudará a los desarrolladores a encontrar problemas con el diseño que tiene el tamaño incorrecto en lugar de un diseño que lo contenga. (I339a9).
Versión 1.6.0
24 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.0
. La versión 1.6.0 contiene estas confirmaciones.
Versión 1.6.0-rc01
10 de enero de 2024
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-rc01
. La versión 1.6.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se optimizó la implementación de gráficos vectoriales para mejorar el rendimiento minimizando las recomposiciones adicionales.
Versión 1.6.0-beta03
13 de diciembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta03
. La versión 1.6.0-beta03 contiene estas confirmaciones.
Nuevas funciones
- Ahora es posible que un
LayoutCoordinates
se desconecte sin separar el nodo. Protégete contra eso en el Inspector de diseño de Compose (If693).
Correcciones de errores
- Ahora,
PlatformImeOptions
es una clase concreta en lugar de una interfaz. (If40a4). - Se corrigieron las recomposiciones adicionales descendentes causadas por el hecho de que
LocalSoftwareKeyboardController
yLocalTextInputService
se proporcionaran valores nuevos cada vez que se recomponía una raíz (I42190, b/310510985).
Versión 1.6.0-beta02
29 de noviembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta02
. La versión 1.6.0-beta02 contiene estas confirmaciones.
Versión 1.6.0-beta01
15 de noviembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-beta01
. La versión 1.6.0-beta01 contiene estas confirmaciones.
Cambios en la API
- El modificador
DragAndDropTarget
ahora toma laDragAndDropTarget
receptora de manera explícita y tiene una lambda para habilitar una sesión de arrastrar y soltar Ahora hay dos funciones de fábrica para unDragAndDropModifierNode
. Uno para recibir transferencias y otro para transferir datos (I69481). - Se actualizó
maximumFlingVelocity
para que se represente como número de punto flotante. Se actualizó la documentación para que sea más clara sobre la unidadmaximumFlingVelocity
. (I8adc7). - Se cambió el nombre de
onDragAndDropStart
en la fábrica deDragAndDropModifierNode
aacceptDragAndDropTransfer
.Se agregóacceptsDragAndDropTransfer
al modificadordragAndDropTarget
para aceptarlo desde una sesión de arrastrar y soltar Esta lambda muestra unDragAndDropTarget
viable si está interesado en una sesión de arrastrar y soltar. Se reemplazaron otras lambdas para procesar eventos de arrastre. Se agregó una función de fábricaDragAndDropTarget
para recibir de las sesiones de arrastrar y soltar (Iebf3a). Se quitó
DragAndDropInfo
como tipoDragAndDropModifierNode.drag
ahora toma parámetros paratransferData
, el tamaño de la decoración y la lambdaDrawScope
de decoración de arrastreDragAndDropTarget
tiene métodos para eventos de arrastrar y soltar específicos en lugar de ser un solo método abstracto.Se cambió el nombre de
onDragAndDropEvent
en la función de fábrica de unaDragAndDropModifierNode
aonDragAndDropStart
para comunicar mejor que elDragAndDropTarget
proporcionado solo es válido para una sesión de arrastrar y soltarSe quitó
DragAndDropEventType
(I645b1).Se cambió el nombre de
PlatformTextInputModifierNode.runTextInputSession
aestablishTextInputSession
(I03cd0).Mejora los nombres de API de nodo transferibles para que sean más comprensibles. (Ia4474).
Reemplaza
OriginalText
porTextSubstitution
. (Ifa5a8).Se cambió el nombre de
PlatformTextInputModifierNode.textInputSession
arunTextInputSession
. (Ie9c6b).Los elementos secundarios de
SubcomposeLayout
(y los diseños comoLazyColumn
basados en ella) que se retienen para volver a usarse en el futuro se consideran desactivados. Se introdujo la nueva API de pruebaassertIsDeactivated()
para probar esos nodos. El resto de las APIs de prueba filtrarán los nodos desactivados de forma predeterminada. (I2ef84, b/187188981).Se quitaron
FocusDirection.In
yFocusDirection.Out
, en su lugar, usanFocusDirection.Enter
yFocusDirection.Exit
(I2f660).Las APIs de
SwipeToReveal
de Material (para tarjetas y chips) ahora dependen de una API basada en ranuras (como recomienda Compose) en lugar de instancias basadas en clases de datos para crear esas ranuras. Este es un cambio rotundo. Consulta la demostración y el código de muestra para ver ejemplos de cómo usar la nueva API. (Ia8943).El constructor
FontStyle(int)
dejó de estar disponible. En su lugar, usaFontStyle.Normal
oFontStyle.Italic
. (I66610).Se cambió el nombre de la interfaz
FontScalable
porFontScaling
(Ie804a).
Correcciones de errores
SoftwareKeyboardController.show()
ya no mostrará el teclado en pantalla si no hay un editor de texto enfocado. (I2165a, b/301477279).- Ahora se ignorarán los eventos de hardware de teclas que no hayan recibido un evento de flecha hacia abajo en la misma vista de Compose. (Ib37b4, b/305518328).
- Se agregó compatibilidad con el procesador para el gradiente de barrido en
ArcLine
. (I4d5bb). - Implementa equals y hashcode para
PageSize.Fixed
. (Ie3ede, b/300134276). - Se corrigió el problema de compatibilidad binaria con el cambio de la inserción de ventana (Iee695).
- Se quitó la capa principal de Material para el chip o botón de Material 3, ya que las microcomparativas muestran un mejor rendimiento sin ella. (I55555).
- Los objetos
TestDispatcher
pasados como las pruebas deeffectContext
a Compose ahora se usarán para crear los relojes de prueba y fotogramas (Ia7178).
Versión 1.6.0-alpha08
18 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha08
. La versión 1.6.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
Modifier.dragAndDrawSource
por la lambdaonDrawDragShadow
pordrawDragDecoration
, y se cambió el nombre del parámetro de tamaño aDragAndDropInfo
pordragDecorationSize
(Id0e30, b/303904810). - Ingresa
SemanticsNodeInteraction.isDisplayed()
ySemanticsNodeInteraction.isNotDisplayed()
para verificar si un nodo coincidente es visible o no sin también confirmarlo. (I2c196, b/302100809). - Se agregó un valor
Unspecified
especial para los camposTextAlign
,TextDirection
,Hyphens
yLineBreak
deParagraphTextStyle
a fin de reemplazarnull
. Como estas clases son clases intercaladas, cuando se reemplazan los valores anulables por “Unspecified”, se evita el recuadro de tipo primitivo. Se actualizaron los constructores, los métodos get y otros métodos enTextStyle
y el estilo de párrafo para aceptar los parámetros mencionados como tipos no nulos. (I4197e, b/299490814). - Se agregó una sobrecarga de
GoogleFont
para leer unGoogleFont
desde XML (If8f59). - Ahora
LoremIpsum
PreviewParameterProvider
es una clase abierta. (I41bf5, b/266918816, b/300116360).
Correcciones de errores
FontFamilyResolver
ahora usaDispatchers.Main
para las corrutinas de administración de caché. (Ie8dd9).AndroidViewBinding
ahora quita de forma síncrona las instancias deFragment
infladas al incluir unFragmentContainerView
en tu diseño como parte de suonRelease
concommitNow
(en lugar delcommit
que usaba anteriormente), lo que corrige problemas con el método de Ediciones en vivo con el reemplazo de la composición ante los cambios. (I58fbf).
Versión 1.6.0-alpha07
4 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha07
. La versión 1.6.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se introdujo
PlatformTextInputMethodTestOverride
para escribir pruebas para editores de texto personalizados (Id159b). - Se agregó el modificador
dragAndDropSource
para iniciar sesiones de arrastrar y soltar, y el modificadordragAndDropTarget
para recibir sesiones de arrastrar y soltar (Ib7828, b/286038936). - Se agregaron las colecciones
ColorList
yColorSet
para evitar las asignaciones. (I744bd). - Se agregó la marca temporal
DisableNonLinearFontScalingInCompose
para inhabilitar el escalamiento de fuente no lineal ConfiguraDisableNonLinearFontScalingInCompose = true
en tus pruebas si necesitas tiempo para limpiarlas. Esta marca se quitará en Compose 1.6.0-beta01. (Ic9486).
Correcciones de errores
- Análisis optimizado de elementos de diseño vectoriales XML. (Ibb015).
Versión 1.6.0-alpha06
20 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha06
. La versión 1.6.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Optimizaciones adicionales para los íconos de Material. (I3e08d).
- Agrega la habilidad de desviar el árbol modificador hacia arriba y abajo para encontrar nodos similares. (I2d234).
- Se agregó la devolución de llamada
onRestoreFailed()
al modificadorfocusRestorer()
(Ie1d43). - Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar
ColorInt
,FloatRange
,IntRange
,Size
y más. (Id65c8, b/290950582). - Se agregó
showSystemUi=true
a la definición dePreviewScreenSizes
(Ib61d3).
Cambios en el comportamiento
- Compose ahora usa el escalamiento de fuente no lineal para mejorar la legibilidad y accesibilidad Cuando la escala de fuente es superior al 100% en la configuración del sistema, el tamaño del texto pequeño aumentará normalmente, pero el texto grande solo aumentará un poco. Además, las alturas de línea definidas en SP se ajustarán automáticamente para permanecer proporcionales a la altura prevista de la escala del 100%. Consulta las prácticas recomendadas para el escalamiento de fuentes para obtener más información (I11518).
Versión 1.6.0-alpha05
6 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha05
. La versión 1.6.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Habilita la captura de contenido en
AndroidComposeViewAccessibilityDelegateCompat
. (Ib2969). - Las velocidades de desplazamiento en los componentes View, como
ScrollView
yRecyclerView
, se limitan aViewConfiguration.ScaledMaximumFlingVelocity
. Compose ahora contiene su propia versión demaximumFlingVelocity
, que ahora se aplica aDraggable
. (Ibf974). - Se agregó el andamiaje inicial para admitir las APIs de arrastrar y soltar de la plataforma. (If84ce).
- Se agregó
deviceId
aRotaryScrollEvent
(Iba3bf). - Se actualizó la API de
ui-tooling
Devices para incluir dispositivos más nuevos (Ib25b4).
Versión 1.6.0-alpha04
23 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha04
. La versión 1.6.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó un método para desactivar
ReusableComposition
, lo que quita las observaciones, pero mantiene los nodos en su lugar. La composición desactivada se puede volver a activar llamando asetContent
. (Ib7f31). - Se agregó la interfaz
ReusableComposition
para administrar el ciclo de vida y la reutilización de subcomposiciones (I812d1, b/252846775). - Se promovió
Modifier.focusGroup
a APIs estables (I7ffa3). - Se agregaron anotaciones de androidx a varias APIs de gráficos para especificar
ColorInt
,FloatRange
,IntRange
,Size
y más. (I70487, b/290950582). - Se actualizó la API de
ColorFilter
para que tenga tipos de subclases concretos a fin de mejorar la inspección de los parámetros. (I5fe29). - Se introdujo la biblioteca wear-tooling-preview para enumerar dispositivos para Wear válidos que se pueden usar para las vistas previas de IU (Ib036e).
- Se creó la interfaz
FontScalable
para controlar la parte de escalamiento de fuente de la interfaz Density. (I2cf3f).
Versión 1.6.0-alpha03
9 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha03
. La versión 1.6.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Es un nuevo tipo de transición de entrada y salida que ajusta el contenido en función del tamaño del contenedor de animación durante la animación de entrada y salida.
LookaheadScope
La interfaz y la diversión componibles ahora son estables (Ifb2ce). - Se agregó compatibilidad para configurar
privateImeOptions
(Idb772).
Correcciones de errores
PopupPositionProvider.calculatePosition
ahora actualizará automáticamente la posición de la ventana emergente cuando se cambie el estado leído en el cálculo (I676a1, b/292257547).- Se corrigieron los campos de texto que mostraban el teclado y se podían editar cuando
readOnly
era verdadero También se corrigió el teclado que no se mostraba cuandoreadOnly
se cambiaba de verdadero a falso mientras se enfocaba (I34a19, b/246909589). - Se expandió la aplicación de aserciones globales en pruebas de IU. (I1f90d).
Versión 1.6.0-alpha02
26 de julio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha02
. La versión 1.6.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una interfaz de localizador de servicios que los implementadores de Composition pueden implementar y que permite la implementación de Composition que delega a otras búsquedas de servicios delegados de composición a la Composition original. Esto no se debe llamar directy y se usa para habilitar la creación de APIs experimentales en el entorno de ejecución que se pueden encontrar en versiones unidas del compositor, como lo hace el módulo de IU. (I296b9).
- Se rediseñó por completo la API de
PlatformTextInput*
. (I6c93a, b/274661182, b/267235947, b/277380808). SoftwareKeyboardController
yLocalSoftwareKeyboardController
dejaron de ser experimentales. Ahora,LocalSoftwareKeyboardController
también es unCompositionLocal
adecuado. (I4c364).LookaheadLayout
yLookaheadLayoutScope
dejaron de estar disponibles para algunas versiones y se quitaron. Las APIs de reemplazo sonLookaheadScope
, que pueden funcionar con cualquier diseño. (I12ac3).- Se agregó
SemanticsNodeInteraction.requestFocus
como una forma más conveniente y detectable de solicitar el enfoque en las pruebas (Ie8722). - Se agregaron APIs experimentales para registrar aserciones globales que se usarán en frameworks de prueba en el futuro (I12d77).
Correcciones de errores
- La primera invocación de
update
deAndroidView
se aplazará hasta que se adjunte la vista, en lugar de ejecutarse cuando se aplica la composición que presenta elAndroidView
Esto corrige un error por el que no se invalidaría la devolución de llamadaupdate
si un estado que leía se modificaba de inmediato por un efecto (Ie9438, b/291094055).
Versión 1.6.0-alpha01
21 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.6.0-alpha01
. La versión 1.6.0-alpha01 contiene estas confirmaciones.
Nuevas funciones
- Admite la visualización anticipada en
LazyList
. Esto permite queLazyList
en el pase de visualización anticipada omita cualquier animación (p. ej., animación de posición de elementos,AnimatedVisibility
, etc.) y calcule el tamaño y la posición del elemento anticipado para todos los elementos secundarios. Después del pase anticipado, los elementos secundarios deLazyList
podían animar de forma independiente la realidad, como se ve en el pase de visualización.
Cambio de comportamiento: includeFontPadding ahora es falso de forma predeterminada en Compose
includeFontPadding
ahora es falso de forma predeterminada (21d806) en Compose.
includeFontPadding
es un atributo heredado que controla si se debe incluir padding adicional sobre la primera y la última línea del texto para adaptarse a cualquier carácter que pueda extenderse por encima o por debajo de las líneas de base del texto.
Si actualizas esta versión de Compose, se modificará la forma en que se renderizan todos los textos en tu IU, ya que quitará el padding adicional sobre la primera y la última línea de cada texto que muestres.
Según los requisitos de tu IU y las métricas de fuente que uses, los cambios deben ser mínimos. Sin embargo, es posible que encuentres bloqueadores como los siguientes: - Pruebas de captura de pantalla rotas. Si es necesario, corrige la IU y vuelve a generar las imágenes doradas. - El texto está ligeramente desalineado. Quita los paddings negativos personalizados o agrega padding si es necesario.
Puedes habilitar includeFontPadding
con PlatformTextStyle
para cada texto:
Text(
text = myText,
style = TextStyle(
lineHeight = 2.5.em,
platformStyle = PlatformTextStyle(
includeFontPadding = true/false
)
/* … */
)
)
Puedes habilitar includeFontPadding
para todos tus textos configurando los estilos de Material. Ten en cuenta que los nombres de los parámetros variarán entre M2 y M3.
val Typography = Typography(
body1 = TextStyle(
fontFamily = /* … */,
fontSize = /* … */,
platformStyle = PlatformTextStyle(
includeFontPadding = false
)
/* … */
)
)
MaterialTheme(
typography = Typography,
/* … */
)
Puedes encontrar más información sobre includeFontPadding
de Compose en la documentación para desarrolladores y en esta entrada de blog.
Si experimentas problemas o errores relacionados con este cambio, informa el error mediante la Herramienta de seguimiento de errores.
Cambios en la API
- Se agregó compatibilidad con
InputConnection#requestCursorUpdates
(I0c69b). - Se agregaron
FocusRequester.saveFocusedChild
yFocusRequester.restoreFocusedChild
(Ic557e, b/272302679, b/275157318). - Se agregó el tipo
ResourceResolutionException
para unir los elementos throwables que se arrojan cuando se intenta cargar recursos de mapas de bits con una descripción de la ruta de acceso del recurso que no se pudo cargar (I19f44, b/230166331, b/278424788). - Se optimizó la accesibilidad para el rendimiento y las asignaciones de memoria. (Iede48).
- Se agregaron acciones y propiedades semánticas para admitir la traducción de texto. (I4a6bc).
- Propiedad nueva en
IntrinsincMeasureScope
y sus implementaciones (p. ej.,MeasureScope
) para indicar si el pase de medición actual es un pase de anticipación (I7a812). - Se actualizó la API de
DrawScope
para incorporar la capacidad de resegmentar la renderización en un lienzo diferente con densidad/dirección de diseño y tamaño alternativos. - Se actualizó
DrawContext
para admitir la configuración de densidad y la dirección del diseño, y hacer que el lienzo se pueda configurar. (Ie1f9b, b/225408150). - Se agregó
Paragraph#fillBoundingBoxes
para calcular cuadros de límite de caracteres (If30ee). - Se agregó un conjunto de
MultiPreviews
comunes (Ia5a27).
Correcciones de errores
- Se agregó la interfaz de
FocusTargetModifierNode
que se puede usar para crear un elementoFocusTarget
personalizado (I9790e). - Se cambió el nombre de los parámetros
fallback*
en el constructorTextMeasurer
adefault*
. (I940a5). - Se cambió el nombre de
SemanticsPropertyReceiver.performImeAction
poronImeAction
y el deSemanticsActions.PerformImeAction
porOnImeAction
(I8e841). - Se agregó Wheel para diferenciar un desplazamiento del mouse de un arrastre en un desplazamiento anidado (específicamente, en
NestedScrollConnection
). (Ie57e4) - Se agregó la API de
asComposePaint
para reemplazartoComposePaint
a medida que el objeto que se muestra une elandroid.graphics.Paint
original (I22b4c). SemanticsProperties.imeAction
dejó de estar disponible y se reemplazó por un parámetro nuevo paraSemanticsActions.performImeAction
. (I4a587).- Se agregó compatibilidad con la selección con el mouse. La selección táctil se expandirá por palabra y se reducirá por carácter. (Ic0c6c, b/180639271).
- Los métodos
Paragraph
que solían arrojarAssertionError
para desplazamientos fuera de los límites ahora arrojanIllegalArgumentException
, al igual queMultiParagraph
. (I549d3, b/243338896).
Versión 1.5
Versión 1.5.4
18 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.4
. La versión 1.5.4 contiene estas confirmaciones.
Versión 1.5.3
4 de octubre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.3
. La versión 1.5.3 contiene estas confirmaciones.
Correcciones de errores
- (b/301209788) A veces,
TextField
aplicaba incorrectamente comandos anteriores al enfocar e ingresar una entrada coreana, lo que provocaba la pérdida de caracteres.
Versión 1.5.2
27 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.2
. La versión 1.5.2 contiene estas confirmaciones.
Correcciones de errores
- Se agregó una solución alternativa para las fallas que se producían cuando se accedía a la API de Accessibility Scroll desde el subproceso en segundo plano.
- Se corrigieron nodos no conectados que se agregaban al árbol semántico.
Versión 1.5.1
6 de septiembre de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.1
. La versión 1.5.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigieron los campos de texto que mostraban el teclado y se podían editar cuando
readOnly
era verdadero También se corrigió el teclado que no se mostraba cuandoreadOnly
se cambiaba de verdadero a falso mientras se enfocaba (I34a19, b/246909589).
Versión 1.5.0
9 de agosto de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0
. La versión 1.5.0 contiene estas confirmaciones.
Versión 1.5.0-rc01
26 de julio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-rc01
. La versión 1.5.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió la falla que se producía cuando se usaba
SubcomposeLayout
dentro demovableContentOf()
Versión 1.5.0-beta03
28 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta03
. La versión 1.5.0-beta03 contiene estas confirmaciones.
Correcciones de errores
- Se agregó la interfaz FocusTargetModifierNode que se puede usar para crear un FocusTarget personalizado. (Ifb1d6).
- Se solucionó un problema con los elementos componibles de diálogo y ventanas emergentes que podían hacer que la ventana secundaria no cambiara el tamaño como se esperaba cuando
usePlatformDefaultWidth=true
(I112ee).
Versión 1.5.0-beta02
7 de junio de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta02
. La versión 1.5.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API de
asComposePaint
para habilitar el consumo de una instancia deandroid.graphics.Paint
que se usará en Compose.
Correcciones de errores
- Se agregó la API de
asComposePaint
para reemplazartoComposePaint
a medida que el objeto que se muestra une elandroid.graphics.Paint
original (I22b4c).
Versión 1.5.0-beta01
24 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-beta01
. La versión 1.5.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se quitaron las asignaciones de la recomposición, las animaciones de color y
AndroidComposeView
(Ib2bfa). - Se agregó el asistente divertido
CacheDrawModifierNode()
para permitir la delegación (Icf8f9). - Se introdujo la propiedad
isLookingAhead
, a la que se puede acceder desdeMeasureScope
, para observar resultados anticipados e influir en el pase principal si lo deseas. (Ibf4c3). - Nueva propiedad semántica
traversalIndex
, un número de punto flotante que se usa para reordenar los nodos en el recorridoTalkBack
(los valores más bajos aparecen antes). (I9a81b, b/186443263). - Se cambió el nombre de la propiedad semántica
isContainer
aisTraversalGroup
(I121f6). ColorProducer
ahora tiene unoperator fun invoke
en lugar deproduce
(I4a9a2).- Se agregó la API de transformación
Path
para aplicar transformaciones de traslación, escala y rotación a los objetos de ruta de acceso (I23434, b/233772232). - El método de
ColorProducer
se llamaproduce
. (I78bde). - Se cambió el nombre de
toFrameworkColorSpace
portoAndroidColorSpace
(I4f547). - Se cambia el nombre de
ColorLambda
aColorProducer
. (I73b1a). - Se introdujeron APIs para la conversión entre tipos de espacio de color de Android y Compose. (Ie7db4, b/279979665).
- Se agregó un parámetro de color a
BasicText
para permitir animar o establecer el color del texto de manera eficiente (Iffd88, b/246961787). - Se cambió el nombre de
TextRange.constrain
aTextRange.coerceIn
. (I31be2). - Se agregó
TextStyle.merge(...)
optimizado con la lista completa de parámetros. (Iad234, b/246961787). - Se estabilizaron muchas APIs de Text que incluyen
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
yMultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245). PlatformTextStyle.includeFontPadding
dejó de estar disponible. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo (I98e96, b/277703184).- Se agregó el método público
TextRange.constrain
. (I97912). - Ahora, los objetos
UrlAnnotation
enAnnotatedString
se pueden abrir mediante servicios de accesibilidad, comoTalkBack
. (If4d82, b/253292081). - Se agregó la acción de semántica
InsertTextAtCursor
para los campos de texto. (I11ed5). - El constructor
LineHeightStyle.Alignment(topRatio)
asciende a una API estable. (I79c32, b/261565383). TextMeasurer
y las APIs relacionadas dejaron de ser experimentales (I74647, b/261581753).- Se agregó la acción de semántica
PerformImeAction
para invocar la acción del IME en nodos del editor de texto. (Ic606f, b/269633506). - Las APIs de
PlatformTextInput
ya no son experimentales para Android. (I668eb). - Se modificó el nombre del parámetro de valor de
Enum.valueOf
(Ia9b89). - más excepciones arrojadas por enum valueOf (I818fe)
- Se introdujo una nueva API de
PlatformTextInputAdapter
de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4). - Se agregó el parámetro
BlendMode
a los métodosDrawScope.drawText
,Paragraph.paint
yMultiParagraph.paint
para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508). - Se cambia el nombre de
Font.MaximumAsyncTimeout
aFont.MaximumAsyncTimeoutMillis
. Solo cambiar nombre. (I07af5). - Se actualizaron los valores de DPI de los dispositivos de referencia
@Preview
(Id6151, b/254528382). - Agrega los parámetros
brush
,alpha
aBasicText
para permitir animar o configurar el pincel de texto de manera eficiente. - Se definen tipos de lambda sin cuadros para float, Double, Long, Int y Short en :ui:ui-unit. (I6f18d, b/246961787)
Correcciones de errores
- Se quitaron varias asignaciones en el seguimiento de velocidad del puntero (I26bae).
- Se redujeron las asignaciones en la administración de entradas de diseño y puntero (I5333a).
- Se optimiza el uso de memoria vectorial y la renderización de primeros fotogramas (I2f3c6).
- Se quitaron las asignaciones cuando se dibujan líneas y puntos con Canvas (I9f535).
- Se agregaron documentos para
AndroidFont.fontVariationSettings
(I7d9e2).
Contribución externa
- Se mejoró el rendimiento y se redujeron las asignaciones en las APIs de Vector (I906cb).
Versión 1.5.0-alpha04
10 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha04
. La versión 1.5.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Mejoras en la delegación de
Modifier.Node
Se agregó una capacidad mejorada para delegar a otras instancias deModifier.Node
desde un elementoDelegatingNode
. Esto puede hacerse con las APIs dedelegate
yundelegate
. Antes de este cambio, cada API del nodo delegado tenía que delegarse de forma explícita al nodo delegado. Después de este cambio, se delegarán de forma implícita las interfaces de nodo, a menos queDelegatingNode
las anule de forma explícita. (67352bc).
Cambios en la API
- Presenta
NestedScrollModifierNode
, unNestedScroll Modifier.Node
al que se puede delegar. (I69513). - Se agregaron los parámetros
onReset
yonRelease
al elementoAndroidViewBinding
componible, lo que duplica el elementoAndroidView
y habilita la compatibilidad con la reutilización de vistas conViewBinding
. (I00b1e, b/276802519). - Se actualizó la API de Compose Path para admitir operaciones de retroceso a fin de admitir casos de uso de manipulación frecuente de rutas con una reutilización más rápida. (I7b797).
- Se agregó
TextStyle.merge(...)
optimizado con la lista completa de parámetros. (Iad234, b/246961787). - Se estabilizaron muchas APIs de Text que incluyen
Brush
,DrawStyle
,TextMotion
,DrawScope.drawText
,Paragraph.paint(Brush)
yMultiParagraph.paint(Brush)
. (I2f740, b/261581564, b/261581931, b/261561245). PlatformTextStyle.includeFontPadding
dejó de estar disponible. Nuestra intención original era quitar el campo, pero los comentarios muestran que los desarrolladores necesitan esta opción de configuración. Por lo tanto, se quitó la baja del campo (I98e96, b/277703184).
Correcciones de errores
- Se corrigió la regresión por la que el teclado no se mostraba para los campos de texto dentro de diálogos que no creaba el elemento componible
Dialog
. (I82551, b/262140644).
Versión 1.5.0-alpha03
19 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha03
. La versión 1.5.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Nuevo comportamiento predeterminado para
SubcomposeLayout
enLookaheadScope
:SubcomposeLayouts
que no tiene ranuras condicionales (p. ej.,TabRow
,Scaffold
,BoxWithConstraints
, etc.) ahora funcionan bien con las animaciones de visualización anticipada.
Cambios en la API
- El nuevo objeto
intermediateMeasurePolicy
predeterminado que vuelve a usar la política de medición del pase anticipado permite que los subtiposSubcomposeLayout
sin ranuras condicionales, comoScaffold
,TabRow
yBoxWithConstraints
, trabajen con elementos anticipados de forma predeterminada. (Id84c8). - El recompositor creado para una ventana de Android ahora solo bloqueará las llamadas a
withFrameNanos
, en lugar de toda la composición, cuando reciba una notificaciónON_STOP
Esto significa que las ventanas asociadas con actividades detenidas seguirán recomponiendo para los cambios de datos, pero se bloquearán las animaciones o cualquier otro llamador dewithFrameNanos
. (Id9e7f, b/240975572). - Se cambió
motionEventSpy
a estable. (Ic5ec4, b/261560988). - Se agregó el método público
TextRange.constrain
. (I97912). PlatformTextStyle.includeFontPadding
ya no está obsoleto para alentar a los desarrolladores a usar esta API de compatibilidad para cambiar y probar la configuraciónincludeFontPadding
falsa. (I98e96, b/277703184).
Versión 1.5.0-alpha02
5 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha02
. La versión 1.5.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Nueva API de
SubcomposeLayout
que toma una política de medida intermedia adicional para controlar la lógica de medición y diseño durante las animaciones basadas en el anuncio anticipado. (I017d3). - PointerInput ahora es diferido y usa Modifier.Node para mejorar el rendimiento (lee sobre el cambio menor de comportamiento). (15dab9).
- Se cambiaron las APIs experimentales a estables con eventos de tecla. (I9c7d8, b/261566839, b/261567368).
- Se cambiaron las APIs experimentales a estables en
PointerInputChange
(I1b543, b/261560988, b/261565762, b/261565749). - Se agregó una forma de crear una instancia de
SuspendingPointerInputModifierNode
para implementaciones deModifier.Node
más complejas. (Ic4933). - Ahora, los objetos
UrlAnnotation
enAnnotatedString
se pueden abrir mediante servicios de accesibilidad, comoTalkBack
. (If4d82, b/253292081). - Se agregó una API para interceptar teclas de hardware antes de que se envíen al teclado en pantalla (I4f4c6, b/186800395).
- Se agregó la acción de semántica
InsertTextAtCursor
para los campos de texto. (I11ed5). - Las acciones de prueba relacionadas con el texto (p. ej.,
performTextInput
) ahora solicitarán el enfoque directamente, mediante la acción semántica, en lugar de hacer clic en el campo (I6ed05).
Correcciones de errores
- Las acciones de prueba de texto ahora requieren que se habiliten los campos de texto. (Iab328).
Versión 1.5.0-alpha01
22 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.5.0-alpha01
. La versión 1.5.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Modifier.intermediateLayout ahora no requiere un LookaheadScope explícito. El bloque de medición en intermedioteLayout tiene IntermediateMeasureScope como receptor, lo que proporciona los convenientes CoroutineScope, LookaheadScope y MeasureScope.(Ibe2e5)
- Se reemplazó LookaheadLayout por LookaheadScope, que ya no es un diseño. Esto permite que la medición superior de MeasurementPolicy controle directamente el contenido censurado en un LookaheadScope. (Ibe2e5).
- Se agregó
Modifier.Node#coroutineScope
para permitir que Modifier.Nodes inicie corrutinas. (I76ef9). - Para permitir que Modifier.Nodes lea CompositionLocals, implementa la interfaz CompositionLocalConsumerModifierNode. (Ib44df).
- Propagación de la clase @Deprecated a la propiedad. (I882d1).
Versión 1.4
Versión 1.4.3
3 de mayo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.3
. La versión 1.4.3 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que
AndroidView
podía no mostrarse correctamente cuando se usaba con ciertos modificadores (I4dc77, b/274797771). - Se corrigió un error en Focus Search en 2D que afectaba los menús
DropDown
(b/276811828). - Se corrigió un error en las propiedades de entrada y salida de enfoque personalizado que solo ejecutaban el bloque de entrada y salida la primera vez que se invocaba la lambda (b/277234245).
- Se corrigió una regresión en el sistema de enfoque que causaba una falla mientras se leía
focusProperties
. (b/271324781, b/274897776).
Versión 1.4.2
19 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.2
. La versión 1.4.2 contiene estas confirmaciones.
Correcciones de errores
- Se solucionó un problema por el que
AndroidView
no reutilizaba sus modificadores correctamente, lo que podía generar un comportamiento inesperado y fallas (Ib67ee, b/275919849). - Se corrigió la regresión por la que el teclado no mostraba los campos de texto dentro de los diálogos que no creaba el elemento
Dialog
componible (I82551, b/262140644).
Versión 1.4.1
5 de abril de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.1
. La versión 1.4.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un problema con
ParentDataModifier
que no afectaba aAndroidView
(b/274797771).
Versión 1.4.0
22 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0
. La versión 1.4.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.3.0
- Se agregó una nueva API de
PinnableContainer
que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo,Modifier.focusable()
usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010). - El sistema de enfoque se reescribe con las nuevas APIs experimentales de
Modifier.Node
(I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589). - Se agregó en la propiedad semántica
IsContainer
en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379). - Se agregó el nuevo rol de accesibilidad
DropdownList
. Se puede usar para replicar el comportamiento deTalkBack
cuando se enfocaandroid.widget.Spinner
(I177e5, b/236159001). - Ahora puedes usar
PlatformTextStyle(emojiSupportMatch)
para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806). - Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de
waitForIdle
). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277). - Se agregó
TextMotion
experimental aTextStyle
para definir texto comoStatic(default)
o animado. UsaTextMotion.Animated
si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).
Versión 1.4.0-rc01
8 de marzo de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-rc01
. La versión 1.4.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Se agregó una sobrecarga de la función de componibilidad
AndroidView
, que acepta el parámetroonReset
. Permite reutilizar las instancias de View cuando su nodo en la composición se descarta y se vuelve a usar de forma compatible. Esto es particularmente útil paraLazyRows
yLazyColumns
de las vistas. (I3f10d, b/230099236). - Se introdujo una nueva API de
PlatformTextInputAdapter
de bajo nivel para compilar implementaciones de entrada de texto personalizadas que se comunican directamente con las APIs de la plataforma. (I58df4).
Correcciones de errores
- La acción semántica
SetText
deBasicTextField
ahora actualizará el búfer de texto con la misma ruta de código que las actualizaciones de IME y las funciones de prueba (p.ej.,performTextReplacement
). - Las funciones de prueba de texto
performTextClearance
,performTextReplacement
yperformTextSelection
ahora usanSemanticsActions
. (I0807d, b/269633168, b/269624358).
Versión 1.4.0-beta02
22 de febrero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-beta02
. La versión 1.4.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se quitó la API de
modifierElementOf()
. En su lugar, extiende directamente desdeModifierNodeElement
. (I2256b). - Se agregó una nueva devolución de llamada
Modifier.Node.onReset()
, que permite restablecer un estado local para controlar correctamente el caso cuandoLayout
se vuelva a usar (por ejemplo, como un elemento deLazyColumn
). Se corrigióFocusTargetModifierNode
para restablecer correctamente el estado enfocado (I65495, b/265201972). - Se agregó el parámetro
BlendMode
a los métodosDrawScope.drawText
,Paragraph.paint
yMultiParagraph.paint
para admitir diferentes algoritmos de combinación cuando se dibuja texto en Canvas (I57508).
Correcciones de errores
- Se mejoró el algoritmo de orden de enfoque de accesibilidad, por ejemplo, las barras superior/inferior se leen con más frecuencia primero y al último, respectivamente (74e9c5).
Versión 1.4.0-beta01
8 de febrero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-beta01
. La versión 1.4.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se cambió el nombre de
PinnableContainer.PinnedHandle.unpin()
porrelease()
(I4667a). - Se agregaron
waitUntilNodeCount
,waitUntilAtLeastOneExists
,waitUntilExactlyOneExists
ywaitUntilDoesNotExist
como APIs experimentales aComposeTestRule
, que extiende la API dewaitUntil
para aceptar cualquier comparador y cualquier recuento de nodos. ConsultaComposeTestRule
para obtener más documentación (Ifa1b9, b/226934294). - Se cambió el nombre de
Font.MaximumAsyncTimeout
aFont.MaximumAsyncTimeoutMillis
(I07af5). - Se quitó
GoogleFont.Provider.AllFontsListUri
y se vinculó a él en ktdoc. (I16f29)
Correcciones de errores
- Se agregaron documentos para
AndroidFont.fontVariationSettings
(I7d9e2).
Versión 1.4.0-alpha05
25 de enero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha05
. La versión 1.4.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se introdujeron nuevas sobrecargas experimentales para la función
runComposeUiTest
y las funcionescreate*ComposeRule
que aceptan parámetrosCoroutineContext
. El contexto se usará para la composición de prueba y cualquier llamadaLaunchedEffect
yrememberCoroutineScope()
en la composición (I10614, b/265177763). - Se agregó una nueva API para realizar el seguimiento de 1 velocidad dimensional (If5a82).
FocusRequester
ahora está marcado como@Stable
(I580ee).- Se quitó una anotación experimental del constructor
DialogProperties
que toma un parámetrousePlatformDefaultWidth
(Ic4048). - Se agregó la función a la posición del cálculo y la tangente a distancia en una ruta, con
PathMeasure.getPosition()
yPathMeasure.getTangent()
(I3b47c). - Se quitó un método set público expuesto de forma accidental en
PlatformParagraphStyle
(I07f47). - Se agregaron más funciones de tipo/nulabilidad de funciones ocultas intercaladas y obsoletas (I24f91).
- Se agregó
AnnotatedString.hasStringAnnotations
para consultar anotaciones con cero asignaciones (I94dfe, b/246960758). - Se agregó una nueva sobrecarga para la función
TextMeasurer.measure
que toma unaString
como texto (I47b2d, b/242705342). - Las APIs de
LineBreak
yHyphens
en TextStyle se cambiaron a la versión estable (Ic1e1d).
Contribución externa
- Los métodos
notifyFocusedRect
deTextInputSession
yTextInputService
ya no son obsoletos (I23a04, b/262648050).
Versión 1.4.0-alpha04
11 de enero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha04
. La versión 1.4.0-alpha04 contiene estas confirmaciones.
Nuevas funciones
- Se agregó una nueva API de
PinnableContainer
que permite fijar elementos de lista diferida para que no se descarten cuando se desplazan fuera de los límites. Por ejemplo,Modifier.focusable()
usa este mecanismo para fijar el elemento enfocado actualmente (Ib8881, b/259274257, b/195049010). - El sistema de enfoque se reescribe con las nuevas APIs experimentales de
Modifier.Node
(I7f4d7, b/247708726, b/255352203, b/253043481, b/247716483, b/254529934, b/251840112, b/251859987, b/257141589). - Se agregó en la propiedad semántica
IsContainer
en plataformas. Esta propiedad se usará en un cambio posterior que determina el orden de recorrido en función del significado semántico de los elementos, como las plataformas (I63379). - Se agregó el nuevo rol de accesibilidad
DropdownList
. Se puede usar para replicar el comportamiento deTalkBack's
cuando se enfocaandroid.widget.Spinner
(I177e5, b/236159001). - Ahora puedes usar
PlatformTextStyle(emojiSupportMatch)
para inhabilitar de manera opcional el procesamiento de la compatibilidad con emojis para un solo párrafo (Ia7100, b/139326806). - Las pruebas de IU de Android Compose ahora ejecutarán pases de diseño para cada fotograma cuando se ejecuten fotogramas para quedar inactivos (p. ej., a través de
waitForIdle
). Esto puede afectar las pruebas que se confirman en fotogramas individuales de animaciones de diseño (I8ea08, b/222093277). - Se agregó
TextMotion
experimental aTextStyle
para definir texto comoStatic(default)
o animado. UsaTextMotion.Animated
si el texto se va a ajustar, traducir o rotar a través de la animación (I24dd7).
Cambios en la API
- Se reemplazó el argumento
maxSize: IntSize
endrawText
consize: Size
para intercalarlo con otras funcionesDrawScope
.size
se establece enSize.Unspecified
de forma predeterminada, lo que no debería cambiar el comportamiento predeterminado anterior (Icd27d). - Se quitó el constructor de fuentes experimentales obsoleto (I8a724, b/261435386).
- La clase de datos de herramientas de IU
Group
ahora tiene un campo,isInline
, que indica si el grupo es para una llamada a una función de componibilidad intercalada. SiisInline
estrue
, la llamada se realiza a una función de componibilidad intercalada. Sin embargo, el valor puede ser falso para llamadas a funciones de componibilidad intercaladas que provienen de módulos que se compilan con una versión del complemento del compilador de Compose que no genera la información de la función intercalada (Idb846). - Varias APIs que antes eran experimentales pasaron a niveles estables.
- La API de Rotary Scroll Event ahora es estable (I42ad3, b/261561229).
- La API de
FontVariation
ahora es estable (I8779f, b/241016309). - Todos los constructores
Font()
ahora son APIs estables (I5948b, b/261435386). DeviceFontFamilyName
ahora es estable (I8b640, b/261435386).- El constructor de
AndroidFont
convariationSettings
ahora es una API estable y se puede usar para crear nuevos tipos de descriptores de fuente (I5adcc, b/261565807). - La API de
createFontFamilyResolver
ahora es estable. Se puede usar para detectar excepciones no detectadas durante la carga asíncrona de fuentes (Ibb481, b/261435386). - La API de
Font.loadingStrategy
ahora es estable (I5937c, b/261435386). - La API de
GoogleFont
ahora es estable (Ic90b0, b/261435386). TextUnit(float, TextUnitType)
ahora es una API estable (I90c84, b/261561612).pluralStringResource
ahora es una API estable (I09849, b/261439703).
Versión 1.4.0-alpha03
7 de diciembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha03
. La versión 1.4.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se quitó
ExperimentalComposeUiApi
dePointerIcon
(I23af8). - Se introdujeron las acciones de accesibilidad de la página:
PageUp
,PageDown
,PageLeft
,PageRight
. Ten en cuenta que solo están disponibles a partir de la API 29 (Ida4ab). - Se actualizó la vista del parámetro
rememberNestedScrollConnection
de la vista raíz a la vista de host (Ia5200). - Se agregó una API de modificador para consultar información de desplazamiento de principales (I2ba9d, b/203141462).
- Se usa en
Clickable
para retrasar correctamente las interacciones de presionar, cuando los gestos pueden convertirse en eventos de desplazamiento. - Se corrigió un error donde
Clickables
no retrasaba correctamente las ondas, cuando se usa dentro de unScrollable ViewGroup
. - Se actualizaron los paneles laterales y las hojas de cálculo para retrasar correctamente las presiones en caso de que los gestos se conviertan en eventos de desplazamiento.
- Se cambió el nombre de
CompositingStrategy.Always
porOffscreen
para indicar quegraphicsLayer
siempre se renderizará en un búfer intermedio (I47dc1). - Se estabilizó la sobrecarga de diseño con varias ranuras de contenido (I10566, b/248294649).
- Se agregaron las nuevas APIs experimentales
PerfettoTrace.record {}
yPerfettoTraceRule
para capturar los registros de Perfetto (también conocidos como Registros del sistema) como parte de una prueba, para inspeccionar el comportamiento y el rendimiento de la misma (I3ba16). - En las pruebas de IU que usan una regla de Compose, no se despacharán las continuaciones reanudadas durante las devoluciones de llamada de
withFrameNanos
hasta que todas las devoluciones de llamada de marco terminen de ejecutarse. Esto coincide con el comportamiento de Compose cuando se ejecuta normalmente. Sin embargo, las pruebas que dependen del comportamiento anterior pueden fallar. Esto solo debería afectar al código que llama awithFrameNanos
owithFrameMillis
de forma directa, y cuenta con una lógica fuera de la devolución de llamada que pasa a las funciones que pueden necesitar moverse dentro de las devoluciones de llamada. Consulta los cambios de la prueba de animación en esta CL para ver ejemplos. - Se agregó el parámetro opcional
onPerformTraversals: (Long) -> Unit
al constructorTestMonotonicFrameClock
y la función de fábrica para ejecutar el código después de las devoluciones de llamada dewithFrameNanos
, pero antes de reanudar las corrutinas de los emisores. (Idb413, b/254115946, b/222093277, b/255802670). - Se agregó EmojiCompat a Compose (Ibf6f9, b/139326806).
- Se agregó un nuevo parámetro de fondo de pantalla a
@Preview
para admitir colores dinámicos (I9f512).
Correcciones de errores
- Las notificaciones de aplicación de instantáneas ahora se envían después de que
Recomposer
termina de aplicar los cambios (Iad6c0, b/222093277). - Se introdujeron cambios en
captureToImage
para permitir la captura de pantalla multiventana. Esto es útil para las pruebas de captura de pantalla que usan ventanas emergentes de Compose (I169c5).
Actualizaciones de dependencias
- La IU de Compose y Compose Material ahora dependen de Lifecycle 2.5.1. (I05ab0, b/258038814).
Versión 1.4.0-alpha02
9 de noviembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha02
. La versión 1.4.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se actualizó
GraphicsLayerScope
para exponer el tamaño actual degraphicsLayer
. Esto es útil para calcular las transformacionesgraphicsLayer
como una función del tamaño componible. (If8c43,b/181387080) - Se agregó
CompositingStrategy
para determinar cuándo aprovechar una capa de composición fuera de la pantalla para procesar contenidographicsLayer
. Mantiene automáticamente el comportamiento predeterminado que aprovecha internamente una capa si se aplica alfa oRenderEffect/Overscroll
Siempre introducirá un búfer fuera de pantalla en el queModulateAlpha
evitará aprovechar un búfer fuera de pantalla y, en su lugar, modulará cada una de las instrucciones de dibujo registradas dentro degraphicsLayer
. El uso deModulateAlpha
seguirá aprovechando un búfer fuera de la pantalla para usos deRenderEffect/Overscroll
. (I25e82, b/256382834) - Se agregó
invalidateSubtree()
aModifier.Node
para permitir la invalidación de jerarquías completas para el diseño y el dibujo. (I4bd90) - Se asciende
rememberNestedScrollInteropConnection
a estable. Se introdujo la capacidad de pasar una vista raíz arememberNestedScrollInteropConnection
. Esto puede ayudar a que la vista personalizada reaccione mejor a las restricciones de desplazamiento, especialmente en las vistas no estándar (p. ej.,ModalBottomSheetDialog
). (I9e107) - Se agregó la interfaz de
ObserverNode
que se pueden usar las implementaciones deModifier.Node
que deben notificarse cuando haya cambiado un valor que hayan leído anteriormente. (I5728b, b/247716483) - Se agregó un nuevo constructor a
Paint
que acepta unandroid.graphics.Paint
nativo. También se agregó una función de extensióntoComposePaint()
que convierte un objeto Paint nativo existente en Compose Paint. (Ica91b) - Se agregó un
FontFamily.Resolver.resolveAsTypeface
nuevo para usar en Android. (I8950b) - Se agregó
ToolingState
para permitir que las herramientas cambien los estados internos de Compose (Ie6614). - Se refactorizaron las herramientas para tener una mejor compatibilidad con las nuevas animaciones agregadas. (I8677b)
- Se agregó el parámetro
minLines
al texto de Material y Material 3,TextField
yOutlinedTextField
, que permiten establecer la altura mínima del componente en términos de cantidad de líneas (I4af1d).
Versión 1.4.0-alpha01
24 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.4.0-alpha01
. La versión 1.4.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Se agregó un nuevo método,
awaitEachGesture()
, para los detectores de gestos. Funciona de manera similar aforEachGesture()
, pero la repetición de gestos funciona completamente dentro deAwaitPointerEventScope
, por lo que no se pueden perder eventos entre iteraciones. forEachGesture()
dejó de estar disponible a favor deawaitEachGesture()
porque permite que se pierdan eventos entre gestos (Iffc3f, b/251260206).- Se dio de baja el reciclaje de objetos de accesibilidad en AndroidX. Detectamos que los cambios en el rendimiento son insignificantes, incluso en las versiones compatibles más antiguas. (I0a961)
- Se agregó
DrawStyle
como atributo experimental aTextStyle
ySpanStyle
para habilitar el dibujo de texto con contorno. (If24b8, b/155421273) AnnotatedString.Builder
ahora implementakotlin.text.Appendable
. (I1a061, b/231030444)AnnotatedString.Builder
ahora tiene un métodoappend(AnnotatedString, start: Int, end: Int)
para agregar una substring de unAnnotatedString
y los estilos de intersección.- Se agregó el parámetro
DrawStyle
a las funciones de pinturaParagraph
yMultiParagraph
que habilita el dibujo de texto con contorno. (Ic8102, b/155421273)
Contribución externa
- Gracias por
vighnesh
, por agregar dispositivos de TV a las vistas previas (Ie15cd).
Versión 1.3
Versión 1.3.3
11 de enero de 2023
Lanzamiento de androidx.compose.ui:ui-*:1.3.3
. La versión 1.3.3 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla que a veces se producía en Android 9 cuando Activity guardaba el estado de Compose View (I0b755, b/260322832).
Versión 1.3.2
7 de diciembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.2
. La versión 1.3.2 contiene estas confirmaciones.
Correcciones de errores
- Se actualizó para usar Profobuf 3.21.8, lo que evita una alerta de seguridad en
protobuf-javalite:3.19.4
(CVE-2022-3171) (b/255545055).
Versión 1.3.1
9 de noviembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.1
. La versión 1.3.1 contiene estas confirmaciones.
Versión 1.3.0
24 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0
. La versión 1.3.0 contiene estas confirmaciones.
Cambios importantes desde 1.2.0
- Nuevo paquete de API experimental
LookaheadLayout
(que habilita comportamientos de animación que antes eran imposibles) - Nuevo paquete de API experimental
Modifier.Node
(alternativa de mayor rendimiento en comparación conModifier.composed
) - Compatibilidad con las inserciones de ventana mejorada
- Enfoque en la compatibilidad con pads direccionales y teclados de hardware en LazyLists
- La elevación máxima admitida en diálogos y ventanas emergentes se redujo a 8 dp (cambio rotundo en el comportamiento para algunos sistemas de diseño personalizados; lógica en las notas de la versión beta01)
- Muchas mejoras menores y continuas en la API
- Varias correcciones de errores y mejoras de rendimiento
Versión 1.3.0-rc01
5 de octubre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-rc01
. La versión 1.3.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Se agregaron nuevos guiones experimentales de API para admitir la separación silábica automática en Text (Iaa869).
Correcciones de errores
- Las fuentes
DeviceFontFamilyName
no configuraránwght
ni hará variaciones enital
de los parámetros predeterminados, sino que usarán la configuración de la plataforma paraTypeface
cargados (Ia7a6d, b/246989332). - Se corrigió la fuga de memoria de
LazyColumn
en la que no se llamaba aonModifierLocalsUpdated
con el valor predeterminado cuando se reutilizaban los modificadores (b/230168389).
Versión 1.3.0-beta03
21 de septiembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-beta03
. La versión 1.3.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregaron opciones para personalizar el salto de línea en el texto (I86907).
- Se cambió el argumento
size:IntSize
conconstraints: Constraints
en el métodoTextMeasurer.measure
para admitir restricciones de ancho mínimo (I37530, b/242707525).
Correcciones de errores
- La API de
BackHandler
de AndroidX Activity ahora funciona dentro de un elementoDialog
componible (I35342).
Versión 1.3.0-beta02
7 de septiembre de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-beta02
. La versión 1.3.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una sobrecarga experimental para Layout que acepta una lista de varias lambdas de contenido componible. Esto permite vincular mediciones en diferentes lambdas de contenido (Ic1b4e).
Cambios en las APIs experimentales de Focus:
FocusDirection.In
yFocusDirection.Out
dejaron de estar disponibles y se reemplazaron porFocusDirection.Enter
yFocusDirection.Exit
(Ia4262, b/183746982).- Se agregaron dos nuevas propiedades de enfoque de entrada y salida para especificar un comportamiento personalizado para
FocusManager.moveFocus(Enter)
yFocusManager.moveFocus(Exit)
(I5f3f9, b/183746982). - Ahora puedes usar
FocusRequester.Cancel
para cancelar un movimiento de enfoque.FocusRequester.Cancel
se puede usar en cualquiera de las siguientes propiedades de enfoque: arriba, abajo, izquierda, derecha, siguiente, anterior, inicio, finalización, entrada y salida (Ib300f).
Versión 1.3.0-beta01
24 de agosto de 2022
Se lanzó androidx.compose.ui:ui-*:1.3.0-beta01
. La versión 1.3.0-beta01 contiene estas confirmaciones.
Refactorización del nodo modificador
Se refactorizó en gran medida la capa que controla las instancias de Modifier/Modifier.Element
y coordina su comportamiento en LayoutNodes
. Tal como está, esta fue una refactorización que no afectó a la API pública de ninguno de los numerosos modificadores de Compose y se puede considerar un cambio solo de implementación. A pesar de eso, este es un cambio importante por varios motivos (Ie4313).
Resumen de cambios
Las APIs experimentales de Modifier.Node
agregadas proporcionan una abstracción que permite mantener el estado en una instancia que se conservará con el ciclo de vida del nodo de diseño y se asignará por nodo de diseño y por uso del Modifier.Element
correspondiente que lo produjo.
En términos generales, esta abstracción proporciona un mecanismo alternativo para producir modificadores con estado sin depender de la mecánica de la API de Modifier.composed
.
Riesgo
Este cambio es estrictamente binario y compatible con versiones anteriores, y está pensado para ser retrocompatible en términos de comportamiento observable tanto como sea práctico y razonable. Dicho esto, hay pocos subsistemas de Compose que esta refactorización no tocó y es probable que el comportamiento haya cambiado de maneras que no fueron cubiertas por nuestras pruebas y que aún no se han encontrado ni corregido.
Actualiza a esta versión con precaución. Si crees que esto haya producido fallas en tu caso, avísanos.
APIs experimentales
Se agregaron varias APIs experimentales que se relacionan con el concepto nuevo de "nodo modificador". Los Modifier.Node se crean como resultado de lo siguiente:
fun modifierElementOf(…): Modifier
abstract class ModifierNodeElement
abstract class Modifier.Node
abstract class DelegatingNode
interface LayoutModifierNode
interface DrawModifierNode
interface SemanticsNode
interface PointerInputNode
interface ModifierLocalNode
interface ParentDataModifierNode
interface LayoutAwareModifierNode
interface GlobalPositionAwareModifierNode
interface IntermediateLayoutModifierNode
Cambio rotundo de comportamiento
La elevación máxima admitida en los diálogos y las ventanas emergentes se redujo a 8 dp.
La elevación máxima admitida para los diálogos y las ventanas emergentes de Compose se redujo de 30 dp a 8 dp. Este cambio afecta a los diálogos personalizados y a las ventanas emergentes de IU y Material. Este cambio se realiza para mitigar un error de accesibilidad en las versiones de Android anteriores a S y garantizar que los servicios de accesibilidad de esas ventanas puedan interactuar con el contenido dentro del diálogo o la ventana emergente.
Este cambio solo te afectará si creas un diálogo personalizado o una implementación de ventana emergente con una elevación establecida en niveles superiores a 8 dp. Puedes bajar la elevación del diálogo o la ventana emergente. Si quieres rechazar este nuevo comportamiento, bifurca tu propio diálogo o ventana emergente con la configuración de elevación deseada. Esto no se recomienda, ya que la accesibilidad podría verse afectada negativamente y es responsabilidad del desarrollador asegurarse de que la parte inferior del diálogo o la ventana emergente sea interactiva y legible con los servicios de accesibilidad.
Cambios en la API
- Se solucionó un problema por el que
painterResource
no se actualizaba con los cambios de configuración (I58e73, b/228862715). rememberTextMeasurer
ya no toma los parámetrosFontFamily.Resolver
,Density
niLayoutDirection
. Usa el constructorTextMeasurer
a fin de proporcionar valores personalizados para estos parámetros (Ia1da3).- Se agregó la propiedad
DialogProperties.decorFitsSystemWindows
para permitir que Dialogs sea compatible conWindowInsets
(I57742, b/229378542). - Se revirtieron los constructores de fuente al archivo Kotlin original para conservar la compatibilidad binaria. Sin cambios desde la última versión estable (Ieb2f3).
- Se quitó el operador innecesario de varias definiciones de igualdad; esto no tiene efecto (I6c309).
FontVariation.Setting
es una interfaz sellada para permitir futuras APIs de restricciones (I11021, b/143703328).- Se agregó
CompositionGroup.findParameters
aSlotTree.kt
. Esto permite que las herramientas recuperen parámetros para unCompositionGroup
sin tener que analizar toda la tabla de ranuras (I124fe).
Versión 1.3.0-alpha03
10 de agosto de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-alpha03
. La versión 1.3.0-alpha03 contiene estas confirmaciones.
Cambios en la API
LayoutCoordinates.findRootCoordinates()
ahora es público (I7fa37, b/204723384).- Se agregó una API experimental para obtener
LayoutCoordinates
enPlacementScope
. Esto permite a los desarrolladores saber dónde se encuentra el diseño actual para colocar los elementos secundarios en relación con su posición (I5482b, b/238632578). - Se agregó
LayoutCoordinates.transformFrom
para obtener la transformación de Matrix de unaLayoutCoordinates
a otra (Ic5ab1, b/238632578). SemanticsModifier.id
dejó de estar disponible y, en su lugar, se movió el ID de semántica aLayoutInfo.semanticsId
(Iac808, b/203559524).- Las fuentes de recursos ahora admiten la configuración de variaciones de fuentes (nivel de API 26 o versiones posteriores) (I900dd, b/143703328).
- Compatibilidad con fuentes variables en
DeviceFontFamilyNameFont
(Ic1279, b/143703328). - Los constructores de fuentes ahora aceptan una lista de
FontVariation.Setting
para configurar fuentes variables en dispositivos O+ (I11a9d, b/143703328). - Se agregó la API de
FontVariation
para definir y usar fuentes variables (I3c40c, b/143703328). - El constructor
LineHeightStyle.Alignment
ahora es público (experimental) (I4bbbe, b/235876330). - Ahora, el párrafo es esperado|real y se define para Android y computadoras de escritorio (Id387e, b/239962983).
- Ahora, el párrafo de interfaz es una interfaz sellada de Paragarph. No existe un caso de uso para la creación de subclases de párrafos, y te recomendamos que te comuniques con nosotros si este cambio te afecta (If5247, b/239962983).
- Se quitó la anotación experimental de
PlatformTextStyle
yLineHeightStyle
(I64bef). TextInputService.show|hideSoftwareKeyboard
dejó de estar disponible. En su lugar, usaSoftwareKeyboardController
en el código de la app yTextInputSession
en el código de administración de IME. (I14e4c, b/183448615).- Se agregó una API nueva para los tipos de animación existentes (I26179).
Correcciones de errores
- Se agregó
@RequiresPermission
a las APIs que requieren que se otorgue el permisoPOST_NOTIFICATIONS
en SDK 33 y versiones posteriores (Ie542e, b/238790278).
Versión 1.3.0-alpha02
27 de julio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-alpha02
. La versión 1.3.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una nueva propiedad
PointerInputChange#pressure
para recuperar la presión (I45a5e, b/205164819). - Se agregó
rememberTextMeasurer
para crear y recordar instancias deTextMeasurer
con facilidad en la composición (I8d66e). Rect
,RoundRect
yMutableRect
ahora admiten la sintaxisin
de Kotlin para llamar a la funcióncontains
(Ie42b0, b/238642990).- Se quitaron las funciones innecesarias de
KeyInjectionScope
, ya que se pueden implementar fácilmente con partes más simples de la API. Las funciones que se quitaron incluyenpressKeys
,keysDown
ykeysUp
(I81d77). - Se refactorizaron nombres de constantes y parámetros de
KeyInjectionScope
para incluir el sufijo "Millis", donde las unidades de esos parámetros y constantes son milisegundos (Iabef5). - Se agregó el método
toStringForLog()
aEditCommand
para ayudar a solucionar problemas de edición de texto (I53354, b/228862731). - Se agregó la función de extensión
drawText
enDrawScope
para proporcionar una forma de dibujar texto multiestilo en elementos componibles y modificadores que funcionan enDrawScope
, comoCanvas
ydrawBehind
. (I16a62, b/190787898). - Presentamos una nueva API experimental llamada
TextMeasurer
que habilita el cálculo de diseño de texto arbitrario que crea resultados idénticos aBasicText
, independientemente del entorno de ejecución de Compose (I17101). - Se agregó
mapTree
aSlotTree.kt
Esto permite que las herramientas inspeccionen elSlotTree
sin hacer primero una copia en la memoria, como lo hace asTree. Para el Inspector de diseño, esto mejora el rendimiento en aproximadamente un factor 10 (I5e113). - Se cambió la vista previa de Compose para que se almacene en archivos de salida binarios para permitir que los desarrolladores escriban y reutilicen anotaciones
MultiPreview
de bibliotecas (I85699, b/233511976).
Correcciones de errores
- Cuando se agreguen eventos
InputEventChange
aVelocity
Tracker, consideraremos los deltas en lugar de las posiciones, lo que garantizará que la velocidad se calcule correctamente en todos los casos, incluso si se mueve el elemento objetivo (Icea9d, b/216582726, b/223440806, b/227709803). - Se corrigió la NPE generada por
AnnotatedString.toUpperCase
cuando hay anotaciones (I0aca2, b/210899140).
Versión 1.3.0-alpha01
29 de junio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.3.0-alpha01
. La versión 1.3.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Nuevo objeto
LookaheadLayout
que admite un pase anticipado antes del diseño o la medición real. Esto permite realizar un cálculo previo del diseño cuando cambia y, al mismo tiempo, permite que la medición o el diseño posvisualización use el tamaño o la posición previamente calculados para animar el tamaño y las posiciones hacia el objetivo.SubcomposeLayouts
todavía no son compatibles, pero lo serán en una próxima versión (I477f5). - Se agregó el parámetro alfa opcional al tipo de pincel de
TextStyle
ySpanStyle
para modificar la opacidad de todo el elementoText
(Ic2fac, b/234117635). - Se introdujo el tipo de anotación
UrlAnnotation
y los métodos asociados para admitir la compatibilidad con vínculosTalkBack
enAnnotatedString
(I1c754, b/231495122). - Se migró la funcionalidad de la utilidad al entorno de ejecución (I4f729).
Correcciones de errores
- No se arroja
TextLayoutResult.getLineForOffset
(Idc5d6, b/235876324).
Contribución externa
- Se agregó una nueva API de
WindowInfo.keyboardModifiers
para observar su estado dentro de funciones de componibilidad o a través de snapshotFlow (Icdb8a).
Versión 1.2
Versión 1.2.1
10 de agosto de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.1
. La versión 1.2.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un valor nulo en el inspector (b/237987764).
- Se corrigió la excepción de transmisión de clase durante la recuperación en el inspector (b/235526153).
Versión 1.2.0
27 de julio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0
. La versión 1.2.0 contiene estas confirmaciones.
Cambios importantes desde la versión 1.1.0
Mejoras en el recorrido del foco:
- El desplazamiento basado en el foco de las listas diferidas ahora funciona con la nueva API principal de
BeyondBoundsLayout
- Nuevas APIs de personalización de comportamiento en
FocusOrder
yFocusProperties
- Comportamiento mejorado con el teclado físico o el control remoto de la TV
- El desplazamiento basado en el foco de las listas diferidas ahora funciona con la nueva API principal de
Nuevas APIs para lo siguiente:
- Inserción de ventana
- Primitivas básicas para animaciones infinitas, de diseño y controladas por gestos
- Capacidades de
GraphicsLayer
, lo que incluyeRenderEffect
Varias correcciones de errores y mejoras de rendimiento
Versión 1.2.0-rc03
29 de junio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-rc03
. La versión 1.2.0-rc03 contiene estas confirmaciones.
- No hay cambios desde la versión 1.2.0-rc02.
Versión 1.2.0-rc02
22 de junio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-rc02
. La versión 1.2.0-rc02 contiene estas confirmaciones.
Versión 1.2.0-rc01
15 de junio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-rc01
. La versión 1.2.0-rc01 contiene estas confirmaciones.
Cambios en la API
- Las interfaces en las bibliotecas de Compose ahora se compilan con métodos de interfaz predeterminados de jdk8 (I5bcf1).
- Se agregaron funciones de orden superior a
KeyInjectionScope
para insertar pulsaciones de teclas mientras otras teclas se mantienen presionadas o activadas. Estas funciones incluyenwithKeysDown
,withKeysToggled
, etc. También se agregaron propiedades para comprobar si una tecla meta específica está inactiva (por ejemplo,isCtrlDown
) para verificar si se dejó de presionar alguna de las teclas de control. ConsultaKeyInjectionScope
para ver la documentación de cada función (I9f6cd, b/229831515). - Se agregó un elemento
OverscrollEffect
experimental que permite efectos de desplazamiento personalizados, junto con las sobrecargas deModifier.scrollable
que lo aceptan. - Se movió el elemento experimental
LocalOverScrollConfiguration
defoundation.gesture
al paquete de base y se cambió su nombre porLocalOverscrollConfiguration
(If19fb, b/204650733). - Se cambió el nombre de
runComposeUiTestWithoutActivity {}
porrunEmptyComposeUiTest {}
, para que quede alineado concreateEmptyComposeRule()
(I6fed7).
Versión 1.2.0-beta03
1 de junio de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-beta03
. La versión 1.2.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
pressKeyTimes
,isCapsLockOn
y amigos aKeyInjectionScope
. Además, la API ahora admite patrones de inyección combinados del mouse y el teclado, como hacer clic con el botón del mouse y presionar una tecla meta a la vez (I4c8da, b/229831515). - Se agregó compatibilidad experimental para insertar eventos clave. Usa
performKeyInput
para enviar eventos clave o envíalos a través de la propiedadkey
deMultiModalInjectionScope
durante un gesto de entrada multimodal conperformMultiModalInput
. ConsultaKeyInjectionScope
para ver la documentación disponible de la API (Ic5000, b/229831515). - Se agregó un nuevo
GoogleFont.Provider.AllFontsListUri
para recuperar la fuente de Internet canónica de Google Fonts compatible con Android. - Se mejoraron los mensajes de error que se producían cuando Google Fonts no se cargaba en Compose (I0416c).
Correcciones de errores
- Cuando se agregan eventos
InputEventChange
a Velocity Tracker, consideraremos los deltas en lugar de las posiciones, lo que garantizará que la velocidad se calcule correctamente en todos los casos, incluso si se mueve el elemento objetivo (I51ec3, b/216582726, b/223440806, b/227709803). - Ahora, el parámetro de configuración
Show Layout Bounds
se aplicará a los elementos componibles inmediatamente después de activar o desactivar la tarjeta de configuración rápida, sin tener que salir de la actividad y volver a ingresar. (I843d5, b/225937688). - La búsqueda de strings de accesibilidad no activa la carga de fuentes. Antes, intentaba cargar fuentes para
StyleSpans
, lo que provocaba fallas si se reemplazabaFontFamily.Resolver
(I4609d). - Si presionas la tecla de borrar hacia adelante cuando el cursor se encuentra al final de un campo de texto, ya no fallará.
DeleteSurroundingTextCommand
yDeleteSurroundingTextInCodePointsCommand
ahora requieren que sus argumentos de constructor sean no negativos. (Ica8e6, b/199919707).
Versión 1.2.0-beta02
18 de mayo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-beta02
. La versión 1.2.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se volvió a implementar la funcionalidad en otros tipos de vista previa (I19f39).
Correcciones de errores
- Se cambió el nombre de
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
porDisposeOnDetachedFromWindowOrReleasedFromPool
para reflejar mejor cuando se producen las eliminaciones, en lugar de solo cuando no se producen (If15ca).
Versión 1.2.0-beta01
11 de mayo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-beta01
. La versión 1.2.0-beta01 contiene estas confirmaciones.
Nuevas funciones
- Esta es la primera versión beta de 1.2.
Cambios en la API
- Se agregó el objeto
BeyondBoundsInterval
experimental que las implementaciones personalizadas deLazyList
pueden utilizar cuando diseñan elementos que superan los límites visibles (Ifabfb, b/184670295). - Las versiones con clave de
Modifier.composed
ahora son una API estable (Ie65e4, b/229988420). - Se simplificó la API de
rememberNestedScrollConnection
para usar configuraciones regionales de composición y adquirir información sobre la vista actual (I67ca7). - La anotación
@ComposableTarget
y las anotaciones marcadas por@ComposableTargetMarker
ahora se pueden usar en el alcance del archivo con el prefijo@file
. El uso de una anotación de destino en el alcance del archivo hará que el compilador asuma que todas las funciones que admiten composición en el archivo deben orientarse al aplicador asociado. Por ejemplo, el uso de@file:UiComposable
declara que todas las funciones@Composable
están orientadas al aplicador de la IU de Compose. Una función que necesita orientarse a otro aplicador debe proporcionar explícitamente la anotación del marcador de destino para el aplicador deseado (I40804). Agregamos una nueva API experimental, independiente de la plataforma, de prueba: una
interface ComposeUiTest
y unafun runComposeUiTest(block: ComposeUiTest.() -> Unit)
, que se pueden usar para ejecutar pruebas de IU de Compose sin la necesidad de usarTestRule
. Para ejecutar una prueba sin unaComposeTestRule
, pasa la prueba como una lambda arunComposeUiTest
y usa los métodos y los miembros en laComposeUiTest
del alcance del receptor, que son los mismos que enComposeContentTestRule
.Se agregan
interface AndroidComposeUiTest
yfun runAndroidComposeUiTest(block: AndroidComposeUiTest.() -> Unit)
específicos de Android para brindar acceso a la actividad subyacente, similar aAndroidComposeTestRule
. Para obtener aún más control, puedes crear una instancia declass AndroidComposeUiTestEnvironment
.La implementación para computadoras de escritorio es la
class DesktopComposeUiTest
, pero, por el momento, no se ofrecen funciones de ejecución específicas para computadoras.La migración de una prueba de
ComposeTestRule
aComposeUiTest
se puede hacer de esta manera (ejemplo de Android). De:@RunWith(AndroidJUnit4::class) class MyTest { @get:Rule val rule = createComposeRule() @Test fun test() { rule.setContent { Text("Hello Compose!") } rule.onNodeWithText("Hello Compose!").assertExists() } }
A:
@RunWith(AndroidJUnit4::class) class MyTest { @Test @OptIn(ExperimentalTestApi::class) fun test() = runComposeUiTest { setContent { Text("Hello Compose!") } onNodeWithText("Hello Compose!").assertExists() } }
Por ahora,
ComposeContentTestRule
yComposeTestRule
no se extienden desdeComposeUiTest
, lo que significa que aún no se puede llamar a las funciones de extensión enComposeUiTest
en la interfazTestRule
. CuandoComposeUiTest
cambie a una API estable, se cambiaránComposeContentTestRule
yComposeTestRule
para extenderse deComposeUiTest
(Ib4e90).Se cambió el nombre de
LineHeightBehavior
porLineHeightStyle
.Se cambió el nombre de
LineVerticalAlignment
porLineHeightStyle.Alignment
.LineHeightTrim
cambia de nombre aLineHeightStyle.Trim
.Se quitaron los valores de constructor predeterminados de
LineHeightStyle
(I582bf, b/181155707).Se agregó
Brush
aTextStyle
ySpanStyle
para proporcionar una manera de dibujar texto con colores con gradientes (I53869, b/187839528).Los atributos
trimFirstLineTop
,trimLastLineBottom
deLineHeightBehavior
se cambiaron a una sola enumeración:LineHeightTrim
.LineHeightTrim
tiene valores de 4 estados definidos por dos booleanos:FirstLineTop
,LastLineBottom
, Ambos y Ninguno (Ifc6a5, b/181155707).Se agregó
LineHeightBehavior
aTextStyle
yParagraphStyle
.LineHeightBehavior
controla si la altura de la línea se aplica a la parte superior de la primera línea y a la parte inferior de la última línea. También define la alineación de la línea en el espacio proporcionado porTextStyle(lineHeight)
.Por ejemplo, es posible obtener un comportamiento similar al que define CSS a través de
LineHeightBehavior(alignment = LineVerticalAlignment.Center, trimFirstLineTop=false, trimLastLineBottom = false)
.Las configuraciones de
trimFirstLineTop
ytrimLastLineBottom
funcionan correctamente solo cuandoincludeFontPadding
es falso (I97332, b/181155707).Se cambiaron las funciones
PlatformParagraphStyle.lerp
yPlatformSpanStyle.lerp
para que sean de nivel superior (I9a268).
Correcciones de errores
- La documentación de
PointerInputChange::copy
ahora indica correctamente que es una copia superficial (I182f5). - Se admite elipsis cuando la altura es limitada y no cabe en todas las líneas de texto (Ie528c, b/168720622).
includeFontPadding
está activado de manera predeterminada. Es posible desactivarincludeFontPadding
con el atributoTextStyle.platformTextStyle
. Sin embargo, en un futuro cercano, cambiaremos el comportamiento predeterminado hasta ese momento, lo que nos permitirá integrar mejor las mejoras de altura de línea (aosp/2058653) y solucionar problemas de recorteTextField
. (I01423, b/171394808).
Contribución externa
MouseInjectionScope.scroll(delta = someDelta)
ahora se invierte en Android si nos desplazamos verticalmente (si someDelta es positivo, se desplazará hacia abajo) (Ifb697, b/224992993).
Versión 1.2.0-alpha08
20 de abril de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha08
. La versión 1.2.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Las funciones
pluralStringResource
se marcaron como experimentales para permitir que la evolución apoye una mejor internacionalización en el futuro (If24e4). - Paragraph y MultiParagraph ahora aceptan el parámetro Constraints. Pasar
Constraints.maxHeight
es una no-op en este momento, pero te permitirá hacer algunos cálculos en el futuro, como la elipsis según la altura (I6afee, b/168720622). SubcomposeSlotReusePolicy.getSlotsToRetain()
ahora acepta una clase personalizada similar a MutableSet que no permite agregar elementos nuevos en ella (Icd314).- PointerIcon ahora es una interfaz
@Stable
(I9dafe). - El consumo parcial (de posición abajo O) ya no está disponible en
PointerInputChange
. Puedes usarconsume()
para consumir el cambio por completo. También puedes usarisConsumed
para determinar si otra persona ya consumió el cambio. PointerInputChange::copy()
ahora siempre hace una copia superficial. Significa que se consumirán copias dePointerInputChange
una vez que se consuma una de las copias. Si quieres crear unaPointerInputChange
no vinculada, usa un constructor (Ie6be4, b/225669674).- Habilita la interoperabilidad de desplazamiento anidada entre Compose y View en la dirección Compose > View. Esto significa que un elemento superior de composición podrá recibir deltas de desplazamiento anidados desde una vista de desplazamiento anidada (If7949, b/174348612).
- Se agregó el nuevo
SemanticsProperty testTagsAsResourceId
, que se puede usar para que Compose cumpla con las pruebas de UIAutomator diseñadas para el sistema de View (I39c20). - Se muestran todos los grosores disponibles para las fuentes del sistema en Android cuando se use
FontFamily.SansSerif
. Para ello, se usarán nombres de fuentes de resguardo como sans-serif-medium internamente en los niveles de API 21 a 28. Este es un cambio de comportamiento, ya que anteriormente solo se admitían los grosores 400 y 700 en los niveles de API 21 a 28 (I380fe, b/156048036, b/226441992). - Los instructores de Paragraph y Multiparagraph reordenaron los argumentos de posición antes de los argumentos opcionales (Idafaa).
AndroidFont
ahora toma typefaceLoader como parámetro de constructor (I2c971).
Versión 1.2.0-alpha07
6 de abril de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha07
. La versión 1.2.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se agregó la nueva función
Snapshot.withoutReadObservation { ... }
. Permite que los usuarios ejecuten la lambda pasada sin suscribirse a los cambios de los valores de estado leídos durante este bloque. Puede resultarte útil en los casos de uso en los que quieres aprovechar las escrituras y lecturas con protección de subprocesos basadas en instantáneas, pero también deseas poder leer el valor sin causar nuevas composiciones o mediciones innecesarias (I9f365, b/214054486). - La propiedad de extensión
consumeWindowInsets
deComposeView
permite a los desarrolladores inhabilitar el consumo de AndroidWindowInsets
. Esto permite queComposeViews
independientes en la jerarquía apliquenWindowInsets
sin interferir entre sí (I0ef08, b/220943142). - Se agregó
KeyboardType.Decimal
como alternativa aKeyboard.Number
para incluir específicamente un separador decimal en IME (Iec4c8, b/209835363). PointerEventType.Scroll
yPointerEvent.scrollDelta
ahora son API estables (I574c5, b/225669674).- Se habilitó la interoperabilidad de desplazamiento anidado entre View y Compose para clases de View que cooperan. Esto significa que Compose ahora puede despachar deltas de desplazamiento a un elemento superior de View (que coopera) (I5d1ac, b/174348612).
- Se actualizó
FontFamily.Resolver
para integrar la configuración de accesibilidad de texto en negrita en todo el sistema (I6c1e7). Font(AssetManager, String, ...)
dejó de estar disponible y se reemplazó porFont(String, AssetManager, ...)
. Esta es una API experimental (I1c7a4).- Se agregó un nuevo descriptor de fuente
Font(DeviceFontFamilyName)
para buscar fuentes instaladas en el sistema de forma opcional durante las cadenas de resguardo de fuentes (I30468, b/219754572). - Se agregó una configuración de compatibilidad temporal para
includeFontPadding
en TextStyle/ParagraphStyle.includeFontPadding
se puede cambiar medianteTextStyle(platformStyle = PlatformTextStyle(includeFontPadding = true/false))
. Esta es una opción de configuración temporal para habilitar la migración y se quitará (If47be, b/171394808). - Se agregó la extensión
GoogleFont.Provider.isAvailableOnDevice
para ayudar con la depuración (I64e31). - Se agregó el constructor
GoogleFont.Provider
para su uso con@ArrayRes
(Ic5ee1, b/225984280). Compose GoogleFont
ahora se llamaFont(GoogleFont)
; de lo contrario, la API permanece estable (I125f2).
Correcciones de errores
- Se agregó una comprobación de lint a material/Scaffold para garantizar que se use el padding interno (Ifb111).
Versión 1.2.0-alpha06
23 de marzo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha06
. La versión 1.2.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Se agregó la acción semántica de
RequestFocus
para solicitar el enfoque en el objetivo enfocable (I17b71). - Se actualizó el análisis de elementos de diseño vectoriales para admitir la duplicación automática a fin de girar el contenido de un
VectorPainter
si la dirección de diseño actual es RTL (I79cd9, b/185760237). Se actualizaron los colores de sombras y ambientes con el objetivo de que sean parámetros finales de
Modifier.graphicsLayer
para la compatibilidad de la API (I3f864, b/160665122).Se agregaron implementaciones predeterminadas al color de sombra o ambiente en
GraphicsLayerScope
para garantizar que no se produzcan cambios de API rotundos.Se agregó la hora del evento a eventos RSB (Ief8ae).
FocusOrder
se combinó conFocusProperties
, yfocusProperties()
ahora tiene todas las capacidades defocusOrder()
.FocusOrder
yfocusOrder()
ya no están disponibles. ElfocusOrder()
que acepta unafocusRequester
se debe reemplazar por un modificadorfocusRequester()
en combinación confocusProperties()
. Esto permite que los modificadores tengan una separación más profunda de problemas (I601b7).La actualización de
RecyclerView
yCompose
ahora dará como resultado un rendimiento de desplazamiento mucho mejor para RecyclerViews con vistas de Compose como elementos secundarios.Se agregó
ViewCompositionStrategy.Default
como medio para recuperar la estrategia predeterminada integrada.Se agregó
ViewCompositionStrategy.DisposeOnDetachedFromWindowIfNotInPoolingContainer
, que es la nueva estrategia predeterminada y controla de forma correcta los contenedores de agrupación, como RecyclerView (If7282).Se agregó compatibilidad para anotar clases de anotaciones con @Preview como primer paso para incorporar la función de vista previa. Estas anotaciones se pueden usar para anotar métodos componibles u otras clases de anotaciones, que luego se podrían considerar anotaciones indirectas con el objeto @Preview determinado (I12eff).
Se agregaron dispositivos de referencia a la lista Dispositivos de @Preview (I071c9).
Correcciones de errores
- Se actualizaron las APIs de gráficos vectoriales para usar la anotación componible correcta @VectorComposable en lugar de @UiComposable (I942bc).
- Se quitó crossinline de
AnnotatedString.Builder.withStyle
(If84d5).
Contribución externa
- compose-ui: Se agregaron las propiedades
ambientShadowColor
yspotShadowColor
aGraphicsLayerScope
+ (I1ba1a, b/160665122). - Los recursos plurales ahora son compatibles con las funciones
pluralStringResource
(Ib2f23, b/191375123).
Versión 1.2.0-alpha05
9 de marzo de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha05
. La versión 1.2.0-alpha05 contiene estas confirmaciones.
Cambios en la API
TextToolbar
ahora toma argumentos lambda en lugar deActionCallback
(Ib2eb9, b/197950089).- Se actualizó la nulabilidad en core y appcompat para que coincida con Tiramisu DP2 (I0cbb7).
- La interfaz de Measured ahora expone la propiedad parentData (I3313f).
Modifier.onPlaced
y la interfazOnPlacedModifier
ahora son estables (Ib5482).- ¡Hip, hip, hurra! La animación de Compose ahora permite configurar la "Escala de duración de animador" desde las Opciones para desarrolladores (I5a4fc, b/161675988).
- Se agregó un modificador
BeyondBoundsLayout
local (If8b51, b/184670295). - Texto: El elemento includeFontPadding está desactivado de forma predeterminada. Se controlaron los problemas de recorte como resultado de
includeFontPadding=false
y no se deberían producir recortes para secuencias de comandos altas (I31c84, b/171394808).
Correcciones de errores
ComposeContentTestRule.setContent
ahora arrojará unaIllegalStateException
si intentas configurar contenido cuando ya existe contenido (I888a5, b/199631334).- Se corrigió la falla que causaba el contenido del portapapeles mientras se leía desde el portapapeles en Android (I06020, b/197769306).
- Se realizaron mejoras en las muestras de desplazamiento de RSB (I6a596).
Contribución externa
- Se actualizó para usar corrutinas de Kotlinx 1.6.0 (I3366d).
Versión 1.2.0-alpha04
23 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha04
. La versión 1.2.0-alpha04 contiene estas confirmaciones.
Cambios en la API
Se agregaron
ComposableTarget
,ComposableTargetMarker
yComposableOpenTarget
, que permiten generar informes sobre el tiempo de compilación cuando se llama a una función de componibilidad dirigida a un aplicador que no estaba diseñada para usar.En la mayoría de los casos, el complemento del compilador de Compose puede inferir las anotaciones, por lo que no es común utilizarlas directamente. Entre los casos que no se pueden inferir, se incluyen la creación y el uso de un aplicador personalizado, las funciones de componibilidad abstractas (como los métodos de interfaz), los campos o las variables globales que son lambdas componibles (las variables y los parámetros locales se infieren), o cuando se usa
ComposeNode
o una función de componibilidad relacionada.En el caso de los aplicadores personalizados, las funciones que admiten composición y que llaman a
ComposeNode
oReusableComposeNode
deben agregar una anotaciónComposableTarget
para la función y para cualquier tipo de parámetro lambda que admita composición. Sin embargo, se recomienda crear una anotación con la anotaciónComposableTargetMarker
y, luego, usar la anotación marcada en lugar deComposableTarget
directamente. Una anotación que admite composición marcada conComposableTargetMarker
es equivalente a unaComposbleTarget
con el nombre completamente calificado de la clase de atributo como el parámetro aplicador. Para ver un ejemplo del uso deComposableTargetMarker
, consultaanroidx.compose.ui.UiComposable
(I38f11).Font(resId, ...)
ahora toma loadStrategy en una API estable (Ief3d2).FontLoadingStrategy
ahora es una API estable (I1ee35, b/174162090).Compatibilidad con la carga de fuentes asíncrona en Text (I77057, b/214587005).
Se agregó una API de puente para convertir
Font.ResourceLoader
personalizados enFontFamily.Resolver
(Ia0060).
Correcciones de errores
- Los
FontFamily.Resolver
proporcionados se pasan a subcomposiciones, como Popup. - Los
Font.ResourceLoader
proporcionados se pasan a subcomposiciones, como Popup (I48fa5).
Versión 1.2.0-alpha03
9 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha03
. La versión 1.2.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Los métodos
notifyFocusedRect
deTextInputSession
yTextInputService
dejaron de estar disponibles y no se los llamará. UsaBringIntoViewRequester
en su lugar. (Ia4302, b/192043120, b/216842427, b/178211874). - Se agregó el método
destroyDisplayListData
en la clase stub deRenderNode
(I1e659, b/216660268). - Se agregó una nueva API que permite realizar una medición previa de los elementos secundarios de
SubcomposeLayout
que ya creaste (I857ea). Se agregó
movableContentOf
, que convierte una lambda componible en una que mueve su estado y los nodos correspondientes a cualquier ubicación nueva a la que se la llame. Cuando la llamada anterior sale de la composición, el estado se conserva de forma temporal y, si una llamada nueva a la lambda ingresa a la composición, el estado y los nodos asociados se mueven a la ubicación de la llamada nueva. Si no se agrega una llamada nueva, se quitará el estado de forma permanente y se notificará a los observadores.Si se llama a una lambda de
movableContentOf
varias veces en la misma composición, se crean nuevos estados y nodos para cada llamada. Además, a medida que las llamadas dejan la composición y entran en una nueva llamada, el estado se mueve desde las primeras llamadas salientes hasta las entrantes en el orden en que se llaman. Todo el estado que las llamadas nuevas no reclamen se quitarán permanentemente (Ib4850).FontFamilyResolver
ahora está disponible a través deLocalFontFamilyResolver.current
.Se agregaron
createFontFamilyResolver(context)
ycreateFontFamilyResolver(context, coroutineScope)
para crear nuevos agentes de resolución de FontFamily fuera del uso de Compose.Ahora Paragraph y MultiParagraph, incluyen
FontFamily.Resolver
.TextLayoutResult.layoutInput.fontFamilyResolver
ahora contiene el agente de resolución que se usa para este diseño, y se dio de bajaTextLayoutResult.layoutInput.resourceLoader
, debido a que ya no se usa (Id5a45, b/174162090).Se agregó compatibilidad con la carga de fuentes asíncronas y opcionales, con comportamiento de resguardo. Text y TextField usan esta ruta, y se expone mediante FontFamilyResolver.
Se agregó compatibilidad con la carga previa de fuentes mediante
FontFamilyResolver.preload
.FontFamilyResolver.setAsyncLoadContext
permite configurar el contexto de corrutinas global que se usa para cargar fuentes asíncronas (I87fe8, b/174162090).Se agregó
AndroidFont
, una nueva API de bajo nivel que proporciona nuevos tipos de descriptores de recursos de fuentes en Android. Por ejemplo, cargar fuentes de un backend específico de la app, ubicar de forma opcional fuentes preinstaladas en el dispositivo o cargar una fuente de un recurso que no proporcionan las fábricas de fuentes actuales.Se amplió la API de
Font.ResourceLoaded
para admitir la carga de fuentes opcional y asíncrona. No se recomienda que los desarrolladores de aplicaciones usen esta API de forma directa. Para agregar nuevos tipos de fuentes, consultaAndroidFont
.La función de extensión
Font.AndroidResourceLoader
permite construir unaFont.ResourceLoader
cuando se encuentra fuera de la composición.Se agregó el parámetro
loadingStrategy
a fuentes basadas en recursos, para permitir la carga asíncrona cuando la fuente de recursos hace referencia a fuentes descargables XML (Ie5aea, b/174162090).El constructor
Typeface(FontFamily)
dejó de estar disponible. Anteriormente, se usaba a fin de precargar fuentes, lo que podía demorar hasta 10 segundos en el caso de las fuentes descargables. Con las fuentes descargables, esta llamada se puede bloquear durante 10 segundos. En su lugar, usaFontFamilyResolver.preload
.fontResource(FontFamily): Typeface
ya no está disponible. Anteriormente, se usaba a fin de precargar fuentes, lo que podía demorar hasta 10 segundos en el caso de las fuentes descargables. En su lugar, usaFontFamilyResolver.preload
(If8e7c, b/174162090).El constructor
SubcomposeLayoutState
que aceptamaxSlotsToRetainForReuse
dejó de estar disponible. En su lugar, hay un nuevo constructor que aceptaSubcomposeSlotReusePolicy
: una nueva interfaz que permite un control más detallado sobre las ranuras que se deben retener para la reutilización futura. (I52c4d).Se expuso la función HSV y HSL en
Color
como API no experimental. El espacio de color de Oklab ahora es una API pública (I08fb6, b/180731008).El objeto
AndroidComposeTestRule.AndroidComposeStatement
dejó de estar disponible, ya que no estaba destinado a estar disponible en una API pública y no era de utilidad (Ibc46b).Se cambió el nombre de la clase kt que se genera internamente (Ia0b9e, b/174162090).
Se quitó
FontLoadingStrategy.values
(I42a9d, b/174162090).El cargador de fuentes global ahora se llama
FontFamilyResolver
(I4f773, b/174162090).Se usa el nuevo sistema de carga de fuentes para computadoras de escritorio (I9ce5c, b/174162090).
FontFamily.Resolver.resolve
muestraState<Any>
(I4406c, b/174162090).
Correcciones de errores
- TextFields ahora se mantendrá arriba del teclado cuando este se enfoque y se muestre, y cuando el modo de entrada de software sea
ADJUST_PAN
(I8eaeb, b/190539358, b/192043120). - En computadoras, se usa la composición local para
FontFamily.Resolver
. - La versión de escritorio de
FontLoader
dejó de estar disponible. - Nueva fábrica de
createFontFamilyResolver
para computadoras (I6bbbb, b/174162090). - El tipo de entrada de teclado en pantalla ya no gira cuando se cambia el enfoque entre los campos de texto (I1bf50, b/187746439).
Versión 1.2.0-alpha02
26 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha02
. La Versión 1.2.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
Modifier.onRotaryScrollEvent()
yModifier.onPreRotaryScrollEvent()
para dispositivos Wear con un botón lateral que rota. (I18bf5, b/210748686) - Se agregó la extensión experimental
View.createLifecycleAwareRecomposer
. (I0cde6)
Contribución externa
- Ahora,
PointerEvent.scrollDelta.y
se invierte en Android (muestra 1 en lugar de -1 si se inclina la rueda del mouse hacia la derecha). (Ia9811)
Versión 1.2.0-alpha01
12 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.2.0-alpha01
. La versión 1.2.0-alpha01 contiene estas confirmaciones.
Cambios en la API
FontFamily.canLoadSynchronously
quedó obsoleto. Esta propiedad no tiene significado semántico. (Ica5ef)- Se agregó el campo de identidad a
CompositionData
para generar IDs que no varían en el Inspector de diseño (Ic116e) - Se agregaron los IDs de dispositivos de Wear OS a la lista de dispositivos de vista previa (I93232).
Actualizaciones de dependencias
- Ahora depende de Kotlin versión
1.6.10
.
Versión 1.1
Versión 1.1.1
23 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.1
. La versión 1.1.1 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió
NullPointerException
enandroidx.compose.ui.platform.RenderNodeLayer.updateDisplayList
(aosp/1947059, b/206677462). - Se corrigió la falla que causaba el contenido del portapapeles mientras se leía desde el portapapeles en Android (I06020, b/197769306).
- Se corrigió la lectura de derecha a izquierda en
LazyVerticalGrid
(aosp/1931080, b/207510535).
Versión 1.1.0
9 de febrero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.0
. La versión 1.1.0 contiene estas confirmaciones.
Cambios importantes desde 1.0.0
- Se agregó compatibilidad estable con el efecto de desplazamiento de Android 12.
- Se agregaron mejoras en el tamaño de los objetivos táctiles.
- Ten en cuenta que, con respecto a Compose 1.0, los componentes de Material expandirán su espacio de diseño para cumplir con los lineamientos de accesibilidad de Material relativos al tamaño del objetivo táctil. Por ejemplo, el objetivo táctil del botón se expandirá hasta un tamaño mínimo de 48 x 48 dp, incluso si configuras el tamaño del botón para que sea más pequeño. Esto alinea Compose Material con el mismo comportamiento de los componentes de Material Design y proporciona un comportamiento coherente si combinas View y Compose. Este cambio también garantiza que, cuando crees tu IU mediante componentes de Compose Material, se cumplan los requisitos mínimos de la accesibilidad de objetivos táctiles.
- Se agregó compatibilidad estable con Navigation Rail.
- Varias API que antes eran experimentales se pasaron a niveles estables.
- Se agregó compatibilidad con versiones más recientes de Kotlin.
Versión 1.1.0-rc03
26 de enero de 2022
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-rc03
. La versión 1.1.0-rc03 contiene estas confirmaciones.
Correcciones de errores
- Se actualizó para admitir Compose Material 1.1.0-rc03.
Versión 1.1.0-rc01
15 de diciembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-rc01
. La versión 1.1.0-rc01 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió un error que causaba acciones de desplazamiento de accesibilidad faltantes (I7cbfb).
SemanticsNodeInteraction.captureToImage()
ahora también funcionará siHardwareRenderer.isDrawingEnabled()
esfalse
, por lo que se habilitará durante la llamada. (Idf3d0)
Versión 1.1.0-beta04
1 de diciembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta04
. La versión 1.1.0-beta04 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó para que sea compatible con Kotlin
1.6.0
.
Cambios en la API
- Se corrigió la nulabilidad en
androidx.core.view
(I7078a, b/204917439). - Se agregaron API experimentales que permiten a los usuarios utilizar PointerInputchange en su totalidad o verificar si se consumió o no (I2e59d).
- Se agregó compatibilidad con eventos de rueda del mouse en la capa de IU (Ia14eb, b/198214718).
- Se agregaron sobrecargas experimentales de
Modifier.composed
que aceptan claves para comparar la igualdad y calificar en la optimización de omisión (Ice799, b/205851704). ComposeNotIdleException
ahora se extiende desdeException
, en lugar de hacerlo directamente desdeThrowable
. Ten en cuenta que esto significa que las cláusulas de captura que capturabanException
es posible que ahora detecten elementosComposeNotIdleException
, cuando antes no lo hacían (I9c217).
Correcciones de errores
- Se corrigieron los controladores de texto que no se movían cuando se cambiaba la visibilidad del IME (I25f2e).
Versión 1.1.0-beta03
17 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta03
. La versión 1.1.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se agregó el nuevo modificador Modifier.onPlaced para permitir que se observe el cambio de posición. Por lo tanto, se pueden realizar cambios adicionales en la compensación del modificador secundario a partir del cambio de posición observado (I558fd).
- Se quitaron
InjectionScope.flush()
yInjectionScope.dispose()
. El vaciamiento de todos los eventos y la eliminación del alcance ahora ocurren al final del método perform*Input() method al que se llama, como antes (I2bed8). - Se quitaron
MultiModalInjectionScope.Touch
yMultiModalInjectionScope.Mouse
. A fin de incorporar eventos táctiles y del mouse para los gestos multimodales, ahora puedes usarMultiModalInjectionScope.touch()
yMultiModalInjectionScope.mouse()
. Ambos aceptan una lambda que tiene el alcance del receptor de esa modalidad (Idde18).
Correcciones de errores
- El valor predeterminado para
durationMillis
enTouchInjectionScope.swipeWithVelocity
ahora se calcula de modo que el deslizamiento sea posible (I19deb).
Versión 1.1.0-beta02
3 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta02
. La versión 1.1.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API experimental de BringIntoView que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459).
- Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).
Contribución externa
- Se agregó Modifier.pointerHoverIcon. (I95f01)
Versión 1.1.0-beta01
27 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-beta01
. La versión 1.1.0-beta01 contiene estas confirmaciones.
Cambios en la API
- Se agregó la API experimental de
BringIntoView
que permite enviar una solicitud a los elementos superiores de modo que se desplacen para mostrar un elemento (Ib918d, b/195353459). - Nuevas APIs de Animation para herramientas de asistencia. Específicamente, permiten que las herramientas inspeccionen las animaciones y sus configuraciones en Transiciones (I4116e).
Versión 1.1.0-alpha06
13 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha06
. La versión 1.1.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Se quitó
ExperimentalComposeUiApi
deViewRootForInspector
yLayoutInfo.ownerViewId
. (I5c2e3) - Se agregó una sobrecarga para Layout sin elemento secundario con eficiencia mejorada. (IB0d9a)
- Se quitó
InternalCompilerApi
de los métodos de Composer que deben llamarse entre módulos. (I1aa0b) SemanticsNodeInteraction.performSemanticsAction
ahora muestra laSemanticsNodeInteraction
en la que se llamó a la función. (I9e5db)- Se agregó LocalInputModeManager CompositionLocal para detectar TouchMode/NonTouchMode. (I6a83c, b/175899786)
- Se agregó
viewConfiguration: ViewConfiguration
aLayoutInfo
para permitir que los consumidores obtengan el valor correcto de cosas como el tiempo de espera de presión prolongada. (I76ca6)- Se agregó
viewConfiguration: ViewConfiguration
aInjectionScope
para permitir que las pruebas ajusten la inserción de entrada en función de parámetros como el tiempo de espera de presión prolongada o la inclinación táctil. - Se cambió la duración predeterminada de mantener presionado y presionar dos veces para la entrada táctil y del mouse, según los valores en
InjectionScope.viewConfiguration
.
- Se agregó
- Se implementó ExposedDropdownMenu basado en ExposedDropdownMenuBox con TextField y DropdownMenu dentro. (If60b2)
- Se agregó descarteOnOnsideClick a PopupProperties para reemplazar a descarteOnClickOutside, que dejó de estar disponible. La nueva propiedad recibe la posición del clic y los límites de anclaje, lo que brinda un control más preciso sobre si se debe invocar onDismissRequest o no. Por ejemplo, esto puede ser útil para evitar el descarte de anclajes al tocarlos.
- Se agregó updateAndroidWindowManagerFlags a PopupProperties, y ofrece un control de bajo nivel sobre las marcas que pasa la ventana emergente a WindowManager de Android. El parámetro de la lambda será las marcas calculadas a partir de los valores de PopupProperties que generen marcas de WindowManager (p. ej., enfocables). El resultado de la expresión lambda serán las marcas finales que se pasarán a Android WindowManager. De manera predeterminada, updateAndroidWindowManagerFlags dejará las marcas calculadas a partir de los parámetros sin modificar. Esta API se debe utilizar con precaución, solo en los casos en que la ventana emergente tenga requisitos de comportamiento muy específicos. (I6e9f9)
Recomposer.state
dejó de estar disponible y se reemplazó porRecomposer.currentState
para cambiar su tipo a StateFlow. (Ic2ab3, b/197773820)- Se agregaron
flush()
ydispose()
aInjectionScope
Úsalas cuando quieras limpiar todos los eventos en fila de inmediato y cuando quieras eliminar el alcance, respectivamente. (Ifb73a) - Se agregó
performScrollToNode(matcher: SemanticsMatcher)
, que desplaza un contenedor desplazable hasta el contenido que coincide con el comparador dado. (Ic1cb8) InjectionScope
ahora implementaDensity
, lo que te permite convertir fácilmente entre px y dp enperformTouchInput
y amigos. (I8fe1f)
Correcciones de errores
- AndroidView ahora propaga LocalLifecycleOwner y LocalSavedStateRegistryOwner a su vista a través de ViewTreeLifecycleOwner y ViewTreeSavedStateRegistryOwner. (I38f96, b/179708470)
- Se corrigió el problema por el que WearOS SwipeToDismissBox no controlaba los deslizamientos. (I9387e)
- El tiempo predeterminado entre los eventos de entrada inyectados cambió de 10 ms a 16 ms. Esto puede cambiar el resultado de las pruebas que realizan gestos de entrada, como un deslizamiento específico. (I829fd)
Versión 1.1.0-alpha05
29 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha05
. La versión 1.1.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se agregó compatibilidad con la comunicación entre modificadores (Id5467, b/198826874).
- Se agregaron punteros históricos experimentales a PointerEventChange (Ic1fd8, b/197553056, b/199921305)
- Se agregaron
density: Density
ylayoutDirection: LayoutDirection
aLayoutInfo
Esto permite que los consumidores deLayoutInfo
interpreten correctamente las dimensiones y posiciones expuestas enLayoutInfo
. (I002f1) - Se agregó compatibilidad experimental para insertar eventos del mouse. Usa
performMouseInput
para comenzar a enviar eventos del mouse, o envía eventos de este mediante la propiedadMouse
deMultiModalInjectionScope
durante un gesto de entrada multimodal conperformMultiModalInput
. ConsultaMouseInjectionScope
para ver la documentación de la API disponible. (Iaa4a8, b/190493367)
Correcciones de errores
- Se corrigió la compatibilidad de la accesibilidad para elementos desplazables (diferidos y no diferidos) con respecto al desplazamiento (I6cdb0).
- Se mejoró
TouchInjectionScope.swipeWithVelocity
. Ahora acepta un rango más amplio de variables de entrada y sugerirá cambios en la entrada si no se puede crear un deslizamiento. (I40fbe, b/182477143)
Versión 1.1.0-alpha04
15 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha04
. La versión 1.1.0-alpha04 contiene estas confirmaciones.
Cambios en la API
PointerEvent
ahora tiene unPointerEventType
para admitir eventos de colocamiento del cursor sobre elementos. (I091fa)- Permite que los elementos secundarios acepten entradas de puntero fuera de los límites de entrada del elemento superior. Los elementos superiores pueden interceptar esas llamadas con una propiedad PointerInputScope.alwaysInterceptChildEventss. (I9eae3, b/192479655)
performGesture
yGestureScope
dejar de estar disponibles y se reemplazaron conperformTouchInput
yTouchInjectionScope
. (Ia5f3f, b/190493367)- Se agregó
touchBoundsInRoot
aSemanticsNode
, que incluye el tamaño mínimo del objetivo táctil para que los desarrolladores puedan garantizar que estos cumplan con los requisitos de accesibilidad mínimos. (I2e14b, b/197751214) - Se rehizo la implementación del objeto inspectable. (I927bc, b/191017532)
- Se cambió el nombre de un parámetro de inspectable para que coincida con el compuesto. (I3a482, b/191017532)
Se introdujeron
performTouchInput
yTouchInjectionScope
como reemplazo deperformTouchInput
yTouchInjectionScope
, lo que prepara el camino para otras modalidades (como el mouse).TouchInjectionScope
tiene los mismos métodos queGestureScope
, con excepción demovePointerTo
ymovePointerBy
, que cambiaron de nombre aupdatePointerTo
yupdatePointerBy
. Todos los demás métodos son iguales.El comportamiento de
TouchInjectionScope
es casi idéntico al deGestureScope
, con dos pequeñas diferencias:- Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (en otras palabras, se usaba
updatePointerTo()
, pero nomove()
, y, luego, se llamaba adown()
), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación sigue enviando el evento de movimiento, pero no avanza el tiempo del evento en esta situación específica. - Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (similar al anterior), la implementación anterior hacía avanzar el tiempo del evento y enviaba un evento de movimiento antes de enviar el evento descendente. La nueva implementación no realiza ninguna de las dos acciones: las nuevas posiciones de los punteros solo se reflejarán a través del evento ascendente.
Por último,
TouchInjectionScope
presenta un nuevo métodocurrentPosition(pointerId: Int)
para obtener la posición actual del puntero determinado. (If1191, b/190493367)- Cuando se enviaba un evento de bajada cuando se habían movido los punteros sin enviar un evento de movimiento (en otras palabras, se usaba
Correcciones de errores
- Permite que el clip extienda los límites del objetivo táctil más allá de la región del clip para los fines mínimos del objetivo táctil. (I43e10, b/171509422)
- Se agregó compatibilidad con el sobredesplazamiento expandido en dispositivos con Android 12. (Iccf3c, b/171682480)
Versión 1.1.0-alpha03
1 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha03
. La versión 1.1.0-alpha03 contiene estas confirmaciones.
Nuevas funciones
- Se actualizó Compose
1.1.0-alpha03
para que dependa de Kotlin1.5.30
. (I74545)
Cambios en la API
- Se agregó
Modifier.inspectable
para unir otros modificadores. (I1909b, b/191017532) - Se agregó la API de
BlurredEdgeTreatment
para simplificar los casos de uso de desenfoque a combinaciones de uso general de marcas de clips y TileModes. La mayoría de los casos de uso implican dejar que el contenido difuminado se renderice fuera de los límites del contenido original y difuminar las regiones fuera de estos límites con negro transparente, o bien recortar el contenido a los límites del contenido muestreando el borde más cercano para los kernels de desenfoque que se extienden más allá de los límites del contenido. (I6b4b7, b/166927547) - Se agregó compatibilidad con RenderEffect en el escritorio de Compose. Se introdujeron OffsetEffect y el modificador de desenfoque como una manera sencilla de ingresar efectos visuales de desenfoque en una parte de la jerarquía de composición. (I0f6aa, b/166927547)
- Se introdujo la API de RenderEffect que se puede configurar de forma opcional en una
Modifier.graphicsLayer
para alterar el contenido de la capa. Se puede usar para desenfocar el contenido de un elemento componible y sus elementos secundarios dentro de una jerarquía de composición (I47c4d, b/166927547) - Ahora, AwaitPointerEventScope tiene withTimeout() y withTimeoutOrNull(). (I507f0, b/179239764, b/182397793)
- Se agregó un tamaño mínimo de objetivo táctil a ViewConfiguration para usarlo en la semántica y la entrada de puntero a fin de garantizar la accesibilidad. (Ie861c)
- Se agregó compatibilidad con TileMode.Decal, que sirve para definir el comportamiento de borde para RenderEffects basados en desenfoques. (I7e8ed, b/166927547)
performScrollToIndex
,performScrollToKey
,hasScrollToIndexAction
yhasScrollToKeyAction
ahora son API estables. (I142ae, b/178483889)- Se agregó un método de prueba para obtener los límites recortados. (I6b28e)
Correcciones de errores
- Se quitó el método isBounded de BlurredEdgeTreatment a fin de verificar de forma explícita si el parámetro de forma es nulo. (I85d68)
Versión 1.1.0-alpha02
18 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha02
. La versión 1.1.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- PointerEvent ahora es compatible con la lectura del estado del botón del mouse y del estado del modificador del teclado (I6310c, b/180075467).
- Los gestos inyectados ahora usan el tiempo de MainTestClock como fuente de información de tiempo. La hora actual de los eventos inyectados en
performGesture
se inicializará en la hora actual de MainTestClock. (Ifb364, b/192064452) - Se agregó el constructor
DpRect(DpOffset, DpSize)
. (I2cf16, b/194219828) - Se agregó la clase DpSize. (I7abb1, b/194219828)
Correcciones de errores
- Se actualizó el análisis de XML de gráficos vectoriales para admitir ColorStateLists como propiedades de tono de color raíz en VectorDrawables (I86915, b/195668138)
Versión 1.1.0-alpha01
4 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.1.0-alpha01
. La versión 1.1.0-alpha01 contiene estas confirmaciones.
Cambios en la API
- Ahora
RelocationRequester.bringIntoView
acepta un rectángulo como parámetro que nos permite poner en la vista una parte de un elemento que admite composición. (Ice2c5, b/194330245) AnimatedImageVector
y las API relacionadas ahora están en el nuevo móduloandroidx.compose.animation:animation-graphics
. (I60873)- Se agregó un modificador experimental para controlar las solicitudes de reubicación. (I65a97, b/178211874)
Se introdujo la API de BrushPainter para admitir el dibujo de un Brush arbitrario dentro de un Painer, similar a ColorPainter.
Se actualizó la API de Brush para tener un parámetro de tamaño intrínseco que se consulta dentro de BrushPainter. (Ia2752, b/189466433)
Se actualizó el método DrawScope#drawImage que consume los rects de origen y destino para consumir un parámetro opcional FilterFilter. Esto es útil para el arte de píxeles que se pixela cuando se escala verticalmente para el arte basado en píxeles. Se actualizó el objeto BitmapPainter + Image que admite composición para que también consuma un parámetro opcional FilterQuality. (Ie4fb0, b/180311607)
Se agregó el método
GestureScope.advanceEventTime
para proporcionar más control sobre el tiempo de los eventos en un gesto. (Ibf3e2)
Correcciones de errores
- A fin de admitir mejor el encadenamiento de modificadores de dibujo, asegúrate de que la implementación de Modifier.Paint llame a drawsContent.
Anteriormente, se esperaba que Modifier.Paint se utilizara en un nodo de hoja del conjunto de modificadores. Sin embargo, esto evita que se configure en un contenedor que admita composición (p. ej., un cuadro) o que se agreguen decoraciones adicionales arriba como
Modifier.paint().border()
. Al hacer que el objeto Modifier.Paint llame a drawContent después de dibujar los contenidos del pintor determinado, logramos una mejor coherencia de comportamiento en el comportamiento con el patrón modificador. (Ibb2a7, b/178201337, b/186213275) - Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece
usePlatformDefaultWidth
como falso para anular este comportamiento. (Iffaed, b/192682388) - Se movió
InfiniteAnimationPolicy
a :compose:ui. (I5eb09, b/160602714) - El desplazamiento a través de acciones semánticas para listas diferidas y componentes de desplazamiento normales ahora tiene animación. (Id9066, b/190742024)
Versión 1.0
Versión 1.0.5
3 de noviembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.5
. La versión 1.0.5 contiene estas confirmaciones.
Correcciones de errores
- Se corrigió una falla en el seguimiento de las instancias de derivedStateOf (aosp/1792247).
Versión 1.0.4
13 de octubre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.4
. La versión 1.0.4 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.31
Versión 1.0.3
29 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.3
. La versión 1.0.3 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.30
Versión 1.0.2
1 de septiembre de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.2
. La versión 1.0.2 contiene estas confirmaciones.
Se actualizó para que sea compatible con la versión 1.0.2
de Compose. Compose 1.0.2
continúa siendo compatible con Kotlin 1.5.21
.
Versión 1.0.1
4 de agosto de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.1
. La versión 1.0.1 contiene estas confirmaciones.
Actualizaciones de dependencias
- Se actualizó para depender de Kotlin
1.5.21
.
Versión 1.0.0
28 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0
. La versión 1.0.0 contiene estas confirmaciones.
Funciones principales de la versión 1.0.0
Esta es la primera versión estable de Compose. Consulta el blog oficial de Lanzamientos de Compose para obtener más información.
Errores conocidos
Si usas Android Studio Bumblebee Canary 4 o AGP
7.1.0-alpha04
/7.1.0-alpha05
, es posible que se produzca la siguiente falla:java.lang.AbstractMethodError: abstract method "void androidx.lifecycle.DefaultLifecycleObserver.onCreate(androidx.lifecycle.LifecycleOwner)"
Para sortear el problema, aumenta temporalmente tu minSdkVersion a más de 24 en el archivo
build.gradle
. Este error se solucionará en la próxima versión de Android Studio Bumblebee y en el AGP7.1
. (b/194289155)
Versión 1.0.0-rc02
14 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-rc02
. La versión 1.0.0-rc02 contiene estas confirmaciones.
Correcciones de errores
- Los diálogos siguen el comportamiento del tamaño de la plataforma. Establece
usePlatformDefaultWidth
como falso para anular este comportamiento. (Iffaed, b/192682388)
Versión 1.0.0-rc01
1 de julio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-rc01
. La versión 1.0.0-rc01 contiene estas confirmaciones.
Nuevas funciones
- Se dividió el módulo ui-tooling en
ui-tooling
yui-tooling-preview
. (Iefa28, b/190649014)
Cambios en la API
- Se quitaron las funciones experimentales
FocusManager#moveFocusIn
yFocusManager#moveFocusOut
obsoletas. (I227d7, b/170154986, b/186567354, b/168510304)) - Canvas ahora admite un parámetro contentDescription para accesibilidad. (Ib547c)
- Se cambió el nombre de
useDefaultMaxWidth
enPopupProperties
porusePlatformDefaultWidth
. (I05710) - Ahora se pueden usar los diálogos en todo el ancho de la pantalla. (I83929, b/190810877)
- Se agregó compatibilidad experimental para las representaciones de color HSV y HSL. (Id7cf8, b/180731008)
Cambios en el comportamiento
- Compose
@Preview
ahora proporciona unLocalActivityResultRegistryOwner
que te permite obtener una vista previa de elementos componibles que usan API comorememberLauncherForActivityResult()
que dependen de que exista ese propietario. (Ib13d1, b/185693006) - Compose
@Preview
ahora proporciona unLocalOnBackPressedDispatcherOwner
que te permite obtener una vista previa de elementos componibles que usan API comoBackHandler
que dependen de que exista ese propietario. (Ia1c05, b/185693006)
Correcciones de errores
- Se movió
InfiniteAnimationPolicy
aandroidx.compose.ui:ui
. (I5eb09, b/160602714) - Se quitó temporalmente AnimatedImageVector para cambiar la estructura del módulo. (I41906, b/160602714)
Versión 1.0.0-beta09
16 de junio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta09
. La versión 1.0.0-beta09 contiene estas confirmaciones.
Cambios en la API
- Se cambió Role de enumeración y LiveRegionMode por clases intercaladas con un constructor privado. (Id1890)
- KeyboardCapitalization se convierte en una clase intercalada. (Id5a1c)
- Se cambió HapticFeedbackType a una clase intercalada. (I255ec)
- Modifier.pointerInteropFilter es @ExperimentalComposeUiApi. (Iede6c)
- TextAlign, FontSynthesis y TextDirection ahora son clases intercaladas. (I212fe)
- Se cambió TextOverflow a una clase intercalada. (I433af)
- Ahora, FontStyle es una clase intercalada. (I9e48b)
Correcciones de errores
- Por el momento, las constantes de clave son @ExperimentalComposeUiApi. El código de consumo puede declarar constantes privadas antes de la estabilización. (Ia5d48)
- Ahora, las pruebas de Compose se pueden ejecutar en Robolectric. Hasta ahora, se identificaron las siguientes limitaciones:
- No hay un mapa de bits nativo, por lo que
ImageBitmap()
dirige a una NullPointerException. - No hay un dibujo, por lo que
captureToImage()
esperará de forma indefinida al próximo pase de dibujos (es decir, se produce un interbloqueo). - No se cargó ninguna fuente, por lo que se medirá todo el texto de forma incorrecta. Todos los caracteres tienen una altura fija de alrededor de 20 px y un ancho de 1 px.
ComposeTestRule.waitUntil {}
no ejecuta el subproceso principal mientras espera, por lo que es prácticamente igual queComposeTestRule.mainClock.advanceTimeUntil {}
. Se espera identificar más limitaciones en el futuro. (I284fa)
- No hay un mapa de bits nativo, por lo que
Reglas de perfiles agregadas
En esta versión, se agregaron reglas de perfiles a los siguientes módulos de Compose (I14ed6):
- androidx.compose.animation
- androidx.compose.animation-core
- androidx.compose.foundation
- androidx.compose.foundation-layout
- androidx.compose.material
- androidx.compose.material-ripple
- androidx.compose.runtime
- androidx.compose.ui
- androidx.compose.ui.geometry
- androidx.compose.ui.graphics
- androidx.compose.ui.text
- androidx.compose.ui.text
- androidx.compose.ui.unit
- androidx.compose.ui.util
¿Qué son las reglas de perfiles?
Las reglas de perfiles de una biblioteca se especifican en un archivo de texto
baseline-prof.txt
, ubicado ensrc/main
o el directorio equivalente. El archivo especifica una regla por línea, donde una regla en este caso es un patrón para la coincidencia con métodos o clases de la biblioteca. La sintaxis de estas reglas es un superconjunto del formato de perfil ART legible que se usa cuando se implementaadb shell profman --dump-classes-and-methods ...
. Estas reglas adoptan una de dos formas para segmentar métodos o clases.Una regla de métodos tendrá el siguiente patrón:
<FLAGS><CLASS_DESCRIPTOR>-><METHOD_SIGNATURE>
Una regla de clases tendrá el siguiente patrón:
<CLASS_DESCRIPTOR>
Aquí,
<FLAGS>
es uno o más caracteresH
,S
yP
, los cuales indican si este método debe marcarse como "Hot" (caliente), "Startup" (inicio) o "Post Startup" (posterior al inicio).El
<CLASS_DESCRIPTOR>
es el descriptor de la clase a la que pertenece el método segmentado. Por ejemplo, la claseandroidx.compose.runtime.SlotTable
tendría un descriptor deLandroidx/compose/runtime/SlotTable;
.El
<METHOD_SIGNATURE>
es la firma del método y, además, incluye el nombre, los tipos de parámetros y los tipos de datos que muestra. Por ejemplo, el métodofun isPlaced(): Boolean
enLayoutNode
tiene la firmaisPlaced()Z
.Estos patrones pueden tener comodines (
**
,*
y?
) para tener una sola regla que abarque varios métodos o clases.
¿Para qué sirven las reglas?
Un método con la marca
H
indica que es "hot" y debe compilarse con anticipación.Un método con la marca
S
indica que se llama durante el inicio y debe compilarse con anticipación para evitar el costo de interpretarlo y compilarlo en el momento del inicio.Un método que tiene la marca
P
indica que es un método que se llama después del inicio.Una clase presente en este archivo indica que se usa durante el inicio y debe asignarse previamente en el montón para evitar el costo de cargarla.
¿Cómo funciona?
- Las bibliotecas pueden definir estas reglas que se empaquetarán en artefactos de AAR. Luego, cuando se compila una app que incluye esos artefactos, esas reglas se combinan y se usan para compilar un perfil de ART binario compacto específico para la app. De esta manera, ART puede tomar este perfil cuando se instala la app en dispositivos para compilar con anticipación un subconjunto específico de la aplicación a fin de mejorar su rendimiento, especialmente en la primera ejecución. Ten en cuenta que esta acción no tendrá efecto en las aplicaciones depurables.
Versión 1.0.0-beta08
2 de junio de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta08
. La versión 1.0.0-beta08 contiene estas confirmaciones.
Cambios en la API
- Se reemplazó la enumeración
NestedScrollSource
por una clase intercalada. (Ie321b, b/187055290) - Se cambió el nombre de
FocusManager.clearFocus(forcedClear = true)
porFocusManager.clearFocus(force = true)
. (Ia0c41) - Se refactorizaron los usos de enumeración en clases intercaladas para evitar problemas con explicaciones exhaustivas cuando se agregan nuevos valores de enumeración. (I2b5eb)
- Quitar
@ExperimentalComposeUiApi
dePopupProperties
. (I01fa6) - Se cambió
PointerType
de una enumeración a una clase intercalada (If5058) - Las propiedades semánticas de ContentDescription y Text ya no son valores individuales, sino listas. Esto permite fusionarlas como aparecen en lugar de concatenaciones. También se proporcionaron mejores API de prueba para usar estos cambios. (Ica6bf, b/184825850)
Modifier.focusModifier()
dejó de estar disponible y se reemplazó porModifier.focusTarget()
. (I6c860)Modifier.onSizeChanged()
yModifier.onGloballyPositioned()
ya no son funciones intercaladas. (I727f6, b/186109675)- Se reemplazó la enumeración
KeyboardType
por una clase intercalada. (I73045, b/187055290) - Se reemplazó la enumeración
FocusState
por una interfazFocusState
. (Iccc1a, b/187055290) - Se reemplazó la enumeración ImeAction por una clase intercalada. (I18be5, b/187055290)
PlaceholderVerticalAlign
se convierte en una clase intercalada. (If6290)- TextUnitType ahora es una clase intercalada. (I4cba9)
- Las funciones
AnnotatedString.withAnnotation
ahora son ExperimentalTextApi en lugar de ExperimentalComposeApi. (I0cd0a)- El constructor TextUnit con TextUnitType ahora es ExperimentalTextApi en lugar de ExperimentalComposeApi.
Correcciones de errores
- Se corrigió el error que se introdujo en la versión beta07, en la que los elementos LazyColumn/Row se mostraban parcialmente después del desplazamiento. (I8c9ac, b/188566058).
- Ahora
detectDragGesures
,detectVerticalGestures
ydetectHorizontalGestures
consumirán el cambio de posición automáticamente, sin necesidad de llamar a change.consumePositionChange en las devoluciones de llamada de onDrag. (I42fc4, b/185096350, b/187320697) - Se corrigieron los LayoutModifiers que proporcionaban líneas de alineación. También se solucionó un error que provocaba que no se volviera a medir el elemento principal cuando se cambiaban las líneas de alineación de los elementos secundarios. (I4401f, b/174315652)
- Se modificó
Modifier.onGloballyPositioned()
para informar las coordenadas de este modificador en la cadena correspondiente, no las coordenadas de diseño después de aplicar todos los modificadores. Es decir, ahora el orden de los modificadores afecta las coordenadas que se informarán. (Ieb67d, b/177926591)
Versión 1.0.0-beta07
18 de mayo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta07
. La versión 1.0.0-beta07 contiene estas confirmaciones.
Cambios en la API
- Se agregó la interfaz
ViewRootForInspector
para usar en inspector. (Ib70df) SubcomposeLayoutState
ahora admite la configuración de recuento de ranuras reutilizables. El diseño mantendrá estos recuentos de ranuras activos, en lugar de desecharlos para reutilizar la ranura la próxima vez que necesite una nueva. (Ieb981)- Se reemplazó la enumeración KeyEventType por una clase intercalada. (Id670a, b/187055290)
- Se reemplazó la enumeración
FocusDirection
por una clase intercalada. (Ib6d03, b/187055290, b/184086802) - Se introdujo la capacidad de elevar el estado de SubcomposeLayout que te permite componer previamente el contenido en un slotID obligatorio, lo que agilizará la siguiente medición, ya que una vez que se realice la subcomposición con el slotID determinado, la próxima vez, no será necesaria la composición. (I42580, b/184940225)
- Se agregó el controlador de selección de clips. (Iff80d, b/183408447)
- Se quitaron las API relacionadas con la compatibilidad con LayoutInspector que ya no se usaban. (I2ac78)
Correcciones de errores
- LazyColumn/Row ahora mantendrá activos hasta 2 elementos previamente visibles (no se desechan), incluso cuando ya se desplazaron. Esto permite que el componente vuelva a usar las subcomposiciones activas cuando necesitemos componer un elemento nuevo que mejore el rendimiento del desplazamiento. (Ie5555)
- Se aplicarán
TextGeomerticTransform
yTextDecoration
enAnnotatedString
como se indica. (I61900, b/184760917)
Versión 1.0.0-beta06
5 de mayo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta06
. La versión 1.0.0-beta06 contiene estas confirmaciones.
Cambios en la API
- Se solucionó el problema con la navegación por gestos (I1145e).
@ComposeCompilerApi
ya no admite@RequiresOptIn
. (Iab690)- Se agregaron las API de accesibilidad CollectionInfo y CollectionItemInfo, que permiten marcar la colección y sus elementos para los servicios de accesibilidad. (Id54ef, b/180479017)
- Se añadió
SemanticsActions.ScrollToIndex
a fin de desplazar una lista con elementos indexados hasta aquel que tenga un índice determinado ySemanticsProperties.IndexForKey
para obtener el índice de un elemento en una lista de elementos con claves. LazyList implementa ambas acciones.- Se agregó
SemanticsNodeInteraction.performScrollToIndex
, que desplaza una lista hasta el índice dado, ySemanticsNodeInteraction.performScrollToKey
, que la desplaza hasta el elemento con la clave determinada (I4fe63, b/178483889, b/161584524)
- Se agregó
- Se agregó ownerViewId a GraphLayerLayerInfo. (I19f62)
- Se agregaron sobrecargas de Font() a fin de cargar fuentes desde recursos (File y FileDescriptor). (I5d382)
- Se agregó la API de accesibilidad
error
que permite marcar un nodo que contiene entradas no válidas. (I12997, b/180584804, b/182142737) - Se agregaron sobrecargas de
Font()
a fin de cargar fuentes desde recursos (File y FileDescriptor). (I43007) - Se agregó compatibilidad con AnnotatedString a
TextFieldValue.Saver
. Se agregaron las funciones de utilidadaddTtsAnnotation
y withAnnotation aAnnotatedString.Builder
. (I8cbdc, b/178446304) - Se agregó la función de constructor TextUnit
TextUnit(value: Float, type: TextUnitType)
(I7ecce, b/178446304).
Versión 1.0.0-beta05
21 de abril de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta05
. La versión 1.0.0-beta05 contiene estas confirmaciones.
Cambios en la API
- Se agregaron
FocusManager.moveFocus(In)
yFocusManager.moveFocus(Out)
experimentales. (Ic5534, b/183746743) - Se agregó la API experimental de
performTextInputSelection
. (I2dcbb, b/178510628) - La interfaz de
InputEventCallback
dejó de estar disponible. No se podía usar en ninguna API pública y tampoco se utilizaba en el código. (I34a02, b/184003208) - Se dio de baja
TextLayoutResult/createTextLayoutResult
, una función pública sin uso que se había agregado para el proceso de prueba. La función no realiza ninguna acción útil en las API de texto de Compose, por lo que dejó de estar disponible y se quitará más adelante. (I80413)
Correcciones de errores
- Se corrigieron las acciones de desplazamiento de accesibilidad
ACTION_SCROLL_FORWARD
,ACTION_SCROLL_BACKWARD
,accessibilityActionScrollLeft
,accessibilityActionScrollUp
,accessibilityActionScrollRight
yaccessibilityActionScrollDown
. Ahora se desplazará de a una pantalla en la dirección que corresponda en lugar de moverse hasta el final. (Ieccb0) - Los archivos AndroidManifest de ui-test-manifest y ui-tooling-data ahora son compatibles con Android 12 (I6f9de, b/184718994).
Versión 1.0.0-beta04
7 de abril de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta04
. La versión 1.0.0-beta04 contiene estas confirmaciones.
Cambios en la API
- Cambia el nombre de
hideSoftwareKeyboard
yshowSoftwareKeyboard
enSoftwareKeyboardController
porhide()
yshow()
, respectivamente.- Proporciona la interfaz completa de CompositionLocal para LocalSoftwareKeyboardController, que permite que se configure (especialmente útil en pruebas). (I579a6).
- Se agregó la API de accesibilidad LiveRegion. Si el nodo está marcado como una región live, los servicios de accesibilidad notificarán automáticamente al usuario sobre los cambios. (Idcf6f, b/172590946)
- Se introdujo TextOverflow.Visible. (Ic8f89)
Correcciones de errores
- Se corrigió el problema cuando los elementos de
LazyColumn
/LazyRow
ubicados en los bordes se encontraban posicionados de forma incorrecta después de un lanzamiento rápido. (Ie4d13, b/183877420) - Ahora
AndroidViewBinding
quita correctamente los fragmentos aumentados a través deFragmentContainerView
cuando se quita elAndroidViewBinding
de la jerarquía de composición. (Ib0248, b/179915946) - Ahora
AndroidViewBinding
anida correctamente los fragmentos aumentados a través deFragmentContainerView
cuando tuComposeView
se encuentra dentro de unFragment
, lo que corrige problemas al guardar y restablecer el estado de esos fragmentos. (I70eb0, b/179915946) - Ahora, Compose ViewBinding depende del Fragmento
1.3.2
y muestra fragmentos aumentados de forma coherente a través deFragmentContainerView
después de los cambios en la configuración. (I0743d, b/179915946)
Versión 1.0.0-beta03
24 de marzo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta03
. La versión 1.0.0-beta03 contiene estas confirmaciones.
Cambios en la API
- Se realizó la verificación diferida para las dependencias de ViewTree de ComposeView. (I8dbbf, b/182466548)
- Se agregaron los parámetros opcionales
startX
/endX
ystartY
/endY
a las funcionesswipeUp
/swipeDown
/swipeLeft
/swipeRight
enGestureScope
. (I49e2d, b/182063305)
Versión 1.0.0-beta02
10 de marzo de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta02
. La versión 1.0.0-beta02 contiene estas confirmaciones.
Cambios en la API
- Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I5951e, b/168778053) - Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField. (I84472, b/168778053) - Se quitaron los siguientes elementos
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(If16bd)
- Se marcó el elemento
SemanticsMatchers
como @ExperimentalTestApi:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(Ia600c)
- Se agregaron los siguientes elementos
SemanticsMatcher
:hasWidth(width, tolerance)
hasHeight(height, tolerance)
hasLeftPosition(left, tolerance)
hasTopPosition(top, tolerance)
hasRightPosition(right, tolerance)
hasBottomPosition(bottom, tolerance)
(I2f502)
Correcciones de errores
- Se aplicaron restricciones sobre el uso público de las API experimentales (I6aa29, b/174531520)
androidx.compose.ui:ui
ya no depende de AppCompat ni Fragment. Si usas ComposeView en tu aplicación y usas Fragment o AppCompat, asegúrate de usar AppCompat 1.3+ o Fragment 1.3+. Se necesitan estas versiones para establecer correctamente el ciclo de vida y los estados guardados del propietario que se requieren para ComposeView. (I1d6fa, b/161814404)- Se corrigió la falla de
rememberSaveable { mutableStateOf(0) }
cuando se usaba dentro de un destino de navigation-compose. (I1312b, b/180042685, b/180701630) - Se agregó una nueva API local de composición de
LocalSoftwareKeyboardController
para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053) - Se corrigió el error NoSuchElementException en
tearDownRegistry()
deComposeRootRegistry
. (Iddce1)
Versión 1.0.0-beta01
24 de febrero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-beta01
. La versión 1.0.0-beta01 contiene estas confirmaciones.
Esta es la primera versión de Compose 1.0.0 Beta.
Cambios en la API
- Se agregó la devolución de llamada onStart a
detectDragGestures
. (I67269, b/179995594) - Ya no son experimentales los modificadores para cambiar el tamaño de las funciones intrínsecas. (I15744)
- Se cambió el nombre de MeasurementBlocks por MeasurementPolicy, que se convirtió en una interfaz divertida. Se actualizaron o simplificaron las API de diseño para que usen MeasurePolicy. (Icab48, b/167662468, b/156751158)
- Se reemplazó
InteractionState
por[Mutable]InteractionSource
.- Las interfaces son responsables de emitir o recopilar eventos de interacción.
- En lugar de pasar el elemento
interactionState = remember { InteractionState() }
a componentes comoButton
yModifier.clickable()
, usa el objetointeractionSource = remember { MutableInteractionSource() }
. - En lugar del elemento
Interaction.Pressed in interactionState
, debes usar las funciones de extensión en el objeto InteractionSource, como InteractionSource.collectIsPressedAsState(). - Para casos complejos de uso, puedes usar el elemento InteractionSource.interactions para observar el flujo de Interactions. Para obtener más información, consulta la documentación y ejemplos de InteractionSource.
- (I85965, b/152525426, b/171913923, b/171710801, b/174852378)
- Agrega la interfaz AccessibilityMananger y LocalAccessibilityMananger en CompositionLocals. (I53520)
- Se quitaron los métodos obsoletos de LayoutCoordinates; usa la función en lugar de la propiedad para positionInParent y boundsInParent. (I580ed, b/169874631, b/175142755)
- Se reemplazó el método typealiases por tipos subyacentes:
ColorStop
ahora esPair<Float, Color>
.SpanStyleRange
ahora es AnnotatedString.RangeParagraphStyleRange
ahora esAnnotatedString.Range<ParagraphStyle>
.StringAnnotation
ahora esAnnotatedString.Range<String>
.- (I8dd1a)
- Se creó un nuevo elemento TextInputSession para sesiones de entrada a partir de componentes de texto de bajo nivel, como CoreTextField. (I8817f, b/177662148)
- Placeable ahora expone measuredSize, que representa el tamaño hasta el cual se mide realmente el diseño secundario. Es posible que este tamaño no respete las restricciones de medición. (Ib2729, b/172560206, b/172338608)
- Agrega un modificador selectionGroup que permite marcar la colección de Tabs o RadioButtons con fines de accesibilidad. (Ie5c29)
Ahora es obligatorio el uso de
defaultFactory
paracompositionLocalOf
ystaticCompositionLocalOf
en lugar de ser opcional.Este cambio quita un error de escritura potencial del tipo no anulable en los que no se proporcionó el valor predeterminado de fábrica. Anteriormente, esto hubiera proporcionado una referencia nula del tipo no anulable.
En el caso de los tipos nulos, puedes proporcionar
{ null }
como el valor predeterminado de fábrica.No recomendamos usar configuraciones locales con tipos no anulables, a menos que se pueda proporcionar un valor predeterminado razonable. Si no existe un valor predeterminado razonable, la expresión lambda
defaultFactory
debe arrojar una excepción. Sin embargo, usar una excepción significa que los usuarios de la configuración local tendrán una dependencia implícita de ella siempre que el sistema de tipos no la aplique de manera forzada. (Ifbd2a)Se quitaron los métodos obsoletos de módulos de IU. (I646f6)
Se cambiaron los nombres de los modificadores de tamaño. Se cambió el nombre de modifier.width a requiredWidth, de modifier.height a requiredHeight y de modifier.size a requiredSize. Se cambió el nombre de modifier.preferredWidth a width, de preferredHeight a height y de preferredSize a size. (I5b414)
Se quitó
Modifier.tapGestureFilter
. UsaModifier.pointerInput { detectTapGestures(...) }
en su lugar. (I266ed, b/175294473)Se quitó el consumo parcial del sistema de entrada del puntero. El método recomendado para coordinar el consumo parcial es Modifier.nestedScroll. (Ie9c9b)
Se migró Orientation al paquete de base. Se migró VelocirtTracker de ui.gesture a ui.input.pointer. (Iff4a8, b/175294473)
Ahora imageResource y vectorResource son funciones de extensión en las complementarias de ImageBitmap y ImageVector, respectivamente. Se borraron funciones
load{Image,Vector,Font}Resource
. (I89130)Se quitó AnimationClockObservable, así como sus subclases. Se quitó AnimatedFloat. (Icde52, b/177457083)
Se cambió el nombre de Providers a CompositionLocalProvider.
- El constructor Composition ya no acepta ningún parámetro clave y es obsoleto.
- Se convirtió currentCompositeKeyHash en una propiedad de nivel superior que admite composición en lugar de una función de nivel superior que admite composición.
- Se migraron CompositionData y CompositionGroup al espacio de nombres androidx.compose.runtime.tooling
- Se convirtió ComposableLambda en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
- Se convirtió ComposableLambdaN en una interfaz, en lugar de una clase concreta, y ya no cuenta con parámetros de tipo.
- Se migró la función snapshotFlow al espacio de nombres androidx.compose.runtime
- Ya no es experimental el método de combinación de SnapshotMutationPolicy.
- Se quitó la función clearRoots de nivel superior de @TestOnly. Ya no es necesaria.
- Se quitaron las funciones keySourceInfoOf y resetSourceInfo. Ya no son necesarias.
- Se quitó el elemento Composer.collectKeySourceInformation. Ya no es necesario.
- Se quitaron los métodos joinedKeyRight, isJoinedKey y joinedKeyLeft. Ya no son necesarios.
- Se migraron y reorganizaron varias API de nivel superior en archivos diferentes. Debido a la semántica de la clase de archivos de Kotlin, se romperá la compatibilidad binaria, pero no la compatibilidad de origen, por lo que no debería ser un problema para la mayoría de los usuarios.
- (I99b7d, b/177245490)
Se quitó
ComponentActivity.setContent()
de Compose:ui. Usa la deandroidx.activity:activity-compose:1.3.0-alpha01
. Se quitaronviewModel()
yLocalViewModelStoreOwner
de Compose:ui. Usa las deandroidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01
. (I6f36b)Se modificó Modifier.scrollable. Ahora, usa la interfaz Scrollable en lugar de la clase ScrollableController. (I4f5a5, b/174485541, b/175294473)
Se quitó la compatibilidad con CustomUniforms de PointerInputModifier. (I02707, b/175294473)
SnapshotStateObserver dejó de ser experimental (Id2e6a).
Se borraron algunas APIs obsoletas (Ice5da, b/178633932).
Se quitaron longPressGestureFilter y doubleClickGestureFilter. Usa modificador.pointerInput con funciones auxiliares, como detectTapGestures. (I2fedf, b/175294473)
Se quitó la API de String.format que refactorizó los usos en varios métodos toString para no aprovechar internamente el formato String.format. (Id1290)
Se quitaron las aserciones de dp. (I798d2)
Se quitó androidx.compose.runtime:runtime-dispatch (I55feb).
Las acciones de texto ahora comprueban el enfoque automáticamente (I13777, b/179648629).
Se quitó
runBlockingWithManualClock
. (I15cdc, b/179664814)Ahora, la posición de desplazamiento en Modifier.verticalScroll()/horizontalScroll() se representa con Ints. (I81298).
Ahora, se cambió el nombre de FlingConfig por FlingBehavior para personalizar la animación de suspensión en lugar del elemento predefinido Decays (I02b86, b/175294473)
Se agregó una función auxiliar que es útil para configurar la misma acción para todas las devoluciones de llamada de ImeAction (I63447, b/179226323).
Se quitó la devolución de llamada de SoftwareKeyboardController de todos los campos de texto que, en breve, se reemplazarán por una nueva API (Iae869, b/168778053)
Dejó de usarse FontSpan y FontWeigthStyleSpan y, por lo tanto, se quitaron. (Ie5b56, b/177423444)
Se realizaron los siguientes cambios en la API de Material:
- Se agregó el parámetro contentPadding a Top/BottomAppBar para permitir personalizar el relleno predeterminado.
- Se reorganizaron los parámetros en BackdropScaffold a fin de cumplir con los lineamientos de las API para los parámetros obligatorios antes de los parámetros opcionales.
- Se migró el parámetro
icon
en BottomNavigationItem para que sea posterior aselected
yonClick
. - Se cambió el nombre del parámetro
alwaysShowLabels
en BottomNavigationItem aalwaysShowLabel
. - Se cambiaron los nombres de los parámetros
bodyContent
en algunos componentes a solocontent
. - Se reorganizaron los parámetros en
ButtonDefaults.buttonColors()
. Ten en cuenta que, debido a que no cambió el tipo de parámetros, no se producirá un error en tu código. Asegúrate de estar usando parámetros con nombre o actualiza el orden de manera manual; de lo contrario, tu código no funcionará como antes. - Se agregó el parámetro
secondaryVariant
adarkColors()
. Por lo general, este color es el mismo que el desecondary
en el tema oscuro, pero agrega coherencia y mayor personalización. - Se quitó ElevationDefaults y animateElevation() de la superficie de la API pública, ya que no se usaban con frecuencia ni eran útiles.
- Se cambió el nombre de
onValueChangeEnd
enSlider
aonValueChangeFinished
y se hizo nulo. - Se cambió el nombre del parámetro
text
enSnackbar
acontent
para brindar coherencia. - Se agregó el parámetro
contentPadding
aDropdownMenuItem
para permitir la personalización del relleno predeterminado y se convirtiócontent
en una extensión enRowScope
. - Se cambió el nombre de
ModalDrawerLayout
aModalDrawer
. - Se cambió el nombre de
BottomDrawerLayout
aBottomDrawer
. - (I1cc66)
Correcciones de errores
- Se agregó una API para usar recursos AnimatedVectorDrawable en Compose. Usa animatedVectorResource para cargar un XML
<animated-vector>
como AnimatedImageVector y anímalo con pintorFor. (I8ea91) - Se agregó una nueva API local de composición de LocalSoftwareKeyboardController para reemplazar la interfaz de SoftwareKeyboardController anterior en TextField (I658b6, b/168778053)
Versión 1.0.0-alpha12
10 de febrero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha12
. La versión 1.0.0-alpha12 contiene estas confirmaciones.
Cambios en la API
- Se quitó la compatibilidad con ViewGroups de UiApplier. Se quitaron los elementos emitView obsoletos que admiten composición. (Ifb214)
- Modifier.pointerInput ahora requiere claves de memoria para indicar cuándo se debe reiniciar la corrutina de detección de la entrada del puntero para las dependencias nuevas. (I849cd)
- El nombre de CompositionReference cambió a CompositionContext. (I53fcb)
- El nombre de Bounds se cambió a DpRect. (I4b32a)
- Actualización de pruebas: hasText() verificará los textos de entrada y label/hint/placeholder en el campo de texto (Iab803).
- Se movieron viewModel(), que es componible, y LocalViewModelStoreOwner a androidx.lifecycle.viewmodel.compose. Para su uso, deberás agregar una nueva dependencia androidx.lifecycle:lifecycle-viewmodel-compose:1.0.0-alpha01 por separado (I7a374)
- Se permite utilizar acciones anulables en AccessibilityAction, etiquetas de cambio de acción en AccessibilityAction y CustomAccessibilityAction de CharSequence a String (I0dc82).
- Para que las convenciones de nombre coincidan mejor con ImageBitmap y con ImageVector, se cambió el nombre de ImagePainter por BitmapPainter para que sea paralelo a VectorPainter (Iba381, b/174565889)
- Se mejoraron las APIs de prueba de substring con una substring como argumento (Icbe78).
- Se agregó un objeto
Modifier.focusOrder()
que acepta un elemento FocusRequester sin especificar el orden de foco personalizado para una expresión lambda. Esto es útil cuando solo se necesita especificar una referencia en lugar de un orden de foco personalizado para un objeto componible (I4f52a, b/179180978). - Se movió ComponentActivity.setContent a androidx.activity.compose.setContent en el módulo androidx.activity:activity-compose. (Icf416)
- Se quitaron los métodos copy() y de desestructuración de varias clases en las que se usaban con muy poca frecuencia. (I26702, b/178659281)
- Se movió el elemento Popup para que sea específico de plataformas. Se cambió el nombre de AndroidPopupProperties a PopupProperties, y se movió
isFocusable
a un parámetrofocusable
enPopupProperties
. (Ieeea5) - Se movió el elemento Dialog para que sea específico de plataformas. Se cambió el nombre de AndroidDialogProperties a DialogProperties. (I4ef69, b/179138130)
- LayoutNode ahora es un elemento interno. (I8a7b1, b/175103944)
- Se reemplazó Constraints.enforce con Constraints.constrain. (I8b8ea)
- loadFontResource dejó de estar disponible. En su lugar, usa fontResource. De lo contrario, imageResource, loadImageResource, vectorResource y loadVectorResource dejaron de estar disponibles. o painterResource. (I6b809)
- Por motivos de rendimiento, la semántica de ScrollAxisRange ahora toma expresiones lambda que muestran objetos Float en lugar de valores Float directos. (If4a35, b/178657186)
- Se agregaron una semántica de EditableText para marcar texto de entrada editable del campo de texto con fines de accesibilidad y los métodos de prueba correspondientes para verificar la semántica (I8e07a).
- Ahora OwnerLayer/OwnerScope/OwnerSnapshotObserver es un elemento interno. (I4ffaf, b/175103944)
- Se cambió el nombre de toIntPx() a roundToPx(). (I9b7e4, b/173502290)
- Se cambió el nombre de IntBounds a IntRect y se mejoró la API. (I1f6ff)
- Se actualizó la API de Snapshot para que sea más coherente con los lineamientos de API y para ocultar las clases de implementación interna en la API pública (Id9e32)
- Se agregaron las acciones de semántica para expandir y contraer. Se agregaron los elementos expand y halfExpand en ModalBottomSheetState (Ib5064).
- Modifier.dragGestureFilter dejó de estar disponible. Usa
Modifier.pointerInput { detectDragGestures (...)}
en su lugar. De forma alternativa, puedes usar Modifier.draggable para arrastrar un eje. (I0ba93, b/175294473) - Se cambió el nombre de Ambients para que coincida con Ambient -> CompositionLocal. Los elementos Ambients se solían llamar AmbientFoo; ahora los elementos CompositionLocals se llaman LocalFoo. (I2d55d)
- Se quitó el objeto BaseTextField que dejó de estar disponible. En su lugar, usa BasicTextField. (I71368)
- Se movió la selección a la base. (I7892b)
- Se quitará el objeto componible
savedInstanceState { 0 }
, de forma similar a como se quitó el objeto componiblestate { 0 }
, y ahora se promociona el uso deremember { mutableStateOf(0) }
, por ejemplo. En su lugar, se debe usarrememberSaveable { mutableStateOf(0) }
, que se guardará y restablecerá automáticamente si el tipo usado dentro de MutableState se puede almacenar en el paquete. Si antes pasabas un objeto Saver personalizado, ahora debes usar una sobrecarga nueva de rememberSaveable, que tiene el parámetrostateSaver
. Se verá de la siguiente manera:val holder = rememberSaveable(stateSaver = HolderSaver) { mutableStateOf(Holder(0)) }
. (Ib4c26, b/177338004) - Se agregó una semántica de contraseña para accesibilidad. (I231ce)
- Se agregó ProgressBarRangeInfo.Indeterminate a fin de marcar barras de progreso indeterminadas para la accesibilidad. (I6fe05)
- Dejaron de estar disponibles las utilidades
emptyContent()
y(@Composable () -> Unit).orEmpty()
, dado que ya no tienen un valor ni impacto de rendimiento positivos. (I0484d) snapshotFlow
ywithMutableSnapshot
dejaron de ser experimentales. (I6a45f)- Ahora se pueden cerrar los elementos Recomposer. Si se cierran, continuarán componiendo hasta que se completen las corrutinas de elementos secundarios de composición. Se cambió el nombre de Recomposer.shutDown a cancel para que haya una diferencia con la acción de cerrar. (Ib6d76)
- Se cambió el nombre de UiSavedStateRegistry por SaveableStateRegistry y el de AmbientUiSavedStateRegistry por AmbientSaveableStateRegistry, y se movieron los dos elementos al paquete androidx.compose.runtime.saveable (I30224)
- Se cambió el nombre de androidx:compose:runtime:runtime-saved-instance-state por androidx:compose:runtime:runtime-saveable (I6dcac).
- Se borraron muchas API que dejaron de estar disponibles en el paquete de IU. (I2f2dc)
- El artefacto compose:runtime-dispatch dejó de estar disponible. Ahora se puede encontrar MonotonicFrameClock en compose:runtime y AndroidUiDispatcher en compose:ui. (Ib5c36)
- Las clases Outline.* ya no son clases de datos. (I4879e, b/178001427)
- Se quitó
view.captureToImage()
, pero no tiene reemplazo. (I7fcd2) - Se introdujo la API de ColorMatrix para modificar valores RGB de contenido fuente y se refactorizó la API de ColorFilter para que sea una interfaz y coincida con la implementación de PathEffect. (Ica1e8)
- Se agregó el parámetro layoutDirection al objeto createOutline del elemento Shape. Esto permite crear formas que reconozcan la dirección en el diseño. (I57c20, b/152756983)
- onImeActionPerformed dejó de estar disponible. En su lugar, usa KeyboardActions. (If0bbd, b/179071523)
- Se introdujo un elemento de contexto de corrutinas
InfiniteAnimationPolicy
que se aplicará en animaciones infinitas. No se instala ninguna política de forma predeterminada, excepto cuando se ejecutan pruebas conComposeTestRule
. (I50ec4, b/151940543) - Se quitó el elemento canDrag de Modifier.scrollable. (Id66e7, b/175294473)
- Se cambió el nombre de LayoutCoordinates.parentCoordinates por LayoutCoordinates.parentLayoutCoordinates para habilitar una propiedad parentCoordinates nueva. Ahora, la propiedad parentCoordinates ofrece el elemento superior LayoutCoordinates del modificador. Esto permitirá crear casos de uso más completos para onSizeChanged() y onGloballyPositioned() (Idfbfd, b/177926591).
- Los elementos tapGestureFilter, doubleTapGestureFilter, longPressGestureFilter y pressIndicaitonGestureFilter dejaron de estar disponibles. En su lugar, usa Modifier.clickable o Modifier.pointerInput con la función detectTapGestures. (I6baf9, b/175294473)
- Se quitó el elemento unregisterProvider de SaveableStateRegistry. Ahora, registerProvider() muestra el objeto SaveableStateRegistry.Entry, que se puede usar para cancelar un registro. (Ic4274, b/178583739)
- Se cambió el nombre de rememberSavedInstanceState() a rememberSaveable() y se movió al paquete androidx.compose.runtime.saveable. (I1366e, b/177338004)
- Se quitaron los elementos CoreText y CoreTextField de la API pública.
- Se quitó la sobrecarga SelectionContainer que dejó de estar disponible.
- (I99c19)
- Las pruebas en las que se usa Compose en jerarquías que directamente se agregan a WindowManager o se quitan de allí ahora son más estables (Ie81ed, b/175765614)
- Se quitó Recomposer.current(). Ahora [Abstract]ComposeView es la opción predeterminada para los elementos Recomposer aplicados a ventanas y creados de forma diferida que controla ViewTreeLifecycleOwner para la ventana. La recomposición y las marcas de animación basadas en withFrameNanos-based se pausan cuando se detiene el ciclo de vida del host. (I38e11)
- Recomposer.runningRecomposers ahora ofrece un StateFlow global de RecomposerInfo de solo lectura para observar el estado de la composición en proceso. Se prefiere esta API en lugar de Recomposer.current(), que dejó de estar disponible. (If8ebe)
- Se movieron a androidx.compose.runtime.saveable los elementos Saver, listSaver(), mapSaver() y autoSaver de androidx.compose.runtime.savedinstancestate (I77fe6).
- El objeto EditCommands acepta AnnotatedString. Sin embargo, este cambio es solo para la API, y la edición de texto multiestilo aún no se implementó (I4c3ea)
- Se quitaron los elementos Uptime y Duration. (Ib9bf4, b/177420019)
- Se movió CompositionData.asTree() y las APIs relacionadas al módulo independiente ui-tooling-data, y se marcaron como experimentales (Ic95b8).
- Se cambió el nombre de los parámetros en RounderCornerShape, CutCornerShape y CornerBasedShape de left/right a start/end para admitir la duplicación automática de la forma en la dirección de derecha a izquierda. Se introdujeron los objetos AbsoluteRounderCornerShape y AbsoluteCutCornerShape para los casos en los que no se prefiere la duplicación automática. (I61040, b/152756983)
Se refactorizó la API a la que orienta el complemento de compilador de Compose para usar una interfaz en lugar de una clase concreta. La interfaz ya dejó de usar un parámetro de tipo.
Este es un cambio interno que no debería afectar la compatibilidad del código fuente, pero es un cambio rotundo del objeto binario. (I3b922, b/169406779)
Se quitó la función StringBuilder.deleteAt, que se volvió pública de forma no intencional. (Id6ed9)
Correcciones de errores
- Los objetos ComposeView ubicados en jerarquías de vistas que son elementos secundarios de otra composición ahora alojan composiciones secundarias de sus entidades principales (I92883).
- Se actualizó la API de imageFromResource de Compose para volver a utilizar la caché del elemento de diseño del recurso cuando se cargan objetos ImageBitmap. (If3627, b/178751994)
Versión 1.0.0-alpha11
28 de enero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha11
. La versión 1.0.0-alpha11 contiene estas confirmaciones.
Cambios en la API
- WithConstraints se rediseñó y nombró BoxWithConstraints, y se movió a foundation.layout. (I9420b, b/173387208)
- Key.DPadUp dejó de estar disponible. En su lugar, usa Key.DirectionUp. (Iab335, b/177954892)
- A partir de ahora, la interfaz de propietario es interna. (If8e35)
- Se agregó la API de FocusManager.moveFocus() para mover el enfoque de manera programática. (I045cb, b/177681839)
- Se cambió PopupPositionProvider para usar coordenadas relativas de ventana, no coordenadas globales. Se cambió el nombre de parentGlobalBounds a anchorBounds y se modificó windowGlobalBounds para que sea windowSize: IntSize. (I2994a)
- Duration y Uptime se reemplazarán por Long en milisegundos, y este paso quitará la dependencia de entrada del puntero en esas clases (Ia33b2, b/175142755, b/177420019)
- Se agregó AmbientSavedStateRegistryOwner de manera similar al AmbientLifecycleOwner y AmbientViewModelStoreOwner existentes. (I9a3e8, b/176756365)
- Se actualizó la API de gráficos vectoriales para admitir el análisis del tono aplicado a la raíz de los gráficos vectoriales (Id9d53, b/177210509)
- Se agregó toolType a PointerInputChange para diferenciar dispositivos. (Iac787, b/175142755)
- Se cambió el nombre de AmbientWindowManager por AmbientWindowInfo (I2686a, b/177084714, b/177084983).
- Los métodos de coordenadas globales dejaron de estar disponibles y se crearon nuevos métodos de coordenadas basados en ventanas. (Iee284)
- Se agregó Modifier.toolingGraphicsLayer, que agrega un modificador de capas de gráficos cuando se activa la inspección. (I315df)
- Ahora, FocusRequester.createRefs se marca como experimental, ya que podría sufrir cambios. (I2d898, b/177000821)
- Se cambió el nombre de SemanticsPropertyReceiver.hidden a invisibleToUser y se marcó como @ExperimentalComposeUiApi. Se cambió el nombre de AccessibilityRangeInfo a ProgressBarRangeInfo, y el de stateDescriptionRange a progressBarRangeInfo. Se cambió el nombre de AccessibilityScrollState a ScrollAxisRange, el de horizontalAccessibilityScrollState a horizontalScrollAxisRange, y el de verticalAccessibilityScrollState a verticalScrollAxisRange. (Id3148)
- Se quitó PointerInputData y se modificó el PointerInputChange para otorgarle todos los campos de PointerInputData. Se convirtieron en internos los elementos PointerInputEvent y PointerInputEventData debido a que no se usan en ninguna API pública. (Ifff97, b/175142755)
- Se actualizó GraphicsLayerScope para implementar la densidad a fin de admitir las conversiones de dp en píxeles sin procesar. (Ied528, b/176819695)
- Se actualizó la API de Matrix para seguir el orden de las filas principales y proporcionar constantes de índice para ayudar con las conversiones entre diferentes representaciones de matrices y hacer coincidir la lógica de conversión de framework entre SkMatrix y Matrix4 de forma interna. (I432e6)
- Se quitaron los métodos experimentales de monotonicFrameAnimationClockOf (Ib753f, b/170708374).
- Se traslada String.fintPrecedingBreak y String.fingFollowingBreak a InternalTextApi. (I657c4)
- Se quitó androidx.compose.ui.util.isSurrogatePair de la API pública. (Ia9494)
- Se cambió el nombre de TransformedText.transformedText a TransformedText.text.
- TransformedText ya no es una clase de datos. (Ie672a)
- Se quitó
data class
de las siguientes clases:- InlineTextContent
- LocaleList (I605c7)
- Las siguientes clases ya no son clases de datos:
- AnnotatedString
- ParagraphStyle
- SpanStyle
- TextStyle
- FontWeight
- TextDecoration
- TextGeometricTransform
- TextIndex
- TextLayoutResult
- TextLayoutInput (Iaff99)
- Se cambió VisualTransformation para que sea una interfaz funcional. (I3bba4)
- Se agregó un tipo de parámetro de referencia de función. (I5e1bd)
- Se agregaron límites transformados a InspectorNode. (Ice42f)
Correcciones de errores
- onCommit, onDispose y onActive dejaron de estar disponibles, y se los reemplazó por las APIs de SideEffect y DisposableEffect (If760e).
Se realizaron cambios en las funciones de fábrica de Font/FontFamily/Typeface.
- Se agregaron funciones de fábrica que comienzan con mayúscula.
- Las funciones anteriores con letra minúscula dejaron de estar disponibles.
- Las nuevas funciones de fábrica muestran la FontFamily en lugar de subclases.
- Se ocultaron los constructores de las subclases, por lo que solo se pueden construir mediante funciones de fábrica.
- Se cambió el nombre de Font.asFontFamily a Font.toFontFamily. (I42aa7)
Se agregó
ComposeContentTestRule
, que extiendeComposeTestRule
y definesetContent
, que se quitó deComposeTestRule
. Se agregó un métodocreateEmptyComposeRule()
de fábrica que muestra unComposeTestRule
y no inicia una Activity para ti. Usa este método cuando quieras iniciar tu Activity durante una prueba, p. ej., conActivityScenario.launch
. (I9d782, b/174472899).animateAsState ahora es animateFooAsState, donde Foo es el tipo de variable que se anima, p. ej., Float, Dp, Offset, etc. (Ie7e25)
Se agregó un parámetro de descripción de contenido a Image y Icon. Este se usa para proporcionar una descripción a los servicios de accesibilidad. (I2ac4c)
Como debe evitarse displaySize, este debe quitarse. En general, es mejor usar el tamaño de onRoot() o, al menos, el tamaño de la ventana. (I62db4)
OnSizeChanged informó el tamaño del contenido del diseño. Ahora informa el tamaño en su posición dentro de la cadena de modificador. (I36b78, b/177562900)
La API de emit() y todas las sobrecargas dejaron de estar disponibles y cambiaron de nombre a ComposeNode. Las API son idénticas; solo tienen un nombre diferente para seguir las convenciones de nomenclatura de Compose. (I4137b)
TextFieldValue acepta AnnotatedString. Sin embargo, este cambio es solo para la API y la edición de texto multiestilo todavía no se implementó.
- Se quitó
initial
de los parámetros del constructor EditingBuffer. (I326d5)
- Se quitó
invalidate y compositionReference() dejaron de estar disponibles y se reemplazaron con currentRecomposeScope y rememberCompositionReference, respectivamente. (I583a8)
AnnotatedString se modificó para que se extendiera de kotlin.CharSequence. Por lo tanto, la longitud y subSequence ahora son funciones de instancia, y se quitaron las funciones de extensión. (Iaf429)
CompositionLifecycleObserver dejó de estar disponible y se reemplazó por RememberObserver.
RememberObserver
es un reemplazo deCompositionLifecycleObserver
con una semántica modificada y métodos con nombres cambiados. El cambio a la API nueva se puede realizar de manera mecánica para objetos que solo se recuerdan una vez y sigue siendo la práctica recomendada. Sin embargo, si se olvidó una referencia más de una vez en una composición, se llama aonRemembered
para cada referencia en la queonEnter
solo se llama una vez. Antes, se llamaba aonEnter
varias veces si el objeto se usaba en subcomposiciones, comoWithConstraints
yScaffold
, por lo que la garantía de la única llamada aonEnter
no era confiable. Por lo tanto, se quitó deRememberObserver
.RememberObserver
agregaonAbandoned
, que se llama si la devolución de llamada pasada aremember
muestra la instanciaRememberObserver
, pero como esta no se recuerda en el estado de composición, nunca se llamará aonRemembered
. Esto puede ocurrir si una excepción termina la composición antes de completarla, o bien si la descarta, ya que el estado que estaba produciendo una composición ya no está vigente o no se necesita. Si la instancia deRememberObserver
que sigue a la recomendación de referencia única anterior realiza el seguimiento de un recurso externo, tantoonForgotten
comoonAbandoned
indicarán que el recurso ya no es necesario. Si el objeto realiza un seguimiento del trabajo que se inició o los recursos asignados enonRemembered
, se puede ignorar aonAbandoned
, ya que no se llamará si se llama aonRemembered
. (I02c36)Las operaciones aritméticas entre 2 o más TextUnits dejaron de estar disponibles. Las funciones TextUnit.Sp y TextUnit.Em dejaron de estar disponibles antes que las funciones de extensión, como Int.sp y Int.em. (I48369)
De forma predeterminada, los recursos de las bibliotecas sin recursos públicos declarados de manera explícita (p. ej., a través de public.xml) son privados. (Ia1dcc, b/170882230)
ScrollableColumn y Row dejaron de estar disponibles. El uso de ScrollableColumn es menos eficiente en comparación con LazyColumn cuando tienes contenido que lleva mucho desplazamiento, ya que con LazyColumn solo se podía componer, medir o dibujar elementos visibles. Para evitar que los usuarios sufran la ineficiencia, decidimos dar de baja ScrollableColumn y ScrollableRow para promover el uso de LazyColumn y LazyRow. Los usuarios aún pueden decidir no usar el comportamiento diferido y recurrir a los modificadores directamente de la siguiente manera: Column(Modifier.verticalScroll(rememberScrollState())) (Ib976b, b/170468083).
Se agregó un método de fábrica
items(count: Int)
nuevo para el alcance de LazyColumn/LazyRow/LazyVerticalGrid.items(items: List)
yitemsIndexed(items: List)
ahora son funciones de extensión, así que debes importarlas manualmente cuando las uses. Se agregaron sobrecargas de extensiones nuevas para Arrays:items(items: Array)
yitemsIndexed(Array)
. (I803fc, b/175562574)Usa ImeAction.None en lugar de ImeAction.NoAction.
- Usa ImeAction.Default en lugar de ImeAction.Unspecified. (Ie1bcc)
Se implementó TestCoroutineDispatcher en pruebas. (I532b6)
Se cambió el nombre de TextInputService.onStateUpdated a updateState. (Id4853)
La transición TransitionDefinition-based dejó de estar disponible. (I0ac57)
Se quitó TextUnitType.Inherit. En su lugar, usa TextUnitType.Unspecified. (I9ff64)
Versión 1.0.0-alpha10
13 de enero de 2021
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha10
. La versión 1.0.0-alpha10 contiene estas confirmaciones.
Cambio rotundo
La reestructuración del compilador interno de la API permite realizar cambios por lote en los nodos que se generan a partir de la composición a la fase "aplicar cambios", después de que se completan todas las funciones
@Composable
.Este es un cambio rotundo de comportamiento que podría afectar el código de la aplicación, dado que los nodos ya no estarán disponibles en las API internas ni en las experimentales hasta que se hayan aplicado los cambios. Por lo general, se puede evitar si se envuelve el código con esas dependencias en un elemento componible
SideEffect
para diferir la ejecución del código hasta que se hayan creado e inicializado los nodos. (I018da)
Cambios en la API
- Se agregó Modifier.focusOrder(), que se puede usar para especificar un orden de recorrido de foco personalizado (I90cf5, b/175899543, b/170155556, b/170155429).
- Se quitó focusObserver, que era obsoleto. En su lugar, utiliza onFocusChanged o onFocusEvent. (I3ecb9, b/175156387)
- Se realizaron cambios en la API de EditOperations.
- Se cambió el nombre de EditOperation a EditCommand.
- Se agregó el sufijo Command para implementaciones concretas de EditOperation.
- Las EditCommand ya no son clases de datos.
- Se cambió el nombre de la función EditOperation.process a applyTo.
- Se cambió el nombre de InputEventListener a InputEventCallback.
- (I0a366)
- Se quitaron PxSquared, PxCubed y PxInverse sin usar. Se modificó Size.center() para que sea una propiedad. (I973f7)
- El módulo ui-test ahora podrá configurar la creación de Recomposer para las IUs que se están probando (Ibebd8).
- Se modificó Velocity para que tuviera partes de componentes y operaciones matemáticas. (Ib0447)
- Se cambió el nombre de
@ExperimentalTesting
por@ExperimentalTestApi
para que sea coherente con anotaciones de API experimentales similares (Ia4502, b/171464963). - Se cambió el nombre de Color.useOrElse() a Color.takeOrElse(). (Ifdcf5)
- Se quitaron las clases DpInverse, DpSquared y DpCubed sin usar. (I4d62b)
- Se cambió el nombre de Constraints#satisfiedBy a isSatisfiedBy. (I9cf5c)
- Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (I72fd1)
- Se agregó isSpecified, isUnspecified y useOrElse para las clases intercaladas con una constante Unspecified. (I93f7b, b/174310811)
Se expandieron las APIs de [Abstract]ComposeView para permitir el reciclado de las vistas basadas en Compose, ya que se dispone la composición para volver a recrearla más adelante. Se agregaron API para instalar y descubrir elementos Recomposer y CompositionReferences aplicados a ventanas, con el objetivo de crear composiciones secundarias.
Se agregó ViewCompositionStrategy para configurar la estrategia de descarte de composición de [Abstract]ComposeViews; el comportamiento predeterminado es que se descarta cuando se desconecta la ventana. (I860ab)
Se quitó la API pública de Any.identityHashCode(). (I025d7)
Se quitó la API de toStringAsFix para dar lugar al uso de String.format directamente. (Iaba6b)
Se agregó la opción de activar o desactivar el Strings.kt de Foundation. (I4a5b7, b 172366489)
Se trasladó nativeClass al módulo de IU y se la convirtió en clase interna. Se actualizaron los usos de nativeClass en implementaciones equals para usar "is MyClass" en su lugar. (I4f734)
Modifier.focus() y Modifier.focusRequester() dejaron de estar disponibles. En su lugar, usa Modifier.focusModifier() y Modifier.focusReference(). (I75a48, b/175160751, b/175160532, b/175077829)
Se agregó SelectionRegistry.notifySelectableChange para notificar a SelectableManager las actualizaciones de Selectable. (I6ff30, b/173215242)
Se introdujo la propiedad Outline.bounds para obtener el rectángulo delimitador de varias implementaciones de contorno. (I16e74, b/175093504)
TestUiDispatcher dejó de estar disponible. En su lugar, usa Dispatchers.Main. (Ic171f, b/175385255)
ImeOptions y KeyboardOptions ya no son clases de datos. (I3c898, b/168684531)
Se realizaron cambios en la API de VisualTransformation.
- Se cambió el nombre de OffsetMap a OffsetMapping.
- Se cambió el nombre de OffsetMapping.identityOffsetMap a OffsetMapping.Identity.
- PasswordTransformation ya no es una clase de datos.
- Se movió OffsetMapping a su propio archivo.
- (I0bdf3)
Se cambió el nombre de Position a DpOffset y se quitó getDistance(). (Ib2dfd)
Se cambió la función Dp.isFinite() a un valor Dp.isFinite. (I50e00)
Correcciones de errores
- Recomposer ahora muestra un flujo de estado actual, lo que permite supervisar su actividad y la actividad de los efectos asociados. (Ifb2b9)
- Ahora se puede acceder al keyEvent nativo a través de keyEvent.nativeKeyEvent (I87c57 o b/173086397).
- Se reemplazó
animate()
conanimateAsState()
, que muestraState<T>
, en lugar deT
. Esto mejora el rendimiento, ya que el alcance de la invalidación se puede limitar a donde se lee el valor State. (Ib179e) - Se agregó la API de función de Semantics y Role como parámetro para SemanticsModifier que se puede seleccionar, activar o desactivar, y en el que se puede hacer clic. Se cambió Modifier.progressSemantics para que Slider también pudiera usarlo. (I216cd)
- Se agregó la nueva API de
Animatable
basada en corrutinas que garantiza la exclusividad mutua entre sus animaciones.- Se agregó DecayAnimationSpec para admitir animaciones de disminución multidimensionales.
- (I820f2, b/168014930)
Versión 1.0.0-alpha09
16 de diciembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha09
. La versión 1.0.0-alpha09 contiene estas confirmaciones.
Cambios en la API
- Se quitó el elemento KeyEvent.Alt obsoleto. Ahora, en su lugar, usa KeyEvent.isAltPressed. (Idd695)
- Modifier.keyInputFilter y Modifier.previewKeyInputFilter dejaron de estar disponibles, por lo que se debe usar Modifier.onKeyEvent y Modifier.onPreviewKeyEvent en su lugar. (Idbf1b, b/175156384)
- Dejó de estar disponible el elemento Modifier.focusObserver. En su lugar, usa Modifier.onFocusChanged o Modifier.onFocusEvent. (I30f17, b/168511863, b/168511484)
- Se cambió el nombre de HandlePointerInputScope por AwaitPointerEventScope y el de handlePointerInput() por awaitPointerEventScope() para las APIs de entrada de puntero de suspensión (Idf0a1, b/175142755).
- Ahora la API de autocompletado es una experimental y requiere que la habilites (I0a1ec).
- Se agregaron declaraciones de desestructuración para crear instancias de FocuSRequester (I35d84, b/174817008).
- Se cambió el nombre de accessibilityLabel por contentDescription y el de accessibilityValue por stateDescription (I250f2)
- Se quitaron los eventos personalizados de la API de entrada de puntero de suspensión (Ia54d5, b/175142755).
- Se introdujeron varias funciones nuevas en SelectionRegistrar y también se cambió el nombre de onPositionChange por notifyPositionChange (Ifbaf7)
- Se marcaron más miembros de LayoutNode como internos. (I443c6)
- Se introdujo LayoutInfo para usarlo con herramientas y pruebas. (I9b190)
- AndroidOwner se hizo interno. (Ibcad0, b/170296980)
- Se quitó la anotación ExperimentalPointerInput. (Ia7a24)
- Se agregó el sistema de desplazamiento anidado. Consulta Modifier.nestedScroll para obtener más detalles. (I36e15, b/162408885)
- subcomposeInto(LayoutNode) se hizo interno. (Id724a)
Se modificó la interfaz de
Applier
para simplificar la creación de árboles de abajo hacia arriba en lugar de arriba hacia abajo.Se cambió el nombre del método
insert()
porinsertTopDown()
.Se agregó un método nuevo:
insertBottomUp()
.Un aplicador inserta cualquiera de los nodos en el árbol que edita con
insertTopDown()
oinsertBottomUp()
según el que tenga mejor rendimiento.Algunos árboles, como
LayoutNode
yView
, son mucho más eficientes para compilar hacia arriba que hacia abajo. Antes de este cambio, se necesitaba una pila de inserciones para implementar la compilación de abajo hacia arriba, que debía copiarse en cada aplicador que necesitaba una construcción de abajo hacia arriba para funcionar. Con este cambio, un elementoApplier
anulainsertBottomUp()
para compilar un árbol de abajo hacia arriba yinsertTopDown()
para compilar el árbol de arriba hacia abajo. (Icbdc2)Se agregaron las propiedades dismissOnBackPress y dismissOnClickOutside s AndroidDialogProperties. Estas permiten configurar el momento en el que se invocará el método onDismissRequest lambda del diálogo. (If5e17)
Se agregó la API de painterResource para controlar objetos de Painter que se cargan de manera opaca desde formatos de recursos en trama (como PNG) o VectorDrawable. Los usuarios ya no tienen que determinar el tipo de recurso por adelantado y pueden llamar a este método para obtener un objeto Painter que se pueda usar en los elementos de Image que admiten composición o los modificadores de Painter. (I2c703, b/173818471)
Se agregó Modifier.clearAndSetSemantics para borrar la semántica de los derivados y establecer nuevas. (I277ca)
Se movió ContentDrawScope al módulo ui-graphics para que esté con DrawScope. (Iee043, b/173832789)
Se introdujo la API de gráficos de PathEffect para proporcionar diferentes patrones a las formas con trazos. Se dejó de usar NativePathEffect y se reemplazó por la implementación real o esperada de PathEffect. (I5e976, b/171072166)
Se agregaron interfaces de IdlingResource a Compose como variantes admitidas de los recursos inactivos de Espresso para Compose. Se pueden registrar y cancelar su registro mediante ComposeTestRule. (I433f3)
Se quitó el registro global de ComposeIdlingResource y de los relojes en ComposeIdlingResource, o bien la cancelación de sus registros (I32660).
Correcciones de errores
- Las expresiones lambda en los modificadores de compensación ahora muestran IntOffset en lugar de Float. (Ic9ee5, b/174137212, b/174146755)
Se quitó SlotTable, SlotReader y SlotWriter de la API pública. Anteriormente, se marcaban como InternalComposeAPI. Ahora, son elementos internos del módulo de Compose.
Se agregaron ComposiciónData y ComposiciónGroup como reemplazo de la API de ui-tooling para que se usen con el fin de extraer información de composición. Son públicos, pero no están destinados para su uso fuera de la API de ui-tooling, ya que proporcionan la información sin procesar que interpreta la API de ui-tooling. (I31a9c)
Se refactorizó ShaderBrush para crear de forma diferida una instancia de sombreador cuando está disponible la información sobre el tamaño del entorno de dibujo. Esto es útil para definir gradientes que ocupan todos los límites de dibujo de un elemento componible en el momento de la composición, sin tener que llevar a cabo implementaciones personalizadas de DrawModifier.
Dejaron de estar disponibles las API del constructor de la función de gradiente y se reemplazaron por los métodos de fábrica en un objeto de gradiente. (I511fc, b/173066799)
Dejaron de estar disponibles los objetos LazyColumnFor, LazyRowFor, LazyColumnForIndexed y LazyRowForIndexed. En su lugar, usa LazyColumn y LazyRow. (I5b48c)
Dejó de estar disponible BuildCompat.isAtLeastR. (Idb37e)
Se agregó la función de fábrica buildAnnotatedString para compilar un elemento AnnotatedString. Dejó de estar disponible la función del compilador de annotatedString. (Idfe0b)
Se quitaron métodos de extensión en los elementos Float y Double para convertir valores a radianes. Se movieron a una función privada dentro de la implementación de PathParser, que es el único lugar en el que se usaban (I25f52).
Versión 1.0.0-alpha08
2 de diciembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha08
. La versión 1.0.0-alpha08 contiene estas confirmaciones.
Cambios en la API
- Se agregó la acción de semántica Descartar. (I2b706)
- Se movieron las API de DrawModifier del paquete androidx.compose.ui a androidx.compose.ui.draw. Se creó el archivo DrawModifierDeprecated.kt para que incluya los métodos typealiases/helper para asistir en la migración de las APIs que dejaron de estar disponibles a las actuales. (Id6044, b/173834241)
- Se cambió el nombre de Modifier.drawLayer a Modifier.graphicsLayer y se actualizaron las clases relacionadas con GraphicsLayer según los comentarios de la API. (I0bd29, b/173834241)
- Se agregaron los métodos nuevos placeable.placeWithLayer() y placeable.placeRelativeWithLayer() que permiten que los diseños personalizados y los modificadores de diseño ubiquen un elemento secundario introduciendo una capa de gráficos como dibujo. En consecuencia, podemos primero optimizar los diseños nuevos de modo que, cuando se necesite trasladar un elemento secundario, no haya que volver a dibujar su contenido. Luego, se podrán aplicar transformaciones de dibujo para un elemento secundario (Ibd8f6, b/170296989, b/171493718, b/173030831).
- Se quitó
<T>
de la declaración de SubcomposeLayout. Ahora se puede usar sin especificar un tipo. (Ib60c8) - Se agregaron APIs de Modifier.scale/rotate como convenientes para drawLayer.
- Se cambió el nombre de
Modifier.drawOpacity
aModifier.alpha
. - Se cambió el nombre de
Modifier.drawShadow
aModifier.shadow
. (I264ca, b/173208140)
- Se cambió el nombre de
- Los campos de posición y tiempo de actividad de PointerInputData se hicieron no nulos. (Id468a)
- MaterialTheme ahora configura los colores correctos para los controladores y el fondo de selección. Las apps que no son de Material pueden usar AmbientTextSelectionColors de forma manual para personalizar los colores usados para la selección. (I1e6f4, b/139320372, b/139320907)
- Se agregó WindowManager.isWindowFocused para comprobar si la ventana del host está enfocada y un objeto WindowFocusObserver que proporciona una devolución de llamada onWindowFocusChanged. (I53b2a, b/170932874)
- Se actualizó la API de TransformOrigin para obtener una sintaxis de desestructuración que muestre
pivotFractionX
ypivotFractionY
comocomponent1
ycomponent2
. (If43c4, b/173586560) - Se agregó la comprobación de lint para el nombre y la posición del parámetro lambda componibles para verificar la coherencia con los lineamientos de Compose.
También se migraron algunas API que usaban
children
como nombre de su lambda al final acontent
, según la comprobación y orientación de lint. (Iec48e) - Se agregó una API para verificar si se habían presionado las teclas modificadoras Alt, Ctrl, Meta o Mayúsculas cuando se enviaba KeyEvent. (I50ed9)
- Se agregó una nueva sobrecarga de
Modifier.drawLayer()
. Toma un bloqueo de lambda en un objeto GraphicsLayerScope nuevo donde se definen los parámetros de la capa de una forma que permita omitir la recomposición y la creación de un diseño nuevo cuando se produce el cambio de estado. DrawLayerModifier ahora es un elemento interno en la preparación para migrar su lógica al método placeable.placeWithLayer() de LayoutModifier (I15e9f, b/173030831). - Los entornos Ambient con el nombre
Ambient
como sufijo dejaron de estar disponibles, y se los reemplazó por nuevas propiedades con el prefijo Ambient, en función de otros lineamientos de la API de Compose y Ambients. (I33440) - Se trasladó
androidx.compose.ui.text.Typeface
aandroidx.compose.ui.text.font.Typeface
. (Ic2b81) - Se cambió el nombre del argumento de semántica mergeAllDescendants a mergeDescendants. (Ib6250)
- Se incluyó un nuevo detector del gesto arrastrar en la API de entrada de puntero de suspensión, que también admite el bloqueo de orientación. (Icef25)
- Se cambió el nombre de VectorAsset por ImageVector y se movió VectorAsset a Builder para que sea una clase de ImageVector de acuerdo con los lineamientos de la API. Se agregó un typealias de VectorAssetBuilder para vincularlo a ImageVector.Builder por motivos de compatibilidad (Icfdc8)
- Se cambió el nombre de ImageAsset y los métodos relacionados a ImageBitmap. (Ia2d99)
- Se agregó el parámetro zIndex para el objeto place() de PlacementScope, de modo que Modifier.zIndex() ahora funciona como LayoutModifier y cualquier diseño personalizado puede establecer parámetros zIndex para sus elementos secundarios en el bloque de posición. (I711f7, b/171493718)
- Se trasladaron las propiedades de semántica básica a la IU (I6f05c).
- Dejaron de estar disponibles place(Offset) y placeRelative(Offset). En su lugar, usa sobrecargas con compensaciones de Int. (I4c5e7).
- Se quitaron APIs que dejaron de estar disponibles, como Modifier.onPositioned. En su lugar, usa Modifier.onGloballyPositioned. Se quitó Modifier.onDraw y se debe usar Modifier.onDrawBehind. Se quitó Modifier.plus y se debe usar Modifier.then. Se quitó Color.Unset y se debe usar Color.Unspecified. Se quitó la clase PxBounds. En su lugar, usa Rect. (Ie9d02, b/172562222)
- Se actualizó la interfaz de Alignment y se hizo funcional. (I46a07, b/172311734)
- Se agregó el detector de gestos para presionar, presionar dos veces, mantener presionado y la indicación de presión mediante la nueva entrada de puntero suspendida. También se agregaron algunas utilidades que facilitan la tarea de los desarrolladores para escribir sus propios detectores de gestos. (I00807)
- Se cambió el nombre de
id
alayoutId
paraLayoutIdParentData
. Se cambió el nombre deMeasurable.id
aMeasurable.layoutId
. (Iadbcb, b/172449643) - Se agregó un nuevo detector de gestos multitáctil que incluye asistentes para detectar acciones de rotación, zoom y desplazamiento. (Ic459d)
- Se introdujeron las APIs de SweepGradientShader y SweepGradientBrush (Ia22c1)
- El control de tiempo en las pruebas (TestAnimationClock y sus usos) ahora es experimental. (I6ef86, b/171378521)
Se agregaron APIs de desplazamiento basadas en corrutinas:
Se agregaron LazyListState.snapToItem y LazyListState.smoothScrollBy, al igual que API de niveles inferiores para controlar el desplazamiento. Estas API proporcionan una interfaz de suspensión para controlar el desplazamiento que espera hasta que la acción finalice antes de mostrar el resultado. (Ie5642)
Se agregó Modifier.focusable en Foundation. Usa este elemento para agregar comportamiento enfocable a un componente con semántica y accesibilidad correctas. (I41eb9, b/152525426, b/162865824)
Se proporcionaron implementaciones predeterminadas de métodos y propiedades en AnimationClockTestRule que se pueden delegar a su
clock
(I7ea3d, b/173399709).AndroidComposeTestRule ahora puede aceptar selectores de actividad personalizados. (Ib8288, b/153623653, b/154135019)
Dejó de estar disponible TextLayoutResult.getLineVisibleEnd. Como reemplazo, TextLayoutResult.getLineEnd ahora tiene un parámetro visibleEnd nuevo. (I73282)
Se actualizó la API de TextFieldValue.
- TextFieldValue.composition se hizo de solo lectura.
- Se quitó la excepción que se arrojaba para el rango de selección no válido. (I4a675, b/172239032)
Se agregó compatibilidad con TtsAnnotation para el motor de texto a voz. (I54cc6)
Se agregaron APIs nuevas para las animaciones que se ejecutan en corrutinas (Ied662).
Correcciones de errores
- Se cambió el nombre del parámetro de alineación de Box a contentAlignment. (I2c957)
- Se cambiaron los nombres de los modificadores de offsetPx a offset. Ahora toman parámetros lambda en lugar de State. (Ic3021, b/173594846)
- Se agregó el parámetro resetInput a TextInputService#onStateUpdated. (I3e8f5, b/172239032, b/171860947)
- Se agregó una comprobación de lint para los parámetros de modificación en funciones de componibilidad. Esta comprobación de lint verifica el nombre, el tipo de datos que se muestra, el valor predeterminado y el orden del parámetro para mantener la coherencia con los lineamientos de Compose. (If493b)
- Se agregó una opción temporal para permitir que MonotonicFrameClock controle a TestAnimationClock. (I1403b, b/173402197)
- Se agregó el wrapper Typeface de Android. Puedes cargar un Typeface de Android mediante la función
typeface
; es decir,typeface(Typeface.DEFAULT)
. También se cambió el nombre detypefaceFromFontFamily()
atypeface()
. (I52ab7) - Se agregó una comprobación de lint para verificar que las funciones de fábrica de Modifier se definan como extensiones en Modifier, de modo que se puedan encadenar con fluidez (I07981)
- Se quitó el módulo ui-tests y sus stubs. (I3a7cb)
- Recomposer ya no acepta EmbeddingContext. Las dependencias de programación requeridas se obtienen de effectCoroutineContext. FrameManager dejó de estar disponible. Las integraciones de plataforma deben inicializar su propio manejo global de instantáneas. (I02369)
- Se pasa la información de estilo al nodo de accesibilidad. (If5e8d)
- Se cambió el nombre de TextUnit.Inherit a TextUnit.Unspecified para mantener la coherencia con otras unidades. (Ifce19)
Compose UI versión 1.0.0-alpha07
11 de noviembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha07
. La versión 1.0.0-alpha07 contiene estas confirmaciones.
Cambios en la API
- Se introdujo la clase intercalada ScaleFactor para representar factores de escala de los ejes horizontales y verticales independientes para 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 agregaron las fábricas BiasAlignment y BiasAbsoluteAlignment para crear alineaciones. (Iac836, b/169406772)
- El desarrollador puede eliminar el enfoque de manera forzada. (I90372)
- Se corrigió un error que provocaba que no se dibujara la elevación para vistas dentro de Compose. (If7782)
- Se creó la API de onDrawBehind dentro de ContentDrawScope para que la convención de nombres coincida con Modifier.drawBehind. (I4fc3a, b/171955269)
- Se agregó compatibilidad con la distancia de la cámara para complementar las transformaciones 3D rotationX/rotationY en las API de Layers. (I40213, b/171492100)
- Se agregó SelectionContainer sin la devolución de llamada. (Ibfadb)
- Se quitó la anotación ExperimentalSubcomposeLayoutApi. Ahora es posible usar SubcomposeLayout sin agregar @OptIn. (I708ad)
- Se movieron FirstBaseline y LastBaseline al paquete androidx.compose.ui.layout. (Ied2e7)
- Se quitó la opacidad del modificador drawShadow(), ya que era confusa. (I82c62, b/171624638)
- 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 quitó FocusState2, que era obsoleto. (I686cb, b/168686446)
- ZIndexModifier ahora es un objeto interno. (I1808b, b/171493718)
- Se actualizó el tipo de datos que se muestra del método lerp en los parámetros Size para mostrar un parámetro Size no nulo a fin de evitar cuadros innecesarios. (Ib0044)
- Se agregó TestMonotonicFrameClock para probar el código que se basa en MonotonicFrameClock de Compose para esperar eventos de fotogramas de composición con runBlockingTest de kotlinx-coroutines-test (I4402f).
- Se quitó GestureScope.localToGlobal (I15299, b/171462785).
- Se agregó el buscador
onAllNodesWithSubstring
. (I81dd7, b/171462889) - androidx.ui.test dejó de estar disponible. Migra a androidx.compose.ui.test y androidx.compose.ui.test.junit4 (I452e8).
Correcciones de errores
- Se movió captureToBitmap a captureToImage. (I86385)
- 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 actualizó TextFields para que acepte KeyboardOptions. (Ida7f3)
- Se cambió el nombre de KeyboardOptions a ImeOptions. (I82f36)
- Se movió KeyboardType y ImeAction a KeyboardOptions. (I910ce)
- Se agregó provideDefault como alternativa para proporcionar ambientes y se puede usar a fin de especificar valores ambientales que solo se establecerán cuando no se haya proporcionado ningún valor ambiental. (Id6635, b/171024925)
- BaseTextField dejó de estar disponible. En su lugar, usa BasicTextField. (I896eb)
- Se introdujo el módulo ui-test-junit4. (Ib91f8)
- Se cambió el nombre de
relativePaddingFrom
apaddingFrom
. Se agregó el modificadorpaddingFromBaseline
para especificar distancias de límites de diseño a la línea de base del texto. (I0440a, b/170633813) - Se cambió el nombre de LaunchedTask a LaunchedEffect para conservar la coherencia con las API de SideEffect y DisposableEffect. No se permite el uso de LaunchedEffect sin parámetros de asunto para fomentar las prácticas recomendadas. (Ifd3d4)
- Se incorporaron recursos componibles que se reescriben cuando se actualiza la configuración (I6387c, b/167352819)
- Recomposer ahora requiere CoroutineContext en la construcción. (Ic4610)
- Se suman valores
zIndex
cuando se aplican variosModifier.zIndex()
. Anteriormente, ganaba el primero. (Ic514c, b/170623936) - Se realizaron cambios en la implementación interna de SlotTable que no deberían afectar a la API pública (If9828)
- Se agregó la opción IME de corrección automática del teclado. (I57b8d)
- Se movió androidx.ui.test a androidx.compose.ui.test (I9ffdb).
- Se quitó TKeyboardOptions.toImeOptions de la API pública. (Ic2e45)
Contribución externa
- Se inhabilitó la publicación del artefacto interno androidx.compose.ui:ui-text-android. (Ib93fa)
Versión 1.0.0-alpha06
28 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha06
. La versión 1.0.0-alpha06 contiene estas confirmaciones.
Cambios en la API
- Recomposer ahora es CompositionReference y es un elemento superior de composición válido. El Recomposer explícito ahora es obligatorio en menos lugares. (I4036f)
- VectorPainter dejó de estar disponible y se reemplazó por rememberVectorPainter para indicar mejor que la API componible aprovecha internamente "remember" para conservar datos entre las composiciones (Ifda43)
- Se actualizó la API de Modifier.drawWithCache para exponer ContentDrawScope como alcance del receptor en lugar de DrawScope para proporcionar a las implementaciones la capacidad de reordenar los comandos de dibujo. Esto sirve para combinar o ajustar casos de uso en los que los píxeles de contenido deben procesarse primero para que el algoritmo del modo de variación correspondiente se aplique de forma correcta (Ie7ec8)
- Se movió SimpleContainer a PopupTestUtils.kt. (I78c57)
- ConsumedData ya no es una clase de datos. Para obtener más información, consulta https://android-review.googlesource.com/c/platform/frameworks/support/+/1455219. (I1737f)
- Se corrigió la posición del controlador Rtl. (I6e1e0)
- Se refactorizaron DrawScope y ContentDrawScope para que sean interfaces en lugar de clases abstractas.
- Se creó la implementación de CanvasDrawScope de DrawScope.
- Se refactorizaron implementaciones de DrawScope para usar CanvasScope.
- Se creó DrawContext para unir dependencias de DrawScope.
- Se quitaron los métodos obsoletos de DrawScope. (I56f5e)
- 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 dePointerInputFilter.onPointerEvent(...)
, ahora puedes mutar los datos de consumo de los objetos PointerEvents pasados. (I6acd0) - IntrinsicMeasureScope y MeasureScope se convirtieron en interfaces. (I1a087, b/170461665)
- Se ocultó la función de combinación para AlignmentLine. (I9da1a, b/170612900, b/170611568)
- Se agregó la capacidad de especificar información del inspector en un modificador compuesto. (Idee08, b/163494569)
- Se agregó la opción SelectAll al menú de selección. (Ief02b)
- Se actualizó DrawTransform.rotate para tomar un parámetro dinámico predeterminado del centro que coincida con la documentación.
- Se actualizó DrawScope.rotateRad a fin de consumir un Offset para que el punto dinámico coincida con otros métodos de transformación.
- La sobrecarga de DrawScope.rotateRad que consumía números de punto flotantes para la coordenada x e y del valor dinámico dejó de estar disponible
- (Iffcbb, b/170434992)
Correcciones de errores
- Se habilitó la comprobación de lint de API para MissingGetterMatchingBuilder en androidx. (I4bbea, b/138602561)
- Se agregó una prueba. (I6b8ae)
- 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 IME KeyboardCapitalization. (I8ac38)
- Se agregó la opción de teclado de una sola línea a CoreTextField. (I72e6d)
- Se movió SimpleContainer a PopupTestUtils.kt (I65c3e).
- 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 mejoró la interoperabilidad de Android al continuar enviando MotionEvents a vistas secundarias de Android que muestran un resultado falso para onTouchEvent en todas las acciones excepto
ACTION_DOWN
. (I94c5a, b/170320973) - Se creó Box como función intercalada. (Ibce0c, b/155056091)
Contribución externa
- Compatibilidad con diferentes configuraciones regionales para
AnnotatedString.capitalize
yAnnotatedString.decapitalize
. (I4aa7f)
Versión 1.0.0-alpha05
14 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha05
. La versión 1.0.0-alpha05 contiene estas confirmaciones.
Cambios en la API
- Se agregó una DSL para especificar la información de inspección. (Ic9a22)
- Se movió LongPress a Text. (Iff2bc)
- El objeto experimental Modifier.pointerInput suspende la entrada del modificador. (Ia77d2)
- Se agregaron las acciones de accesibilidad de copiar, pegar y cortar. (I6db4f)
- Se quitó el constructor público para AndroidOwner. (Iacaef)
- Las ventanas emergentes y los diálogos ahora heredan FLAG_SECURE desde la ventana superior. También se agregó la opción de configurar esto explícitamente. (I64966, b/143778148, b/143778149)
Los datos de consumo ahora son mutables. Además, las llamadas a funciones de extensión que generan consumo ahora no muestran un nuevo objeto PointerInputChange, sino que modifican el objeto PuinterInputChange proporcionado.
Este es el primero de 2 pasos para hacer que los datos de PointerEvent sean mutables y que el código de usuario no pueda editar otros datos del puntero. El segundo paso es quitar el tipo de datos que se muestra de
List<PointerInputChange>
dePointerInputFilter.onPointerEvent(...)
. (Id067e)Se inhabilitaron Selection en Text y un objeto Demo. (Ie7e97)
Ahora, onGloballyPositioned es una función intercalada (I15830).
Se cambió el nombre de OnPositionedModifier a OnGloballyPositionedModifier y onPositioned() a onGloballyPositioned(). (I587e8, b/169083903)
Se agregó la propiedad hasPendingMeasureOrLayout a Owner para indicarle al propietario si tiene derechos de diseño pendientes (I3d9f8, b/169038599)
Se agregó una API para que borre el enfoque de manera programática (Ie1dc2, b/161487952).
Se quitó
PointerInputFilter.onPointerInput(...)
.PointerInputFilter.onPointerEvent(...)
debe usarse en su lugar. (I6f04a)Cambios a Size
- Se quitó Size.getFliped.
- Se quitó Size.rem.
- Se quitó Size.truncDiv. (Ief44d, b/169790720)
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 agregó TextOverflow.None. Cuando el desbordamiento sea None, Text ya no lo controlará y notificará su tamaño real a LayoutNode. (I175c9, b/158830170)
Se cambió el nombre del parámetro scope dentro de AnnotatedString.Builder.addStringAnnotation a tag para mantener la coherencia de la API. (I7c8cb)
Correcciones de errores
- Se mejoró el rendimiento de desplazamiento de LazyColumn/Row al hacer menos trabajo de subcomposición en cada desplazamiento. Se agregó el nuevo método hasInvalidations() para la clase Composición. Se cambió el nombre del método hasPendingChanges() de Recomposer por hasInvalidations() (Ib2f32, b/168293643, b/167972292, b/165028371).
- 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)
- El orden de las llamadas a place() en los diseños personalizados ahora define el orden de dibujo para los elementos secundarios. (Ibc9f6)
- Se agregó compatibilidad con la conversión de AnnotatedString a SpannableString para la accesibilidad. (Ief907)
- Se agregaron stubs para las clases de Android que se encuentran en plataformas anteriores a fin de evitar el uso de reflejo cuando sea posible. (Ia1790)
- Error corregido: Si el teclado en pantalla hacía que la app tradujera, las coordenadas de entrada del puntero se convertían en errores (Ic4cec, b/163077821)
Versión 1.0.0-alpha04
1 de octubre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha04
. La versión 1.0.0-alpha04 contiene estas confirmaciones.
Cambios en la API
- Se agregó OwnerScope para permitir la recopilación de alcances de observación de diseños y dibujos cuando ya no son válidos. (Ic4cf8)
- Se agregó OnRemeasuredModifier y onSizeChanged() para recibir una devolución de llamada cuando cambió la medida y el tamaño del diseño del contenido, respectivamente. (I657cf, b/154108792)
- Se agregó la acción de semántica de clics largos. (I6281b, b/156468846)
- FocusManager ahora es privado. (I7872f)
Se actualizó la implementación para crear una implementación dedicada de DrawCacheModifier en lugar de agregar propiedades opcionales en DrawModifier.
Se actualizó la documentación para varios métodos. (Ibd166)
Se creó el intercalado de TextRange para evitar la creación de objetos. (Id034b)
Ya no se pueden leer PlacementScope#parentWidth ni PlacementScope#parentLayoutDirection desde el bloque de ubicación de un diseño personalizado. (Icc1ae, b/168295623)
Se agregó AccessibilityScrollState a las propiedades de semántica. (Ifeda9)
Se introdujo Modifier.drawWithCache para admitir la creación de un objeto de dibujo que recree condicionalmente dependencias que dependan de información de tamaño/estado. (I376dc)
Se quitó ParagraphConstraints. Ahora, el ancho se pasa directamente al párrafo. (Ica712)
Correcciones de errores
- Se actualizaron varias APIs de gráficos.
- Se actualizaron las API de transformación de escalamiento y rotación a fin de consumir un solo parámetro de compensación para representar la coordenada dinámica, en lugar de parámetros flotantes separados para las coordenadas x/y en DrawScope y DrawTransform.
- Se quitaron los métodos Rect.expandToInclude y Rect.join.
- Se actualizó la documentación de Radius para indicar el óvalo además del elíptico.
- Se agregó documentación para indicar que el constructor público para la clase de Radius intercalado no se debe llamar directamente, sino que se debe crear una instancia de los objetos Radius a través de sus constructores de funciones.
- Se quitaron las API de RoundRect para consultar topRight, bottomRight, bottomCenter, etc.
- Rect.shift dejó de estar disponible y se reemplazó por Rect.translate.
- Se quitaron las API de RoundRect.grow y Rect.shrink.
- Se cambió el nombre de RoundRect.outerRect a Rect.boundingRect.
- Se quitaron los métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect y Rect.isStadium.
- Se cambió el nombre de RoundRect.longestSide a RoundRect.maxDimension.
- Se cambió el nombre de RoundRect.shortestSide a RoundRect.minDimension.
- Se modificó RoundRect.center para que sea una propiedad en lugar de una función.
- Se actualizó el constructor RoundRect para consumir propiedades de Radius en lugar de parámetros individuales para valores de radio x/y.
- Se quitaron las API de tamaño que asumían que se trataba de un rectángulo con el origen en 0,0.
- Se agregó una API destructiva a Radius.
- Se migraron varias funciones de extensión de RoundRect para que sean propiedades.
- (I8f5c7, b/168762961)
- foundation.Box dejó de estar disponible. Usa foundation.layout.Box en su lugar. (Ie5950, b/167680279)
- Se cambió el nombre de Stack a Box. La función Box anterior dejará de estar disponible y se usará la nueva función Box en compose.foundation.layout. El comportamiento de la nueva función Box es apilar elementos secundarios uno encima de otro cuando existen varios, a diferencia de la anterior, cuyo comportamiento era similar al de una columna. (I94893, b/167680279)
- Los parámetros de decoración de Box dejaron de estar disponibles. Si deseas incluir decoraciones o relleno en tu cuadro, utiliza modificadores (Modifier.background, Modifier.border, Modifier.padding). (Ibae92, b/167680279)
- Se actualizaron varias APIs 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 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).
- Quita SelectionContainer de Top para inhabilitar la selección predeterminada y evitar un comportamiento inesperado. Se puede usar SelectionContainer específicamente para ajustar el contenido que debe seleccionarse. (I8dfe0, b/158459594)
Versión 1.0.0-alpha03
16 de septiembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha03
. La versión 1.0.0-alpha03 contiene estas confirmaciones.
Cambios en la API
- Se quitaron las acciones de semántica de desplazamiento hacia adelante y hacia atrás. Se agregaron pasos a AccessibilityRangeInfo. (Ia47b0)
- Se quitó
onInvalidate()
deOwner
.OwnedLayer
ahora controla la invalidación. (Ica72b, b/162061312) Se quitaron métodos de operadores de la API de Size que consumen parámetros Offset. El resultado de estas operaciones no es claro y el tipo de resultado es inesperado. Por ejemplo, no es claro si el parámetro Offset de Size debería mostrar un desplazamiento o un resultado de tamaño con la diferencia.
También se quitaron los métodos obsoletos de la clase Size. (Iec902, b/166514214)
Correcciones de errores
- Se implementó una corrección para los elementos de LazyColumn que, a veces, se presentaban de forma incorrecta y provocaban fallas en algunas condiciones (Ibcf17, b/163066980, b/165921895)
- DpConstraints y las API que usaban esas restricciones dejaron de estar disponibles. (I90cdb, b/167389835)
- Se trasladó
createAndroidComposeRule
yAndroidInputDispatcher
desdeandroidx.ui.test.android
aandroidx.ui.test
. (Idef08, b/164060572) - Se cambiaron de manera coherente los nombres de los usos de Gravity por Align o Alignment en las APIs de diseño (I2421a, b/164077038)
- Se agregaron onNode y otros métodos globales a ComposeTestRule, ya que los actuales dejarán de estar disponibles. (Ieae36)
Versión 1.0.0-alpha02
2 de septiembre de 2020
Lanzamiento de androidx.compose.ui:ui-*:1.0.0-alpha02
. La versión 1.0.0-alpha02 contiene estas confirmaciones.
Cambios en la API
- Quita la devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (If654e, b/166106882)
- Se agregó compatibilidad con parámetros de tipo de relleno en rutas de acceso de gráficos vectoriales para admitir recortes de formas según las reglas de relleno de la ruta de acceso pares, impares o distintas de cero. (I43dd2)
- El tiempo de actividad y la velocidad ahora son clases intercaladas. (I48f4a)
- Ahora la duración es una clase intercalada. (I565eb)
- Agrega una devolución de llamada para notificar al propietario cuando cambian los límites de LayoutNode. (Ic40b3)
Se corrigió el error por el que el constructor de la función Rect con desplazamiento y radio creaba el Rect en el orden de izquierda, derecha, arriba, abajo en lugar de izquierda, arriba, derecha, abajo.
Se quitaron los métodos complementarios obsoletos en Rect y se reemplazaron por los constructores de funciones.
Se agregaron pruebas para verificar los métodos en Rect.kt (I08460, b/165822356).
Correcciones de errores
- Se agregó MutableRect, un rectángulo que se puede modificar. (I71bd2, b/160140398)
- Se reemplazó Matrix4 con Matrix. Se quitaron todas las otras partes del paquete de vectormath. (Ibd665, b/160140398)
La convención de llamada para función de componibilidad cambió. 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)
Se corrigió la falla que se producía cuando se enviaba a un PointerInputFilter que provocaba que el PointerInputFilter se quitara de forma síncrona (I58f25)
Versión 1.0.0-alpha01
26 de agosto de 2020
Lanzamiento de androidx.compose.ui:ui-*: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.ui:ui-*:0.1.0-dev17
. La versión 0.1.0-dev17 contiene estas confirmaciones.
Cambios en la API
- El objeto
emitView
dejó de estar disponible. En su lugar, si fuera posible, usaAndroidView
para emitir objetos Views dentro de Compose. Ten en cuenta que la composición directa de objetos Views y ViewGroups no se admitirá en el futuro, a menos que estos sean hojas en el árbol de la composición. En ese caso, esto se logra mediante AndroidView. (I29b1e, b/163871221) FocusState2
dejó de estar disponible y se reemplazó porFocusState
. (Ia8b79, b/160822876, b/160923332)- Se quitaron las sobrecargas de AndroidView obsoletas. (I946b9, b/163802393)
- Las emisiones personalizadas ahora pueden declarar que uno o más de sus métodos set pueden omitirse y reescribirse de forma independiente de la emisión. (Ibbd13)
Se cambiaron las clases de Vector para que ya no sean clases de datos, dado que se usa la misma instancia de objeto para la composición.
Se agregó la marca mutableStateOf en VectorPainter para volver a dibujar condicionalmente si cambia el contenido del vector.
Se refactorizó la instancia de VectorComponent para que forme parte de VectorPainter, ya que se vuelve a usar en todas las composiciones.
Se actualizaron GroupComponent y PathComponent para que sus campos de nombre puedan mutar (Ieae45, b/151378808).
Se quitaron
onChildPositioned
yOnChildPositionedModifier
. En su lugar, los desarrolladores deben usaronPositioned
yOnPositionedModifier
en el diseño secundario. (I4522e, b/162109766)Offset se convirtió en una clase intercalada. (Iaec70)
Se agregó un parámetro modificador a SelectionContainer. (I4aada, b/161487952)
Se quitó el elemento obsoleto FocusModifier. (I0b4ba, b/160922116, b/160821157, b/162441435, b/160822875, b/160921940)
Se agregó la lambda
mergePolicy
aSemanticsPropertyKey
. 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)Constraints ahora es una clase intercalada. (I88736)
Se agregó FocusManager, que quita la lógica de enfoque común de AndroidComposeView. (I528ef, b/161487952, b/162206799)
Se actualizaron los nombres de PointerEventPass para la versión alfa. (Ifda6f)
IntOffset ahora es una clase intercalada. (Iac0bf)
IntSize ahora es una clase intercalada. (I2bf42)
Se cambió el nombre de
PlacementScope.placeAbsolute()
aPlacementScope.place()
, y el delPlacementScope.place()
anterior aPlacementScope.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)AlertDialog ahora usa FlowRow para los botones. (I00ec1, b/161809319, b/143682374)
Algunas herramientas de prueba ya no son públicas porque no están en el lugar correspondiente. Se harán públicas en el futuro. (I32ab1)
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 quitó KeyEvent2 porque era obsoleto. En su lugar, usa KeyEvent. (Ied2d0, b/162097587)
KeyEvent tiene una propiedad Unicode que se puede usar para obtener el carácter Unicode generado por la combinación especificada de tecla y estado de la tecla meta. (If3afc)
Se hizo una API de habilitación con el evento personalizado DelayUp y las clases relacionadas, ya que es muy probable que se modifiquen (I56d6f)
Se quitaron 2 PointerEventPasses que ya no son necesarios. (I3dd9d)
Se agregaron los parámetros color, shadow y TextDecoration a Paragraph.paint. Esta función sirve para evitar la recreación innecesaria de Paragraph (I81689)
Correcciones de errores
- 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 las llamadas a FrameManager obsoletas.
Se modificaron las APIs de composición interna para reducir la sobrecarga para realizar el seguimiento de los objetos de estado, como
mutableStateof()
(I80ba6).Se quitaron VerticalScroller y HorizontalScroller. En su lugar, usa ScrollableColumn/Row. Se quitó Modifier.drawBackground. Usa Modifier.background. (I73b0d, b/163019183)
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 componible
state { ... }
dejó de estar disponible y se reemplazó por cualquier llamada explícita aremember { mutableStateOf(...) }
por motivos de claridad. Con esto, se reduce la superficie general de la API, así como la cantidad de conceptos para la administración de estados, y se hace coincidir el patrónby 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)
Versión 0.1.0-dev16
5 de agosto de 2020
Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev16
. La versión 0.1.0-dev16 contiene estas confirmaciones.
Cambios en la API
- OnChildPositioned dejó de estar disponible. En su lugar, usa OnPositioned en el elemento secundario. (I87f95, b/162109766)
- SetViewContent dejó de estar disponible. En su lugar, usa setContent. (I7e497, b/160335130)
- Se agregó la API de AndroidViewBinding para aumentar y componer los recursos de diseño según ViewBinding. (I081c6)
- KeyEvent reemplazó a KeyEvent2. (I2d770, b/162097585)
- Se agregó compatibilidad con la tecla de hardware Alt. (I9036b)
- FocusManager ya no está disponible. En su lugar, usa Modifier.focus(), Modifier.focusObserver() y Modifier.FocusRequester(). (I74ae4, b/162211322)
- loadVectorResource admite atributos trimPath. (I808fe)
- Se movió diálogo a la IU. (I47fa6)
- Se quitaron 2 PointerEventPasses que ya no son necesarios. (I33ca7)
- Se implementó PointerInteropModifier, que permite recibir MotionEvents e interactuar con Compose como si se tratara de la implementación de una vista de Android. (Ieb08c)
- Se quitó el modificador de etiquetas obsoleto. En su lugar, usa layoutId. (Idaa05, b/162023919)
- Se actualizaron las APIs 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)
- Compatibilidad con el recorte de ruta de acceso en gráficos vectoriales. (Ie16c9, b/158188351)
- Se agregó Modifier.layout(), que permite crear un modificador de diseño personalizado de forma práctica (I73b69, b/161355194).
- Se agregó una nueva API de AndroidView, y las que ya existen dejaron de estar disponibles. (I5bcfd)
- 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
, el cual interrumpe la cadena y es más difícil de leer (Iedd58, b/161529964). - Se agregaron subclases View de [Abstract]ComposeView para alojar contenido de Compose en una jerarquía de vistas (I46357)
Row
yColumn
ahora son funciones intercaladas, lo que reduce en forma significativa la sobrecarga asociada a su uso. (I75c10)- Se agregó SubcomposeLayout. Se trata de un elemento primitivo de bajo nivel que permite componer los elementos secundarios durante la medición si queremos usar algunos valores disponibles más adelante durante la medición de la composición del subárbol. Por ejemplo, WithConstraints no se implementa mediante SubcomposeLayout. (I25cc8)
- 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) - Los MotionEvents se pasaron de Android a Compose y nuevamente a Android. (I14be8, b/158034713)
- Se quitó dropdownPopup. (I00430)
- Se corrigió la posición de la ventana emergente en las pantallas cortadas. (Idd7dd)
- Se agregó una acción de accesibilidad para obtener TextLayoutResult. (I9d6e6)
- Se agregó remeasurementModifier, que permite volver a medir el diseño de forma síncrona. 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)
- Se quitó getLineEllipsisOffset/getLineEllipsisCount. En su lugar, usa getLineVisibleEnd/getLineEnd/isLineEllipsized. (I85aa2)
- Se agregaron algunas marcas/anotaciones a fin de aplicar prácticas recomendadas. (I66b20)
- Se expusieron más APIs de líneas en TextLayoutResult (I79bd2)
- Ahora se puede acceder mediante Foo.VectorConverter a los convertidores vectoriales para convertir unidades integradas (p. ej., Dp.VectorConverter, Color.VectorConverter, Float.VectorConverter, etc.) (I3e273).
Correcciones de errores
- Se abordaron correcciones amplias de API (I077bc).
- Se quitó la interfaz OffsetBase sin usar.
- Se alinearon las clases Offset y IntOffset a fin de tener una superficie de API coherente.
- Se cambió el nombre de IntOffset.Origin por IntOffset.Zero para que sea coherente con la API de Offset.
- 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.
- 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.
- Se cambió el nombre de las enumeraciones ClipOp para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones FilterQuality para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones StrokeJoin para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PointMode para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PaintingStyle para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones PathFillType para que lleven mayúsculas en la primera letra de cada palabra.
- Se cambió el nombre de las enumeraciones StrokeCap para que lleven mayúsculas en la primera letra de cada palabra.
- Se actualizó la implementación de DrawCache para que deje de usar parámetros lateinit.
- Se actualizó DrawScope a fin de que deje de usar la delegación lazy para los parámetros internos fillPaint y strokePaint.
- Se actualizó el objeto Image que admite composición a fin de evitar el uso de Box y lograr una sobrecarga menor.
- Se actualizó la clase Outline para que tenga anotaciones @Immutable.
- Se actualizó PathNode para que tenga anotaciones @Immutable en cada instrucción de la ruta de acceso.
- Se actualizó la subcomposición de Vector a fin de quitar verificaciones condicionales redundantes de igualdad dado que compose ya las administra.
- Los métodos de construcción complementarios de Rect dejaron de estar disponibles y se los reemplazó por constructores de funciones.
- Se actualizaron las clases Brush y los constructores de funciones con las API de @Immutable y @Stable.
- Se actualizaron las enumeraciones VertexMode para que lleven mayúsculas en la primera letra de cada palabra.
- Se actualizó el método selectPaint de DrawScope a fin de reemplazar condicionalmente los parámetros de trazo en la pintura si estos cambiaron.
- 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 actualizó el consumo de la API de BlendMode de Compose para asignar correctamente entre los modos PorterDuff y BlendModes del framework de Android, según el nivel de API. Se introdujo la API de BlendMode#isSupported con el objeto de que funcione como una consulta de capacidad para determinar si BlendMode es compatible con el dispositivo antes de que se lo utilice (I0ef42)
- 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 quitó
SemanticsNodeInteraction.performPartialGesture
. Se usaSemanticsNodeInteraction.performGesture
en su lugar. (Id9b62) - Se cambió el nombre de
LazyColumnItems
aLazyColumnFor
. Se cambió el nombre deLazyRowItems
aLazyRowFor
. (I84f84) - Se acopló el paquete
foundation.shape.corner
afoundation.share
. (I46491, b/161887429) - Se cambió el nombre de
AndroidComposeTestRule
porcreateAndroidComposeRule
(I70aaf) - Se agregaron más APIs a
TextLayoutResult
. (Id7e04) - Se cambió el nombre de
FilledTextField
de Material porTextField
, y el delTextField
principal porBaseTextField
para 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).
Versión 0.1.0-dev15
22 de julio de 2020
Lanzamiento de androidx.compose.ui:ui-*:0.1.0-dev15
. La versión 0.1.0-dev15 contiene estas confirmaciones.
Actualización de dependencias
- Para usar la versión
0.1.0-dev15
de Compose, deberás actualizar tus dependencias de acuerdo con los nuevos fragmentos de código que se muestran más arriba en Cómo declarar dependencias.
Cambios en la API
- El objeto FocusModifier dejó de estar disponible y se reemplazó por los elementos Modifier.focus, Modifier.focusRequester y Modifier.focusObserver. FocusState y FocusDetailedState dejaron de estar disponibles y se los reemplazó por FocusState2 (I46919, b/160822875, b/160922136).
- Se agregó un modificador para observar el cambio de estado del enfoque. (I05866, b/160924455, b/160923326)
- Se agregó un modificador para solicitar cambios de enfoque (I8dd73, b/161182057, b/160924778).
- Se ajustó el menú de la barra de herramientas para mostrar los botones Copiar, Cortar y Pegar de forma correcta. (Id3955)
- 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ó el objeto Modifier.focus que reemplaza al elemento FocusModifier. (Ib852a, b/160924778)
- Se agregó el objeto FloatingToolbar para la selección del elemento TextField. (Ie8b07)
- Se agregó una anotación de API experimental para las API relacionadas con entradas clave. (I53c0a)
- Se agregó una anotación de API experimental para todas las APIs relacionadas con el enfoque (I53b24, b/160903352).
- Se agregó el objeto FocusState2 que reemplazará al elemento FocusDetailedState. (I0a3ba, b/160822595)
- Se agregó el elemento ExperimentalFocus, que es una anotación @OptIn para la API de Focus (I1544b, b/160820961)
- 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)
- El aplicador ahora requiere un método clear() para desechar las composiciones. (Ibe697)
- 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 creó la API experimental LayoutNode. (I4f2e9)
Se agregaron métodos de copia a varios tipos de clases intercaladas, que incluye lo siguiente:
- Desplazamiento
- Tamaño
- Radio
- Movimiento
TransformOrigin
El método del objeto complementario Size.copy dejó de estar disponible para el método de copia de instancias (Ife290, b/159905651).
Los objetos Popups, Dialogs y Menus ahora heredan el elemento MaterialTheme contextual. (Ia3665, b/156527485)
Se cambió el nombre de TextDirection por ResolvedTextDirection. (I3ff38)
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).
Refactoriza el objeto SelectionHandles para reutilizar. (I420e0)
Se quitó el objeto Clickable. Usa el objeto Modifier.clickable. (I84bdf)
Se borraron los objetos TestTag y Semantics. En su lugar, usa Modifier.testTag y Modifier.semantics. (I15ff0, b/158841414)
Antes del cambio, el complemento del compilador de Compose interceptaría llamadas no triviales a los constructores dentro de una función @Composable si hubiese una. (I5205a, b/158123804)
Se cambió el nombre del objeto Modifier.tag por Modifier.layoutId para evitar confusiones con el elemento Modifier.testTag (I995f0)
El objeto Placeable#get(AlignmentLine) ya no muestra las posiciones Int de la línea de alineación como nulas. Si falta la línea de alineación consultada, se mostrará el objeto AlignmentLine.Unspecified. (I896c5, b/158134875)
Se agregó un parámetro modificable al elemento componible AndroidView (I48a88, b/158746303)
El elemento Semantics() dejó de estar disponible. En su lugar, usa el objeto Modifier.semantics(). (I72407, b/158841414)
Se agregó el elemento componible viewModel() que permite crear o conseguir el objeto ViewModel ya creado de manera similar a cómo funciona en las clases Activity o Fragment (I5fdd1).
Se reemplazó el uso del elemento IntPx con Int. Se reemplazó el objeto IntPxPosition con IntOffset. Se reemplazó el elemento IntPxSize con IntSize. (Ib7b44)
A fin de consolidar las clases utilizadas para representar la información de tamaño, se estandarizó el uso de la clase Size en lugar de PxSize. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar el ancho y la altura. (Ic0191)
A fin de consolidar las clases utilizadas para representar la información de posicionamiento, se estandarizó el uso de la clase Offset en lugar de PxPosition. Esto habilita las ventajas de una clase intercalada que permite empaquetar 2 valores de punto flotante para representar los desplazamientos x e y. (I3ad98)
Se reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. Se borró por completo la clase Px. (I3ff33)
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 componente TestTag dejó de estar disponible. En su lugar, usa Modifier.testTag. (If5110, b/157173105)
Se quitó la implementación no-op predeterminada del objeto ParentDataModifier#modifyParentData, ya que equivalía a no haber implementado la interfaz. (I0deaa)
Se quitó el elemento ScaleFit, que anteriormente había quedado obsoleto. En su lugar, usa el objeto ContentScale. (Ifbc5b)
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)
Se agregó el componente DropdownMenu en ui-material, una implementación del menú de Material Design (I9bb3d)
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 reemplazó el uso de la clase Px en varias clases de Compose como parte de un gran esfuerzo de refactorización para depender solo de los tipos Dp y primitivos para los parámetros de píxeles. (I57bff)
Modifier.semantics volvió a estar disponible a fin de permitir el uso de componentes de alto nivel. (I4cfdc)
Se consolidaron las implementaciones de CanvasScope, por lo que ahora solo quedaron los elementos DrawScope y ContentDrawScope. Se cambió el nombre del objeto CanvasScope a DrawScope. Se actualizó DrawScope para implementar la interfaz de Density y proporcionar LayoutDirection. Se borró la subclase DrawScope en ContentDrawScope. Se actualizaron Painter y PainterModifier de modo que ya no mantengan una propiedad RTL, ya que DrawScope la proporciona sin hacerlo manualmente (I1798e).
El objeto DoubleTapGestureFilter ahora desambigua el elemento SingleTapGestureFilter en todo el árbol. (If92b1)
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 modificó la API de los modificadores DrawLayer: se cambió el nombre del objeto outlineShape a shape y tiene el valor predeterminado de RectangleShape, ahora sin valores anulables. Se cambió el nombre del elemento clipToOutline a clip; se quitó el objeto clipToBounds, ya que es igual que clip == true con RectangleShape (I7ef11, b/155075735).
Se actualizaron las API de Compose de nivel superior que exponen un lienzo para mostrar el objeto CanvasScope en su lugar. Esto elimina la necesidad de que los consumidores mantengan sus propios objetos Paint. Para los usuarios que aún necesitan acceso a Canvas, 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 Canvas subyacente (I80afd)
Se modificó la API de WithConstraints con expresión lambda final. Ahora, en lugar de dos parámetros, tiene un alcance de receptor que, además de las restricciones y layoutDirection, brinda propiedades minWidth, maxWidth, minHeight y maxHeight en Dp. (I91b9a, b/149979702)
Se cambió el nombre del objeto LayoutModifier2 a LayoutModifier. (Id29f3)
Se quitó la interfaz de LayoutModifier obsoleta. (I2a9d6)
Las funciones de medición intrínseca en los objetos Layout y LayoutModifier2 ahora tienen un receptor IntrinsicMeasureScope que proporciona una API de consulta intrínseca con dirección de diseño propagada de forma implícita (Id9945)
Se pueden medir los elementos secundarios Layout y LayoutModifier con una dirección de diseño diferente. (Ibd731)
Se agregó el elemento Modifier.zIndex() para controlar el orden de dibujo de los elementos secundarios dentro del mismo diseño de nivel superior. Se cambió el nombre de la propiedad de elevación de DrawLayerModifier por shadowElevation, y esta propiedad ya no controla el orden del dibujo. Se cambió el orden de los parámetros de DrawShadow: el primer parámetro ahora es elevation y el segundo es shape, con una configuración RectangleShape predeterminada. (I20150, b/152417501)
Se quitaron los elementos onSizeChange y onPositionChange en Owner. (I5c718)
Se agregó el objeto Constraints2, una copia del elemento Constraints que solo admite valores de restricción Int, en lugar del parámetro IntPx. Se quitará el objeto IntPx y se asumirá que todas las restricciones de número entero son píxeles como Android.
- También se agregó el objeto IntSize, que finalmente reemplazará al elemento IntPxSize. (I4b43a)
Se permitió la creación de instancias de alineación con valores arbitrarios. Se agregaron alineaciones 1D. (Ia0c05)
El objeto alignToSiblings ahora acepta un elemento Measured en lugar del parámetro Placeable. (I5788d)
-
- Se cambió el nombre del objeto ScaleFit por ContentScale
- Se trasladó el elemento ContentScale del módulo ui-graphics al módulo ui-core a fin de quede ubicado en el mismo módulo que la API de Alignment.
- Se cambió el nombre del objeto FillMaxDimension por Crop.
- Se cambió el nombre del objeto FillMinDimension por Fit.
- Se cambió el nombre del objeto Fit por Inside para que coincidan mejor.
- Equivalentes de ImageView.ScaleType
- Se agregó documentación que indica que combinar Crop y Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_CROP, que el uso de Fit con Alignment.Center genera lo mismo que ImageView.ScaleType.FIT_CENTER, y que el uso de Inside con Alignment.Center genera lo mismo que ImageView.ScaleType.CENTER_INSIDE.
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)
Mejora la API de DrawModifier:
- Se creó el alcance del receptor para el objeto draw() ContentDrawScope.
- Se quitaron todos los parámetros de draw().
- El objeto DrawScope tiene la misma interfaz que el elemento CanvasScope anterior.
- ContentDrawScope tiene el método drawContent() (Ibaced, b/152919067).
Se agregaron los objetos positionInParent y boundsInParent para el elemento LayoutCoordinates (Icacdd, b/152735784)
Ahora, los objetos DrawLayerModifier y drawLayer() establecen de forma predeterminada los elementos clipToBounds y clipToOutline como falso. (I0eb8b, b/152810850)
Se cambió el nombre del objeto LayoutResult a MeasureResult. (Id8c68)
Se agregó LayoutModifier2, una nueva API para definir modificadores de diseño; LayoutModifier quedó obsoleto (If32ac).
Se reemplazaron el modificador y el operador por funciones de extensión (I225e4).
Se agregaron propiedades translationX/Y para 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 APIs de Layers para admitir la rotación y el escalamiento en un punto específico de una capa (Icf7c3).
Se agregaron OnPositionedModifier y OnChildPositionedModifier para reemplazar las funciones de componibilidad OnPositioned y OnChildPositioned (I2ec8f)
Se agregó el objeto LayerModifier, un modificador que permite agregar un elemento RenderNode a una capa. Permite configurar el recorte, la opacidad, la rotación, el escalamiento y las sombras. Reemplazará al objeto RepaintBoundary. (I7100d, b/150774014)
Se 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)
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 combinaron Density y DensityScope en una sola interfaz. En lugar de ambientDensity(), ahora puedes usar DensityAmbient.current. En lugar de withDensity(density), usa with(density). (I11cb1)
Se modificó el objeto LayoutCoordinates para que el elemento providedAlignmentLines sea un conjunto en lugar de un mapa y para que el objeto LayoutCoordinates implemente el operador get() a fin de recuperar un valor. Esto permite que los modificadores cambien con más facilidad uno o más valores del conjunto, sin que se cree una colección nueva para cada modificador. (I0245a)
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 creó la API de CanvasScope que une un objeto de Canvas para 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ó la API de MaskFilter sin usar, ya que se usa de manera limitada y no se optimiza para la aceleración de hardware en la mayoría de los casos de uso (I54f76).
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).
Se ingresaron parámetros rect opcionales adicionales en ImagePainter para admitir el dibujo de una subsección de ImageAsset subyacente. (I0ea9e)
Se agregó el objeto Unset Color para representar un valor sin configurar, sin el recuadro Colors. (If901a)
Se agregaron métodos de extensión Canvas.rotate y Canvas.scale para consumir coordenadas dinámicas opcionales para las 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ó el objeto Canvas.rotateRad a fin de que sea un método de extensión para mantener la coherencia. (Ibaca6)
Se creó la API de PixelMap para admitir consultas de información de píxeles desde un elemento ImageAsset. (I69ad6)
Se cambió el nombre del objeto toFrameworkRect/toFrameworkRectF por toAndroidRect/toAndroidRectF para que coincida con la convención de nomenclatura para las conversiones de objetos entre Compose y las APIs del framework de Android sobre las que están compiladas. También se actualizaron los documentos de estas API. (I86337)
Se agregó la API de VectorPainter a fin de reemplazar la API de subcomposición existente para gráficos vectoriales. El resultado de la subcomposición es un objeto VectorPainter, en lugar de un elemento DrawModifier. El objeto DrawVector anterior que admite composición dejó de estar disponible y se reemplazó por el elemento VectorPainter.
Se cambió el nombre de la API de Image(Painter) a PaintBox(Painter) Created Vector componible y que se comporta como el elemento Image componible, pero con un parámetro VectorAsset en lugar de un objeto ImageAsset (I9af9a, b/149030271).
Se cambió el nombre de Image a ImageAsset para diferenciar mejor entre los datos de Image y el próximo elemento componible Image, que se utiliza para participar en el diseño y dibujar contenido. Método de extensión _Body:Created en android.graphics.Bitmap, Bitmap.asImageAsset() para crear una instancia útil del objeto ImageAsset para combinar el desarrollo tradicional de aplicaciones para Android con el framework de Compose (Id5bbd).
Se agregó el objeto TextDirection.Content. (I48f36)
Se agregó el operador TextDecoration.plus. (I0ad1a)
De los valores de enumeración de TextDirectionAlgorithm, se quitó el objeto
Force
. (Icc944)Se cambió el nombre de TextDirectionAlgorithm a TextDirection. (I75ce8)
Se implementó el objeto LongPressAndDrag para la selección del elemento TextField. (I17919)
Se agregó el objeto AnnotatedString.getStringAnnotations que muestra todas las anotaciones dentro del rango (I1fa00)
Se cambió el nombre del paquete de androidx.ui.text por androidx.ui.intl dentro de Locale y LocaleList (I8132c).
El cursor de TextField tiene una animación intermitente. (Id10a7)
Cambio en la API: se cambió el nombre del objeto AnnotatedString(builder: Builder) a annotatedString(builder: Builder) (Ia6377)
Cambio en la API: se cambió el nombre del objeto AnnotatedString.Item por AnnotatedString.Range (I2d44d)
Se cambió el nombre del objeto AnnotatedString.Builder.addAnnotationString a addStringAnnotation. (I5059e)
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).
Se agregó el operador de adición para (Text/Paragraph/Span)Style, que delega a la función merge() (Ia1add)
El elemento FontWeight.lerp ya no se ajusta. Sigue siendo una clase de datos. (I521c2)
El constructor del elemento FontWeight ahora es público, ya no es una clase de datos. (Id6b1f)
Se agregaron los objetos getLineStart, getLineEnd, getEllipsisOffset y getEllipsisCount al elemento TextLayoutResult (Ibc801).
Se cambió el nombre del módulo ui-text a ui-text-core. (I57dec)
Se quitó la clase Size sin usar, ya que hay una clase Size duplicada en el módulo ui-geometry que se consume. (I1b602)
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 los parámetros paddings, border, shape y background al objeto Box. (I05027, b/148147281)
Correcciones de errores
- Se cambió el nombre de la devolución de llamada onFocusChange en los campos de texto a onFocusChanged. (Ida4a1)
- VerticalScroller y HorizontalScroller ya no están disponibles. Usa los elementos ScrollableColumn y ScrollableRow para la experiencia incorporada con los parámetros y el comportamiento de Column/Row, o los objetos Modifier.verticalScroll y Modifier.horizontalScroll en tu propio elemento. Asimismo, ScrollerPosition quedó obsoleto y se reemplazó con ScrollState'. (I400ce, b/157225838, b/149460415, b/154105299)
- Se cambió el nombre de
runOnIdleCompose
arunOnIdle
. (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 APIs doXYZ por el de performXYZ (I7f164)
- IU de Compose ahora admite compilación dentro del objeto ViewGroups sin requerir una nueva composición. Consulta el elemento ViewInteropDemo para ver un ejemplo. (I9ab0b, b/160455080)
- Se agregaron sortWith y removeRange a MutableVector (Icccf7).
- Se implementaron controladores de selección de arrastre para cambiar la selección del elemento TextField (I27032)
- Se quitó la clase intercalada Shader que une la clase de espera NativeShader. Se cambió el nombre del objeto NativeShader por Shader. La clase intercalada Shader unida no agregó ningún valor a la superficie de la API y era una clase intercalada, así que usa la clase NativeShader directamente. (I25e4d)
Se refactorizó el objeto PainterModifier para dejar de proporcionar escalamiento según las restricciones y el parámetro ContentScale especificados. Las implementaciones del objeto Painter deben escalar el contenido de su dibujo en función del tamaño especificado del elemento DrawScope en el que están dibujados.
Se corrigió el problema por el cual se ajustaba el tamaño del mapa de bits en caché del objeto VectorPainter a su configuración predeterminada, en lugar del tamaño determinado para dibujar.
Se actualizó el objeto ImagePainter a fin de escalar su contenido en lugar de depender del elemento PainterModifier para hacerlo en su nombre. (I6ba90)
Se agregó la función withFrameNanos de nivel superior para la sincronización de la animación (Ie34c5).
La anotación @Untracked dejó de estar disponible. Reemplázala con @ComposableContract(tracked=false). (Id211e)
androidx.ui.foundation.TextFieldValue y androidx.ui.input.EditorValue quedaron obsoletos. TextField, FilledTextField y CoreTextField que admiten composición y usan dicho tipo también quedaron obsoletos. En su lugar, usa androidx.ui.input.TextFieldValue. (I4066d, b/155211005)
Se corrigió el problema por el cual el envío de la entrada de un puntero causaba una falla si se quitaba el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió 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 el elemento PointerInputFilters mediante la subcomposición durante el envío. Ya se corrigió 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 separados para el radio en los ejes "x" e "y" (I46d1b).
El elemento componible Recompose 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
para 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. (Iede0b)
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 3 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: 1. El resultado de las comparaciones de parámetros se propaga a otras funciones que admiten composición mediante el gráfico de llamadas. Como resultado, se realizarán menos comparaciones en el tiempo de ejecución, se reducirá el tamaño de la tabla de ranuras y se omitirán más funciones que admiten composición que antes no se omitían. 2. Los parámetros que se determinan "estáticos" en el tiempo de compilación ya no se comparan ni se almacenan en el tiempo de ejecución. Esto reduce la cantidad de comparaciones y el tamaño de la tabla de ranuras. 3. Se utiliza la estructura para el flujo de control del cuerpo de las funciones a fin de minimizar la cantidad de grupos que se generan. Esto reduce el tamaño de la tabla de ranuras y da como resultado menos trabajo para el tiempo de ejecución. 4. Si los parámetros de envío y recepción para las funciones no se utilizan dentro del cuerpo de la función, no se los incluye para determinar si se puede omitir la función.
La mayoría de los cambios rotundos se realizaron en las API a las que el compilador se orienta de manera directa, y el uso típico de Compose no se verá afectado: 1. Se quitó el objeto Composer::startExpr. 2. Se quitó el objeto Composer::endExpr. 3. Composer::call quedó obsoleto. 4. Se quitaron las sobrecargas del objeto
key
que no son varargs. Usa la versiónvararg
en el futuro. 5. La anotación Pivotal quedó obsoleta. Usa el objetokey
como reemplazo. 6. Se cambió el objeto ScopeUpdateScope::updateScope para esperar un elemento Function3 en lugar de Function1. 7. Se actualizaron los objetos restartableFunction y restartableFunctionN para que incluyan parámetros adicionales de tiempo de compilación. (I60756, b/143464846)Se quitaron los modificadores obsoletos LayoutAlign. (I10877)
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 reemplazó ButtonStyle con funciones distintas y se quitó la sobrecarga de texto (string). Consulta muestras actualizadas para obtener información de uso. (If63ab, b/146478620, b/146482131)
Cambios rotundos en la API de ambients. Consulta el registro y la documentación de
Ambient<T>
para obtener más detalles (I4c7ee, b/143769776).Se cambió el comportamiento del objeto TextDirection predeterminado, según lo establecido por el elemento LayoutDirection. Por ejemplo, si LayoutDirection es de derecha a izquierda, el objeto TextDirection predeterminado también lo será. Anteriormente, era TextDirection.ContentOrLtr/Rtl (I4e803).
Corrección de errores: cuando el tamaño y el estilo de la fuente estaban anidados en un objeto AnnotatedString, no se procesaba correctamente el texto. (I77a9d)
Agrega los parámetros que se usan con frecuencia al objeto 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 puede proporcionar directamente los parámetros: Text(textAlign = TextAlign.Center). (I82768)
Se cambió el nombre del módulo ui-android-text a ui-text-android (I68cbe).