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

Compose Material

Guia do usuário  Amostra de código (link em inglês)
Crie 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.
Atualização mais recente Versão estável atual Próximo candidato a lançamento Versão Beta Versão Alfa
16 de setembro de 2020 - - - 1.0.0-alpha03

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
composeDefina a IU de maneira programática com funções compostas que descrevem a forma e as dependências de dados dela.
compose.animationCrie animações nos aplicativos do Jetpack Compose para enriquecer a experiência do usuário.
compose.foundationCrie aplicativos do Jetpack Compose com blocos de versã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.material:material:1.0.0-alpha07"
}

android {
    buildFeatures {
        compose true
    }

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

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

Para 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-alpha03

16 de setembro de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha03, androidx.compose.material:material-icons-core:1.0.0-alpha03 e androidx.compose.material:material-icons-extended:1.0.0-alpha03. A versão 1.0.0-alpha03 contém estas confirmações.

Mudanças na API

  • Renomeia o parâmetro onSelect de BottomNavigationItem para onClick (I91925, b/161809324)
  • Adiciona o parâmetro InteractionState a BottomNavigationItem e Tab, permitindo a mudança desse estado e o ajuste de como o componente aparece em diferentes estados (Ia3e9e, b/168025711).
  • Remove os parâmetros disabledBackgroundColor e disabledContentColor dos botões. Use as novas funções de cor padrão dentro de ButtonConstants. Se você já define contentColor / backgroundColor explicitamente, use essas funções padrão e personalize alguns / todos os parâmetros para evitar a substituição da cor para os estados ativado / desativado (If9b52).
  • A cor de fundo do Textfield não usa mais a versão Alfa implicitamente. Em vez disso, qualquer cor fornecida pelo parâmetro backgroundColor será usada diretamente (Iecee9, b/167951441).
  • O InnerPadding foi renomeado como PaddingValues (I195f1, b/167389171).
  • Os parâmetros resistanceFactorAtMin e resistanceFactorAtMax em Modifier.swipeable foram substituídos por um único parâmetro de resistência. Um novo método defaultResistanceConfig foi adicionado em SwipeableConstants (I54238).
  • Adiciona compatibilidade de elevação com estado animado para Button e FloatingActionButton. A elevação agora é animada entre os estados padrão e pressionado. Para personalizar a elevação entre os estados, use ButtonConstants.defaultAnimatedElevation() e FloatingActionButtonConstants.defaultAnimatedElevation() em vez de definir um valor de DP fixo em todos os casos (I37925).
  • O parâmetro Label se tornou opcional dentro de TextField e OutlinedTextField (I267f6 e b/162234081).

Correções de bugs

  • As funções de teste globais, como onNode ou waitForIdle, agora são obsoletas. Migre para as novas contrapartes que estão definidas em ComposeTestRule (I7f45a).
  • O DpConstraints e as APIs que o usavam estão obsoletos (I90cdb, b/167389835).
  • Os parâmetros minWidth e maxWidth de widthIn foram renomeados para min e max. O mesmo ocorreu para preferredWidthIn, heightIn, preferredHeightIn (I0e5e1, b/167389544).
  • Remoção das ações de semântica de rolagem para frente/para trás. Adição de etapas em AccessibilityRangeInfo (Ia47b0).
  • Os usos da gravidade foram renomeados de forma consistente para align ou alignment nas APIs de layout (I2421a, b/164077038).
  • Adição de onNode e de outros métodos globais na ComposeTestRule, porque os atuais se tornarão obsoletos (Ieae36).
  • 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.material:material:1.0.0-alpha02, androidx.compose.material:material-icons-core:1.0.0-alpha02 e androidx.compose.material:material-icons-extended:1.0.0-alpha02. A versão 1.0.0-alpha02 contém essas confirmações.

Mudanças na API

  • Adição de um componente experimental BackdropScaffold (Iad908).

Correções de bugs

  • A Matrix4 foi substituída por Matrix. Todas as outras partes do pacote vectormath foram removidas (Ibd665, b/160140398).

Versão 1.0.0-alpha01

26 de agosto de 2020

Lançamento de androidx.compose.material:material:1.0.0-alpha01, androidx.compose.material:material-icons-core:1.0.0-alpha01 e androidx.compose.material:material-icons-extended:1.0.0-alpha01. A versão 1.0.0-alpha01 contém essas confirmações.

Problema conhecido

O primeiro caractere em um TextField do Material não pode ser removido usando um backspace (b/165956313).

Versão 0.1.0-dev

Versão 0.1.0-dev17

19 de agosto de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev17, androidx.compose.material:material-icons-core:0.1.0-dev17 e androidx.compose.material:material-icons-extended:0.1.0-dev17. A versão 0.1.0-dev17 contém essas confirmações.

Mudanças na API

  • Remoção dos já obsoletos RadioGroup e RadioGroupItems. Use Row e RadioBotton (I381b7, b/163806637).
  • 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).
  • Renomeação de algumas propriedades em SwipeableState: swipeTarget -> targetValue, swipeProgress -> progress, swipeDirection -> direction. Adição de uma função rememberSwipeableState para criar SwipeableStates (I2fc9c, b/163129614, b/163132293).
  • Adição de compatibilidade com snackbar no posicionamento e enfileiramento adequado. Acesse-o por meio da função de suspensão SnackbarHostState.showSnackbar. Além disso:
    • Adição de componentes do SnackbarHost. Ele hospeda snackbars com base no estado e é responsável pela transição entre eles.
    • Adição de SnackbarHostState para permitir o controle sobre snackbars e hosts de snackbars, além do dissociamento do ScaffoldState. Você também pode acessar esse estado por meio de scaffoldState.snackbarHostState.
    • Adição da sobrecarga de snackbar para oferecer compatibilidade com a interface comum entre snackbarHostState e os próprios snackbars (I79aaa).
  • Adição de parâmetro ativado a IconButton e reordenação de parâmetros em IconToggleButton (I0a941, b/161809385, b/161807956).
  • Remoção da versão do ListItem com a API baseada em strings. Use a versão de slot (Ib8f57, b/161804681).
  • Remoção do componente obsoleto FilledTextField. Use TextField para conseguir a implementação do Material Design no campo de texto preenchido (I5e889).
  • AlertDialog agora usa FlowRow para botões (I00ec1, b/161809319, b/143682374).
  • Adição de parâmetros em Modifier.swipeable para mudar a quantidade de resistência ao deslizar para além dos limites. Remoção dos parâmetros [min/max]Value (I93d98).
  • 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).
  • Adição do parâmetro opcional velocityThreshold a Modifier.swipeable (I698ba).
  • bottomBarSize, fabSize e outros não estão mais disponíveis em ScaffoldState. Use Modifier.onPosition no componente cujo tamanho você quer descobrir. Adição dos parâmetros contentColor e Modifier a Scaffold (Ic6f7b, b/161811485, b/157174382).
  • Renomeação e reordenação de alguns parâmetros em Tab para consistência com outras APIs (Ia2d12, b/161807532).
  • Divisão de TabRow em TabRow e ScrollableTabRow, removendo isScrollable de TabRow. Exposição de edgePadding em ScrollableTabRow, permitindo controlar o espaço livre antes/depois das guias (I583e8, b/161809544).
  • Remoção do objeto TabRow e substituição por TabConstants. Mudança de TabRow.TabPosition para o nível superior (TabPosition) e do nome de indicatorContainer para indicator. Consulte as amostras e a documentação para ver informações detalhadas sobre como usar a API atualizada e os padrões (I54d45, b/161809544).
  • Ajuste do parâmetro de limites em Modifier.swipeable. Agora, ele usa um par de estados (do tipo T) e retorna o limite entre eles na forma de um ThresholdConfig. Adição de um parâmetro dismissThresholds a SwipeToDismiss, que é um lambda (DismissDirection) -> ThresholdConfig (Ie1080).
  • O controle deslizante tem mais cores para personalização granular (I73e64, b/161810475).
  • O parâmetro de cores do cartão foi renomeado para backgroundColor (I01fc1, b/161809546).
  • O snackbar tem cores de plano de fundo e conteúdo personalizáveis (I238f2, b/161804381).
  • Adição dos parâmetros modifier, backgroundColor, contentColor e scrimColor a Drawers (I23655, b/161804378).
  • 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 do parâmetro de preenchimento do botão para contentPadding (Id252e, b/161809394).
  • Adição de um componente experimental do Material, SwipeToDismiss (I129e5).

Correções de bugs

  • Remoção de onChildPositioned e OnChildPositionedModifier. Os desenvolvedores precisam usar onPositioned e OnPositionedModifier no layout filho (I4522e, b/162109766).
  • 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).
  • IntSize agora é uma classe inline (I2bf42).
  • 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).
  • Suspensão do uso de PxBounds em favor de Rect. Atualização de todos os usos de PxBounds com rect e adição de suspensão de uso/substituição por anotações para auxiliar na migração (I37038, b/162627058).
  • 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).

Versão 0.1.0-dev16

5 de agosto de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev16, androidx.compose.material:material-icons-core:0.1.0-dev16 e androidx.compose.material:material-icons-extended:0.1.0-dev16. A versão 0.1.0-dev16 contém essas confirmações.

Mudanças na API

  • As cores agora são uma classe final em vez de uma interface. Em vez de estender e fornecer uma implementação personalizada, crie um novo ambiente para seu objeto de tema personalizado e acesse o objeto de tema por meio do novo ambiente nos seus componentes, da mesma forma que o MaterialTheme funciona internamente (Ibae84).
  • Renomeação de ColorPalette como Colors, para mapear melhor o sistema de cores do Material Design e eliminar a confusão sobre ColorPalette ser um objeto de tema "genérico", em vez de uma implementação específica do sistema de cores do Material Design. lightColorPalette e darkColorPalette foram renomeados como lightColors e darkColors, respectivamente (I9e976, b/161812111).
  • Renomeação do parâmetro text de BottomNavigationItem para label, onSelected para onSelect, activeColor para selectedContentColor e inactiveColor para unselectedContentColor. Atualização da ordem dos parâmetros de acordo com as diretrizes (Icb605, b/161809324).
  • Modifier.stateDraggable foi completamente reformulado e renomeado para Modifier.swipeable. Uma nova classe SwipeableState foi introduzida, e as DrawerState e BottomDrawerState foram refatoradas para herdar dela. [Modal/Bottom]O DrawerLayout não usa mais um parâmetro onStateChange (I72332, b/148023068).
  • O pacote foundation.shape.corner foi nivelado para foundation.share (I46491, b/161887429).
  • Adição da anotação ExperimentalMaterialApi. RippleTheme foi marcado como Experimental (Ic5fa0, b/161784800).
  • O FilledTextField do Material foi renomeado como TextField, e o TextField de base foi renomeado como BaseTextField para facilitar a descoberta e o uso da API mais simples desejada (Ia6242, b/155482676).

Correções de bugs

  • Suspensão do uso de OnChildPositioned. Use OnPositioned no filho (I87f95, b/162109766).
  • 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.
  • A caixa de diálogo foi movida para a IU (I47fa6).
  • 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).
  • Renomeação de Modifier.deternimateProgress para Modifier.progressSemantics (I9c0b4).
  • Atualização de material-icons-extended com os ícones mais recentes adicionados a Material.io/icons (I4b1d3).
  • Exigência de que o tipo T seja especificado explicitamente para o transitionDefinition (I1aded).
  • 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).
  • Renomeação de AndroidComposeTestRule como createAndroidComposeRule (I70aaf).
  • Adição de isFocused() e isNotFocused() SemanticsMatcher (I0b760).
  • Remoção de BaseGestureScope.globalBounds, que não pode ser usado em testes. Use coordenadas locais para o nó com que você está interagindo (Ie9b08).
  • Correção da posição do pop-up em telas cortadas (Idd7dd).
  • Renomeação de Modifier.drawBackground como Modifier.background (I13677).

Versão 0.1.0-dev15

22 de julho de 2020

Lançamento de androidx.compose.material:material:0.1.0-dev15, androidx.compose.material:material-icons-core:0.1.0-dev15 e androidx.compose.material:material-icons-extended:0.1.0-dev15. A versão 0.1.0-dev15 contém essas confirmações.

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

  • A anotação @Model agora está obsoleta. Use state e mutableStateOf como alternativas. Essa decisão de suspensão foi tomada após uma discussão cuidadosa.

    Motivo

    O motivo inclui, mas não se limita ao seguinte:

    • Reduz a área de superfície da API e os conceitos que precisamos ensinar.
    • Alinha-se melhor a outros kits de ferramentas comparáveis (Swift UI, React, Flutter).
    • Decisão reversível. Podemos trazer @Model de volta a qualquer momento.
    • Remove o uso de caso isolado e dificulta responder a perguntas sobre como configurar o @Model como coisas que precisamos lidar.
    • Classes de dados @Model, equals, hashcode etc.
    • Como faço para que algumas propriedades sejam "observadas" e outras não?
    • Como especificar a igualdade organizacional x referencial a ser usada na observação?
    • Reduz a "mágica" no sistema. Reduziria a probabilidade de alguém supor que o sistema era mais inteligente do que é (ou seja, saber diferenciar uma lista).
    • Torna a granularidade da observação mais intuitiva.
    • Aprimora a refatoração da propriedade "variável" na classe.
    • Abre potencialmente possibilidades para fazer otimizações específicas do estado.
    • Alinha-se melhor ao restante do ecossistema e reduz ambiguidades em relação a imutáveis ou a "adotar o estado mutável".

    Notas de migração

    Quase todos os usos existentes de @Model são facilmente transformados de duas maneiras. O exemplo abaixo tem uma classe @Model com duas propriedades apenas para fins de exemplo e sendo usada em um composto.

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

    Alternativa 1: use State<OriginalClass> e crie cópias.

    Essa abordagem é facilitada com as classes de dados do Kotlin. Basicamente, transforme todas as propriedades var anteriores em propriedades val de uma classe de dados, use state em vez de remember e atribua o valor do estado a cópias clonadas do original usando o método de conveniência copy(...) da classe de dados.

    É importante observar que essa abordagem só funciona quando as únicas mutações para essa classe foram feitas no mesmo escopo em que a instância de State foi criada. Se a classe estiver se modificando internamente fora do escopo de uso e você estiver contando com a observação disso, a próxima abordagem será a que você deve usar.

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

    Alternativa 2: use mutableStateOf e delegados de propriedade.

    Essa abordagem é facilitada com os delegados de propriedade do Kotlin e a API mutableStateOf, que permite criar instâncias do MutableState fora da composição. Basicamente, substitua todas as propriedades var da classe original por var com mutableStateOf como delegado da propriedade. A vantagem é que não haverá mudança no uso da classe, apenas na implementação interna dela. No entanto, o comportamento não é completamente idêntico ao exemplo original, já que cada propriedade agora é observada/inscrita individualmente. Portanto, as recomposições que você vê após essa refatoração podem ser mais restritas (uma coisa boa).

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

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

  • O callback onFocusChange em campos de texto foi renomeado como onFocusChanged (Ida4a1).

  • Adição de parâmetros de limites em stateDraggable para especificar limites entre âncoras. Isso foi feito para definir um limite de 56 dp na gaveta inferior. Além disso, o BottomDrawerLayout agora usa um enum BottomDrawerState separado (I533fa).

  • 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 da substituição obsoleta do composto FilledTextField (I7f8f8).

  • O objeto Button, que contém os padrões usados pela função Button, foi renomeado como ButtonConstants (I7c5f7, b/159687878).

  • O espaço de conteúdo do Button agora se comporta como o Row. Isso é útil quando você precisa ter um ícone com um texto. Veja exemplos em Button sobre como criá-lo (I0ff10, b/158677863).

  • Suspensão do uso de RadioGroup e RadioGroupItem. Use o Box com Modifier.selectable, Row e Column para fazer um conjunto adequado de radioButton de opções pelo seu design (I7f5cf, b/149528535).

  • O Material Outlined Textfield foi adicionado (I1a518).

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

  • TabRow.TabPosition contém posição em Dp, não em IntPx (I34a 07, b/158577776).

  • Uso de IntPx substituído por Int e o de IntPxPosition por IntOffset. IntPxSize foi substituído por IntSize (Ib7b44).

  • 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 inline para usar um long para empacotar dois valores de pontos flutuantes e representar a largura e a altura como flutuantes (Ic0191).

  • Suspensão de uso de 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 gratuita. Se você precisar personalizar o parâmetro de cor / tamanho / delimitado para a ondulação, crie manualmente um RippleIndication e transmita-o para recurso de clique como o parâmetro de indicação (I101cd, b/155375067).

  • A API Scaffold foi reformulada: alguns parâmetros mudaram de nome e adicionaram novos parâmetros para melhorar a personalização. Um getter foi adicionado aos tamanhos de consulta de Fab, TopBar e BottomBar (I0e7ce).

  • Adição do componente DropdownMenu ao ui-material, uma implementação do menu do Material Design (I9bb3d).

  • Permissão para mostrar/ocultar o teclado de software manualmente usando SoftwareKeyboardController (Ifb9d6, b/155427736).

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

  • 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 de DrawScope no ContentDrawScope. Painter and PainterModifier foram atualizadas para não manter mais uma propriedade RTL porque o DrawScope já fornece isso sem ser de forma manual (I1798e).

  • O Emphasis.emphasize() foi renomeado como Emphasis.applyEmphasis() (Iceebe).

  • Os botões desativados agora seguem visualmente a especificação do Material Design (I47dcb, b/155076924, links em inglês).

  • FilledTextField recebe a ação IME (editor de método de entrada, na sigla em inglês), transformação visual e compatibilidade de tipo de teclado (I1f9cf, b/155075201).

  • Adiciona o parâmetro strokeWidth a CircularProgressIndicator para personalizar o tamanho do traço. Para alterar o tamanho do traço (altura) de um LinearProgressIndicator, use Modifier.preferredHeight() ou outro modificador de tamanho (Icea16, b/154919081).

  • Adiciona o parâmetro strokeWidth a CircularProgressIndicator para personalizar o tamanho do traço. Para alterar o tamanho do traço (altura) de um LinearProgressIndicator, use Modifier.preferredHeight() ou outro modificador de tamanho (Icea16, b/154919081).

  • Adição da API de slot para ícones finais e principais no FilledTextField e no processamento do estado de erro (Ic12e0).

  • A cor padrão da FAB e da FAB estendida foi modificada para MaterialTheme.colors.secondary (I3b9b9, b/154118816).

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

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

  • O controle deslizante agora não tem estado. Os usuários precisarão transmitir e atualizar o estado por conta própria, assim como em qualquer outro controle (Ia00aa, link em inglês).

  • StaticDrawer foi removido. Se precisar desse componente, use Box com largura de material especificado (I244a7).

  • Adição da implementação do Material Design do campo de texto preenchido (Ic75cd).

  • Adição do parâmetro de modificador ao ListItem e reordenação dos parâmetros para promover o corpo do lambda final (I66e21).

  • Adição do parâmetro de construtor defaultFontFamily a Typography, permitindo especificar a família de fontes padrão que será usada para qualquer TextStyles para o qual uma família não tenha sido definida (I89d07).

  • Material Data Tables temporariamente removido da plataforma da API (Iaea61, link em inglês).

  • Parâmetros renomeados no divisor que pode ser composto (Ic4373).

  • Parâmetros filhos que podem ser compostos renomeados (Ia6d19).

  • MaterialTheme.emphasisLevels foi removido. Use EmphasisAmbient.current para recuperar os níveis de ênfase (IB5e40).

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

  • Mudança das APIs MaterialTheme, como MaterialTheme.colors(), MaterialTheme.typography(), que deixaram de ser funções para serem propriedades. Remoção dos parênteses das chamadas existentes. Nenhuma mudança de comportamento é esperada (I3565a).

  • As APIs FloatingActionButton foram refatoradas para aceitar lambdas compostos em vez de primitivos. Veja amostras atualizadas para informações de uso (I00622).

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

  • Surface e Card foram movidos de androidx.ui.material.surface para androidx.ui.material (I88a6d, b/150863888).

  • 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. Foi criado o método de extensão _Body:Created 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).

  • Remoção da API Snackbar com parâmetros String a favor do uso da sobrecarga que aceita lambdas compostos. Consulte amostras atualizadas para ver informações de uso (I55f80)

  • As APIs Tab foram refatoradas para aceitar lambdas text e icon (Ia057e, link em inglês).

  • Adição do componente BottomNavigation. Consulte os documentos e as amostras para ver informações de uso (I731a0).

  • 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 ButtonStyle foi substituído por funções distintas e a sobrecarga de texto (string) foi removida. Veja amostras atualizadas para informações de uso (If63ab, b/146478620, b/146482131).

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

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

  • Alterações interruptivas na API de ambientes. Consulte o registro e a documentação do Ambient<T> para ver detalhes (I4c7ee, b/143769776).

  • Adição do componente material Scaffold. Implementações do Scaffold (I7731b).

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

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 por FocusState2 (I46919, b/160822875, b/160922136).
  • 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).
  • O runOnIdleCompose foi renomeado como runOnIdle (I83607).
  • 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).
  • 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).
  • A API Transition foi modificada para retornar um TransitionState em vez de passar o TransitionState para filhos. Isso torna a API mais consistente com as APIs animate() (I24e38).
  • Adição de uma classe de unidade IntBounds, que representa os limites de pixels inteiros do layout. A API de PopupPositionProvider foi atualizada para usar essa classe (I0d8d0, b/159596546).
  • Adição de uma nova sinalização opcional, useUnmergedTree, aos localizadores de teste (I2ce48).
  • Remoção de APIs obsoletas de teste de tamanho (Iba0a0).
  • Remoção da classe inline do Shader que encapsulava a classe NativeShader. NativeShader foi renomeado como Shader. A classe inline Shader encapsulada não adicionava valor à superfície da API e era uma classe inline. Portanto, use a classe NativeShader diretamente (I25e4d).
  • Pop-ups, caixas de diálogo e menus agora herdam o MaterialTheme contextual (Ia3665, b/156527485).
  • Material DropdownMenu agora pode ser rolado. (Ide699)
  • 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).
  • 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).
  • Switch agora aparece em um estado desativado quando enabled é definido como falso (If4624, b/155941869, b/159331694).
  • Modifier.tag foi renomeado como Modifier.layoutId para evitar confusão com Modifier.testTag (I995f0).
  • 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).
  • Classe de raio refatorada para ser uma classe inline. 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 flutuantes separados para o raio ao longo dos eixos x e y (I46d1b).

  • 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 inline para usar um long para empacotar dois valores de pontos flutuantes e representar os deslocamentos x e y como flutuantes (I3ad98).

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

  • O componente Toggleable foi suspenso. Use o Modifier.toggleable (I35220, b/157642842).

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

  • Correção de onClick que não era invocado para DropdownMenuItems (I3998b, b/157673259).

  • MutualyExclusiveSetItem foi suspenso. Use Modifier.selectable (I02b47, b/157642842).

  • A TestTag agora está obsoleta. Use Modifier.testTag (If5110, b/157173105).

  • O cursor do TextField tem uma animação intermitente (Id10a7).

  • 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 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 (Iede0b).

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

  • Mudança na API DrawLayer Modifiers: outlineShape foi renomeada como Shape e tem o valor padrão RectangleShape, agora não anulável. clipToOutline foi renomeado como clip. clipToBounds foi removido porque é o mesmo que clip == true com RectangleShape (I7ef11, b/155075735).

  • 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 de pintura. 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 com a tela subjacente. (I80afd).

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

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

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

  • O FocusManagerAmbient foi removido. Use FocusModifier.requestFocus para foco (Ic4826).

  • Criação da API CanvasScope que envolve um objeto Canvas para expor uma superfície de 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 a atualização do app de demonstração para incluir uma demonstração gráfica declarativa (Ifd86d).

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

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

  • LayoutModifier2 foi renomeado como LayoutModifier (Id29f3).

  • Remoção da interface do LayoutModifier obsoleto (I2a9d6).

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

  • 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 novo Modifier.zIndex() foi adicionado para controlar a ordem do desenho dos filhos no mesmo layout pai. A propriedade elevation em DrawLayerModifier foi renomeada como shadowElevation e não controla mais a ordem do desenho. A ordem dos parâmetros para DrawShadow foi modificada: o elevation agora é o primeiro e o shape o segundo, com RectangleShape como padrão (I20150, b/152417501).

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

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

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

  • Criação da API PixelMap para oferecer compatibilidade com consultas de informações de pixel de um ImageAsset (I69ad6).

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

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

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

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

  • O ColouredRect foi suspenso. Em vez dele, use Box(Modifier.preferredSize(width, height).drawBackground(color)) (I499fa, b/152753731).

  • LayoutResult foi renomeado como MeasureResult (Id8c68).

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

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

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

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

  • 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 um composto Image, mas com um VectorAsset em vez de um Image Asset(I9af9a, b/149030271).

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

  • Remoção do RepaintBoundary em favor do DrawLayerModifier (I00aa4).

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

  • A função do composto Opacity foi substituída pelo modificador drawOpacity (I5fb62).

  • 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 (I7112a).

  • Adição de LayerModifier, um modificador que permite adicionar um RenderNode a um Layout. Ele permite definir o recorte, a opacidade, a rotação, o dimensionamento e as sombras. Ele substituirá o RepaintBoundary (I7100d, b/150774014).

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

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

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

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

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

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

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

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

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

  • 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. (I4b7b0).

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

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

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

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

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

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