O Google tem o compromisso de promover a igualdade racial para as comunidades negras. Saiba como.

Compose Foundation

Guia do usuário  Amostra de código (link em inglês)
Crie aplicativos do Jetpack Compose com blocos de construção prontos e amplie a base para criar suas próprias peças de sistema de design.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
1º de outubro de 2020 - - - 1.0.0-alpha04

Estrutura

O Compose é uma combinação de sete IDs de grupos do Maven em androidx. Cada grupo contém um subconjunto direcionado de funcionalidades, cada um com um conjunto próprio de notas da versão.

Esta tabela explica os grupos e contém links para cada conjunto de notas da versão.

GrupoDescrição
compose.animationCrie animações nos aplicativos Jetpack Compose para enriquecer a experiência do usuário.
compose.compilerTransforme funções @Composable e ative otimizações com um plug-in do compilador Kotlin.
compose.foundationCrie aplicativos do Jetpack Compose com blocos de construção prontos e amplie a base para criar suas próprias peças de sistema de design.
compose.materialCrie IUs do Jetpack Compose com componentes do Material Design prontos para uso. Este é o ponto de entrada de nível mais alto do Compose, projetado para fornecer componentes que correspondam aos descritos em www.material.io.
compose.runtimeElementos fundamentais do modelo de programação e do gerenciamento de estado do Compose e do ambiente de execução principal do plug-in Compose Compiler.
compose.uiComponentes fundamentais da IU do Compose necessários para interagir com o dispositivo, incluindo layout, desenho e entrada.
iuFunciona com a biblioteca Jetpack Compose.

Declarar dependências

Para adicionar uma dependência ao Compose, adicione o repositório Maven do Google ao seu projeto. Leia Repositório Maven do Google para ver mais informações.

Adicione as dependências dos artefatos necessários no arquivo build.gradle para seu app ou módulo:

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

android {
    buildFeatures {
        compose true
    }

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

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

Para ver mais informações sobre dependências, consulte Adicionar dependências de compilação.

Feedback

Seu feedback ajuda a melhorar o Jetpack. Avise se você descobrir novos problemas ou tiver ideias para melhorar esta biblioteca. Consulte os problemas existentes (link em inglês) nesta biblioteca antes de criar um novo. Adicione seu voto a um problema clicando no botão de estrela.

Criar novo problema

Consulte a documentação do Issue Tracker para saber mais.

Versão 1.0.0

Versão 1.0.0-alpha04

1º de outubro de 2020

Lançamento de androidx.compose.foundation:foundation:1.0.0-alpha04, androidx.compose.foundation:foundation-layout:1.0.0-alpha04 e androidx.compose.foundation:foundation-text:1.0.0-alpha04. A versão 1.0.0-alpha04 contém estas confirmações.

Mudanças na API

  • Stack foi renomeado como Box. O uso do foundation.Box anterior será suspenso e foi substituído pelo novo Box em compose.foundation.layout. O comportamento do novo Box quando tem vários filhos é empilhá-los um em cima do outro. Isso é diferente do Box anterior, que se comportava de maneira semelhante a Column (I94893, b/167680279).
  • Os parâmetros de decoração do Box estão obsoletos. Se você quiser ter decorações/padding na sua caixa, use Modifiers, como Modifier.background, Modifier.border, Modifier.padding (Ibae92, b/167680279).
  • Adição de uma nova classe LazyListState. Isso permite observar e controlar a posição de rolagem dos componentes LazyRow e LazyColumn. As instâncias podem ser criadas usando RememberLazyListState() e transmitidas para o parâmetro de estado do componente. Atualmente, o primeiro item visível e os deslocamentos podem ser observados nessa versão inicial (Ic7cb7, b/159307669).
  • A posição de lista atrasada e o deslocamento de rolagem agora são salvos e restaurados na recriação da Activity (Ie045f, b/15895890).
  • Adição de ação semântica de clique longo (I6281b, b/115646846).
  • Adição do utilitário MututorMutex para manter um único mutador de estado compartilhado ao longo do tempo e cancelar mutações conflitantes por prioridade (I3f975).
  • Anotação de rootAnimationClockFactory, transitionEnabled, blinkingCursorEnabled e textInputServiceFactory com @VisibleForTesting, tornando-as APIs internas e ocultando o kdoc delas (I554eb, b/168308412).
  • Remoção do parâmetro inlineContent do Text com String de entrada. Ele não será usado porque inlineContent precisa funcionar com AnnotatedString (Ief403).
  • As APIs Arrangement personalizadas obsoletas foram removidas (Ic576d, b/168297922, b/168297923).
  • O parâmetro unbounded foi adicionado aos modificadores do wrapContentSize, o que permite medir o elemento do layout com restrições máximas infinitas (I77951, b/158559319).
  • Evitamos importações estáticas de conteúdo de escopos de layout, por exemplo, alignWithSiblings no RowScope. A alternativa do escopo explícito precisa ser usada: with(RowScope) { Modifier.alignWithSiblings(FirstBaseline) } (I216be, b/166760797).

Correções de bugs

  • Atualização de várias APIs Graphics
    • As APIs de transformação de escala e rotação foram atualizadas para consumir um único parâmetro Offset para representar a coordenada dinâmica em vez de parâmetros de flutuação separados para as coordenadas x/y em DrawScope e DrawTransform.
    • Remoção dos métodos Rect.expandToInclude e Rect.join.
    • Documentação do Radius atualizada para informar oval, além de elíptico.
    • Adição da documentação para indicar que o construtor público da classe Radius in-line não deve ser chamado diretamente, mas os objetos Radius precisam ser instanciados por meio dos construtores de função deles.
    • Remoção das APIs RoundRect para consultar topRight, bottomRight, bottomCenter etc.
    • Substituição do Rect.shift obsoleto por Rect.translate.
    • Remoção das APIs RoundRect.grow e Rect.shrink.
    • Renomeação de RoundRect.outerRect para Rect.boundingRect.
    • Remoção dos métodos RoundRect.middleRect/tallMiddleRect/wideMiddleRect e Rect.isStadium.
    • Renomeação de RoundRect.longestSide para RoundRect.maxDimension.
    • Renomeação de RoundRect.shortestSide para RoundRect.minDimension.
    • Mudança de RoundRect.center para que seja uma propriedade em vez de uma função.
    • Atualização do construtor RoundRect para consumir propriedades do Radius em vez de parâmetros individuais para valores de raio x/y.
    • Remoção das APIs Size que pressupunham ser um retângulo com origem em 0,0.
    • Adição de uma API de destruição ao Radius.
    • Migração de várias funções de extensão RoundRect para serem propriedades
    • (I8f5c7, b/168762961).
  • Otimizações de desempenho para a rolagem LazyColumnFor/LazyRowFor, sem realizar recomposições desnecessárias durante cada rolagem (I64f65, b/168293643, b/167972292, b/165028371).
  • Correção da falha em LazyColumnFor/LazyRowFor depois de rolar a página e, em seguida, mudar os itens. Além disso, implementamos a rolagem automática para cima quando o item visível anteriormente foi removido, então não há mais a exibição de lacunas vazias no final (I220ab, b/161480164, b/167855468).
  • O aninhamento de item rolável nos mesmos contêineres de direção, como ScrollableContainer e LazyColumnFor, não é mais permitido. Isso nunca foi compatível e corrompia a rolagem e todo o atraso de composição dos itens de LazyColumnFor (I6e101).
  • Atualização de várias APIs Graphics
    • Atualização das APIs DrawScope com métodos de transformação com escopo para indicar que a transformação só é aplicada dentro do callback e removida depois de ele ser invocado.
    • Atualização da documentação do clipPath para se referir ao Path em vez do retângulo arredondado.
    • Correção do espaçamento na documentação para o parâmetro correto em clipPath.
    • Renomeação de DrawScope.drawCanvas como drawIntoCanvas e remoção do parâmetro de tamanho.
    • Renomeação de parâmetros dx/dy no método de encarte como horizontal e vertical.
    • Adição de sobrecarga do encarte, que fornece o mesmo valor de encarte a todos os quatro limites.
    • Remoção da documentação sobre o método do encarte indicando que o encarte seria aplicado a todos os quatro lados.
    • Atualização da documentação da classe Rect.
    • Atualização de comentários sobre os parâmetros Rect para corresponder ao estilo kdoc.
    • Remoção de Rect.join e Rect.expandToInclude.
    • Criação de sobrecarga para Rect.translate(offset) e para o Rect.shift obsoleto
    • (If086a, b/167737376).
  • Adição de AccessibilityScrollState às propriedades semânticas (Ifeda9).
  • O TextRange se torna in-line para evitar a criação de objetos (Id034b).
  • O ParagraphConstraints foi removido. Agora, a largura é transmitida diretamente para o Paragraph (Ica712).

Versão 1.0.0-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.foundation:foundation:1.0.0-alpha03, androidx.compose.foundation:foundation-layout:1.0.0-alpha03 e androidx.compose.foundation:foundation-text:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Mudanças na API

  • O InnerPadding foi renomeado como PaddingValues (I195f1, b/167389171).
  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).
  • Um parâmetro de alinhamento foi adicionado à pilha, o que permite especificar o alinhamento padrão para todos os filhos da pilha (Ie80ca, b/164085265).

Correções de bugs

  • O DpConstraints e as APIs que o usavam estão obsoletos (I90cdb, b/167389835).
  • Os parâmetros minWidth e maxWidth de widthIn foram renomeados como min e max. O mesmo ocorreu para preferredWidthIn, heightIn, preferredHeightIn (I0e5e1, b/167389544).
  • Adição de onNode e de outros métodos globais na ComposeTestRule, porque os atuais se tornarão obsoletos (Ieae36).
  • Correção de cálculos de tamanho e posição em GestureScope, o que causava, entre outros, a geração de gestos de deslizar inválidos (Iaf358, b/166589947).
  • createAndroidComposeRule e AndroidInputDispatcher foram movidos de androidx.ui.test.android para androidx.ui.test (Idef08, b/164060572).

Versão 1.0.0-alpha02

2 de setembro de 2020

Lançamento de androidx.compose.foundation:foundation:1.0.0-alpha02, androidx.compose.foundation:foundation-layout:1.0.0-alpha02 e androidx.compose.foundation:foundation-text:1.0.0-alpha02. A versão 1.0.0-alpha02 contém estas confirmações.

Correções de bugs

  • O TestUiDispatcher é marcado como experimental (Iae99d, b/161247083).
  • Adição de ManualFrameClock.hasAwaiters para ver se algo está aguardando um frame desse relógio, runWithManualClock como uma substituição de runBlocking ao executar testes que precisam de um ManualFrameClock e TestUiDispatcher.Main que fornece acesso fácil ao principal agente de IU nos seus testes.

    Exemplo:

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

    I0a85b, b/161247083

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.compose.foundation:foundation:1.0.0-alpha01, androidx.compose.foundation:foundation-layout:1.0.0-alpha01 e androidx.compose.foundation:foundation-text:1.0.0-alpha01. A versão 1.0.0-alpha01 contém estas confirmações.

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.foundation:foundation:0.1.0-dev17, androidx.compose.foundation:foundation-layout:0.1.0-dev17 e androidx.compose.foundation:foundation-text:0.1.0-dev17. A versão 0.1.0-dev17 contém estas confirmações.

Mudanças na API

  • O spacedBy Arrangement foi adicionado a Row e Column para ativar o posicionamento dos filhos de layout com um espaçamento fixo. O Arrangement alinhado também foi adicionado, para permitir que o posicionamento dos filhos de layout seja um ao lado do outro e alinhados a Row/Column de acordo com um Alinhamento. Os métodos anteriores Arrangement.Vertical#arrange e Arrangement.Horizontal#arrange foram suspensos, e a criação de Arrangements personalizados não será mais possível no futuro (I6733d, b/161985975).
  • Offset se tornou uma classe in-line (Iaec70).
  • Remoção dos callbacks onFocusChanged do TextField. Use Modifier.focusObserver (I51089, b/161297615).
  • Suspensão do uso de Modifier.drawBorder. Use Modifier.border. A classe de dados Border foi substituída por BorderDraw (I4257d, b/158160576).
  • Remoção de VerticalScroller e HorizontalScroller. Use ScrollableColumn/Row. Remoção de Modifier.drawBackground. Use Modifier.background (I73b0d, b/163019183).
  • Remoção de modificadores fillMax* marcados como obsoletos de LazyItemScope porque eles dificultam a adição correta desses modificadores em itens que não são filhos diretos de LazyColumnFor (Ifa78d).
  • Adição da implementação LazyColumn/LazyRow como DSL (I93cc6).
  • As restrições agora são uma classe in-line (I88736).
  • Adição da capacidade de dimensionar um layout para uma fração do espaço disponível usando os modificadores fillMaxWidth, fillMaxHeight e fillMaxSize (I945bb, b/161562591).

Correções de bugs

  • Adição de um parâmetro modificador a SelectionContainer (I4aada, b/161487952).
  • Adição do lambda mergePolicy a SemanticsPropertyKey. É possível usá-la para definir uma política personalizada para a mesclagem de semântica mergeAllDescendants. A política padrão será usar o valor pai se já estiver presente. Caso contrário, o valor filho (Iaf6c4, b/161979921).
  • PlacementScope.placeAbsolute() foi renomeado como PlacementScope.place(), e o PlacementScope.place() anterior foi renomeado como PlacementScope.placeRelative(). Por essa razão, o método PlacementScope.place() não espelhará de forma automática a posição em contextos da direita para a esquerda. Se você quiser o espelhamento, use PlacementScope.placeRelative() (I873ac, b/162916675).
  • Remoção do componente obsoleto FilledTextField. Use TextField para conseguir a implementação do Material Design no campo de texto preenchido (I5e889).
  • Adição do parâmetro backgroundColor ao LinearProgressIndicator e remoção do preenchimento interno de CircularProgressIndicator. Adição de novo ProgressIndicatorConstants.DefaultProgressAnimationSpec, que pode ser usado como AnimationSpec padrão ao animar o progresso entre os valores (If38b5, b/161809914, b/161804677).
  • O uso do composto state { ... } foi substituído pelas chamadas explícitas para remember { mutableStateOf(...) } para maior clareza. Isso reduz a plataforma geral da API e o número de conceitos de gerenciamento de estado e corresponde ao padrão by mutableStateOf() para delegação de propriedade de classe (Ia5727).
  • Renomeação de RRect para RoundRect para ajustar melhor os padrões de nomenclatura de composto Criação de construtores de função semelhantes para RRect e construtores de função RRect obsoletos (I5d325).
  • Remoção de onChildPositioned e OnChildPositionedModifier. Os desenvolvedores precisam usar onPositioned e OnPositionedModifier no layout filho (I4522e, b/162109766).
  • IntSize agora é uma classe in-line (I2bf42).
  • Pressionar a área vazia para editar (Ib1e5b).
  • Ocultar FloatingToolbar depois de tocar no texto (If4525).
  • Ocultar de FloatingToolbar ao atualizar a seleção (I8444c).
  • Desmarcar ao desfocar (I781a2).

Versão 0.1.0-dev16

5 de agosto de 2020

Lançamento de androidx.compose.foundation:foundation:0.1.0-dev16, androidx.compose.foundation:foundation-layout:0.1.0-dev16 e androidx.compose.foundation:foundation-text:0.1.0-dev16. A versão 0.1.0-dev16 contém estas confirmações.

Mudanças na API

  • Adição de LazyItemScope no parâmetro itemContent de listas Lazy. Ele fornece modificadores para preencher o tamanho máximo pai, que resolve o caso de uso quando o item precisa preencher a janela de visualização e o Modifier.fillMaxSize() normal não funciona, já que o item é medido com restrições de infinito (Ibd3b2, b/162248854).
  • A caixa de diálogo foi movida para a IU (I47fa6).
  • Adição de LazyColumnForIndexed/LazyRowForIndexed: versões de LazyColumnFor/LazyRowFor que fornecem índice e item no itemCallback. Ele é útil quando é preciso saber um índice atual além de um item atual (I65ff3).
  • Renomeação de Modifier.deternimateProgress para Modifier.progressSemantics (I9c0b4).
  • Renomeação de LazyColumnItems para LazyColumnFor. Renomeação de LazyRowItems para LazyRowFor (I84f84).
  • Adição de Marks/Annotations para seguir práticas recomendadas (I66b20).
  • O pacote foundation.shape.corner foi nivelado para foundation.share (I46491, b/161887429).
  • Adição de parâmetro de gravidade сrossaxis em LazyRowItems/LazyColumnItems. LazyRowItems/LazyColumnItems agora são compatíveis com agrupamento de conteúdo (Ib39fc).
  • Renomeação de ZoomableState para ZoomableController. Adição de compatibilidade com curva personalizada em smoothScale. Adição das funcionalidades enabled e onZoomStarted (If8b8f).
  • O FilledTextField do Material foi renomeado como TextField, e o BaseField de texto foi renomeado como BaseTextField para facilitar a descoberta e o uso da API mais simples desejada (Ia6242, b/155482676).
  • Remoção do AdapterList obsoleto. Use LazyColumnItems (I12b9b).
  • Renomeação de Modifier.drawBackground para Modifier.background (I13677).
  • Remoção da antiga DSL ConstraintLayout. Renomeação de ConstraintSet2 para ConstraintSet (If58d1, b/162450908).
  • Adição de Modifier.absoluteOffset() e Modifier.absoluteOffsetPx(). Ao contrário dos modificadores de deslocamento, os modificadores de deslocamento absoluto não serão espelhados automaticamente no contexto da direita para a esquerda (I3aa21).
  • Row e Column agora executam funções in-line reduzindo significativamente a sobrecarga de uso (I75c10).

Correções de bugs

  • Resolução de variados problemas de API (I077bc).
    1. Remoção da interface OffsetBase não utilizada.
    2. Alinhamento das classes Offset e IntOffset para que tenham uma superfície de API consistente.
    3. Renomeação de IntOffset.Origin para IntOffset.Zero para ser consistente com a API Offset.
    4. O método nativeCanvas foi movido da interface Canvas para que os consumidores possam criar as próprias instâncias.
    5. Criação da classe stub EmptyCanvas para refatorar DrawScope para ser um parâmetro não nulo em vez de lainit e garantir a não nulidade do campo.
    6. Renomeação das enumerações ClipOp para seguir o padrão Pascal Case.
    7. Renomeação das enumerações FilterQuality para seguir o padrão Pascal Case.
    8. Renomeação das enumerações StrokeJoin para seguir o padrão Pascal Case.
    9. Renomeação das enumerações PointMode para seguir o padrão Pascal Case.
    10. Renomeação das enumerações PaintingStyle para seguir o padrão Pascal Case.
    11. Renomeação das enumerações PathFillType para seguir o padrão Pascal Case.
    12. Renomeação das enumerações StrokeCap para seguir o padrão Pascal Case.
    13. Atualização da implementação de DrawCache para não usar mais parâmetros lateinit.
    14. Atualização de DrawScope para não usar mais delegação lenta para os parâmetros internos fillPaint e strokePaint.
    15. Atualização do composto Image para evitar o uso do Box e ter menos sobrecarga.
    16. Atualização da classe Outline para ter anotações @Immutable.
    17. Atualização de PathNode para ter anotações @Immutable em cada instrução de caminho.
    18. Atualização da subcomposição Vector para remover verificações condicionais redundantes para fins de igualdade, já que o composto já as processa.
    19. Suspensão do uso de métodos construtores de Rect em favor de construtores de função.
    20. Atualização de classes Brush e construtores de função com APIs @Immutable e @Stable.
    21. Atualização da enumeração VertexMode para seguir o padrão Pascal Case.
    22. Atualização do método DrawScope selectPaint para substituir condicionalmente os parâmetros de traço na pintura quando eles tiverem mudado.
    23. Atualização de Size para adicionar a desestruturação da API, renomear UnspecifiedSize para Unspecified e remover métodos não utilizados.
  • Adição de MonotonicFrameAnimationClock que permite usar um MonomonicFrameClock como um AnimationClockObservable para fazer a ponte entre os novos relógios e APIs baseados em corrotinas que ainda usam os relógios antigos baseados em callback.

    O equivalente de ManualAnimationClock do ManualAnimationClock agora é ManualFrameClock (I111c7, b/161247083).

  • Remoção de SemanticsNodeInteraction.performPartialGesture. Use SemanticsNodeInteraction.performGesture (Id9b62).

  • Renomeação de SemanticsNodeInteraction.getBoundsInRoot() como SemanticsNodeInteraction.getUnclippedBoundsInRoot() (Icafdf, b/161336532).

  • Atualização das APIs para compatibilidade da direita para a esquerda. LayoutDirectionAmbient foi adicionado e pode ser usado para ler e mudar a direção do layout. Modifier.rtl e Modifier.ltr foram removidos (I080b3).

  • Suspensão do uso de Modifier.plus. Use Modifier.then. "Then" tem um sinal mais forte de ordem, mas também proíbe o tipo Modifier.padding().background() + anotherModifier, que interrompe a cadeia e é mais difícil de ler (Iedd58, b/161529964).

  • Adição de SemanticsMatcher isFocused() e isNotFocused() (I0b760).

  • Adição de RemeasurementModifier. Ele permite que usuários meçam novamente o layout de maneira síncrona. Em geral, você não precisa dele, já que a nova medida de layout é feita automaticamente, mas o usamos em LazyColumnItems durante a rolagem (I5f331, b/160791058).

  • Agora, isSystemInDarkTheme sempre considera a configuração do tema escuro em todo o sistema e ignora o status de economia de energia antes de Q, seguindo as orientações mais recentes (I0c10c).

  • Suspensão do uso de OnChildPositioned. Use OnPositioned no filho (I87f95, b/162109766).

  • Renomeação de AndroidComposeTestRule como createAndroidComposeRule (I70aaf).

  • Adição da ação de acessibilidade para receber o TextLayoutResult (I9d6e6).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.foundation:foundation:0.1.0-dev15, androidx.compose.foundation:foundation-layout:0.1.0-dev15 e androidx.compose.foundation:foundation-text:0.1.0-dev15. A versão 0.1.0-dev15 contém estas confirmações.

Para usar a versão 0.1.0-dev15 do Compose, você precisará:

Atualização de dependências

  • Para usar a versão 0.1.0-dev15 do Compose, será necessário atualizar suas dependências de acordo com os novos snippets de código mostrados acima em Como declarar dependências.

Mudanças na API

  • Da mesma forma que o novo parâmetro em ScrollableColumn/ScrollableRow, LDyColumnItems/LDyRowItems agora também tem o parâmetro contentPadding, que permite adicionar um padding ao conteúdo depois que ele é cortado, o que não é possível apenas por meio de apenas um parâmetro modificador. Ele também permite adicionar um espaço somente antes do primeiro item/depois do último item (Ibc24e).
  • O callback onFocusChange em campos de texto foi renomeado como onFocusChanged (Ida4a1).
  • O uso do VerticalScroller e do HorizontalScroller foi suspenso. Use ScrollableColumn e ScrollableRow para ter uma experiência integrada com o comportamento e os parâmetros de Column/Row, ou Modifier.verticalScroll e Modifier.horizontalScroll no próprio elemento. De modo semelhante, o ScrollerPosition foi suspenso e substituído pelo ScrollState' (I400ce, b/157225838, b/149460415, b/154105299).
  • As APIs Modifier.draggable e Modifier.scrollable foram reformuladas. DragDirection foi removido e substituído por Orientation. O estado necessário para rolagem foi simplificado. ScrollableState foi renomeado como ScrollableController (Iab63c, b/149460415).
  • As propriedades de semântica de valor único agora usam um estilo de chamada. Por exemplo, "semantics {hidden = true}" agora é escrito como: semantics { hidden() } (Ic1afd, b/145951226, b/145955412).
  • Agora, os tamanhos de canto usados por RoundedCornerShape e CutCornerShape podem ser maiores que 50% (Id2340, b/160400213).
  • O parâmetro padrão ContentScale foi substituído pelo composto de imagem Inside para Fit. Isso foi feito para gerar o comportamento de escalonamento do Painter subjacente se o tamanho do layout for maior que o tamanho intrínseco do Painter, mantendo a proporção. Esse comportamento corresponde melhor às expectativas de oferecer tamanhos fixos à imagem, sem afetar o comportamento padrão se apenas o tamanho intrínseco for usado para calcular o tamanho do composto (I40ae3, b/159838006).
  • Use AnimationSpec em vez de AnimationBuilder nas APIs de nível superior para esclarecer o conceito de especificação de animação estática. Melhore a DSL de transição removendo o requisito de lambda para criar AnimationSpecs, como Tween, Spring. Em vez disso, os parâmetros do construtor são recebidos diretamente. Melhora na facilidade geral de uso do AnimationSpec para abrir construtores em vez de builders. Mudança na duração e no atraso de KeyFrames e Tween para Int. Isso elimina as transmissões desnecessárias e a sobrecarga de métodos (para oferecer compatibilidade com Long e Int) (Ica0b4).
  • Clickable foi removido. Use Modifier.clickable (I84bdf).
  • LazyRowItems foi adicionado, análogo a rolagem horizontal de LazyColumnItems (Ibbcf7).
  • Foram introduzidas estas APIs de animação sem estado de baixo nível Essas APIs (I63bf7).
  • androidx.ui.foundation.TextFieldValue e androidx.ui.input.EditorValue estão obsoletos. Os compostos TextField, FilledTextField e CoreTextField que usam esse tipo também foram suspensos. Use androidx.ui.input.TextFieldValue (I4066d, b/155211005).
  • Uso de IntPx substituído por Int e o de IntPxPosition por IntOffset. IntPxSize foi substituído por IntSize (Ib7b44).
  • androidx.ui.foundation.shape.RectangleShape foi removido. Use androidx.ui.graphics.RectangleShape (I94939, b/154507984).
  • Para consolidar o número de classes usadas para representar informações de tamanho, padronize o uso da classe Size em vez de PxSize. Isso fornece os benefícios de uma classe in-line para usar um long para empacotar dois valores de pontos flutuantes e representar a largura e a altura como flutuantes (Ic0191).
  • Para consolidar o número de classes usadas para representar informações de posicionamento, padronize o uso da classe Offset em vez de PxPosition. Isso fornece os benefícios de uma classe in-line para usar um long para empacotar dois valores de pontos flutuantes e representar os deslocamentos x e y como flutuantes (I3ad98).
  • Modifier.zoomable foi adicionado para a funcionalidade de fazer gesto de pinça para aplicar zoom (Id5d63).
  • O componente Toggleable foi suspenso. Use o Modifier.toggleable (I35220, b/157642842).
  • MutualyExclusiveSetItem foi suspenso. Use Modifier.selectable (I02b47, b/157642842).
  • A TestTag agora está obsoleta. Use Modifier.testTag (If5110, b/157173105).
  • O parâmetro fontWeight foi adicionado ao texto. Antes ele não havia sido adicionado por engano (I56937).
  • Substituição do uso da classe Px em várias classes Compose como parte do grande esforço de refatoração para depender apenas de tipos primitivos e de Dp para os parâmetros de pixel (I19d02).
  • O VerticalScroller agora fornece Column pronta para uso. O HorizontalScroller agora fornece Row pronto para uso (Ieca5d, b/157020670).
  • Substituição do uso da classe Px em várias classes Compose como parte do grande esforço de refatoração para depender apenas de tipos primitivos e de Dp para os parâmetros de pixel (Iede0b).
  • Adição de Modifier.indication ao pacote básico. Use-o para mostrar as indicações de pressionar/arrastar/outros nos elementos personalizados interativos (I8425f, b/1528287131).
  • O VerticalScroller e o HorizontalScroller agora são compatíveis com a rolagem reversa. O isReversed é definido em ScrollerPosition (I953bd).
  • Compatibilidade com a adição de compostos no layout de texto (I1373c).
  • Implementações consolidadas de CanvasScope para que agora exista apenas o DrawScope e o ContentDrawScope. CanvasScope foi renomeado como DrawScope. Atualização do DrawScope para implementar a interface de Density e fornecer a subclasse LayoutDirection. Exclusão da subclasse DrawScope em ContentDrawScope. Painter e PainterModifier foram atualizados para não manter mais uma propriedade RTL porque o DrawScope já a fornece sem ser de forma manual (I1798e).
  • Remoção da API DrawBackground obsoleta, que foi substituída pelas APIs de extensão drawBackground em Modifier. Implementações de drawBackground de cores, pincéis e pintura refatoradas para reduzir os caminhos de código, bem como remover o requisito para que o modificador seja criado como parte da composição (I0343a).
  • Atualização das APIs de composição de nível superior que expõem uma tela para expor o CanvasScope. Isso elimina a necessidade dos consumidores manterem seus próprios objetos do Paint. Os consumidores que ainda precisam de acesso a uma tela podem usar o método de extensão drawCanvas, que fornece um retorno de chamada para emitir comandos de desenho. (I80afd).
  • HorizontalScroller e VerticalScroller não restauram a posição de rolagem usando o estado da instância salva (Ia0fae, b/155075048).
  • O FocusManagerAmbient foi removido. Use FocusModifier.requestFocus para foco (Ic4826).
  • O layout da tabela foi removido temporariamente até ser possível disponibilizá-lo novamente com uma API atualizada (Id88a7).
  • Criação da API CanvasScope que envolve um objeto Canvas para expor uma API de desenho declarativa e sem estado. As transformações estão contidas no próprio escopo do receptor, e as informações de dimensionamento também têm escopo para os limites inseridos correspondentes. Não é necessário que um consumidor mantenha o próprio objeto de estado Paint para configurar operações de desenho.

    Inclusão do CanvasScopeSample, bem como atualização do app de demonstração para incluir uma demonstração gráfica declarativa (Ifd86d).

  • ColouredRect foi removido. Use Box com o modificador drawBackground (I983c7, b/154753731).

  • Adição da personalização de cor do cursor ao TextField (I6e33f).

  • Agora é possível ocultar/mostrar o teclado de software usando o SoftwareKeyboardController, que é entregue pelo callback onTextInputStarted (I8dc44, b/151860051).

  • TextFieldValue usado com TextField agora pode ser usado para recuperar atividades recreativas quando usado assim: var text by savedInstanceState(saver = TextFieldValue.Saver) { TextFieldValue() } (I5c3ce, b/155075724)

  • Adição de parâmetros comumente usados a Text(). Se você estiver criando um estilo de texto local para passar um pequeno número desses parâmetros, como Text(style = TextStyle(textAlign = TextAlign.Center)), poderá fornecer os parâmetros diretamente: Text(textAlign = TextAlign.Center) (I82768).

  • Substituição do parâmetro CoreTextField/TextField focusIdentifier pelo FocusNode para ser integrado ao subsistema de foco (I7ea48).

  • Atualização de TextField: na dimensão horizontal, ocupará todo o espaço disponível concedido a ele (Ib08df, b/154638552).

  • Adição de InteractionState e Interaction, facilitando a criação de componentes que reagem a mudanças de estado da IU, como pressionar e arrastar (Icfe25, b/15252426).

  • RectangleShape movido de androidx.ui.foundation.shape.* para androidx.ui.graphics.* (Ia74d5, b/154507984).

  • Todos os usos anuláveis de Color foram substituídos na API por não anuláveis e usam Color.Unset em vez de null (Iabaa7).

  • Atualização da API TextField: os callbacks onFocus e onBlur foram mesclados em um único callback onFocalChange com um parâmetro booleano (I66cd3).

  • ScaleFit foi renomeado como ContentScale. ContentScale foi movido do módulo ui-graphics para ui-core para ficar no mesmo módulo que a API Alignment. FillMaxDimension foi renomeado como Crop. FillMinDimension foi renomeado como Fit. Fit foi renomeado como Inside para melhor correspondência com os equivalentes a ImageView.ScaleType. Adicionada documentação que indica que a combinação de Crop e Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_CROP e que Fit usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.FIT_CENTER. Inside usado com Alignment.Center alcança o mesmo resultado que ImageView.ScaleType.CENTER_INSIDE (I45f09, b/152842521).

  • Remoção de ProvideContentColor. Basta usar ContentColorAmbient diretamente com Providers (Iee942).

  • Adição de um parâmetro de cor ao texto, permitindo modificar a cor do estilo do texto sem precisar unificá-lo manualmente ao estilo fornecido em um tema. (I41a66).

  • Melhorias na API DrawModifier:

    • Definição do escopo do receptor para draw() ContentDrawScope
    • Remoção de todos os parâmetros em draw()
    • DrawScope tem a mesma interface que o antigo CanvasScope
    • O ContentDrawScope tem o método drawContent() (Ibaced, b/152919067).
  • O ColouredRect foi suspenso. Use Box(Modifier.preferredSize(width, height).drawBackground(color)) (I499fa, b/152753731).

  • O sistema de temas de forma é atualizado de acordo com a especificação do Material Design. Agora você pode oferecer formas pequenas, médias e grandes para serem usadas pela maior parte dos componentes (Ifb4d1).

  • Substituição de modificador mais operador por funções de extensão de fábrica (I225e4).

  • O arrastável foi movido para o modificador (Id9b16, b/151959544, links em inglês)

  • Text foi movido de androidx.ui.core para o pacote androidx.ui.foundation (I87ce5).

  • Adição do parâmetro enabled a Checkbox, Switch e Toggleable (I41c16).

  • O Ripple agora é um modificador. Embora Clickable ainda não tenha sido convertido, o uso recomendado é Clickable(onClick = { ... }, modifier = ripple()) (Ie5200, b/151331852, b/1.50060763).

  • Adição da API VectorPainter para substituir a API de subcomposição já existente para gráficos vetoriais. O resultado da subcomposição é um objeto VectorPainter em vez de um DrawModifier. O uso de compostos DrawVector anteriores foi suspenso e substituído pelo VectorPainter.

    A API Image(Painter) foi renomeada como PaintBox(Painter). Criação do composto Vector que se comporta como o composto Image, mas com um VectorAsset em vez de um ImageAsset (I9af9a, b/149030271).

  • Criação do composto Image para processar dimensionamento/layout, além de desenhar um determinado ImageAsset na tela. Esse composto também pode ser usado para desenhar qualquer instância arbitrária do Painter que respeite o tamanho intrínseco dele e ofereça compatibilidade com um determinado tamanho fixo ou mínimo (Ibcc8f).

  • Agora, Button, FloatingActionButton e Clickable têm um parâmetro enabled separado. Alguns dos parâmetros no Button foram renomeados ou reordenados. (I54b5a).

  • Image foi renomeado como ImageAsset para diferenciar melhor os dados do Image e o futuro composto Image, usado para participar do layout e desenhar conteúdo.

    Criação do método de extensão em android.graphics.Bitmap, Bitmap.asImageAsset(), para criar uma instância de um ImageAsset útil para combinar o desenvolvimento de aplicativos para Android tradicionais com o framework do Compose (Id5bbd).

  • O composto DrawImage foi removido. Use o ImagePainter para desenhar uma imagem no layout existente ou SimpleImage para introduzir uma imagem que ocupe espaço (I595e1, b/114982727).

  • O componente Stack é compatível com a direcionalidade da direita para a esquerda (Ic9e00).

  • Adição de Icon, IconButton and IconToggleButton e remoção de AppBarIcon. Você pode substituir diretamente os usos existentes do AppBarIcon pelo iconButton. Agora, eles terão a área de toque correta. Consulte as amostras para ver informações de uso. Veja também os ícones do material fornecidos que podem ser usados diretamente com esses componentes. (I96849).

  • O composto DrawShape foi removido. Use o modificador DrawBackground (I7ceb2).

  • Adição do Adapterlist, um componente de lista de rolagem que apenas compõe e apresenta os itens visíveis. Os problemas conhecidos atualmente incluem o fato de que ele só é vertical e não processa integralmente todos os casos de mudança nos filhos. (Ib351b).

  • O componente de rolagem foi adicionado, o que permite a criação de rolagens/listas personalizadas (I5fd37).

  • Renomeação de Background para DrawBackground. Agora, ele é memorizado por padrão (Ia0bd3).

  • Adicionados parâmetros de padding, borda, forma e plano de fundo ao Box (I05027, b/148147281).

  • Adição do componente Canvas. Esse composto pode ocupar algum tamanho fornecido pelo usuário e permite que você desenhe com o CanvasScope (I0d622).

  • O modificador Border foi renomeado como DrawBorder (I8ffcc).

  • Adição de componente Box para combinar layouts e desenhar funcionalidades comuns (I6e2a7).

  • Agora, os controles de rolagem têm o comportamento do movimento de arremesso nativo do Android (I922af, b/147493715).

  • Substituição de DrawBorder pelo Border Modifier (Id335a).

  • Modifier.tag foi renomeado como Modifier.layoutId para evitar confusão com Modifier.testTag (I995f0).

  • O parâmetro de porcentagem ao criar diretrizes de ConstraintLayout foi renomeado para fração (Ida2db, link em inglês).

  • Foi adicionada a compatibilidade com margens de barreiras de ConstraintLayout (I47ffe link em inglês).

  • A compatibilidade com RTL em ConstraintLayout foi corrigida. APIs sem reconhecimento de RTL foram adicionadas (I3b1c7, link em inglês).

  • Uma nova DSL para ConstraintLayout foi adicionada. Consulte as amostras para ver mais detalhes (Icaa9a, link em inglês).

  • Adicionada a anotação @ExperimentalLayout. ConstraintLayout, FlowRow e FlowColumn agora são marcados com ela para sinalizar que as APIs serão modificadas (I412a8).

  • Adição de Modifier.padding(InnerPadding) (I94985, b/157133803, links em inglês).

  • Remoção de RowAlign e ColumnAlign obsoletos em Row e Column (If60d4, b/155858731).

  • Remoção da LayoutTag() obsoleta. Use a Modifier.tag(). Remoção do Modifier.matchParent() obsoleto. Use Modifier.matchParentSize() (If8044).

  • Adicionado o modificador de layout offsetPx, que pode ser usado para definir deslocamentos (dinâmicos) em px (I5af57).

  • O composto AlignmentLineOffset está obsoleto. Em vez disso, use o modificador relativePaddingFrom(). O composto CenterAlignmentLine removido (I60107, link em inglês).

  • Adição do modificador de layout defaultMinSizeConstraints, que define restrições de tamanho para o layout encapsulado apenas quando as restrições correspondentes recebidas não são especificadas (0 para restrições mínimas e infinito para restrições máximas) (I311ea, b/150460257).

  • Container foi removido. Use Box (Ibbc2b, b/151407926).

  • Remoção de modificadores de LayoutWidth/Height/Size obsoletos (Ib0bc1).

  • Adição de valores de parâmetro padrão para o modificador de deslocamento (I37f06, link em inglês).

  • Modificador de preenchimento simétrico adicionado (I39840).

  • O modificador LayoutAspectRatio obsoleto foi removido (I65a74).

  • Remoção dos modificadores do LayoutAlign obsoletos (I10877).

  • Correção de um bug nos modificadores de largura e altura que fazem o layout encapsulado ser medido sem restrições de eixo oposto (I210b8, b/154797971).

  • Adição dos parâmetros verticalGravity e horizontalGravity a Row e Column, respectivamente (I7dc5a).

  • Atualização de wrapContentWidth e wrapContentHeight para esperar um alinhamento vertical ou horizontal em vez de qualquer outro. O modificador de gravidade foi atualizado para aceitar o alinhamento vertical ou horizontal. Row, Column e Stack foram atualizados para ter compatibilidade com alinhamentos contínuos personalizados (Ib0728).

  • Alignment se tornou instanciável com valores arbitrários. Adição de Alignments 1D (Ia0c05).

  • EdgeInsets foi renomeado como InnerPadding. O parâmetro innerPadding de botões do Material Design foi renomeado como padding (I66165).

  • alignToSiblings agora aceita um Measured em vez de Placeable (I5788d).

  • Adição de modificadores para o dimensionamento de medidas intrínsecas e suspensão do uso dos componentes que realizavam essa tarefa (I8295d).

  • Adição de compatibilidade com a personalização de dimensões de filhos do ConstraintLayout (Idb1a5).

  • Os compostos Wrap e Center suspensos foram removidos (I29e23).

  • Adição de LayoutModifier2, uma nova API para definir modificadores de layout. LayoutModifier obsoleto (If32ac).

  • Os membros de RowScope e ColumnScope podem ser acessados fora de Row e Column (I3a641).

  • Container foi suspenso. Use Box (I675ce, b/151407926).

  • Adição do modificador LayoutOffset para ajustar a posição do layout (I0b8a3).

  • Compatibilidade inicial com o layout RTL no Compose (Ia5519).

  • Atualização do LayoutAlign para não preencher mais o espaço disponível (I2b14f).

  • Remoção do composto AspectRatio em favor do modificador. Os compostos FlexColumn, FlexRow e o modificador do Spacing obsoletos foram excluídos (Iec8a7).

  • Remoção do modificador LayoutInflexible de linha e coluna (I0d820).

  • Implemente as alças de seleção para arrastar para mudar a seleção de TextField (I27032).

  • Implementação de LongpressAndDrag para seleção de TextField (I17919).

Correções de bugs

  • FocusModifier está obsoleto e foi substituído por Modifier.focus, Modifier.focusRequest e Modifier.focusObserver. FocusState e FocusDetailedState estão obsoletos e foram substituídos pelo FocusState2 (I46919, b/160822875, b/160922136).
  • runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • Várias APIs de teste foram renomeadas para serem mais intuitivas. Todas as APIs findXYZ foram renomeadas como onNodeXYZ. Todas as APIs doXYZ foram renomeadas como performXYZ (I7f164).
  • Remoção do já obsoleto Modifier.ripple. Agora, o recurso de clique usa ondulação como indicação padrão (se você tiver um MaterialTheme {} definido no seu aplicativo). Assim, na maioria dos casos, você pode usar o recurso de clique e receber a indicação de ondulação gratuitamente. Se você precisar personalizar o parâmetro de cor/tamanho/delimitação para a ondulação, crie manualmente um RippleIndication e transmita-o para recurso de clique como o parâmetro de indicação (I663b2, b/155375067).
  • Remoção de APIs obsoletas de teste de tamanho (Iba0a0).
  • Criação da API experimental LayoutNode (I4f2e9).
  • A versão 1 do bloqueio da orientação de rolagem é implementada no Compose (I1ce7a, b/150289741).
  • Pop-ups, caixas de diálogo e menus agora herdam o MaterialTheme contextual (Ia3665, b/156527485).
  • O parâmetro de direção do layout foi removido do bloco de medida da função Layout(). No entanto, a direção do layout está disponível dentro do callback por meio do objeto do escopo da medida (Ic7d9d).
  • Adição de AbsoluteArrangement: permite a organização dos filhos dentro da linha sem espelhamento automático em RTL (I3a1df).
  • A anotação @Untracked foi suspensa. Substitua por @ComposableContract(tracked=false) (Id211e).
  • Antes da mudança, o plug-in do compilador do Compose interceptava chamadas a construtores dentro de uma função @Composable se houvesse um (I5205a, b/158123804).
  • Adição do composto viewModel(), que permite criar ou usar o ViewModel já criado de forma semelhante a como ele funciona em Activity ou Fragment (I5fdd1).
  • Classe Radius refatorada para ser uma classe in-line. Remoção dos métodos de criação complementares em favor do construtor de função com parâmetro padrão para que o raio ao longo do eixo y corresponda ao parâmetro obrigatório de raio do eixo x.

    Atualização de DrawScope.drawRoundRect para consumir um único parâmetro de raio em vez de dois valores de ponto flutuante separados para o raio ao longo dos eixos x e y (I46d1b).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel. Classe Px excluída na íntegra (I3ff33).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I086f4).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (Id3434).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I97a5a).

  • O cursor do TextField tem uma animação intermitente (Id10a7, link em inglês).

  • Os gestos parciais não exigem mais a transmissão de um GestureToken (Id7ae5).

  • Substituição do uso da classe Px em várias classes de composição como parte do grande esforço de refatoração para confiar apenas em tipos primitivos e de Dp para os parâmetros de pixel (I57bff).

  • O Modifier.semantics foi suspenso para permitir o uso de componentes de alto nível (I4cfdc).

  • AnnotatedString.Builder.addAnnotationString foi renomeado como addStringAnnotation (I5059e).

  • Atualização da API Alignment e adição de compatibilidade para alinhamento absoluto, que não espelha automaticamente no contexto RTL. (I38cd3).

  • Os filhos de Layout e LayoutModifier podem ser medidos com uma direção de layout diferente (Ibd731).

  • Introdução do parâmetro opcional rect extra a ImagePainter para permitir o desenho de uma subseção de ImageAsset subjacente (I0ea9e).

  • Correção de uma falha no Adapterlist ao remover itens (Ic64b0, b/153195921).

  • Mudamos a forma como medimos o primeiro layout colocado no bloco activity.setContent { }. Antes, ele era forçado a preencher toda a tela da atividade. Agora, se comporta como se você colocasse o layout dentro de uma pilha: ele pode ser menor que uma tela e será posicionado no canto superior esquerdo. Caso prefira o comportamento antigo, é possível aplicar Modifier.fillMaxSize() para seu layout (Ie88a7, b/153453714).

  • O módulo ui-text-compose foi renomeado como ui-text. O ui-text agora contém os compostos CoreText e CoreTextField (IB7d47).

  • O módulo ui-text foi renomeado como ui-text-core (I57dec).

  • Os compostos ui-framework/CoreText e CoreTextField foram movidos para o ui-text-compose. É recomendável incluir o ui-text-compose no seu projeto (I32042).

  • runOnIdleCompose e runOnUiThread agora são funções globais e não métodos em ComposeTestRule (Icbe8f).

  • [Mutable] Os operadores para delegação de propriedade de estado foram movidos para extensões compatíveis com as otimizações de delegação de propriedade do Kotlin 1.4. Os autores da chamada precisam adicionar importações para continuar usando by state { ... } ou by mutableStateOf(...) (I5312c).

  • DrawLayerModifier e drawLayer() agora definem clickToBounds e clipToOutline como falsos por padrão (I0eb8b, b/152810850).

  • LayoutResult foi renomeado como MeasureResult (Id8c68).

  • O composto Center está obsoleto. Ele precisa ser substituído pelo modificador LayoutSize.Fill + LayoutAlign.Center ou por um dos compostos Box ou Stack com modificadores adequados aplicados (Idf5e0).

  • O LayoutFlexible foi renomeado como LayoutWight. O parâmetro restrito foi renomeado como preenchimento (If4738).

  • O DrawVector passou de uma função composta comum para retornar um modificador drawVector() que desenhará o vetor como o plano de fundo de um layout (I7b8e0).

  • Substituição do Clip de função composta pelo modificador drawClip(). DrawClipToBounds é um modificador conveniente a ser usado quando você só precisa cortar os limites da camada com uma forma retangular (If28eb).

  • Substituição da função composta DrawShadow pelo modificador drawShadow(). As sombras agora são desenhadas como parte do LayerModifier (I0317a).

  • O androidx.composte.ViewComposer foi movido para androidx.ui.node.UiComposer. androidx.compose.Emittable foi removido. Isso era redundante com o ComponentNode. O androidx.compose.ViewAdapters foi removido. Eles não são mais um caso de uso compatível. O uso de Compose.composeInto foi suspenso. Use setContent ou setViewContent. O uso de Compose.disposeComposition foi suspenso. Use o método dispose no Composition retornado pelo setContent. androidx.compose.Compose.subcomposeInto foi movido para androidx.ui.core.subcomposeInto. ComponentNode#emitInsertAt foi renomeado como ComponentNode#insertAt. ComponentNode#emitRemoveAt foi renomeado como ComponentNode#removeAt. ComponentNode#emitMode foi renomeado como ComponentNode#move (Idef00).

  • O composto Wrap está obsoleto. Ele pode ser substituído pelo modificador LayoutAlign ou pelo composto Stack (IB237f).

  • A direção do layout passou a ser propagada do nó de layout pai para os filhos. Adição de modificador de direção de layout (I3d955).

  • Painter.toModifier foi renomeado como Painter.asModifier, já que o modificador recém-criado tem uma referência ao Painter original que pode ser compartilhado entre várias instâncias do modificador (I7195b).

  • O composto Draw foi suspenso, por ser uma fonte comum de bugs da forma como é (I78392, b/14827027).

  • Compatibilidade com a direção direita para a esquerda no modificador LayoutPadding (I9e8da).

  • Density e DensityScope foram unidos em uma única interface. Agora você pode usar DensityAmbient.current em vez de ambientDensity(). Em vez de withDensity(density), apenas with(density) (I11cb1).

  • Classe ValueHolder removida. Reestruturação das classes AnimatedValue e AnimatedFloat para tornar o campo de valor da animação abstrato para que as subclasses possam observar a atualização do valor.

    • Adição de classes de modelo para AnimatedValue, AnimatedFloat etc.
    • Adição de um novo conjunto de APIs @Composable leves para animação entre valores.
    • (I79530)
  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776).

  • Agora, as posições de Int da linha de alinhamento retornadas de Placeable#get(AlignmentLine) não são nulas. Se a linha de alinhamento consultada estiver ausente, AlignmentLine.Unspecified será retornado (I896c5, b/158134875).

  • Correção de um bug de ConstraintLayout que causava uma falha nas recomposições (Ibee5a, b/158164341).

  • A API WithConstraints lambda final foi mudada. Agora, em vez de dois parâmetros, ela tem um escopo de receptor que, além de constraints e layoutDirection, fornece as propriedades minWidth, maxWidth, minHeight e maxHeight no Dp (I91b9a, b/149979702).

  • LayoutModifier2 foi renomeado como LayoutModifier (Id29f3).

  • As funções de medições intrínsecas no Layout e no LayoutModifier2 agora têm um receptor IntrinsicMeasureScope que fornece uma API de consulta intrínseca com a direção de layout propagada implicitamente (Id9945).

  • O LayoutDirectionAmbient está obsoleto. Para ler a direção do layout definida pela localidade, use localeLayoutDirection em ConfigurationAmbient (I851b1).

  • Adição de positionInParent e boundsInParent a LayoutCoordinates (Icacdd, b/152735784).

  • O composto ParentData foi suspenso. Caso você precise apenas marcar os filhos do layout para reconhecê-los dentro do bloco de medida, crie um modificador que implemente a interface ParentDataModifier ou use o modificador LayoutTag (I51368, b/150953183).

  • Adição de OnPositionedModifier e OnChildPositionedModifier para substituir as funções compostas OnPositioned e OnChildPositioned (I2ec8f).

  • Não permite o preenchimento negativo no LayoutPadding. Use o LayoutOffset para ajustes de posições negativas (Ifb5b1).

  • WithConstraints recebeu o parâmetro LayoutDirection (I6d6f7).

  • A sinalização ComposeFlags.COMPOSER_PARAM foi atualizada para true, o que mudará a estratégia de geração de código para o plug-in do Compose. Em um nível alto, isso faz com que funções @Composable sejam geradas com um parâmetro sintético extra, que é transmitido para chamadas @Composable subsequentes para que o ambiente de execução gerencie corretamente a execução. No entanto, essa é uma alteração interruptiva no binário que precisa preservar a compatibilidade no nível da fonte em todo o uso do Compose (I7971c).

  • Foram feitas mudanças no LayoutCoordinates para fazer com que providedAlignmentLines seja um Set em vez de um Map e fazer com que LayoutCoordinates implemente o operador get() em vez de recuperar um valor. Isso facilita a modificação de um ou mais valores do conjunto sem criar uma nova coleção para cada modificador (I0245a).

  • LayoutGoordinates não tem mais uma propriedade de posição. A propriedade de posição não faz sentido ao considerar LayoutModifiers, rotação ou dimensionamento. Em vez disso, os desenvolvedores precisam usar parentCoordinates e childToLocal() para calcular a transformação de um LayoutCoordinate em outro.

    O LayoutCoordinates usa IntPxSize para a propriedade Size em vez de PxSize. Os layouts usam tamanhos de pixel inteiros. Portanto, todos os tamanhos de layout precisam usar números inteiros, e não valores de pontos flutuantes (I9367b).

  • Melhorias na superfície da API de Constraints (I0fd15).

  • Adição de TextDirection.Content (I48f36).

  • Ajuste no menu da Barra de Ferramentas Google para mostrar os comandos de copiar, recortar e colar corretamente (Id3955)

  • Adição da FloatingToolbar para a seleção do TextField (Ie8b07).

  • TextDirectionAlgorithm foi renomeado como TextDirection (I75ce8).

  • TextDirection foi renomeado como ResolveTextDirection (I3ff38).

  • Adição de HapticFeedback à seleção de TextField (I58050).

  • Adição dos métodos Copiar, Cortar e Colar à seleção TextField (Idb70b).

  • TestTag e Semantics foram excluídos. Use Modifier.testTag e Modifier.semantics (I15ff0, b/158841414).

  • Mudança do nome do pacote para Locale e LocaleList de androidx.ui.text para androidx.ui.intl (I8132c).

  • Mudança da API: AnnotatedString(builder: Builder) foi renomeada como annotatedString(builder: Builder) (Ia6377).

  • Mudança da API: AnnotatedString.Item foi renomeada como AnnotatedString.Range (I2d44d).

  • Adição da barra de ferramentas para operações relacionadas a texto (I49d53).

  • O novo LifecycleOwnerAmbient já está disponível. Agora, uma atividade usada com a IU do Compose precisa ampliar androidx.activity.ComponentActivity (ou AppCompatActivity). O setContent na android.app.Activity agora está obsoleto (Idb25a, b/153141084).

  • O nome do pacote ui-android-text (androidx.text) foi substituído por androidx.ui.text.platform para se alinhar à política do androidX (I42711).